- •Архитектура ОС UNIX
- •Модульная блок-схема ядра системы
- •Модульная блок-схема ядра системы
- •fork, exec, exit, wait, brk, signal
- •«индекс» файла (inode)
- •«индекс» файла (inode)
- •Таблицы файлов, дескрипторов файла и индексов
- •Формат файловой системы
- •Формат файловой системы
- •Процесс
- •Создание процесса
- •Исполняемый файл
- •Процесс и исполняемый файл
- •Стек ядра
- •Информационные структуры для запуска процессов
- •Адресное пространство задачи
- •Контекст процесса
- •Состояния процесса
- •Состояния
- •Сон и пробуждение процесса
- •Сон и пробуждение процесса
- •Сон и пробуждение. Пример блокировки
- •Управление системой
- •Структуры данных ядра
Создание процесса
Каждый процесс, за исключением нулевого,
порождается в результате запуска другим процессом операции fork. Процесс,
запустивший операцию fork, называется родительским, а вновь созданный процесс - порожденным.
PID = fork()
0 -> swapping (процесс подкачки)
1-> init (предок любого другого процесса)
11
Исполняемый файл
Состоит из:
набора "заголовков", описывающих атрибуты файла;
текста программы;
представления на машинном языке данных;
других секций, таких как информация символических таблиц.
Ядро загружает исполняемый файл в память при выполнении системной операции exec, при этом загруженный процесс состоит по меньшей мере из трех частей, так называемых областей: текста, данных и стека.
12
Процесс и исполняемый файл
Области текста и данных процесса корреспондируют с секциями текста и bss-данных исполняемого файла, а область стека создается автоматически и ее размер динамически устанавливается ядром системы во время выполнения.
Стек состоит из логических записей активации, помещаемых в стек при вызове функции и выталкиваемых из стека при возврате управления в вызвавшую процедуру. Запись активации включает параметры передаваемые функции, ее локальные переменные, а также данные, необходимые для восстановления предыдущей записи активации.
Текст программы включает последовательности команд, управляющие увеличением стека, а ядро системы выделяет, если нужно, место под стек .
13
#include
charСтекиbuffer[2048];задачи и ядра для
int version = 1;
программы копирования
main(argc,argv) int argc;
char *argv[];
{
int fdold,fdnew; if (argc != 3)
{printf("need 2 arguments for copy program\n); exit(1);}
fdold = open(argv[1],O_RDONLY); if (fdold == -1)
{printf("cannot open file %s\n",argv[1]); exit(1); }
fdnew = creat(argv[2],0666);
if (fdnew == -1) {printf("cannot create file %s\n",argv[2]); exit(1);}
copy(fdold,fdnew);
exit(0);
}
copy(old,new) int old,new; {int count;
while ((count = read(old,buffer,sizeof(buffer))) > 0) write(new,buffer,count);
}
Каждой системной операции соответствует точка входа в библиотеке системных операций; библиотека системных операций написана на языке ассемблера и включает специальные команды прерывания, которые, выполняясь, порождают "прерывание", вызывающее переключение аппаратуры в режим ядра.
Стек ядра
Стек ядра содержит записи активации для функций, выполняющихся в режиме ядра.
Элементы функций и данных в стеке ядра соответствуют функциям и данным, относящимся к ядру, но не к программе пользователя, тем не менее, конструкция стека ядра подобна конструкции стека задачи.
Стек ядра для процесса пуст, если процесс выполняется в режиме задачи.
15
Информационные структуры для запуска процессов
1.Каждому процессу соответствует точка входа в таблице процессов ядра.
2.Каждому процессу выделяется часть оперативной памяти, отведенная под задачу пользователя.
3.Таблица процессов включает в себя указатели на промежуточную таблицу областей процессов, точки входа в которую служат в качестве указателей на собственно таблицу областей.
4.Областью называется непрерывная зона адресного пространства, выделяемая процессу для размещения текста, данных и стека (применение операций exec, fork, exit).
Адресное пространство задачи
Содержит описывающую процесс информацию:
Указатель на позицию в таблице процессов
Параметры текущей системной операции
Дескрипторы открытых файлов
Внутренние параметры IO
Текущий каталог и текущий корень
Границы файлов и процесса
17
Контекст процесса
Контекстом процесса является его состояние, определяемое текстом, значениями глобальных переменных пользователя и информационными структурами, значениями используемых машинных регистров, значениями, хранимыми в позиции таблицы процессов и в адресном пространстве задачи, а также содержимым стеков задачи и ядра, относящихся к данному процессу.
Говорят, что при запуске процесса система исполняется в контексте процесса. Когда ядро системы решает
запустить другой процесс, оно выполняет
переключение контекста с тем, чтобы система исполнялась в контексте другого процесса.
Переход из режима задачи в режим ядра является сменой режима, но не переключением контекста.
18
Состояния процесса
Процесс выполняется в режиме задачи.
Процесс выполняется в режиме ядра.
Процесс не выполняется, но готов к выполнению.
Процесс приостановлен ("спит").
19
Состояния |
переходы |
между |
|
Диаграмма переходов представляет собой ориентированный граф, вершины которого представляют собой состояния, в которые может перейти процесс, а дуги - события, являющиеся причинами перехода процесса из одного состояния в другое.
Ядро разрешает переключение контекста только тогда, когда процесс переходит из состояния "запуск в режиме ядра" в состояние "сна в памяти".
Процессы, запущенные в режиме ядра, не могут быть выгружены другими процессами!