- •1. Операционные системы
- •2. Функциональные компоненты локальной ос
- •3. Назначение и функции сетевой ос
- •4. Функциональные компоненты сетевой ос
- •5. Коммуникационные средства
- •6. Классификация ос
- •8. Архитектура ос
- •9. Монолитные и многоярусные ядра
- •10. Функциональные компоненты Linux
- •11. Структура ядра
- •12. Функции слоёв ядра
- •13. Вспомогательные модули
- •14. Микроядерные системы
- •15. Объектная модель функционирования
- •16. Состав исполнительной системы WinNt
- •17. Совместимость
- •18. Множественные прикладные среды. Способы реализации
- •19. Интерфейсы ос
- •20. Файловая система
- •21. Логическая организация файла
- •22. Физическая организация файла
- •23. Общая модель фс
- •Непрерывное
- •2) Цепочечная
- •3) Фиксированный
- •Битовые карты (таблицы) – каждому блоку ставится в соответствие свой бит (1 – занят, 0 – свободен)
- •Цепочки сводных свободных порций
- •Список свободных блоков
- •Индексированный
- •24. Функции фс
- •25. Фс unix-подобных ос
- •26. Структура фс
- •27. Структура фс базовых unix-подобных ос
- •28. Архитектура виртуальной фс
- •29. Последовательность действий при монтировании
- •30. Файловые дескрипторы и трансляция имён
- •31. Физическая организация fat
- •32. Физическая организация ntfs
- •33. Управление процессами
- •34. Контекст и дескриптор
- •35. Структура контекста процесса
- •36. Планирование и диспетчеризация
- •37. Алгоритмы планирования
- •38. Планирование и диспетчеризация в unix системах
- •39. Управление процессами в unix-подобных системах
- •40. Атрибуты, инфраструктура процесса
- •41. Создание процессов
- •42. Этап exec()
- •43. Межпроцессные взаимодействия (ipc)
- •44. Каналы (pipe)
- •45. Fifo
- •46. Пространство имен
- •47. Сообщения
- •48. Семафоры
- •49. Разделяемая память
- •50. Сигналы
- •51. Последовательность событий
- •52. Функции управления процессами
- •53. Сообщения в микроядерных ос.
- •54. Процессы и потоки в WinNt
- •55. Базовая структура процесса, создание процесса в WinNt
- •56. Основные различия управления процессами в различных средах
- •57. Состав потока в WinNt и контекст потока
- •58. Передача сообщений с помощью lpc (локальный вызов процедур)
- •59. Распределенные системы. Удаленный вызов процедур. Rpc (Remote Procedure Call)
- •60. Система ввода-вывода в Win nt
- •61. Реализация свв в Windows nt
- •62. Унифицированная модель драйвера
- •63. Формат пакета irp
- •64. Структура драйвера
- •65. Редиректор и сервер. Встроенные сетевые компоненты
46. Пространство имен
Множество возможных имен объектов конкретного типа IPC, использующихся для очередей сообщений, семафоров, разделяемой памяти. За каждым объектом закреплено имя – ключ. Эти имена генерирует ftok() (параметры: имя файла и идентификатор проекта).
#include <sys/types.h>
#include <sys/ipc.h>
key_t ftok(char *filename, char proj);
filename – имя сервера, должно существовать в момент создания ключа
Пространство имё создаётся для использования IPC неродственным процессам.
Для ссылок используются ID. У каждого свой уникальный ID.
-
Тип IPC
Пространство имен
Дескриптор
Системный вызов
Канал pipe
-
Файловый дескриптор
pipe();
Канал FIFO
Имя файла
Файловый дескриптор
mknode();
Очередь сообщений
Ключ
Идентификатор
msgget(), msgctl()
Семафор
Ключ
Идентификатор
semctl(), semset()
Разделяемая память
Ключ
Идентификатор
shmget(), shmctl()
Ошибка – возврат «-1».
ФД нужны для идентификации файлов процессами.
Inode нужны для того, чтобы их различало ядро.
47. Сообщения
Сообщения обслуживаются ОС, являются разделяемым системным ресурсом, являются частью ядра ОС, образуют очереди, которые образуют список. Сама очередь имеет уникальное имя – идентификатор.
Процессы могут читать сообщения из различных очередей.
Атрибуты сообщений:
- тип сообщения (мультиплексный/немультиплексный);
- длина сообщений (байт, может быть = 0);
- сами данные (могут быть структурированы).
Хранится очередь в виде однонаправленного односвязного списка. Для каждой очереди ядро создает свою структуру.
msgid_ds ---------------------------------------- ipc_perm
msg_perm // permission – права доступа
msg_cbytes // число байт
msg_num // число сообщений в очереди
msg_first // первый объект в списке
msg_last // последний в списке
Функции:
msg_snd() – отправка сообщения;
msg_rcv() – прием сообщения;
msg_get()– создание очереди;
msg_ctl()– удаление очереди.
48. Семафоры
Семафоры – средство синхронизации доступа нескольких процессов к разделяемым ресурсам (функция разрешения/запрещения использования ресурса).
Требования к семафорам:
- должны быть размещены в АП ядра (любой процесс может получить доступ к нему);
- операции над семафорами должны быть неделимыми (атомарными), что возможно только при выполнении операций в режиме ядра.
Семафоры – системный ресурс. Операции над семафорами производятся посредством системных вызовов. В UNIX системах под семафором понимается группа семафоров.
Структура для описания семафоров sem_id_ds:
sem_id – идентификатор семафора;
sem_perm – права доступа;
sem_first – указатель на первый элемент;
sem_num – число семафоров в группе;
sem_oper - время последней операции;
sem_time – время последнего изменения и другие.
Также в структуре sem хранится имя семафора, значение семафора, идентификаторы процесса, выполнившего последнюю операцию изменения семафора, число процессов, ожидающих увеличения семафора, число процессов, ожидающих обнуления семафора.
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int semget(key_t key, int nsems, int semflag);
С помощью этой функции можно получить дескриптор. После этого можно выполнять операции над семафором.
Структура sem_op – операции, определенные над семафором.
sem_op(int semid, struct sembuf *semop, size_t nops);
semid – идентификатор;
semop – указатель на структуру, содерж-ую 3 поля: номер в группе, операция, флаг операции.
struct sembuf{
short sem_num;
short sem_op;
short sem_flag;}
nops – количество операций над семафором, обычно – 3:
- если значение semop > 0 – добавляется значение, указанное в структуре sembuf.
- если значение semop = 0, процесс ожидает, пока семафор не обнулится;
- если значение semop < 0, процесс ожидает, пока значение семафора достигнет по абсолютной величине sem_op и обнуляет значение семафора.
ОС не накладывает ограничений на операции над семафорами, но для работы хватает и стандартных операций UNIX’а.
Применение семафоров с разделяемой памятью.