- •1.1.Классификация ос
- •Сообщения.
- •Int pipe(int *fildes)
- •Fifo (именованные каналы)
- •Int mknod(char *pathname, int mode, int dev);
- •2.1. Ms-dos. Распределение оперативной памяти (conversional memory, hma, ems, xms).
- •1) Основная память(conventional memory) dos.
- •3) Область высокой памяти (нма).
- •4) Расширенная память (xms).
- •5) Дополнительная память (ems)
- •2.2. Ос семейства unix. Сигналы.
- •3.1. Файловые системы fat и vfat.
- •3.2. Ос семейства unix. Управление вводом-выводом. Блочные, символьные и потоковые драйверы.
- •Системные вызовы для управления вводом/выводом
- •4.1. Сравнительные особенности ядер операционных систем Windows nt и os/2
- •4.2. Ос семейства unix. Потоки. Сокеты.
- •5.1. Ms-dos. Распределение оперативной памяти (conversional memory, hma, ems, xms).(2)
- •5.2. Ос семейства unix. Архитектура виртуальной файловой системы. Виртуальные индексные дескрипторы. Монтирование файловых систем.
- •6.1. Концепции ос семейства Novell NetWare. Nlm. Нити. Принципы организации передачи данных в ос NetWare
- •Структурная схема oc
- •Функциональная схема ос. Модули загрузки nlm
- •Диспетчеризация процессов (нитей)
- •6.2. Основные сетевые сервисы ос unix.
- •Общая организация X-Window
- •Клиентская и серверная части
- •Базовые библиотеки
- •7.1. Файловая система Novell NetWare. Поддержка дополнительных пространств имен. Сетевая файловая система
- •7.2. Ос семейства unix. Общий алгоритм работы планировщика.
- •8.1. Файловая система ntfs.
- •8.2. Управление памятью. Виртуальная память. Аппаратно-независимый уровень управления памятью. Swapping и paging.
- •Аппаратно-независимый уровень управления памятью
- •Страничное замещение основной памяти и swapping
- •9.1. Концепции Windows nt. Архитектура ядра nt, защищенные подсистемы (Win 32, Win 16, dos, os/2, posix).
- •9.2. Общие принципы разграничения доступа в ос семейства unix. Разграничения прав на доступ к файловой системе.
- •10.1. Ос семейства Microsoft Windows nt. Процессы и нити, планирование процессов и нитей.(13)
- •10.2. Ос семейства unix. Архитектура виртуальной файловой системы. Виртуальные индексные дескрипторы. Монтирование файловых систем.(5)
- •11.1. Файловая система ntfs.(8)
- •11.2. Ос семейства unix. Пользовательская и ядерная составляющая процессов. Жизненный цикл процесса.
- •Концепции Windows nt. Архитектура ядра nt, защищенные подсистемы (Win 32, Win 16, dos, os/2, posix).(9)
- •12.2. Файловая система s5fs. Суперблок. Индексные дескрипторы. Имена файлов. Недостатки и ограничения.
- •Суперблок
- •Имена файлов
- •Недостатки и ограничения
- •13.1. Ос семейства Microsoft Windows nt. Процессы и нити, планирование процессов и нитей.
- •13.2. Файловая система ffs. Структура каталога.
- •14.1. Ms-dos. Распределение оперативной памяти (conversional memory, hma, ems, xms).(2)
- •Разделяемая память (Shared Memory)
- •17.1. Ос Novell Netware. Атрибуты файлов. Разграничение доступа к файлам.
10.1. Ос семейства Microsoft Windows nt. Процессы и нити, планирование процессов и нитей.(13)
10.2. Ос семейства unix. Архитектура виртуальной файловой системы. Виртуальные индексные дескрипторы. Монтирование файловых систем.(5)
11.1. Файловая система ntfs.(8)
11.2. Ос семейства unix. Пользовательская и ядерная составляющая процессов. Жизненный цикл процесса.
Пользовательская и ядерная составляющие процессов. Каждому процессу соответствует контекст, в котором он выполняется. Этот контекст включает содержимое пользовательского адресного пространства - пользовательский контекст (т.е. содержимое сегментов программного кода, данных, стека, разделяемых сегментов и сегментов файлов, отображаемых в виртуальную память), содержимое аппаратных регистров - регистровый контекст (регистр счетчика команд, регистр состояния процессора, регистр указателя стека и регистры общего назначения), а также структуры данных ядра (контекст системного уровня), связанные с этим процессом. Контекст процесса системного уровня в ОС UNIX состоит из "статической" и "динамических" частей. Для каждого процесса имеется одна статическая часть контекста системного уровня и переменное число динамических частей.
Описатель процесса, т.е. элемент таблицы описателей существующих в системе процессов. Описатель процесса включает, в частности, следующую информацию:
- состояние процесса;
- физический адрес в основной или внешней памяти u-области процесса;
- идентификаторы пользователя, от имени которого запущен процесс;
- идентификатор процесса;
- прочую информацию, связанную с управлением процессом.
U-область (u-area) - индивидуальная для каждого процесса область пространства ядра, обладающая тем свойством, что хотя u-область каждого процесса располагается в отдельном месте физической памяти, u-области всех процессов имеют один и тот же виртуальный адрес в адресном пространстве ядра. Именно это означает, что какая бы программа ядра не выполнялась, она всегда выполняется как ядерная часть некоторого пользовательского процесса, и именно того процесса, u-область которого является "видимой" для ядра в данный момент времени. U-область процесса содержит:
- указатель на описатель процесса;
- идентификаторы пользователя;
- счетчик времени, в течение которого процесс реально выполнялся (т.е. занимал процессор) в режиме пользователя и режиме ядра;
- параметры системного вызова;
- результаты системного вызова;
- таблица дескрипторов открытых файлов;
- предельные размеры адресного пространства процесса;
- предельные размеры файла, в который процесс может писать и т.д.
Динамическая часть контекста процесса - это один или несколько стеков, которые используются процессом при его выполнении в режиме ядра. Число ядерных стеков процесса соответствует числу уровней прерывания, поддерживаемых конкретной аппаратурой
Жизненный цикл процесса
Жизненный цикл процесса может быть разбит на несколько состояний. Переход процесса из одного состояния в другое происходит в зависимости от наступления тех или иных событий в системе. На рис. 2.5 показаны состояния, в которых процесс может находиться с момента создания до завершения выполнения.
Процесс выполняется в режиме задачи. При этом процессором выполняются прикладные инструкции данного процесса
Процесс выполняется в режиме ядра. При этом процессором выполняются системные инструкции ядра операционной системы от имени процесса.
Процесс не выполняется, но готов к запуску, как только планировщик выберет его (состояние runnable). Процесс находится в очереди на выполнение и обладает всеми необходимыми ему ресурсами, кроме вычислительных.
Процесс находится в состоянии сна (asleep), ожидая недоступного в данный момент ресурса, например завершения операции ввода/вывода.
Процесс возвращается из режима ядра в режим задачи, но ядро прерывает его и производит переключение контекста для запуска более высокоприоритетного процесса.
Процесс только что создан вызовом fork(2) и находится в переходном состоянии: он существует, но не готов к запуску и не находится в состоянии сна.
Процесс выполнил системный вызов exit(2) и перешел в состояние зомби (zombie, defunct). Как такового процесса не существует, но остаются записи, содержащие код возврата и временную статистику его выполнения, доступную для родительского процесса. Это состояние является конечным в жизненном цикле процесса.
Необходимо отметить, что не все процессы проходят через все множество состояний, приведенных выше.
Процесс начинает свой жизненный путь с состояния 6, когда родительский процесс выполняет системный вызов fork(2). После того как создание процесса полностью завершено, процесс завершает "дочернюю часть" вызова fork(2) и переходит в состояние 3 готовности к запуску, ожидая своей очереди на выполнение. Когда планировщик выбирает процесс для выполнения, он переходит в состояние 1 и выполняется в режиме задачи.
Выполнение в режиме задачи завершается в результате системного вызова или прерывания, и процесс переходит в режим ядра, в котором выполняется код системного вызова или прерывания. После этого процесс опять может вернуться в режим задачи. Однако во время выполнения системного вызова в режиме ядра процессу может понадобиться недоступный в данный момент ресурс. Для ожидания доступа к такому ресурсу, процесс вызывает функцию ядра sleep () и переходит в состояние сна (4). При этом процесс добровольно освобождает вычислительные ресурсы, которые предоставляются следующему наиболее приоритетному процессу. Когда ресурс становится доступным, ядро "пробуждает процесс", используя функцию wakeup (), помещает его в очередь на выполнение, и процесс переходит в состояние "готов к запуску"(3).
Наконец, процесс выполняет системный вызов exit(2) и заканчивает свое выполнение. Процесс может быть также завершен вследствие получения сигнала. В обоих случаях ядро освобождает ресурсы, принадлежавшие процессу, за исключением кода возврата и статистики его выполнения, и переводит процесс в состояние "зомби". В этом состоянии процесс находится до тех пор, пока родительский процесс не выполнит один из системных вызовов wait(2), после чего вся информация о процессе будет уничтожена, а родитель получит код возврата завершившегося процесса.