Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2019, 22:17   #1
Skydertm
Новичок
Джуниор
 
Регистрация: 10.01.2019
Сообщений: 5
По умолчанию Архитектура MPU и ОС

Программирую давно, но на прикладном уровне. Решил копнуть глубже. Не судите строго. Немного сумбурные вопросы:
1. Разные процессоры используют разные команды нативного кода, соответственно и разные asm команды. Мы пишем программу, компилируем, и, правильно ли я понимаю, при запуске этой программы сама ОС адаптирует код под имеющуюся архитектуру и доступные комманды?
2. Интерпретатор или же виртуальная машина так же адаптирует байт-код под архитектуру или же это делается как-то иначе?
3. Опять же по ОС. При работе программы - ОС распределяет время ЦПУ на каждый поток, т.е., если я правильно понял, она вставляет в оперативку и передает управление только часть кода активной программы?
И тут же дополнительный вопрос: проверяет ли она код на наличие недопустимых команд перед передачей управления?

Если вопросы примитивны и содержаться в литературе - готов читать, только подскажите, пожалуйста, конкретных авторов. Но и за прямые ответы буду очень благодарен.
Skydertm вне форума Ответить с цитированием
Старый 10.01.2019, 22:32   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от Skydertm Посмотреть сообщение
1. Разные процессоры используют разные команды нативного кода, соответственно и разные asm команды.
Тут стоит аккуратней со словами. Intel i5 и Intel i7 разные процы, но существует множество команд одинаковых.

Цитата:
Сообщение от Skydertm Посмотреть сообщение
Мы пишем программу, компилируем, и, правильно ли я понимаю, при запуске этой программы сама ОС адаптирует код под имеющуюся архитектуру и доступные комманды?
Нет. Этим занимается компилятор. У ОС есть куча своих задач, чтобы еще перед запуском не перечитывать всю программу и не адаптировать ее.

Цитата:
Сообщение от Skydertm Посмотреть сообщение
2. Интерпретатор или же виртуальная машина так же адаптирует байт-код под архитектуру или же это делается как-то иначе?
Интерпретатор ничего не адаптирует. Он читает скрипт и исполняет, что там написано. Да, есть интерпретатор с jit-оптимизацией и компиляцией в промежуточное состояние, но это уже другой разговор.

Цитата:
Сообщение от Skydertm Посмотреть сообщение
3. Опять же по ОС. При работе программы - ОС распределяет время ЦПУ на каждый поток, т.е., если я правильно понял, она вставляет в оперативку и передает управление только часть кода активной программы?
А это зависит от многих вещей... от размера памяти, от загруженности ее, от размеров программы, от использованных механизмов работы с памятью и т.д.
p51x вне форума Ответить с цитированием
Старый 10.01.2019, 22:44   #3
Skydertm
Новичок
Джуниор
 
Регистрация: 10.01.2019
Сообщений: 5
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Тут стоит аккуратней со словами. Intel i5 и Intel i7 разные процы, но существует множество команд одинаковых.


Нет. Этим занимается компилятор. У ОС есть куча своих задач, чтобы еще перед запуском не перечитывать всю программу и не адаптировать ее.


Интерпретатор ничего не адаптирует. Он читает скрипт и исполняет, что там написано. Да, есть интерпретатор с jit-оптимизацией и компиляцией в промежуточное состояние, но это уже другой разговор.


А это зависит от многих вещей... от размера памяти, от загруженности ее, от размеров программы, от использованных механизмов работы с памятью и т.д.
Спасибо за ответы.
Про процессоры я не имел ввиду, что все команды разные. Я к тому, что не все команды одинаковые. Так было бы правильнее.

Если адаптирует под архитектуру компилятор, то, получается, идет "скрытая" от разработчика проверка на наличие доступности той или иной asm команды(ведь компилируется на одном, исполняется на другом) и сама программа принимает решение как именно работать на том или ином железе?


