Тема OS12асу. структура контекста процесса Определение. Контекст процесса - это полная информация необходимая для его описания. Контекст процесса включает его состояние, определяемое текстом, значениями глобальных переменных пользователя и информационными структурами, значениями используемых машинных регистров, значениями, хранимыми в позиции таблицы процессов и в адресном пространстве задачи, а также содержимым стеков задачи и ядра, относящихся к данному процессу. Текст операций системы и ее глобальные информационные структуры совместно используются всеми процессами, но не являются составной частью контекста процесса. Контекст 1. Пользовательский уровень текст, данные, стек, содержимое разделяемой памяти; 2. Регистровый уровень счетчик команд, PS, указатель вершин стека, РОН; 3. Системный уровень статическая часть запись в таблице процессов, часть аресного пространства для информации о нем, записи таблиц для преобразования адресов (физических в виртуальные); динамическая часть стек ядра, стек слоев системногопроцесса. Уровни и слои контекста: Контекст Пользовательский Регистровый Системный уровень уровень уровень статическая динамическая * текст * счетчик команд часть часть * данные * PS * запись в таблице * стек ядра * стек * указатель вершин процессов * стек слоев системного * содержимое стека * часть адресного процесса разделяемой * регистры общего пространства для памяти назначения информации о нем * записи таблиц для преобразования адресов (физических в виртуальные) В контекст процесса не входят текст ядра и глобально-информационные структуры операционной системы. Слои контекста Пять уровней прерываний: 5) машинный сбой (самый высокий уровень); 4) системный таймер; 3) дисковые прерывания; 2) сетевые прерывания; 1) терминальные прерывания; 0) программные прерывания (самый низкий уровень). Ядро помещает контекстный слой, когда возникает прерывание, или программа делает системный вызов. Ядро выталкивает контекстный слой, когда происходит завершение обработки прерывания либо возврат в режим задачи, т.е. в состояние 1. Происходит в следующих случаях: * возникает прерывание * делают системный вызов * происходит переключение контекста При запуске процесса система исполняется в контексте процесса. Когда ядро системы решает запустить другой процесс, оно выполняет переключение контекста с тем, чтобы система исполнялась в контексте другого процесса. Ядро осуществляет переключение контекста только при определенных условиях, что мы увидим в дальнейшем. Выполняя переключение контекста, ядро сохраняет информацию, достаточную для того, чтобы позднее переключиться вновь на первый процесс и возобновить его выполнение. Аналогичным образом, при переходе из режима задачи в режим ядра, ядро системы сохраняет информа- цию, достаточную для того, чтобы позднее вернуться в режим задачи и продол- жить выполнение с прерванного места. Однако, переход из режима задачи в ре- жим ядра является сменой режима, но не переключением контекста. Если обра- титься еще раз к Рисунку 1.5, можно сказать, что ядро выполняет переключение контекста, когда меняет контекст процесса A на контекст процесса B; оно ме- няет режим выполнения с режима задачи на режим ядра и наоборот, оставаясь в контексте одного процесса, например, процесса A. Ядро обрабатывает прерывания в контексте прерванного процесса, пусть да- же оно и не вызывало никакого прерывания. Прерванный процесс мог при этом выполняться как в режиме задачи, так и в режиме ядра. Ядро сохраняет инфор- мацию, достаточную для того, чтобы можно было позже возобновить выполнение прерванного процесса, и обрабатывает прерывание в режиме ядра. Ядро не по- рождает и не планирует порождение какого-то особого процесса по обработке прерываний. Состояния процесса Время жизни процесса можно разделить на несколько состояний, каждое из которых имеет определенные характеристики, описывающие процесс. Все состоя- ния процесса рассматриваются в главе 6, однако представляется существенным для понимания перечислить некоторые из состояний уже сейчас: 1. Процесс выполняется в режиме задачи. 2. Процесс выполняется в режиме ядра. 3. Процесс не выполняется, но готов к выполнению и ждет, когда планиров- щик выберет его. В этом состоянии может находиться много процессов, и алго- ритм планирования устанавливает, какой из процессов будет выполняться следу- ющим. 4. Процесс приостановлен ('спит'). Процесс 'впадает в сон', когда он не может больше продолжать выполнение, например, когда ждет завершения вво- да-вывода. Поскольку процессор в каждый момент времени выполняет только один про- цесс, в состояниях 1 и 2 может находиться самое большее один процесс. Эти два состояния соответствуют двум режимам выполнения, режиму задачи и режиму ядра. Переходы из состояния в состояние Состояния процесса, перечисленные выше, дают статическое представление о процессе, однако процессы непрерывно переходят из состояния в состояние в соответствии с определенными правилами. Диаграмма переходов представляет со- бой ориентированный граф, вершины которого представляют собой состояния, в которые может перейти процесс, а дуги - события, являющиеся причинами пере- хода процесса из одного состояния в другое. Переход между двумя состояниями разрешен, если существует дуга из первого состояния во второе. Несколько дуг может выходить из одного состояния, однако процесс переходит только по одной из них в зависимости от того, какое событие произошло в системе. На Рисунке 2.6 представлена диаграмма переходов для состояний, перечисленных выше. Как уже говорилось выше, в режиме разделения времени может выполняться одновременно несколько процессов, и все они могут одновременно работать в режиме ядра. Если им разрешить свободно выполняться в режиме ядра, то они могут испортить глобальные информационные структуры, принадлежащие ядру. Запрещая произвольное переключение контекстов и управляя возникновением со- бытий, ядро защищает свою целостность. Системный вызов можно рассматривать как внутреннее прерывание операционной системы. Алгоритм системного вызова: 1.найти запись в таблице системных функций; 2.определить число параметров и скопировать их из адресного пространства задачи; 3.сохранение контекста; 4.запуск системного вызова; 5.№ ошибки записывается в регистр общего назначения; 6.возврат; восстановление контекста. Переключение контекста. · процесс переходит в состояние сна (состояние №4); · процесс делает системный вызов txit и завершает работу; · процесс переходит в режим задачи после обработки прерывания; · процесс переходит в режим задачи после системного вызова. Алгоритм переключения контекста: 1. принять решение о необходимости и допустимости переключения контекста; 2. сохранить контекст; 3. выбрать подходящий процесс; 4. восстановить его контекст. 5. принять решение о необходимости и допустимости переключения контекста; 6. сохранить контекст; 7. выбрать подходящий процесс; 8. восстановить его контекст. Формат памяти системы. Текст содержит адреса: команд; данных; стека. Если адреса физические, то два процесса выполняться не смогут. Если же адреса физические и непересекающиеся, то не смогут выполняться два одинаковых процесса. В UNIX-е используется виртуальная адресация. Контекст процесса Unix http://cad.narod.ru/methods/os_unix/unibas/process.html Системные данные, используемые при выполнении процесса (когда его образ загружен в RAM), составляют контекст процесса. Контекст процесса формально описан структурой struct user в файле /usr/include/sys/user.h. Эта структура включает следующие основные поля: u_procp - адрес дескриптора процесса в таблице процессов; u_ofile - адрес таблицы открытых файлов процесса; u_signal - адрес таблицы сигналов; u_pcb - блок управления процессом; u_cdir - текущий каталог процесса; u_rdir - корневой каталог процесса; u_textvaddr - виртуальный адрес процедурного сегмента; u_datavaddr - виртуальный адрес сегмента инициализированных данных; u_bssvaddr - виртуальный адрес сегмента неинициализированных данных. Область контекста процесса имеет фиксированный размер и не входит в виртуальное адресное пространство процесса. В пространстве физических адресов контекст процесса располагается перед процедурным сегментом или перед сегментом данных в случае разделяемого процедурного сегмента. Контекст текущего процесса отображается в область текущего процесса виртуального адресного пространства ядра. Адрес этой области сохраняет системная переменная u, через которую поля контекста текущего процесса доступны доступны подпрограммам ядра. Доступ к полям контекста процесса на уровне пользователя реализован через системные вызовы ядра, например, chdir, chroot, signal, ulimit. ttp://doc.trecom.tomsk.su/citforum.ru/win/operating_systems/sos/glava_21.shtml Образ, дескриптор, контекст процесса (для UNIX System V Release 4) Ядро предоставляет процессу ресурсы центрального процессора на интервал времени квант, по истечению которого выгружает этот процесс и запускает другой, а также периодически меняет порядок в очереди процессов. Ядро пересчитывает приоритеты и переключает контекст на процесс с наивысшим приоритетом. Время в системе поддерживается с помощью аппаратного таймера, который посылает центральному процессору прерывание с фиксированной частотой. КР580ВИ53 - аппаратный таймер.