Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Unix лекции / lection2.ppt
Скачиваний:
14
Добавлен:
20.04.2015
Размер:
274.43 Кб
Скачать

Создание процесса

Каждый процесс, за исключением нулевого,

порождается в результате запуска другим процессом операции 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

Состояния

переходы

между

 

Диаграмма переходов представляет собой ориентированный граф, вершины которого представляют собой состояния, в которые может перейти процесс, а дуги - события, являющиеся причинами перехода процесса из одного состояния в другое.

Ядро разрешает переключение контекста только тогда, когда процесс переходит из состояния "запуск в режиме ядра" в состояние "сна в памяти".

Процессы, запущенные в режиме ядра, не могут быть выгружены другими процессами!

Соседние файлы в папке Unix лекции