- •Операционные системы: определение, классификация, задачи, основные функции.
- •2) Межпроцессорное взаимодействие
- •Многозадачность: определения; механизмы переключения задач.
- •Кооперативная многозадачность.
- •Вытесняющая многозадачность.
- •Алгоритмы переключения задач.
- •Очереди задач и система приоритетов.
- •Организация памяти: сегментная, страничная.
- •Память приложения: память команд, память данных, стек.
- •Загрузка приложения в память, статическая память.
- •Динамическая память, алгоритмы управления.
- •Виртуальная память, файл подкачки.
- •Многопоточные программы, стандарт posix.
- •Синхронизация потоков.
- •Семафоры, алгоритм Дейкстры.
- •Взаимодействие между потоками.
- •Файловые системы: определение, виды и функции.
- •Архитектура файловых систем на примере fat16.
- •Особенности файловых систем для различных носителей данных.
- •Журналирование и квоты в файловых системах.
- •Параллельные вычисления; закон Амдала.
- •Структуры параллельных вычислительных систем.
- •Семейство операционных систем unix.
- •Основные концепции unix.
Алгоритмы переключения задач.
Механизм переключения задач:
Переключение задач осуществляется межсегментными командами JMP, CALL, IRET.
JMP <селектор> <смещение>
CALL <селектор> <смещение>
1. Микропроцессор (МП) из регистра TR определяет адрес TSS Task State Segment — сегмент состояния задачи текущей задачи и переписывает в TSS содержимое регистров текущей задачи (контекст задачи).
2. Для команд JMP и CALL МП берет селектор из команды, а для команды IRET – селектор из поля возврата TSS. Селектор загружается в регистр TR => текущей становится новая задача.
3. По селектору МП находит в памяти TSS новой задачи. Из TSS МП загружает регистры новым содержимым. Это называется переключением контекста задачи.
4. Поле <смещение> не используется.
5. В новой задаче устанавливается бит B(Busy)=1. Если была команда JMP или IRET, то бит В предыдущей задачи сбрасывается. При CALL – не сбрасывается (т.к. задача не может вызвать саму себя). Рекурсия запрещена, т.к. каждая задача имеет только один TSS. При рекурсии мы потеряем старое содержимое TSS. Но внутри задачи рекурсия разрешена.
6. В регистре CR0 есть бит TS (Task Switched). При любом переключении задач бит TS устанавливается в 1. Если при этом встретится программа сопроцессора, то вызывается исключение №7 (FPU недоступен). Бит TS аппаратно не сбрасывается. Поэтому каждая задача должна сама сбрасывать бит TS.
7. При выполнении команды CALL устанавливается бит NT (Nesting Task) в поле регистра флагов TSS. Если NT=1, то команда IRET выполняет действия, описанные выше. Если NT=0, то IRET выполняется обычным образом.
Очереди задач и система приоритетов.
Важной концепцией, лежащей в основе многих вытесняющих алгоритмов планирования, является приоритетное обслуживание. Приоритетное обслуживание предполагает наличие у потоков некоторой изначально известной характеристики — приоритета, на основании которой определяется порядок их выполнения.
Некоторые процессы запускают программу, выполняющую команды, введенные пользователем. Другие процессы являются частью системы, справляясь с такими задачами, как выполнение запросов на обслуживание файлов или управление деталями работы дискового или ленточного привода. Когда происходят дисковые прерывания, система принимает решение остановить выполнение текущего процесса и запустить процесс работы с диском, заблокированный в ожидании этого прерывания. Таким образом, вместо того чтобы думать о прерываниях, мы можем думать о пользовательских процессах, процессах работы с диском, процессах работы с терминалом и т. д., которые блокируются, когда ожидают каких - то событий. Когда считана информация с диска или набран символ, процесс, ожидающий это событие, разблокируется и получает право на возобновление выполнения.
Организация памяти: сегментная, страничная.
Физическая память компьютера имеет иерархическую структуру. Программа представляет собой набор сегментов в логическом адресном пространстве. ОС осуществляет связывание логических и физических адресных пространств.
Существуют две другие схемы организации управления памятью:
Сегментная;
Сегментно-страничная.
Сегментно-страничная и сегментная организация памяти позволяет легко организовать совместное использование одних и тех же данных и программного кода разными задачами. Для этого различные логические блоки памяти разных процессов отображают в один и тот же блок физической памяти, где размещается разделяемый фрагмент кода или данных.
Сегментная организация памяти
Сегменты могут иметь переменный размер.
Виртуальный адрес является двумерным программиста и ОС.
Виртуальный адрес состоит из двух полей: № сегмента и смещения внутри сегмента.
Двухмерность адреса является следствием представления пользователя о процессе не в виде линейного массива байтов, а как набор сегментов переменного размера (данные, код, стек...).
Логическое адресное пространство – набор сегментов.
Каждый сегмент имеет имя, размер и другие параметры (уровень привилегий, разрешенные виды обращений, флаги присутствия).
Пользователь специфицирует каждый адрес двумя величинами: именем сегмента и смещением.
Каждый сегмент – линейная последовательность адресов, начинающаяся с 0.
Максимальный размер сегмента определяется разрядностью процессора (при 32-разрядной адресации это 232 байт или 4 Гбайт).
Размер сегмента может меняться динамически (например, сегмент стека).
Логический адрес – упорядоченная пара v=(s,d), номер сегмента и смещение внутри сегмента.
В системах, где сегменты поддерживаются аппаратно, параметры номер сегмента и смещение внутри сегмента обычно хранятся в таблице дескрипторов сегментов, а программа обращается к этим дескрипторам по номерам-селекторам.
Сегментно-страничная организация памяти
Хранить в памяти сегменты большого размера целиком так же неудобно, как и хранить процесс непрерывным блоком. Напрашивается идея разбиения сегментов на страницы. При сегментно-страничной организации памяти происходит двухуровневая трансляция виртуального адреса в физический.
Логический адрес состоит из трех полей: номера сегмента логической памяти, номера страницы внутри сегмента и смещения внутри страницы.
Используются две таблицы отображения – таблица сегментов, связывающая номер сегмента с таблицей страниц, и отдельная таблица страниц для каждого сегмента
Линейный адрес преобразован ОС в двухмерный для удобочитаемости.
Пользователь задает только один адрес, который разбивается на номер страницы и смещение прозрачным для программиста образом.