- •Конспект по курсу лекций Операционные системы
- •Структура вычислительной системы
- •Аппаратный уровень вычислительной системы
- •Системы программирования
- •Модель организации прерываний с использованием регистра «слово состояние процессора»
- •3.6.1.1 Устройство последовательного доступа
- •Организация управления внешними устройствами
- •Иерархия памяти
- •Аппаратная поддержка ос и систем программирования
- •Некоторые проблемы
- •1. Вложенные обращения к подпрограммам
- •2. Накладные расходы при смене обрабатываемой программы:
- •4. Фрагментация памяти
- •4.2.1 Регистровые окна ( register window )
- •Системный стек
- •Виртуальная память.
- •Базирование адресов.
- •Страничная память.
- •Многомашинные, многопроцессорные ассоциации.
- •Терминальные комплексы
- •Компьютерные сети.
- •Семейство протоколов tcp/ip
- •Ip адрес представляется последовательностью четырех байтов. В адресе кодируется уникальный номер сети, а также номер компьютера (сетевого устройства в сети).
- •Транспортный уровень
- •Уровень прикладных программ
- •Сетевые, распределенные ос
- •Операционные системы Основные понятия
- •Структура ос.
- •Модельная ос
- •Жизненный цикл процесса
- •Типы операционных систем
- •Системы разделения времени
- •Управление внешними устройствами. Архитектура.
- •Программное управление внешними устройствами
- •Буферизация обмена
- •Планирование дисковых обменов
- •Raid системы.
- •Файлы устройств, драйверы
- •Управление оперативной памятью
- •Двухуровневая организация
- •Структурная организация файлов
- •Атрибуты файла
- •Типовые программные интерфейсы работы с файлами
- •Подходы в практической реализации файловой системы Структура «системного» диска
- •Модели реализации файлов Непрерывные файлы
- •Файлы, имеющие организацию связанного списка.
- •Индексные узлы (дескрипторы)
- •Модели организации каталогов
- •Варианты соответствия: имя файла – содержимое файла
- •Координация использования пространства внешней памяти
- •Учет свободных блоков файловой системы Связный список свободных блоков
- •Использование битового массива
- •Организация фс Unix
- •Логическая структура каталогов
- •Внутренняя организация фс Модель версии System V Структура фс
- •Работа с массивами номеров свободных блоков
- •Работа с массивом свободных ид
- •Индексные дескрипторы
- •Адресация блоков файла
- •Файл каталог
- •Установление связей
- •Недостатки фс модели версии System V
- •Модель версии ffs bsd
- •Стратегии размещения
- •Внутренняя организация блоков
- •Структура каталога ffs
- •Понятие «процесс».
- •Процессы в ос Unix Системно-ориентированное определение процесса
- •Базовые средства организации и управления процессами
- •Семейство системных вызовов exec()
- •Использование схемы fork-exec
- •Формирование процессов 0 и 1
- •. Планирование Основные задачи планирования
- •Планирование очереди процессов на начало обработки
- •Кванты постоянной длины.
- •Кванты переменной длины
- •Класс подходов, использующих линейно возрастающий приоритет.
- •Разновидности круговорота.
- •Смешанные алгоритмы планирования
- •Планирование в системах реального времени
- •Общие критерии для сравнения алгоритмов планирования
- •Планирование в ос unix
- •Планирование в Windows nt.
- •Планирование свопинга в ос Unix
- •Взаимодействие процессов: синхронизация, тупики Параллельные процессы
- •Проблемы организации взаимного исключения
- •Тупики (deadlocks)
- •Способы реализации взаимного исключения
- •Семафоры Дейкстры
- •Мониторы
- •Обмен сообщениями
- •Классические задачи синхронизации процессов
- •Задача «читателей и писателей»
- •Задача о «спящем парикмахере»
- •Реализация взаимодействия процессов
- •Сигналы
- •Системный вызов kill()
- •Системный вызов signal()
- •Пример 1.
- •Пример 2.
- •5 Пример. Программа “Будильник”.
- •Пример. Двухпроцессный вариант программы “Будильник”.
- •Пример. Использование канала.
- •Пример. Схема взаимодействия процессов с использованием канала.
- •Пример. Реализация конвейера.
- •Пример. Совместное использование сигналов и каналов – «пинг-понг».
- •Именованные каналы. Особенность именованных каналов в ос Unix.
- •Пример. «Клиент-сервер».
- •Межпроцессное взаимодействие, проводимое по модели «главный-подчинённый».
- •Системный вызов ptrace()
- •Общая схема трассировки процессов
- •Пример. Использование трассировки.
- •Система межпроцессного взаимодействия ipc.
- •Очередь сообщений
- •Системный вызов msgget()
- •Функция msgsnd()
- •Функция msgrcv()
- •Функция msgctl()
- •Пример. Использование очереди сообщений.
- •Пример. Очередь сообщений. Модель «клиент-сервер».
- •Разделяемая память.
- •Пример. Работа с общей памятью в рамках одного процесса.
- •Семафоры
- •Пример. Использование разделяемой памяти и семафоров.
- •1Й процесс:
- •2Й процесс:
- •Механизм сокетов
- •Типы сокетов.
- •Функция создания сокета
- •Запрос на соединение
- •Прослушивание сокета
- •Подтверждение соединения
- •Прием и передача данных
- •Закрытие сокета
- •Пример. Работа с локальными сокетами
- •Пример работы с сокетами в рамках сети.
4. Фрагментация памяти
Система работает в мультипрограммном режиме. Программы должны храниться в памяти. Программы находятся в разных частях памяти. Когда приходит новая программа, возникает вопрос, куда ее поместить. Если нет свободного куска памяти нужного размера, но есть много маленьких свободных фрагментиков, в суммарный объем которых возможно записать новую программу, а ни в один в отдельности нельзя (фрагментация памяти), то как это сделать?
Фрагментация памяти приводит к деградации системы.
Один из способов решения – это компрессия (но при этом возможны потери памяти). Существуют и другие решения.
4.2.1 Регистровые окна ( register window )
Один из способов решения проблемы вложенных процедур – регистровые окна.
В компьютере имеется k физических регистров. Система команд машины предоставляет l регистров общего назначения, l различных регистровых окна. Каждый из l регистров отображается на k физических регистров. В каждый момент времени программа работает с одним регистровым окном.
Каждое регистровое окно делится на части:
а) область регистров, использующихся для получения и передачи параметров из\в внешние подпрограммы.
Б) область локальных регистров подпрограмм
В)область временных регистров
Возможна кольцевая схема организации регистровых окон.
При вызове подпрограммы происходит переключение текущего регистрового окно на следующее регистровое окно, при этом возможно пересечение 3-тей части текущего окна с первой частью последующего окна. Этим достигается, во-первых, практически автоматическая передача и прием параметров, во-вторых, всегда создается новый комплект локальных регистров, которые присутствуют в программе.
Рассмотрим, что происходит при непосредственной работе:
Обращаемся к 1-й программе, ей выделяется 0-е регистровое окно. Дальше пошли в глубину на 2-й уровень, выделилось 1-е регистровое окно и т.д. до тех пор, пока не дошли до последнего. Что будет, когда этот круг обойдем? Начинается откачка этих окон в ОП. Эта схема гарантирует эффективную работу программ с вложенностью не более фиксированного, если вложенность больше, то возникают проблемы, но все равно начинается работа с КЭШем и мы все равно не опускаемся на уровень общения с ОП. Соответственно система может иметь специальный регистр-указатель текущего окна и указатель сохраненного окна.
При обращении в функцию происходят следующие действия:
Увеличиваем указатель текущего окна на единичку по модулю N.
Сравниваем, получилось ли: (указатель на новое содержимое текущего окна) = (указатель на сохраненное окно), если получилось, то мы дошли до ситуации, в которой пытаемся обратиться за окном, которое уже занято, т.е. пошли по второму кругу этого цикла. Происходит прерывание. Мы откачиваем в память текущее окно, после этого меняем указатель на сохраненное окно и используем освобожденное текущее окно, так новое. Если не равно, то идем на «Использование окна CWP, вызов функции».
При выходе из функции мы начинаем действовать в следующим образом:
Сначала уменьшаем модулю,
Сравнивает полученный результат с указанием сохраненных, если он равен, то это означает, что мы сохраняли это окно. Происходит прерывание, мы восстанавливаем это окно, мы соответственно уменьшаем этот указатель и продолжаем выполнение, если не равен, это означает, что это окно у нас не сохранялось и мы просто переходим на «Продолжение выполнения» (проталкиваем туда).
Рассмотрим пример:
Main –программа, которая изначально имеет некоторое состояние 0. Т.е. у нас 2 регистровых окна. 0-е регистровое окно принадлежит программе Main, 1-е – свободное. Если количество операций выхода из функции будет больше, чем количество обращений, то возникнут проблемы. Рассмотрим, что происходит при (ложном) обращении к таким функциям.
Мы обратились к функции А1, согласно алгоритму текущее окно будет первым, сохраненное остается нулевым.
Обратились к А2, увеличили текущий указатель по модулю 2, и получили, что он стал равным нулю. Равный нулю, равен указателю нулевого (сохраненного). Это означает, что мы обратились к окну, которое занято. Происходит то, что окно, которое было main, выталкивается, его место занимает функция А2, ну и указатель SWP становится равным единичке.
Обратились к функция А3. Увеличили текущий на 1. И получили опять совпадение – «занято». Вытолкнули А1 и изменили и т.д.
Есть такой процессор Itanium – это 64-х разрядный процессор. В нем используется модель, в которой считается, что регистровое окно, доступное программе в каждый момент, состоит из 128 регистров общего назначения. Соответственно 32 регистра – это статические регистры, которые остаются всегда неизменными, оставшиеся регистры (96)– динамические (виртуальные), т.е. которые отображаются на кольцевой список физических регистров. Размер этого кольцевого списка может варьироваться от … и до… . «Динамическое» окно – можно заказать окно произвольного размера (от регистра GR32 до регистра GR32+N (N=0,..,95).
Происходит оптимизация работы с физическими регистрами
