- •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. Атрибуты файлов. Разграничение доступа к файлам.
Сообщения.
Они обслуживаются операционной системой, размещаются в адресном пространстве ядра и являются разделяемым системным ресурсом. Каждая очередь сообщений имеет свой уникальный идентификатор. Процессы могут записывать и считывать сообщения из различных очередей. Процесс, пославший сообщение в очередь, может не ожидать чтения этого сообщения каким-либо другим процессом. Он может закончить свое выполнение, оставив в очереди сообщение, которое будет прочитано другим процессом позже.
Данная возможность позволяет процессам обмениваться структурированными данными, имеющими следующие атрибуты:
- Тип сообщения (позволяет мультиплексировать сообщения в одной очереди)
- Длина данных сообщения в байтах (может быть нулевой)
- Собственно данные (если длина ненулевая, могут быть структурированными)
Очередь сообщений хранится в виде внутреннего однонаправленного связанного списка в адресном пространстве ядра. Для каждой очереди ядро создает заголовок очереди (msqid_ds), где содержится информация о правах доступа к очереди (msg_perm), ее текущем состоянии (msg_cbytes - число байтов и msg_qnum - число сообщений в очереди), а также указатели на первое (msg_first) и последнее (msg_last) сообщения, хранящиеся в виде связанного списка. Каждый элемент этого списка является отдельным сообщением.
Для создания новой очереди сообщений или для доступа к существующей используется системный вызов msgget(2):
int msgget( key__t key, int msgflag);
Функция возвращает дескриптор объекта-очереди, либо -1 в случае ошибки. Подобно файловому дескриптору, этот идентификатор используется процессом для работы с очередью сообщений. В частности, процесс может:
- Помещать в очередь сообщения с помощью функции msgsnd(2);
- Получать сообщения определенного типа из очереди с помощью функции msgrcv(2);
- Управлять сообщениями с помощью функции msgctl(2).
Перечисленные системные вызовы манипулирования сообщениями имеют следующий вид:
int msgsnd(int msqid, const void *msgp,
size_t msgsz, int msgfig);
int msgrcv(int msqid, void *msgp,
size_t msgsz, long msgtyp, int msgfig);
Здесь msqid является дескриптором объекта, полученного в результате вызова msgget(2). Параметр msgp указывает на буфер, содержащий тип сообщения и его данные, размер которого равен msgsz байт. Буфер имеет следующие поля:
long msgtype тип сообщения
char msgtext[] данные сообщения
Аргумент msgtyp указывает на тип сообщения и используется для их выборочного получения. Если msgtyp равен 0, функция msgrcv(2) получит первое сообщение из очереди. Если величина msgtyp выше 0, будет получено первое сообщение указанного типа. Если msgtyp меньше 0, функция msgrcv(2) получит сообщение с минимальным значением типа, меньше или равного абсолютному значению msgtyp.
Очереди сообщений обладают весьма полезным свойством - в одной очереди можно мультиплексировать сообщения от различных процессов. Для демультиплексирования используется атрибут msgtype, на основании которого любой процесс может фильтровать сообщения с помощью функции msgrcv(2).
Рассмотрим типичную ситуацию взаимодействия процессов, когда серверный процесс обменивается данными с несколькими клиентами. Свойство мультиплексирования позволяет использовать для такого обмена одну очередь сообщений. Для этого сообщениям, направляемым от любого из клиентов серверу, будем присваивать значение типа, скажем, равным 1. Если в теле сообщения клиент каким-либо образом идентифицирует себя (например, передает свой PID), то сервер сможет передать сообщение конкретному клиенту, присваивая тип сообщения равным этому идентификатору. Атрибут msgtype также можно использовать для изменения порядка извлечения сообщений из очереди. Стандартный порядок получения сообщений аналогичен принципу FIFO - сообщения получаются в порядке их записи. Однако используя тип, например, для назначения приоритета сообщений, этот порядок легко изменить.
Каналы
Программные каналы. Рассмотрим синтаксис организации программных каналов при работе в командной строке shell: cat myfile | wс
При этом STDOUT программы cat(1) передается на STDIN программы wc(1).
Таким образом, два процесса обменялись данными. При этом использовался программный канал, обеспечивающий однонаправленную передачу данных между двумя задачами.
Для создания канала используется системный вызов pipe(2):