Интерпретатор ведь в своей сущности просто переводит скрипт в нативный код и так же вставляет его в ОЗУ. Однако, я так понимаю, сам интерпретатор принимает решение что именно и как "вставить" в ОЗУ. В целом верное суждение?

Еще раз спасибо за ответ.
Может быть порекомендуете какую-нибудь литературу для более досканального изучения? Спасибо!
Skydertm вне форума Ответить с цитированием
Старый 10.01.2019, 22:49   #4
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Компиляторы преобразовывает текст программы в родной(нативный) код процессора.
С таким кодом ОС ничего не делает, в плане адаптации. ОС проверяет заголовок у исполняемого файла и если архитектура не совпадает, то выдает сообщение о ошибки.

Есть компиляторы которые преобразовывают текст программы П-код. Тогда он либо интерпетируется, либо преобразовывается в родной код машины. Последнее называется JIT- трансляцией.

Делает это ОС? Обычно - это прерогатива таких программ как Java-машина.
ОС - это совокупность программ, поэтому входит Java-машина или Net-машина в ОС это решает разработчик дистрибутива.

Интерпретатор ничего не адаптирует он выполняет текст программы строчка за строчкой, либо байт за байтом из П-кода. Более правильно из своего внутреннего представления, а вот уж какое оно там дело десятое: текст, AST, П-код, IL и тп.

А вот виртуальная машина может работать как транслятор либо как интерпретатор.

Цитата:
Сообщение от Skydertm Посмотреть сообщение
и передает управление только часть кода активной программы?
Передать управление можно куму, либо чему. ОС отдаёт управление программе.
Наличие недопустимых команд не проверяется. Смысла нет так как код можно модифицировать.
За проверку отвечает процессор он в случае недопустимой команды прерывает свою работу и начинает выполнять обработку исключительной ситуации. Обычно просто прыгает на заранее указанный адрес кода для обработки исключительной ситуации. А тот уже разгуливает как надо действовать и куда должна идти программа дальше.

Ещё антивирус при загрузки программы может проверить правильность команд.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 10.01.2019 в 23:02. Причина: байт код заменил на П-код
Pavia вне форума Ответить с цитированием
Старый 10.01.2019, 22:55   #5
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Если адаптирует под архитектуру компилятор, то, получается, идет "скрытая" от разработчика проверка на наличие доступности той или иной asm команды(ведь компилируется на одном, исполняется на другом) и сама программа принимает решение как именно работать на том или ином железе?
Компилятор ASM код переводит без проверок. Произойдёт исключение или не произойдёт узнаете когда запустите.
Ещё можно в тексте программы можно проверить поддерживает процессор группы команд к XMM, SSE, и тд и прописать if что-бы процессор не исполнял недопустимые команды. Этим обычно разработчики библиотек занимаются.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 10.01.2019, 23:01   #6
Skydertm
Новичок
Джуниор
 
Регистрация: 10.01.2019
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Компилятор ASM код переводит без проверок. Произойдёт исключение или не произойдёт узнаете когда запустите.
Ещё можно в тексте программы можно проверить поддерживает процессор группы команд к XMM, SSE, и тд и прописать if что-бы процессор не исполнял недопустимые команды. Этим обычно разработчики библиотек занимаются.
Спасибо большое за ответы! Стало многое яснее.
Чувствую, что для повышения качества кода совсем не помешает эти знания, пускай и для фронтенда
По крайней мере становиться легче играться с соотношением поддерживаемость кода/производительность!
Skydertm вне форума Ответить с цитированием
Старый 10.01.2019, 23:01   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от Skydertm Посмотреть сообщение
Если адаптирует под архитектуру компилятор, то, получается, идет "скрытая" от разработчика проверка на наличие доступности той или иной asm команды(ведь компилируется на одном, исполняется на другом) и сама программа принимает решение как именно работать на том или ином железе?
Программа в общем случае сама ничего не решает. Вернее, можно прописать cpuid и прочие варианты тестирования и выбирать нужную ветку, но не думаю, что вы об этом...
Есть определенные названия архитектур, симейств процессоров и конкретных технологии. При компляции можно тем или иным способом сказать компилятору, что вы хотите. Естественно, комбинация этих свойств определяет доступные для компилятора и программиста команды.

