Sunday, Feb 05th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Общая информация Службы ядра

Службы ядра

Граница между кодом уровня ядра и пользователя осуществляется аппаратными средствами защиты, предоставляемыми нижележащим оборудованием. Ядро работает в отдельном адресном пространстве, доступ к которому невозможен из процессов пользователя. Привилегированные операции, такие, как запуск ввода/вывода и остановка центрального процессора, доступны лишь ядру. Приложения запрашивают обслуживание ядром с помощью системных вызовов. Системные вызовы используются, чтобы заставить ядро выполнить сложные операции, такие, как запись данных во вторичное хранилище, и простые операции, такие, как возвращение текущего времени дня. Все системные вызовы представлены приложениям как синхронные: приложение не будет продолжать работу до тех пор, пока ядро не выполнит действия, связанные с системным вызовом. Ядро может завершить некоторые операции, связанные с системным вызовом, после своего возвращения. Например, системный вызов write копирует данные, которые должны быть записаны из процесса пользователя в буфер ядра, во время ожидания процесса, но обычно возвращается из системного вызова до того, как буфер ядра будет записан на диск.

Системный вызов обычно реализован в виде аппаратного исключения, которое изменяет режим работы центрального процессора и текущее отображение виртуальной памяти. Параметры, предоставленные пользователями в системных вызовах, проверяются ядром до начала использования. Такая проверка гарантирует целостность системы. Все параметры, переданные ядру, копируются в адресное пространство ядра, чтобы гарантировать неизменность проверенных параметров в результате побочного эффекта системного вызова. Результаты системного вызова возвращаются ядром либо в аппаратных регистрах, либо путем копирования их значений по указанным пользователем адресам памяти. Как и параметры, переданные в ядро, адреса, используемые для возвращения результатов, должны быть проверены на предмет принадлежности адресному пространству пользователя. Если ядро при обработке системного вызова сталкивается с ошибкой, оно возвращает пользователю код ошибки. В языке программирования C этот код ошибки хранится в глобальной переменной eirno, а функция, выполнявшая системный вызов, возвращает -1.

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


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 23 гостей онлайн

Реклама на сайте: