- •Ос в общей структуре компьютера.
- •История операционных систем.
- •Классификация современных ос. Задачи современных ос.
- •6. Понятие процесса – ключевое понятие ос.
- •8. Трансляторы: компиляторы и интерпретаторы.
- •9. Иерархия зу (запоминающих устройств).
- •10. Управление оперативной памятью (оп). Менеджер памяти; swapping; виртуальная память.
- •11. Модели организации виртуальной памяти.
- •12. История ос unix.
- •13. Общая архитектура unix. Основные подсистемы ядра.
- •14. Пользовательская среда unix.
- •Командный интерпретатор shell.
- •16. Система каталогов в oс unix. Управление с помощью команд языка Bourn shell.
- •17. Управление файлами с помощью команд языка Bourn shell. Перенаправление ввода/вывода.
- •19. Обработка аргументов командной строки. Переменные окружения.
- •20. Пользователь и группа. Права доступа к файлу.
- •21. Системные вызовы и функции стандартных библиотек. Обработка ошибок.
- •22.Структура программы на языке с. Параметры главной функции (пример).
- •23. Файловая система ос unix: монтирование, индексные дескрипторы, жесткие и символические ссылки, файлы устройств.
- •24.Системные вызовы для работы с файлами
- •25. Понятие «процесс» в ос unix. Контекст процесса; свойства процесса; состояние процесса.
- •26.Создание процессов и упр-е ими.
- •27. Запуск внешней программы
- •29.Общая классификация средств взаимодействия процессов в ос unix.
- •30.Иерархия процессов в ос unix. Понятие сеанса. Фоновые процессы.
- •31.Каналы – средства взаимодействия процессов. Неименованные каналы. Организация конвейера (пример программы).
- •33.Сигналы как средство взаимодействия процессов в ос unix. Диспозиция сигналов.
- •34.Ограничения для процесса в ос unix (по ресурсам). Связь со свойствами процесса.
- •36.Отображение файлов в виртуальное адресное пространство. Разделяемая память.
- •37. Взаимодействие процессов через псевдотерминал.
- •38. Недостатки потокового взаимодействия процессов. Средства System vipc. Пространство имен. Общие принципы работы со средствами System vipc.
- •39. Организация очереди сообщений в ос unix. Структура сообщения. Отправка и принятие сообщений.
- •40.Семафоры, как средство взаимодействия процессов System vipc. Понятие атомарной операции. Массив семафоров.
- •41.Разделяемая память, как средство взаимодействия процессов System vipc.
- •42.Взаимодействие по сети. Понятие протокола. Семейства адресации и типы взаимодействия. Создание сокета в ос unix.
- •45. Потоковые сокеты. Клиент – серверная модель.
- •46. Проблема очередности действий и ее решение.
- •47. Процессы-демоны. Система журнализации.
- •48. Загрузка и жизненный цикл в ос unix.
- •49. Взаимоисключения. Понятие критической секции. Устаревшие подходы к организации взаимного исключения.
- •50.Поддержка взаимоисключения на уровне ос. Мьютексы и семафоры (Дейкстры). Команда ассемблера tsl.
- •51.Проблема тупиков. Граф ожидания
- •52. Нити исполнения (pthreads) в ос unix. Мьютексы pthreads.
- •53.Графический интерфейс в ос unix. Базовые принципы построения x_window.
- •54.Файловая подсистема. Общая структура. Методы выделения дискового пространства. Управление дисковым пространством.
- •55.Файловая подсистема. Структура файловой системы на диске. Реализация директорий. Поиск в директории (хеширование).
- •56.Подсистема ввода/вывода. Схема взаимодействия подсистем ос. Понятие драйвера. Типы драйверов.
50.Поддержка взаимоисключения на уровне ос. Мьютексы и семафоры (Дейкстры). Команда ассемблера tsl.
Мьютексы и семафоры В этих алгоритмах поддерживаются взаимоисключения на уровне ОС. Процесс, ожидающий вход в критическую секцию не расходует процессорное время, нужно заблокировать его до тех пор пока нужные разделы ресурсов не станут свободными. В момент освобождения ресурсов процесс надо “разбудить” и желательно ресурс пометить как занятый. Блокировать процесс может только ОС. Под мьютексом в общем случае понимается объект с 2мя состояниями (открыт-закрыт). Программируют 2 операции Lock(), Unlock(). Unlock проходит успешно в любом случае, переводит объект в состояние открыт. А lock имеет 2 варианта:
-1й случай как ф-я Boolean при применении к открытому мьютексу она закрывает его и возвращает истину. При применении к закрытому мьютексу –ложь. Такое программирование неблокирующее.
-2й случай. Операция как процедура не возвращает значения. При применении к открытому мьютексу она закрывает его и возвращает управление. При применении к закрытому блокирует вызвавший процесс. Пока мьютекс не окажется открытым.
Важнейшее свойство операций это их атомарность. Обе операции должны выполняться как одно целое.
В алгоритме используем переменную S она будет обозначать мьютекс. А вместо присваиваний операций lock и unlock.
Неблокирующая реализация Lock
While (!lock(s)){} //ждем пока не удастся закрыть мьютекс
Section() // работает с разделенными данными
Unlock(s) //разрешить доступ другим процессам
В отличие от варианта с блокирующей переменной этот алгоритм является корректным, т.к lock атомарна. Выход из цикла по истине Lock означает, что мьютекс в какой то момент открыт и нашему процессу удается его закрыть.
Блокирующая реализация Lock
Lock (s) ;//ожидание пока не закроется мьютекс
Section();// работа с данными
Unlock(S);//разрешение доступа
Блокирующий вариант не имеет активного ожидания, необходимо содействие ядра ОС.
Семафоры Дейкстры
В данном алгоритме понятие семафор это обобщенное понятие Мьютекса. В обобщенном варианте это целочисленная переменная которая принимает только неотрицательные значения. Определено 2 операции up() down().
Up проходит успешно, увеличивает значение переменной на 1 , немедленно возвращает управление. Down уменьшает значение на 1, если текущее >0. Если значение 0, то она блокирует процесс пока значение не станет положительным, после чего уменьшает его на 1 и возвращает управление. Операции над семафором дБ атомарными либо целиком как объект ядра либо как набор операций ядра над переменной из памяти пользовательского процесса. С помощью семафора можно имитировать функционирование Мьютекса. Если 0-закрыт, 1-открыт, lock и unlock заменить на down и up. Надо чтобы up не применялось к положительному семафору (применяется в начале программы 1 раз или сразу после down). Семафорный алгоритм ОС используется для организации счетчика употребл. ресурсов. Некоторые версии ОС обобщ операции над семафорами, введя специальные целочисленные параметры. Up(sem,n) фиксирует величину изменения, down неблокир вариант этой операции. В сравнении с классическим вариантом вместо ожидания сразу возвращает управление (операция прошла успешно)
Известная реализация семафоров в system IPC представляет собой массивы семафоров с которыми можно производить сложные атомарные операции.
Существуют для них доп. операции: блокировка пока семафор не станет равным 0.
TSL Мьютекс можно реализовать без обращения к ядру, необходима команда TSL проверить и закрыть. Имеем 2 операнда регистр и адрес в памяти. Суть в том, чтобы за 1 неделимое действие поместить в регистр содержимое ячейки памяти, а в саму ячейку памяти поместить фиксированное значение 1. В одно действие можно установить переменной мьютекса значение соответствующее состоянию заперт, сохранить для проверки то значение которое было для мьютекса раньше. Если мьютекс до этого был открыт, то операция прошла успешно. Если закрыт, то надо ждать.
Mutex: DB, 0
Lock: TSL RX, Mutex
CMP RX, 0
JE ok
JMP lock
Ok: RET
Unlock: mov mutex, 0
RET
Есть возвращение к использованию активного ожидания.
В программах используются легковесные процессы такая реализация мьютекса более эффективна за счет экономии на переключении контекстов (с проц на ядро)
Можно перед переходом на нач lock сразу после условного перех вставить обращение к процедуре переключения легковесных процессов, чтобы уменьшить потери от активного ожидания.
Примеры взаимоисключений. Задача производителя и потребителя. Есть несколько процессов производящих данные и есть процессы обрабатывающие-потребители. Задача иллюстрирует применение семафоров, определяем вариант передачи информации. Работа с таким буфером мтребует взаимоисключений. Буфер-единое целое. На время выполнения любого процесса исключается возможность обращения к буферу другого процесса.Возможны 2 ситуации, требующие блокировки:
- потребитель готов получить порцию данных, но в буфере их нет.
-производитель подает порцию, но записать не может, тк все слоты заняты.
Надо дождаться пока другие процессы изменят буфер. Простейшая стратегия-блокировка операций над буфером. Проверяем не изменилось ли состояние буфера, если не изменилось выйти из критической секции, ничего не меняя, а затем снова войти (циклическая проверка, активное ожидание). Нужно разработать такой механизм, при котором процессы, попавшие в ситуацию вообще не будут входить в критическую секцию. Воспользуемся семафорами Дейкстры в качестве счетчиков доступных ресурсов.
-считать свободные слоты, блокировать производителей, если их нет.
-считать слоты, запоминая данные
Идентификаторные empty & full этим величинам в начале создания буфера присвоили значения. Mutex блокирует операции с буфером над empty производится несколько раз up(empty) сколько есть свободжных слов. Mutex=m, помещение данных в буфер и извлечение из них put_data(), get_data()
Void procedur() {/*подготовка данных*/
Down (empty); lock(m);
Put_data();unlock(m);
Up(full);}
Void consumer() {down(full); lock(m); get_data(); unlock(m); up(empty);} /*обработка данных*/