- •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. Атрибуты файлов. Разграничение доступа к файлам.
Функциональная схема ос. Модули загрузки nlm
В NetWare 2.х VAP-модули (аналоги NLM-модулей) загружаются в ОП только один раз вместе с операционной системой. Начиная с NetWare 3.х, NLM-модули могут загружаться в ОП и выгружаться из неё с консоли файлового сервера в динамическом режиме. NLM-модули - это программы, в которых используется API-интерфейс для связи со службами NetWare. Они разрабатываются, как правило, с помощью компилятора Watcom C.
Компилятор Watcom C генерирует код, использующий преимущества архитектуры процессоров 80386 и 80486. Он использует 32-битовые ближайшие указатели (near pointers) и 4-байтовые целые числа. Использование 32-битовых указателей делает концепцию моделей памяти во многом ненужной. NLM-модули компилируются для непрерывной модели памяти с абсолютной адресацией ("плоской" модели), в которой сегментация памяти гораздо менее важна, чем в других. Одного 32-битового указателя достаточно для адресации всей доступной памяти. Кроме того, компилятор генерирует код, выполняемый в виртуальном режиме.
Все NLM-модули условно можно разделить на две группы: основные (без которых не может функционировать NetWare) и дополнительные (рисунок 2.3).
Как видно из рисунка, в качестве NLM-модулей выступают программы с расширениями *.DSK, *.LAN, *.NAM, *.NLM. При загрузке NLM-модулей в ОП автоматически создаётся нить (задача), связанная с этим модулем. Нить может динамически порождать другие нити. Нити выполняются на сервере независимо друг от друга. Синхронизация между ними осуществляется с помощью семафоров.
Рис. 2.3. Функциональная схема ОС NetWare
Диспетчеризация процессов (нитей)
Операционная система NetWare включает в себя следующие очереди (рисунок 2.4), в которых находятся различные нити, ожидая освобождения центрального процессора (ЦП):
очередь WorkToDoList (только для версии 4.х),
очередь RunList,
очередь DelayedWorkToDo,
очередь LowPriority.
Очереди перечислены в порядке убывания приоритетов обслуживания нитей. Внутри каждой очереди нити диспетчируются в соответствии с дисциплиной FIFO: "первый пришёл - первый обслужен".
Уже отмечалось, что нить - это или внутренняя задача ОС, или задача, связанная с NLM-модулем. Операционная система идентифицирует и отслеживает каждую нить по её блоку управления процессом PCB (Process Control Block).
Обычно в NetWare нить сама себя переводит в неактивное состояние (ставит в очередь). Это происходит в одном из следующих случаев (рисунок 2.4).
Нить выполняет функцию SheduleWorkToDo (для версии 4.х). Создаётся новая нить, которая заимствуется из ядра NetWare и помещается в очередь WorkToDoList, имеющую высший приоритет для планирования на ЦП. Старая нить помещается в конец очереди RunList.
Нить приостанавливается, устанавливая семафор (функция WaitOnLocalSemaphore) или ожидая активизации со стороны другой нити (функция SuspendThread). В этом случае нить помещается в конец очереди RunList, но не диспетчируется (не планируется) до наступления требуемого события.
Нить выполняет функцию ThreadSwitch, чтобы переключить контекст (т. е. чтобы активизировать другую нить из очереди). В этом случае нить помещается в конец очереди RunList и диспетчируется, когда до неё доходит очередь.
Нить выполняет функцию BeginThread. Создаётся новая нить, которая помещается в конец очереди RunList. Старая нить продолжает выполняться.
Рис. 2.4. Очереди к процессору
Нить выполняет функцию ThreadSwitchWithDelay. Нить помещается в конец очереди DelayedWorkToDo и приостанавливается на 50 переключений контекста (нитей), после чего она помещается в конец очереди RunList. Число переключений контекста (50) можно изменить с помощью функции SetThreadHandicap (при этом говорят, что устанавливается постоянный гандикап). Часто функцию ThreadSwitchWithDelay используют для того, чтобы активизировать задачи из очереди LowPriority, т.к. нити из этой очереди выполняются только в том случае, если пуста очередь RunList. Аналогичные действия выполняются, если встречается функция Delay (задержать нить на определённый интервал времени).
Нить выполняет функцию ThreadSwitchLowPriority. В этом случае нить помещается в очередь LowPriority, имеющую самый низкий приоритет. Нити в этой очереди выполняются только в том случае, если пуста очередь RunList, и нет нитей, для которых установлен постоянный гандикап. Типичные низкоприоритетные нити - это создание резервной копии или упаковка файла