Режим пользователя
Режим пользователя — менее привилегированный по сравнению с режимом ядра режим работы процессора. Он не имеет прямого доступа к аппаратуре. Выполняющийся в этом режиме код непосредственно имеет дело лишь с объектами своего адресного пространства (рис. 6.6).
Системные службы он вызывает через интерфейсы прикладных программ (Application Program Interface, API). Поддерживающие их приложения и подсистемы работают в режиме пользователя. При запуске приложения создается процесс (process), реализованный в виде объекта (object). Объект состоит из исполняемой программы, пространства адресов виртуальной памяти и одного или нескольких потоков.
Особенности процесса пользовательского режима таковы:
не имеет прямого доступа к оборудованию. Это сделано в целях защиты от неверно работающих приложений или от несанкционированного доступа. Запросы на использование аппаратных ресурсов должны быть разрешены компонентом режима ядра;
ограничен размерами выделенного адресного пространства. Ограничение размера памяти, используемой процессом, позволяет обеспечить дополнительную защиту ОС. Это ограничение устанавливается путем выделения процессу диапазона фиксированных адресов;
может быть выгружен из физической памяти в виртуальную память на жестком диске. Виртуальная память (virtual memory, VRАМ) использует пространство жесткого диска как дополнительную оперативную память. В результате процесс режима пользователя получает доступ к памяти, размер которой превышает объем ОЗУ;
приоритет процесса данного типа ниже, чем у процессов режима ядра. Поэтому в сравнении с последними ему, как правило, предоставляется меньше процессорного времени. Это предохраняет ОС от снижения производительности или возникновения задержек, связанных с ожиданием завершения работы приложений.
Подход с использованием ядра заменил вертикальное распределение функций операционной системы на горизонтальное. Компоненты, лежащие выше микроядра, хотя и используют сообщения, пересылаемые через микроядро, взаимодействуют друг с другом непосредственно. Микроядро играет роль регулировщика. Оно проверяет сообщения, пересылает их между серверами и клиентами, и предоставляет доступ к аппаратуре.