- •Оглавление
- •Виды операционных систем дос (Дисковые ос)
- •Универсальные ос
- •Системы реального времени
- •Микроядерные ос
- •Архитектура unix.
- •Блок – схема ядра
- •Файловые системы
- •Файловая система s5fs
- •Файловая система ext2
- •Файловая система vfs
- •Журналируемая файловая система
- •Буфер сверхоперативной памяти (кеш)
- •Механизм поиска буфера
- •Преимущества и неудобства буферного кеша
- •Состояние процессов
- •Формат памяти системы
- •Контекст процесса. Уровни и слои контекста
- •Компоненты контекста процесса
- •Планирование процессов
- •Алгоритмы планирования
- •4) Приоритетное планирование
- •5) Многоуровневые очереди
- •Диспетчеризация процессов
- •Работа в режиме реального времени. Таймер.
- •Управление памятью
- •Обработка ошибок
- •Управление вводом/ выводом
- •По ввода/вывода
- •Способы работы с устройствами I/o
- •2) Управляемый прерываниями ввод-вывод
- •3) Ввод-вывод с использованием dma
- •Взаимодействие процессов
- •Сигналы
- •Неименованные каналы
- •Именованный канал
- •Семафоры
- •Механизм передачи сообщений
- •Действия с сокетами
- •Удаленный вызов процедур
- •3 Уровня rpc
- •Архитектуры многопроцессорных систем
- •1. Мaster -slave(именная организация)
По ввода/вывода
Ключевые моменты:
1) независимость от устройств. Вид программы не должен зависеть от того, читает ли она данные с гибкого диска или с жесткого диска.
2) обработка ошибок. Ошибки следует обрабатывать как можно ближе к аппаратуре.
3) буферизация. Данные с устройств невозможно сразу записать туда, куда надо.
А) IP – пакет ядро/драйвер скачивает в буфер
Б) формирование звука
В) запись CD/DVD
Для решения поставленных проблем целесообразно разделить программное обеспечение ввода-вывода на четыре слоя (см. рис.)
1) Обработка прерываний
2) Драйверы устройств
3) Независимый от устройств слой операционной системы
4) Пользовательский слой программного обеспечения.
Многоуровневая организация подсистемы ввода-вывода
Способы работы с устройствами I/o
1) Программный (простой)
2) Управляемый прерываниями.
3) С использованием DMA.
Рассмотрим подробнее:
1) Программный ввод-вывод
В этом случае всю работу выполняет центральный процессор.
Рассмотрим процесс печати строки ABCDEFGH этим способом.
Этапы печати строки ABCDEFGH
Алгоритм печати:
Строка для печати собирается в пространстве пользователя.
Обращаясь к системному вызову, процесс получает принтер.
Обращаясь к системному вызову, процесс просит распечатать строку на принтере.
Операционная система копирует строку в массив, расположенный в режиме ядра.
ОС копирует первый символ в регистр данных принтера, который отображен на памяти.
Символ печатается на бумаге.
Указатель устанавливается на следующий символ.
Процессор ждет, когда бит готовности принтера выставится в готовность.
Все повторяется.
При использовании буфера принтера, сначала вся строка копируется в буфер, после этого начинается печать.
Программа:
copy_from_user (buf, p, count);
fo r (i=0; i<count; i++)
{ while (*printer_status_reg)!=READY; ждем, пока принтер станет доступным
*printer_data_reg=p[i];}
2) Управляемый прерываниями ввод-вывод
Если в предыдущем примере буфер не используется, а принтер печатает 100 символов в секунду, то на каждый символ будет уходить 10мс, в это время процессор будет простаивать, ожидая готовности принтера.
Рассмотрим тот же пример, но с небольшим усовершенствованием.
Алгоритм печати:
До пункта 8 тоже самое.
Процессор не ждет готовности принтера, а вызывает планировщик и переключается на другую задачу. Печатающий процесс блокируется.
Когда принтер будет готов, он посылает прерывание процессору.
Процессор переключается на печатающий процесс.
Программа:
C opy_from_uesr (buf, p, count);
enable_interrupts(); разрешение прерывания
while (*printer_status_reg)!=READY;
*printer_data_reg=p[0]; записываем 1ый символ
s cheduler(); планировщик; переходим к выполнению другой задачи
if (count>0)
{ *printer_data_reg=p[i];
i++; count--;}
e lse
{unblok_user();} когда все напечаталось, блокируем