Цитата:
Сообщение от Skydertm Посмотреть сообщение
Интерпретатор ведь в своей сущности просто переводит скрипт в нативный код и так же вставляет его в ОЗУ.
Не знаю, что вы имели в виду под вставляет его в ОЗУ... интерпретатор прсто читает входные данные - написано сложить два числа, вызвает код, который складывает два числа; написано вызвать функцию с параметрами, вызывает функцию с парамтреми.

Цитата:
Сообщение от Skydertm Посмотреть сообщение
Однако, я так понимаю, сам интерпретатор принимает решение что именно и как "вставить" в ОЗУ. В целом верное суждение?
Представьте интерпретатор в виде огромно свитча или кейза, смотря на чем вы там программировали:
Код:
+ : add(param1, param2);
ff1: ff1();
...
Это подходит под ваше описание?
p51x вне форума Ответить с цитированием
Старый 10.01.2019, 23:04   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Компилятор ASM код переводит без проверок. Произойдёт исключение или не произойдёт узнаете когда запустите.
Не совсем так. Довольно умные при задании архитектуры или модели проца вполне умеют ругаться.
p51x вне форума Ответить с цитированием
Старый 10.01.2019, 23:09   #9
Skydertm
Новичок
Джуниор
 
Регистрация: 10.01.2019
Сообщений: 5
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Программа в общем случае сама ничего не решает. Вернее, можно прописать cpuid и прочие варианты тестирования и выбирать нужную ветку, но не думаю, что вы об этом...
Есть определенные названия архитектур, симейств процессоров и конкретных технологии. При компляции можно тем или иным способом сказать компилятору, что вы хотите. Естественно, комбинация этих свойств определяет доступные для компилятора и программиста команды.


Не знаю, что вы имели в виду под вставляет его в ОЗУ... интерпретатор прсто читает входные данные - написано сложить два числа, вызвает код, который складывает два числа; написано вызвать функцию с параметрами, вызывает функцию с парамтреми.


Представьте интерпретатор в виде огромно свитча или кейза, смотря на чем вы там программировали:
Код:
+ : add(param1, param2);
ff1: ff1();
...
Это подходит под ваше описание?
Спасибо.
То, что вы говорите в целом мне ясно. Просто я пытаюсь смотреть в самый корень процессов. Не просто идеи, а как бы представлять реальные физические процессы.
По факту - интерпретатор ведь тоже программа, а значит процессор исполняет ее в виде 1010101, стало быть хочу понять, интерпретатор считывая строку скрипта, переводит как это сделал бы компилятор в 101011 и встраивает в процесс исполнения(извиняюсь, если терминология страдает, техобразования не имею), или же есть разные участки программы, которые уже загружены в ОЗУ и они исполняются просто с параметрами из скрипта.
Надеюсь внятно объясняю.
Skydertm вне форума Ответить с цитированием
Старый 10.01.2019, 23:13   #10
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от Skydertm Посмотреть сообщение
и встраивает в процесс исполнения(извиняюсь, если терминология страдает, техобразования не имею),
Если вставляет это JiT-транслятор.
Цитата:
же есть разные участки программы, которые уже загружены в ОЗУ и они исполняются просто с параметрами из скрипта.
А это уже интерпретатор.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
mpu 6050 ksprog Микроконтроллеры, робототехника, схемотехника, 3D принтеры 4 23.07.2018 13:25
акселерометр MPU-6050 и atmega16(a) 25-й кадр Помощь студентам 2 26.05.2014 14:42
Архитектура ПК Veselyn Помощь студентам 2 24.07.2012 14:39
архитектура... Аня Кольничук Помощь студентам 7 16.05.2012 07:45
Архитектура ВТ. boris_nikolaenko Помощь студентам 2 23.01.2012 10:36