- •Адресация памяти в защищенном режиме.
- •Привилегии и защита памяти защищенного режима
- •Сегментно-страничная адресация памяти
- •Вызов процедур и задач
- •Прямой вызов подпроцедур
- •Вызов задач (многозадачность)
- •Обработка прерываний в защищенном режиме
- •Кэширование в м/п Intel
- •История ос
- •Функции ос
- •Классификация ос
- •Мультипрограммирование и мультипроцессирование
- •Структуры ос
- •Средство межпроцессорных взаимодействий ipc
- •Очередь
- •Средства синхронизации
- •Планирование и диспетчеризация потоков(процессов)
- •Алгоритмы планирования для систем разделения:
- •Приоритетное планирование:
- •3. Системы реального времени.
- •Алгоритмы замещения страниц
- •Учет свободного и занятого пространства памяти.
- •Системы управления ввода-вывода.
- •Отказоустойчивые системы хранения
Средство межпроцессорных взаимодействий ipc
Организовать взаимодействие между различными потоками одного процесса несложно, потому что все они работают в одном адресном пространстве и им доступны все ресурсы процесса. А вот организовать взаимодействие потоков различных процессов без специальных средств невозможно. Средство межпроцессорных взаимодействий предназначены для взаимодействия потоков различных процессов. Эти средства подразделены на 2 класса:
средства передачи данных: файлы, общие сегменты, каналы, очереди
средства синхронизации: события, сигналы, мютексы, семафоры, критические секции
Общие сегменты – сегменты памяти, в которых все взаимодействующие процессы имеют доступ ???
Кроме того, многие современные ОС имеют средства, с помощью которых дескриптор из одного адресного пространства LDT можно передать в другое адресное пространство. В таком случае такой сегмент будет описываться не в глобальной, а в локальной таблице дескрипторов, но будет присутствовать во всех локальных таблицах взаимодействующих процессов.
Каналы
Канал представляет из себя область памяти, используемую в качестве циклического буфера (рис)
И на эту область есть 2 указателя: указатель чтения и указатель записи.
Указатель записи указывает на начало свободного пространства в канале, куда можно поместить очередную запись. Указатель чтения указывает на начало еще не прочитанных данных, при чтении данные из канала удаляются.
Существует 2 случая, когда УЧ=УЗ:
канал пустой
канал переполнен. При попытке записи фиксируется ошибка.
FIFO
Каналы могут быть именованные и не именованные. Именованному каналу при создании присваивается уникальное имя, по которому к нему могут получить доступ потоки других процессов. Неименованным каналам имя не присваивается, поэтому доступ к ним могут получить только дочерние процессы, унаследовавшие описатель от своего родителя.
Именованный канал создается с помощью функции p=CreateNPipe(имя, размер области отводимой под канал). Получить доступ к именованному каналу из других процессов можно с помощью функции p=OpenMPipe(имя), в которой указывается имя существующего канала. Функция также возвращает описатель канала - пару р=(УЧ, УЗ).
Неименованный канал создается с помощью функции p=MakePipe(e), в котором указывается размер области, выделяемый под неименованный канал. Функция также возвращает описатель канала.
Операции чтения и записи в каналах осуществляются с помощью операторов функций ввода-вывода для последовательности файлов Read (УЧ), Write(УЗ).
При записи по УЗ осуществляется запись, после чего УЗ передвигается на начало свободного пространства.
Для завершения работы с каналом необходимо закрыть указатели связи с каналом Close(УЧ, УЗ).
Очередь
Представляет из себя более мощное и гибкое средство по сравнению с каналом. Очередь также представляет из себя область памяти, однако имеются существенные отличия:
очередь содержит не сами данные, а ссылки на данные – сообщения. Помимо ссылкии на сами данные, сообщения также содержат идентификатор процесса, поместившего сообщение в очередь и в некоторых случаях приоритет сообщения.
Очередь поддерживает 3 дисциплины: FIFO, LIFO, приоритет
Дисциплина задается при создании очереди и в середине работы изменяться не может.
Только процесс, создавший очередь, может считывать данные из очереди. Все остальные процессы, получившие доступ к очереди, могут записывать сообщения в очередь. Т о очередь предоставляется во взаимодействие одного процесса сервера и нескольких процессов клиентов. Клиенты помещают свои запросы в очередь, а сервер считывает их из очереди в соответствии с заданной дисциплиной и обслуживает. В связи с этим для сервера и клиента существует разный набор функций.
Сервер может:
создать очередь q=CreateQueue(имя, l –размер, D-дисциплина)
ReadQueue(q)
PeekQueue(q) – просмотреть сообщения без удаления
QuergQueue(q) – подсчитать количество сообщений
PurgeQueue(q) – очистить очередь
Close(q) – очистить очередь (уничтожение)
Клиент может:
получить доступ к очереди по заданному имени q=OpenQueue(имя)
записать сообщения в очередь WriteQueue(q)
подсчитать количество элементов в очереди QueryQueue(q)
закрыть очередь (но не уничтожать данные) Close(q)
Поскольку в очереди размещается не сами данные, а ссылки на них, клиенты и серверы должны иметь доступ к сегментам памяти, в которых размещаются сами данные.