- •Ос в общей структуре компьютера.
- •История операционных систем.
- •Классификация современных ос. Задачи современных ос.
- •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.Подсистема ввода/вывода. Схема взаимодействия подсистем ос. Понятие драйвера. Типы драйверов.
51.Проблема тупиков. Граф ожидания
При совместной работе нескольких процессов с несколькими ресурсами возможна ситуация при которой 2 или более участников оказываются в состоянии блокировки, из которой каждый мог бы выйти, если бы освободился ресурс, но другие не могут, тк находятся в заблокированном состоянии. Предполагается, что есть 5 философов и тарелка спагетти, 1 философ должен есть 2мя вилками => если все они одновременно возьмут по вилке, то остальные будут ждать другого, возникнет тупик. Для возникновения тупика достаточно и 2 процесса и 2 ресурсаm1, m2. Если 1 процесс выполняет код lock(m1),Lock(m2), а второй те же вызовы только в обратном порядке. Оба процесса успеют сделать по одному вызову и войдут в состояние блокировки на 2м вызове.
Тупиковая ситуация без взаимоисключения Запуск команды ls для получения списка файлов в текущем каталоге.
Char buf [100]
Int rc; int[fd]; pipe(fd);
If (fork()==0) {dup2 (fd[1],1); Close (fd[1]);
Close (fd[0]); execlp(“ls”,”ls”,null);
Perror (“ls”); exit(1)}
Close (fd[1]);wait(null);
While (rc=read (fd{0},buf,sizeof(buf))>0) {…} Зависнуть программа может, если ls обрабатывает большой каталог. Запуск начинается в дочернем процессе программа ls, получаем дискриптор стандартного вывода, прежде чем завершиться ls будет писать в канал имена текущего каталога; родительский процесс выполняет вызов wait, в результате чего он блокируется до тех пор пока дочерний не завершится, только после этого родительский выполнит чтение из буфера канала. Можно переместить wait после while. Возникает тупик, когда родитель ждет, а дочерний заполняет буфер.
Реализация задачи 5 философов Создадим массив из 5 mutex, каждый m связан с определенной вилкой и назовем массив forks. Нумерация от 0 до 4. Есть 2 вспомогательных функций
Int left (int n)
Int right (int n) {return(n+1)%5}
Номер вилки лежащей слева от философа совпадает с номером самого философа. Тогда жизненный цикл философа
Void philosopher (int n){for{;;}{think(); lock(forks[n]); lock( forks[right(n)]); eat();
Unlock(fork[n]); unlock(forks[right(n)]; }}
При одновременном выполнении таких процедур взял-поел-положил для n=(0..4) возможна ситуация, когда все они успеют вып блокирование по первому lock, при этом все 5 вилок (m) окажутся блокированными, все процессы заблокируются на следующей строчке. Одно из решений это применение семафора (не позволять философам приступить к трапезе одновременно).
Заведем семафор sem.
void philosopher(int n){ for(i,i) {think(); down(sem); lock(forks[n]); lock(forks[right(n)]);
eaf(); unlock(forks[n]); unlock(forks[right(n)]); up(sem);}}
Семафор sem, начальное его значение 1, то одновременно употреблять спагетти сможет 1 философ. Если в начальное значение записать 2, ситуация тупика возможна. Максимальное возможное значение семафора 4, иначе теряется его смысл. При 4 3 философа взяли по 1й вилке, а один из них 2.
Понятие графа ожидания
Позволяет автоматически отслеживать состояние наступления тупика. 1 из подходов -анализ графа ожидания. Граф двудольный ориентированный. Вершинами графа будут процессы, а ресурсы 2я доля. Ситуация: процесс монопольно владеет ресурсом, изображ ориентир дугой от ресурса к процессу. Наоборот, заблокирован (ожидание) дуга от процесса к ресурсу.
Граф ожидания нет цикла
Простейший пример тупика
процессы
ресурсы