Friday, Sep 10th

Last update09:09:00 PM GMT

Вы находитесь на: FreeBSD Запуск и выключение

Запуск и выключение

При включении компьютера нет выполняющихся на процессоре задач. Чтобы запустить программу, с устройства хранения в память должен быть загружен двоичный образ программы. Многие системы автоматически запускают программы, находящиеся в энергозависимых устройствах, таких, как постоянные запоминающие устройства (read-only memories - ROM). После загрузки образа программы процессор должен получить указание начать выполнение с начального адреса загруженной программы. Этот процесс начальной загрузки (bootstrapping) программы на исполнение начинает работу процессора с программой.

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

Возвращение из ядра

Когда обработка системного входа завершена, состояние процесса пользователя восстанавливается и управление возвращается процессу пользователя. Возвращение в процесс пользователя противоположно процессу входа в ядро.

· Процедура, написанная на ассемблере, восстанавливает регистры общего назначения и указатель стека пользователя, помещенные ранее в стек.

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

Затем выполнение продолжается со следующей инструкции в процессе пользователя.

Вход в ядро

Когда процесс входит в ядро посредством исключения или прерывания, ядро должно сохранить текущее состояние машины до начала обслуживания события. Для PC состояние машины, которое должно быть сохранено, включает счетчик команд, указатель стека пользователя, регистры общего назначения и слово состояния процессора. Инструкция исключения PC сохраняет счетчик команд и слово состояния процессора как часть фрейма стека исключения; указатель стека пользователя и регистры должны быть сохранены программным обработчиком исключения. Если состояние машины не было бы сохранено полностью, ядро могло бы изменить значения в текущей исполняющейся программе неподходящим образом. Поскольку прерывания могут возникать между любыми двумя инструкциями уровня пользователя (а на некоторых архитектурах и между частями одной инструкции) и поскольку они могут вообще не относиться к текущему выполняющемуся процессу, не полностью сохраненное состояние могло бы вызывать в правильных программах загадочные и трудновоспроизводимые ошибки.

Точная последовательность действий, необходимая для сохранения состояния процесса, полностью зависит от машины, хотя PC представляет хороший пример обычной процедуры. Исключение или системный вызов запустят следующие события.

· Происходит аппаратное переключение в режим ядра (супервизора), так что проверки доступа к памяти осуществляются с привилегиями ядра, ссылки на стек используют стек ядра для процессов и могут выполняться привилегированные инструкции.

Подробнее...

Выполнение системного вызова

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

Подробнее...

Страница 1 из 10

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

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