Многопроцессорные и многоядерные системы.
1. SMP системы (symmetric multiprocessing system).
В этой системе все процессоры имеют равноправный доступ к памяти. При программировании не возникает специфических особенностей. Практический предел 2-4. Больше – дорого.
2. NUMA (Non-Uniform Memory Access).
У каждого процессора своя память. Обращение к своей памяти быстрее, чем к чужой. Создавать проще, программировать сложнее.
3. Кластеры – COWS (Cluster of Workstations).
Процессоры строятся из самостоятельных компьютеров, которые соединены линиями связи. Существуют специальные алгоритмы, как распределить части ОС и задачи для выполнения на кластерах.
Многоядерные системы.
Поместить 2-3 процессора в один корпус.
Три схемы реализации:
1. Независимые процессорные ядра.
Каждое со своей кэш-памятью, каждый на кристалле, используют общую шину.
2. Ядра расположены на разных кристаллах, но в одном корпусе (многочиповый процессор).
3. Комбинированный вариант. На одном кристалле, но разные ресурсы.
Оперативная память.
В общем случае ОП состоит из модулей памяти, регистра адреса, регистра данных.
Для управления памятью применяются различные схемы. Возможно для обеспечения защиты данных для блоков ОП выделять ключи защиты, которые устанавливает ОС или пользователь.
Адресация ОП.
После компиляции используемая часть загружаемого модуля состоит из команд процессора, в которых указаны адреса операндов и действия над ними.
Для обеспечения перемещаемости программ в ОП существуют способы адресации операндов.
Машинный язык и его мнемонический вид – Ассемблер.
Адреса операндов могут быть указаны в явном и неявном виде. В явном загружаются в регистры процессора, доступные ОС. В неявном виде адресация происходит с использованием базовых регистров, индексных и смещения.
Формат команды память/память:
КОП B1 L1 D1 B2 L2 D2
КОП – код операции.
< B1> – номер регистра, содержащего базовый адрес первого операнда.
L1 – длина первого операнда в байтах.
D1 – смещение адреса операнда относительно базового.
Исполняемый адрес первого операнда:
A1=<B1>+D1
A2=<B2>+D2
Если выполнить команду:
mov A1(L1), A2(L2),
то перед ней: R1=<B>.
Базовый адрес – адрес начала модуля в ОП, который установлен загрузчиком модуля в ОП.
ОП.
<X> – индексный регистр (для реализации циклов внутри программы).
В результате текст программы не меняется, так как при загрузке в модуль меняется только содержимое регистра, что обеспечивает независимость адресов операндов в исполнительном модуле от места его нахождения в ОП.
Возможна реализация индексных регистров.
В этом случае для реализации начала модуля используется базовый регистр, для цикла – индексный регистр.
КОП | A1 | X1 | D1 | B2 | X2 | D2 |
<X> - можно загрузить индекс начала массива для обеспечения поиска.
В общем случае команды бывают следующих форматов:
- регистр-регистр RR;
- регистр-индексируемая память RX;
- регистр-адрес RS;
- память-опреанд SI.
Каждая команда в системе команд процессора имеет код завершения.
Результат выполнения команды недействительной вызывает прерывание, и ОС обрабатывает прерывание и выводит. Программа завершила выполнение некоторой команды.
Ввод-вывод.
Как правило, устройства ввода-вывода состоят их двух частей – контроллера и самого устройства. К контроллеру могут подключаться несколько устройств. Для этого каждому присваивается свой адрес. Контроллер выполняет команды ввода-вывода, которые могут быть реализованы несколькими способами – непосредственно командой ассемблера или прерыванием. Контроллер управляет внешними устройствами с помощью линий или сигналами интерфейса. По одной линии может быть сигнал канала движения ленты или окончание, на другой – включение головки на запись и запись.
Контроллеры устройств для различных устройств различны.
Драйвер – программная часть ОС, которая взаимодействует с контроллером.
Драйвера устройств работают в режиме ядра, поэтому для каждой ОС для одного и того же устройства требуются различные драйвера.
Передача параметров в контроллер при выполнении операции ввода-вывода осуществляется через регистр.
Для некоторых устройств регистры контроллера могут отображаться ячейками в ОП, поэтому их можно заполнять командой пересылки тоже. В другом контроллере регистры находятся внутри, поэтому перед операцией ввода-вывода нужно их заполнить параметрами.
В некоторых случаях регистры располагаются в устройствах над портами и каждый регистр имеет свой адрес порта. Запись/чтение в регистр порта по командам in/out.
Как правило, ввод-вывод может осуществляться тремя способами:
1. Пользовательская программа выдает системный запрос на ввод-вывод. Ядро ОС анализирует запрос вызова процедуры. Другое проверяется состояние устройства и ждёт его готовности. Если готово, помещает данные в регистр устройства. Недостаток – ожидание готовности устройства.
2. Драйвер запускает устройство и просит вызвать его прерывание по окончании ввода-вывода. В это время центральным процессором выставляется прерывание. ОС обрабатывает его и передает управление другой пользовательской программе. Как только операции ввода-вывода закончились, происходит прерывание ввода-вывода и управление передается прерванной программе для обработки окончания ввода-вывода.
3. Используется специальный контроллер прямого доступа к памяти DMA, с помощью которого осуществляется передача данных между ОП и устройствами без участия процессора (драйверы). И процессор, вызывая микросхему DMA, сообщает ей сколько байт нужно передать, адрес устройства и данных, направление передачи данных и процесс записи на внешние устройства без помощи процессора. По окончании ввода-вывода генерируется прерывание.
Каждый процессор ввода-вывода может подключать к себе 1000 устройств, при этом они работают параллельно.
Процессор ввода-вывода использует команды ввода-вывода на микропрограммном уровне.
Прерывания.
Прерывание – сигнал (возможно электрический), который может прерывать выполнение программы, предусмотренное исполнительным модулем, в случае, если флаги и маски команд установлены так, что прерывание разрешено.
Прерывание, как правило, передается обработчику соответствующего типа прерываний.
Обработчик собирает информацию о данном прерывании и определяет дальнейшие действия. Например, если прерывание произошло в случае деления на ноль, – принудительное завершение пользовательской программы с выработкой соответствующего диагностического сообщения.
В некоторых ОС возможно обрабатывать некоторые аварийные ситуации, вызванные прерыванием, в пользовательской программе. В многопользовательских ОС обработка прерываний планируется специальной компонентой при помощи формирования специальных очередей, состоящих из блоков прерываний, и может осуществляться на основе приоритетов.
В зависимости от типа прерывания и результатов обработки, возврат управления может осуществляться как в операционную систему, так и в пользовательскую программу.
Как правило, общепринятыми классами прерываний являются следующие:
1. Программные прерывание – вырабатывается при выполнении команд в случаях: неправильная команда, неправильный адрес, превышение разрядной сетки и т.п. для каждой команды ЦП в спецификации системы команд указывается условие или код завершения команды и выработки прерывания.
2. Прерывания службы времени – в каждой вычислительной системе количество служб времени различно (часы, интервальный таймер, компаратор). Что конкретно произошло по прерыванию от службы времени, определяет соответствующий обработчик.
3. Прерывания ввода-вывода – как правило, инициируется контроллером внешнего устройства или аварийной ситуацией на внешнем устройстве.
4. Прерывания от схем контроля – инициируется в случае аппаратных сбоев ЦП, оперативной памяти, КЭШа и т.д. Каждое устройство в вычислительной установке имеет собственные схемы контроля. Схемы контроля строятся различными способами. Самый простой – контроль по модулю два (значения в регистре складываются по модулю два и складываются с контрольным разрядом, в результате должен получиться 0; если не 0, в каком-то бите ошибка). Более сложные схемы включают использование кодов исправления и обнаружения ошибок (код Хемминга обнаруживает двойные ошибки и исправляет единичные; циклические коды). Как правило, прерывания от схем контроля имеют самый высокий приоритет. В ЭВМ от IBM такие прерывания вырабатываются после неоднократного повторения сбойной ситуации.
Передача данных между устройствами ЭВМ.
Передача между устройствами(адресация устройств) может быть реализована двумя различными способами: дешифровкой полей микрокоманд и открытием определенных вентилей для передачи информации тому или иному адресату; выставлением адреса устройства на некоторую адресную магистраль с последующей передачей данных адресату. В первом случае выше быстродействие, но выше и количество электрических соединений. Во втором случае быстродействие ниже, но количество связей меньше.
В ранних моделях компьютеров использовалась одна шина, к которой подключались различные устройства, в настоящее время используется несколько шин. Основные их них ISA(Industry Standard Architecture – для совместимости со старыми устройствами), PCI (Peripheral Connect [Component] Interconnect - для подключения высокоскоростных устройств), IDE(Integrated Drive Electronics), SCSI (Small Computer Systems Interface) и др.
Внешние устройства.
Классификация внешних устройств:
I. По способам обработки прерываний:
1. Синхронные.
2. Асинхронные.
II. По способу управления вводом-выводом:
3. Символьные.
4. Потоковые.
III. По быстродействию.
IV. По выполняемым функциям.
Все это учитывается при формировании системой управления вводом-выводом ОС.
Классификация ОС.
(условная)
I. По типу платформ, на которые устанавливается ОС:
1. Операционные системы мэйнфреймов – как правило, имеют очень мощную подсистему ввода-вывода, обслуживающую большие RAID-массивы, большое количество винчестеров. Мэйнфреймы и их ОС, как правило, предназначены для большого количества ввода-вывода (например, серверы мощных автоматизированных систем, в том числе реального времени).
2. Серверные ОС – как правило, предоставляют различные функциональные возможности для большого количества пользователей.
3. ОС реального времени – ОС, в которой задачи выполняются в соответствии с расписанием. Задача обязательно должна быть выполнена, так как в случае нарушения графика решения задач может сложиться ситуация, когда откат невозможен.
4. Встроенные ОС – как правило, управляют устройством, не являющимся компьютером.
5. ОС для смарт карт. Смарт карта – устройство со встроенным микропроцессором и ПЗУ, могут содержать интерпретатор Java-машины. Апплеты загружаются на карту и выполняются интерпретатором, возможно выполнение нескольких задач в многозадачном режиме.
II. По поддержке многозадачности (по числу одновременно выполняемых задач):
1. Однозадачные – все ресурсы предоставляются одному пользователю.
2. Многозадачные – ресурсы распределяются между пользователями.
II. По поддержке многопользовательского режима:
1. Однопользовательские.
2. Многопользовательские – особенностью многопользовательских систем является наличие средств защиты информации от несанкционированного доступа.
III. По типу многозадачности (способу распределения процессорного времени между существующими задачами):
1. Невытесняющая – механизм планирования процессов целиком сосредоточен в ОС. Активный процесс выполняется, пока не передаст управление ОС для выбора следующего.
2. Вытесняющая – решение о переключении процесса принимается ОС.
IV. По поддержке многопроцессорной обработки (мультипроцессирование).
V. многопроцессорные ОС классифицируются по способу организации вычислительного процесса:
1. Асимметричные ОС – выполняются на одном процессоре, распределяя прикладные задачи по другим процессорам.
2. Симметричные ОС – все процессоры разделяются между системными и прикладными задачами.
Основные понятия ОС.
Задание (job) – команда или сформированный в формализованном виде перечень команд или исполнительных модулей на выполнение – единица задачи для пользователя.
Задача (task) – единица работы для ОС, принятая ОС к исполнению задания. Возможно формирование в рамках одной задачи нескольких. Существует API(программный интерфейс), с помощью которого задача может порождать новые задачи(процессы, подзадачи). Это обычно выполняется для распараллеливания вычислений.
Процесс – выполняющийся в настоящий момент или выполняющийся до этого момента прерванный исполнительный модуль. Основная задача любой ОС – управление процессами. ОС должна распределять между процессами ресурсы, обеспечивать совместной возможности использования системной информации, обмена информации и синхронизации. Как правило, каждый процесс описывается своим состоянием. Информация о процессах хранится в таблице процессов ОС. В некоторых ОС различия между понятиями задача, процесс (нить) не определены.
Адресное пространство процесса – адреса памяти от некоторого максимального значения до минимального, в которые он может писать и из которых читать данные. Функции ОС по управлению адресным пространством заключаются в учете адресного пространства, распределении между процессами и освобождения. Во многих ОС выполняется еще функция защиты адресного пространства. Как правило, программно-аппаратно.
Взаимоблокировки – состояние, когда каждый из процессов, находящийся в системе, ожидает завершение некоторого события, выработка которого зависит от наступления события внутри ожидаемого процесса.
Синхронизация – механизм, который позволяет исключать блокировки.
Взаимодействие – способ передачи параметров и данных при выполнении процессов.
Виртуальная память – механизм ОС, который позволяет формировать адресное пространство процесса, как в оперативной памяти, так и на внешних устройствах. При этом, в случае необходимости, осуществляется подкачка адресного пространства с внешнего устройства в реальную память.
Виртуальная машина – виртуальная память, в которой выполняется процесс на реальном процессоре, при этом все ресурсы вычислительной установки доступны виртуальной машине в соответствии с привилегиями разграничений доступа.
Структура ОС.
Как правило, под структурой объекта понимается совокупность компонент, определенных по какому-либо признаку и взаимосвязи между ними.
Функциональная структура – выполняемые функции. Программная – компоненты, программные компоненты, реализующие функции, организация их функционирования и взаимодействия. Любая программная система должна иметь понятную и рациональную структуру: разделяться на модули, имеющие законченное функциональное назначение и оговоренные правила взаимодействия (соглашения).
Программная структура ОС.
Наиболее общим подходом к построению является разбиение всех модулей ОС на:
- ядро (выполняет основные системные функции по организации вычислительного процесса);
- вспомогательные модули.
Структура является многослойной. Каждый слой обслуживает вышестоящий с помощью функций, образующих межслойный интерфейс.
Ядро.
Модули ядра функционируют в привилегированном режиме, в котором разрешается выполнять команды процессора, недопустимые в пользовательском режиме. (Если такая команда появляется, то вырабатывается прерывание по привилегированной операции.)
Для IBM360 была команда modeset и далее можно было выполнять команды в режиме ядра.
Установка привилегированного режима поддержана (предустановленна) аппаратной частью компьютера.
В пользовательском режиме запрещено выполнять команды:
- управление системой (передача управления из пользовательского режима на ядро);
- управление вводом-выводом непосредственно внешним устройством;
- управление распределением памяти и её защитой.
Программная структура ядра.
Ядро состоит из двух частей:
- Резидентная. Постоянно находится в ОП, не подвергается страничному обмену.
- Нерезидентная. Модули могут находится в виртуальной памяти ядра и загружаться в реальную по мере необходимости или загружаться из системных областей файловой системы, в общем случае модуля ядра, является рентабельным (непрерывным). В некоторых ОС возможна установка маски прерывания, которая позволяет прервать исполнение модуля ядра.
Модули ядра могут быть повторно используемыми (в ходе выполнения модуля ядра в нём ничего не меняется). Адреса модулей ядра хранятся в системной таблице. Переход выполняется загрузкой адреса из системной таблицы. Передача параметров выполняется через один из регистров, в котором указан адрес списка параметров модуля (программному доступно в X86 – 0…14 регистров).
Разделение на резидентную и нерезидентную часть условно и в различных ОС осуществляется на основе различных подходов. В целях сокращения количества операций ввода-вывода наиболее часто используемые модули помещают в резидентную часть. В некоторых ОС существует инструмент оптимизации, который показывает, какая нагрузка на ввод-вывод и какие модули наиболее часто используются.
Если ОС позволяет осуществить сборку ядра перед инсталляцией, то на основе этих данных те или иные компоненты включаются в резидентную часть.
Ядро, как и ОС в целом, имеет многослойную программную структуру: модули по управлению средствами аппаратной поддержки устанавливаются в привилегированном режиме, управляет обработкой, обеспечивает защиту адресного пространства процессов друг от друга.
Машинозависимые модули отражают специфику аппаратной платформы. Этот слой экранирует основные компоненты ядра от специфики аппаратуры, что позволяет разрабатывать модули ядра как машинозависимые компоненты.
Базовые модули – слой выполняет наиболее примитивные операции ядра, является исполнительным механизмом модулей более верхних уровней (выполняет краткосрочное планирование организации вычислительного процесса).
Менеджеры ресурсов (диспетчеры процессов, ввода-вывода, ОП и т.д.) реализуют алгоритмы планирования, выполнения заданий и использования ресурсов системы (долгосрочное планирование).
Диспетчеризация – непосредственно выделяются ресурсы в виртуальную память.
Каждый диспетчер выполняет функции учёта, распределения и освобождения ресурсов, для выполнения тех или иных заданий обращаются к базовым модулям.
Интерфейсы системы вызовов.
Слой взаимодействует с приложениями, образуя API. Для выполнения пользовательских запросов происходит обращение к соответствующему диспетчеру.
В общем случае, можно выделить следующие функциональные компоненты ядра:
1. Загрузчик – IPL (Initial Program Loader).
2. Инициализация ядра – NIP (Nucleus Initialization Program).
3. Поддержка привилегированного режима.
4. Средства трансляции адресов.
5. Средства переключения процессов.
6. Система обработки прерываний.
7. Системный таймер.
8. Средства защиты областей памяти.
1. Загрузчик представляет собой программу, которая считывает в оперативную память так называемую программу инициализации ядра (NIP), как правило, программа IPL находится в начальных секторах первого по номеру внешнего устройства.
2. NIP, загрузившись в оперативную память и выполняясь, определяет состояние аппаратных средств, устанавливает место загрузки ядра в оперативную память, заполняет системные таблицы о состоянии устройств и так далее. По окончании своей работы NIP передает управление ядру. После загрузки операционной системы вычислительная система находится в состоянии ожидания ввода команды оператором или запроса на выполнение (прерывание) от какого-нибудь датчика.
3. Поддержка привилегированного режима осуществляется, как правило, путем установки определенного флажка в слове состояния программы или машины.
4. Средства трансляции адресов осуществляют поддержку преобразования виртуальных адресов в реальные. Таблицы, предназначенные для трансляции адресов, хранятся в ОП. В ОС имеются ссылки на эти таблицы и, как правило, процесс преобразования происходит на аппаратном уровне.
5. Средства переключения процессов предназначены для сохранения информации о прерванном процессе при переходе к новому и возврату в исходное состояние. Как правило, эта информация включает содержимое общих регистров ЦП, содержимое системных регистров и так далее. Для хранения этой информации имеются ссылки, которые используются аппаратурой ЦП.
6. Обработка прерываний – в системах от IBM адреса обработчиков прерываний находятся в фиксированных ячейках оперативной памяти, адреса которых знает ОС. При прерывании смена PSW (Processor Status Word) на обработчик прерывания осуществляется аппаратно. Аналогично и при прерываниях ввода-вывода и от схем контроля.
7. Системный таймер необходим ос для выдержки заданных интервалов времени. В системный таймер заносится информация, а его уменьшение осуществляется программно или аппаратно. При нулевом значении – прерывание.
8. Средства защиты областей оп осуществляются по-разному. Возможно разделение ОП на блоки, при этом каждому блоку соответствует свой ключ. Например, если в PSW процесса ключ защиты отличается от ключа блока памяти, к адресу которого он обращается – прерывание (нарушение защиты). Существуют и другие схему реализации.
Понятие мобильной ОС.
Одно и то же ядро не может быть без каких-либо изменений установлено на аппаратную платформу, отличающуюся типом процессора и аппаратуры.
Основными особенностями аппаратуры различных платформ являются:
1. Количество прерываний.
2. Формат таблиц ссылок (адресов) на обработку прерываний.
3. Состав регистров (системных и общего назначения).
4. Система команд процессора.
5. Организация ввода-вывода.
6. Количество процессоров и т.д.
Для уменьшения количества машинно-зависимых модулей, их переводят в машинно-независимые, снижая их уникальность (делая более универсальными). Например, для Windows NT ядро было разработано для 4 типов процессоров.
Если код ОС может быть переписан с одной платформы на другую, такая ОС называется мобильной (переносимой).
Основные характеристики мобильной ОС:
1. Написана на языке более высокого уровня, чем Assembler. На Assemblerе пишется часть, взаимодействующая с аппаратурой.
2. Объем кода, взаимодействующего с аппаратными средствами минимален.
3. Сокращается прямое манипулирование регистрами и другими возможностями процессора.
4. Для выполнения действий с аппаратурой используется программная эмуляция технических средств.
5. Аппаратно зависимый код изолирован в нескольких модулях, которые могут заменяться аналогичными модулями для других платформ.
Микроядерная архитектура.
Микроядерная архитектура является альтернативой классическому способу построения ОС (когда все основные функции ядра выполняются в привилегированном режиме). В этом случае, функции ядра разбиваются на функции микроядра (выполняются в привилегированном режиме) и функции ядра, выполняющегося в пользовательском режиме.
Каждое приложение пользовательского режима работает в собственном адресном пространстве и защищено от вмешательства другого приложения. Обращение к функциям ядра осуществляется в обоих случаях аналогично, но сами функции ядра выполняются на пользовательском уровне. Набор функций микроядра содержит функции, которые невозможно выполнить в пространстве пользователя. Общие методики разделения функций на микроядро и пользовательский режим не существует. Как правило, в серьезных ОС существуют средства, которые позволяют оценить эффективность вычислительного процесса. Статистика и ее анализ может показать, какие функции ядра включить в микроядро, а какие – в пользовательский режим. При увеличении функций пользовательского режима могут быть увеличены системные расходы на ввод-вывод.
Периферийные модули ядра называются серверами. Процесс обслуживания запросов строится на основе механизма вызова процедур. Клиент (пользовательская программа), посылает серверу сообщение, когда непосредственная передача сообщений невозможна, т.к. их адресные пространства изолированы друг от друга (пользовательский режим). Микроядро выполняется в привилегированном режиме и имеет доступ к любому адресу. Микроядро (посредник) посылает серверу адрес и параметры запроса. Сервер принимает запрос и передает его адрес через микроядро приложению.
Достоинства ос микроядерной архитектуры:
1. Переносимость: весь машинно-зависимый код сосредоточен в микроядре. Для переноса требуется переделать микроядро.
2. Расширяемость: добавление или удаление функций ОС может быть осуществлено добавлением или удалением серверов ядра.
3. Надежность: каждый сервер выполняется в своей области памяти и защищен от воздействия других серверов (если один из серверов отказал, перезагружать ОС не требуется, можно перезагрузить сервер).
4. Серверы не имеют доступа к аппаратуре, то есть не могут нарушить работоспособность системы в целом.
5. Микроядро – небольшой модуль (группа модулей), который можно постараться написать без ошибок.
Недостатки:
ОС на основе микроядра менее производительна: ввода-вывода больше.