Другие языки программирования и технологии
Как операционная система знает что программа выполнила недопустимую операцию?
Начиная с OS/2, Windows NT 3.1 и Windows 95 операционная система знает, что при выполнение программы произошёл сбой. А MS-DOS вместо того чтобы перестать выполнять приложения и выйте в command.com напрочь зависала, иногда портилась файловая система и терялись файлы.
Через Page Fault. В многозадачных ОС программы выполняются в своих независимых адресных пространствах, имеющих ограниченный набор адресов. При переключении контекста процессора на поток другого процесса полностью подменяется таблица страниц, и процессы не видят адресов друг друга. Но область памяти ядра видна всем процессам (это делается для избежания переключения контекста при обработке прерываний). Страницы памяти ядра помечены более высоким уровнем доступа, так, что только код ядра имеет к ним доступ.
Чайническая фраза микрософта "недопустимая операция" означает, что программа обратилась к памяти по адресу, который не принадлежит её адресному пространству (либо это память ядра, либо - сегмент кода, который обычно защищается от записи, либо - попытка записи в другой участок памяти, помеченный только для чтения (например, отмапленный в память файл в режиме только для чтения), либо - вообще неопределённый для программы адрес). Тогда процессор генерирует прерывание (в разных ОС называемое Page Fault, Segmentation Violation и т.п.), которое обрабатывается ядром операционки. И тогда уже в программе генерируется исключение (в Unix - сигнал). Если оно не обрабатывается программой, то процесс завершается с ошибкой.
Бывают и "легитимные" случаи возникновения пэйдж фолтов, например, обращение к странице, выгруженной в файл подкачки, или (в Unix) - первая попытка записи в общую страницу родительского и дочернего процессов. В первом случае требуемая страница подгружается из файла, а во втором - делается её копия для процесса, пытающегося её модифицировать. После этого инструкция, вызвавшая прерывание, рестартуется.
В досе все программы толклись в одном и том же адресном пространстве, и каждая программа имела доступ ко всей памяти - и своей, и других программ, и ядра ОС, и отображаемой памяти устройств. Поэтому можно было писать, что угодно и куда угодно, и соответственно, читать всю память.
Чайническая фраза микрософта "недопустимая операция" означает, что программа обратилась к памяти по адресу, который не принадлежит её адресному пространству (либо это память ядра, либо - сегмент кода, который обычно защищается от записи, либо - попытка записи в другой участок памяти, помеченный только для чтения (например, отмапленный в память файл в режиме только для чтения), либо - вообще неопределённый для программы адрес). Тогда процессор генерирует прерывание (в разных ОС называемое Page Fault, Segmentation Violation и т.п.), которое обрабатывается ядром операционки. И тогда уже в программе генерируется исключение (в Unix - сигнал). Если оно не обрабатывается программой, то процесс завершается с ошибкой.
Бывают и "легитимные" случаи возникновения пэйдж фолтов, например, обращение к странице, выгруженной в файл подкачки, или (в Unix) - первая попытка записи в общую страницу родительского и дочернего процессов. В первом случае требуемая страница подгружается из файла, а во втором - делается её копия для процесса, пытающегося её модифицировать. После этого инструкция, вызвавшая прерывание, рестартуется.
В досе все программы толклись в одном и том же адресном пространстве, и каждая программа имела доступ ко всей памяти - и своей, и других программ, и ядра ОС, и отображаемой памяти устройств. Поэтому можно было писать, что угодно и куда угодно, и соответственно, читать всю память.
Потому что в дос был реальный режим, а в винде защищённый.
Похожие вопросы
- Как создать свою "операционную систему"? Подскажите название программы...
- Я не могу понять как делали первые программы и операционные системы
- Вопрос по ядру ОС. Как выполняются программы на операционной системе? (углубленно).
- Где найти готовый исходник простенькой операционной системы, которая умеет только-загрузится, вывести сообщение на экран
- Можно ли загрузить операционную систему Windows XP на более чем один компьютер???
- Подскажите, как можно установить 64-х разрядную операционную систему?
- Выполнить арифметические операции в двоичной системе счисления по алгоритмам, применяемым в ЭВМ
- Какая Операционная система лучше всего?
- Для операционной системы Mac вирусы не страшны, что ли?
- операционные системы 32 бит 64 бит, разряды процессоров итд