Как исполняется код программы?
Начав читать книжку "Operating System Concepts" (динозавры), первая глава познакомила с такой вещью как hardware interrupt, из чего родился объёмный вопрос, который я разобью на несколько частей:
- Что происходит (детально) после запуска скомпиллированного кода (на С++)? У нас имелся файл расширения .exe на нашем устройстве non-volatile memory, по которому мы щёлкнули дважды - какая последовательность действий ОС и hardware следует за этим?
- Каким образом ОС контроллирует процесс исполнения программы? Например, каким именно образом она запрещает нам изменять значения байтов в volatile memory, в которых в данный момент хранится работающее ядро ОС, не даёт вмешиваться в исполнение других программ, или же не даёт получить доступ к разделам volatile memory, которые защищены (допустим программа запускается от лица посетителя, и не имеет доступа к разделам диска, на которых хранятся данные админа)
- Если во время работы появляются ошибки, то как они обрабатываются? Например, если в коде программы появилась строка в духе
1 FDIV 0, (очевидно вместо 1 и 0 должны стоять адреса переменных, содержащих данные значения), то исключение будет сгенерировано ОС, и данный код не попадёт в ЦПУ, или же ЦПУ (выполняющее данный участок кода ядро) выбросит event-vector interrupt с кодом 0 (divide error)?
Заранее прошу прощения за все неточности и ошибки по ходу вопроса и прошу меня поправлять, т.к. по незнанию могу нести ересь. Спасибо.