- •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. Редиректор и сервер. Встроенные сетевые компоненты
43. Межпроцессные взаимодействия (ipc)
Необходимо обеспечить передачу данных, возможность использования совместно разделяемых ресурсов, обеспечить синхронизацию между различными процессами и потоками при использовании ресурсов.
Каждый процесс работает изолированно в своём адресном пространстве.
Задачи IPC:
- передача данных между процессами;
- совместное использование данных (без копирования);
- синхронизация между процессами и потоками при использовании ресурсов.
Средства IPC:
- сигналы;
- неименованные каналы (pipe);
- именованные каналы (FIFO) – особый тип файла в ФС;
- очереди сообщений (messages queue);
- разделяемая память (shared memory) – управление посредством семафоров;
- семафоры;
- сокеты.
44. Каналы (pipe)
Обмен данными между процессами порождает программный канал, обеспечивающий однонаправленную передачу между двумя процессами (задачами).
Системный вызов: int pipe(int *filedes);
filedes[0] – указатель на запись;
filedes[1] – указатель на чтение;
По сути, системный вызов вызывает 2 файловых дескриптора, которые позволяют открыть файл на запись и файл на чтение.
Эти каналы могут использоваться самим процессом и его потомками => pipes не подходят для взаимодействия между независимыми процессами. Используются только родственными процессами.
Работают медленно. Передача происходит через область памяти, которую выдаёт ФС (но она не является файлов, т.к. не видна извне и не именована). Возможна буферизация в рамках ОЗУ -> некоторое ускорение работы.
45. Fifo
В отличие от неименованных каналов (pipe) – возможен обмен данными не только между родственными процессами, так как буферизация происходит в рамках файловой системы с именованием -> cпециальный файл (тип FIFO). Чтение происходит в порядке записи.
Системный вызов: mknode(char *pathname, int mode, int dev);
*pathname – имя FIFO;
mode – флаги прав доступа;
Правила открытия канала на запись и чтение для независимых процессов:
1) при чтении n байт из N (n<N) системный вызов возвращает n байт, а остальное сохраняет до следующего чтения;
2) при чтении n байт из N (n<N) (n>N) возвращается N и происходит обработка прерывания;
3) если канал пуст, то возвращается 0 байт, если канал открыт на запись, то процесс будет заблокирован до того момента, пока не появится хотя бы 1 байт;
4) если в канал пишут несколько процессов, то информация не смешивается (у каждого свой буфер + использование tag’ов);
5) при записи, когда FIFO полон, процесс блокируется до тех пор, пока не появится место для записи.
При использовании FIFO не гарантируется атомарность операций.
Попытка записать в неоткрытый FIFO приводит к выработке сигнала SIGPIPE, который обрабатывается системой или программистом.
При записи FIFO работает как клиент-серверное приложение.
Функции сервера:
- создание FIFO (mknode());
- открытие FIFO на чтение (open());
- чтение сообщений (recv());
- запись сообщений (print());
- закрытие FIFO (close()).
Функции клиента:
- открытие FIFO на запись (open());
- запись сообщений для сервера в FIFO (send());
- закрытие FIFO (close()).
- удаление FIFO (rm()).