- •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. Редиректор и сервер. Встроенные сетевые компоненты
49. Разделяемая память
Разделяемая память может использоваться, если есть определенные объекты, управляющие семафорами. Применение разделяемой памяти, в соответствии со специальным механизмом позволяет повысить быстродействие.
При этом для сервера необходимо:
- получение доступа к разделяемой памяти посредством семафора;
- запись данных в область разделяемой памяти;
- освобождение памяти в соответствие со значением семафора.
Для клиента:
- получение доступа к разделяемой памяти посредством семафора;
- чтение данных из области разделяемой памяти;
- освобождение памяти в соответствие со значением семафора.
Для организации клиент-серверного приложения с доступом к разделяемой памяти необходимо 2 семафора.
50. Сигналы
Сигналы – способ передачи уведомления о событии, произошедшем либо между процессами, либо между процессом и ядром. Сигналы очень ресурсоемки. Ограничены с точки зрения системных средств. Они малоинформативны. Являются простейшим способом IPC. Используются для генерации простейших команд, уведомлений об ошибке. Обработка сигнала похожа на обработку прерывания. Сигнал имеет собственное имя и уникальный номер. Максимальное количество сигналов – 32.
Сигнал SIGINT генерируется при нажатии клавиши del, Ctrl+C и т.д. Сигнал может быть отправлен процессу ядром или другим процессом. Это можно сделать посредством системного вызова.
#include <sys/types.h>
#include <signal.h>
int kill (pid_t pid, int sig);
Причины генерации сигналов:
Ядро отправляет сигнал процессу при нажатии клавиши;
Внутренние прерывания (деление на 0, обращение в недопустимую область памяти). Могут быть обработаны системой либо пользователем.
Особые аппаратные ситуации (SIGALARM, например, таймеры);
Особые программные ситуации;
Управление заданиями (управление фоновыми и текущими задачами, например, сообщение потомка родителю о своём завершении);
Превышение квот;
Ответ на запрос по событию.
Суперпользователь может послать сигнал. Если обычный пользователь, то его процессы могут посылать друг другу сигналы в рамках одного и того же пользовательского сеанса. Сигнал процесс может отправить самому себе и своей группе.
Возможные действия при получении сигнала:
- завершение процесса с сохранением образа процесса в ОЗУ;
- завершение процесса без сохранения образа процесса в ОЗУ;
- игнорирование сигнала;
- приостановка процесса;
- возобновление процесса при условии, что он был приостановлен.
Основные действиия при приёме сигналов:
Завершение процесса с сохранением или без сохранения образа процесса в ОЗУ;
Игнорирование сигнала;
Приостановка процесса;
Возобновление процесса при условии, что он был приостановлен;
Блокировка сигнала (исключение SIGKILL, SIGSTOP).
Действия на данный сигнал, согласно умолчанию.
Процесс может изменить действие по умолчанию: на игнорирование или собственный обработчик.
Одно из возможных действий – диспозиция сигнала.
Две фазы существования сигнала:
генерация и отправка;
доставка и обработка.
Промежуточная стадия – ожидание доставки.
Генерация и отправка – в случае особых ситуаций, терминирование прерываний, системных вызовов, управления заданиями, ситуаций, когда возможна отправка сигналов по завершении временного интервала и уведомление (отправка сигнала по запросу самого процесса о каком-либо событии), нарушение квот.
Доставка и обработка.
Для каждого сигнала прописана обработка по умолчанию, задаваемая ядром либо обработка из нашего процесса.
Наиболее часты вариант – завершение процесса с сохранением образа в ОЗУ. Можно изменить действия по умолчанию на свой обработчик или указать системный. Можно заблокировать сигнал (отложить обработку на время).
Обработка.
Для обработки сигнала необходимо, чтобы на момент его получения процесс выполнялся. Фаза ожидания доставки может быть длительной. Могут существовать задержки между отправкой и доставкой. Обработка не может быть выполнена до тех пор, пока планировщик не выберет процесс обработки на исполнение.
Доставка.
Осуществляется ядром. Ядро от имени процесса осуществляет вызов ISSIG().
Данный системный вызов выполняется в трех случаях:
- возвращение процесса из режима ядра в пользовательский режим;
- переход процесса в состояние ожидания;
- выход процесса из состояния ожидания.
Все это происходит при условии, что приоритет процесса допускает его прерывание сигналом. Системный вызов ISSIG() определяет, есть ли сигналы, ожидающие доставки. Если нет – то процесс просто выполняется.