![](/user_photo/2706_HbeT2.jpg)
Материалы к аттестации по операционным системам
(дополнение к пособиям [1, 2], осень 2012)
Требования гос к обязательному минимуму содержания
ОПД Ф.09 Операционные системы: 140 час.
Назначение и функции операционных систем (ОС). Мультипрограммирование. Режим реального времени. Многопользовательский режим работы. Режим работы и ОС реального времени. Универсальные операционные системы и ОС специального назначения. Классификация операционных систем. Модульная структура построения ОС и их переносимость. Управление процессором. Понятие процесса и ядра. Сегментация виртуального адресного пространства процесса. Структура контекста процесса. Идентификатор и дескриптор процесса. Иерархия процессов. Диспетчеризация и синхронизация процессов. Понятие приоритета и очереди процессов. Средства обработки сигналов. Понятие событийного программирования. Средства коммуникации процессов. Способы реализации мультипрограммирования. Понятие прерывания. Многопроцессорный режим работы. Управление памятью. Совместное использование памяти. Защита памяти. Механизм реализации виртуальной памяти. Стратегия подкачки страниц. Принципы построения и защита от сбоев и несанкционированного доступа.
Краткий конспект содержания дисциплины
Назначение и функции операционных систем (ОС) [1 c. 21 – 26; 2 разд. 3.1]
Операционная система – комплекс программ, управляющий устройствами вычислительной системы и обеспечивающий выполнение всех остальных программ и их взаимодействие с аппаратурой, другими программами и пользователями.
Более точно, ОС – это комплекс программных средств (программ и микропрограмм), управляющий аппаратными, информационными и программными ресурсами для выполнения программных процессов и обеспечивающий взаимодействие процессов с аппаратурой, другими процессами и пользователями.
Для разных ОС характерно большое разнообразие понятий и терминологии, усугубляемое при переводе на русский язык.
Основные функции ОС.
Организация пользовательского интерфейса: прием, обработка и выполнение заданий, команд и указаний конечных пользователей (операторов).
Управление процессами (выполнением программ): создание, выполнение, завершение и уничтожение процессов, управление их взаимодействием, в том числе совместным использованием ресурсов операционной системы.
Поддержка программных библиотек – хранение, поиск и загрузка в оперативную память подлежащих исполнению программ.
Организация программного интерфейса: прием и исполнение системных вызовов – обращений программ к услугам операционной системы.
Управление памятью: организация работы всех видов реальной и виртуальной памяти; учет свободных и занятых участков памяти и размещение в ней программ и данных.
Управление устройствами: процессорами, периферийными устройствами, накопителями; организация и размещение данных в накопителях, выполнение операций ввода-вывода.
Управление данными (файловая система): организация и доступ к данным в файлах; создание, уничтожение, хранение, копирование, перемещение и другие операции с файлами.
Обеспечение работы СУБД – систем управления базами данных.
Обеспечение работы инструментальных систем для разработки ПО.
Обеспечение надежности и безопасности: защита устройств компьютера, операционной системы и программ от вредного влияния других программ; обеспечение сохранности и секретности данных и регулирование прав доступа к ним; сохранение работоспособности вычислительной системы при сбоях и отказах оборудования, ошибочных действиях людей, в случае аварий; защита окружающей среды.
Мультипрограммирование = многозадачность [1 c. 22 – 26; 2 разд. 3.2]
Появление в аппаратуре ЭВМ системы прерываний обеспечило возможность одновременной работы устройств компьютера, и в начале 60-х годов появились мультипрограммные (многозадачные) ОС. В режиме мультипрограммирования в оперативной памяти находится несколько программ (процессов, задач). Когда программа выполняет операцию ввода-вывода, центральный процессор запускает соответствующее устройство, а сам переключается на выполнение другой программы. Пока процессор выполняет команды одной программы, другие программы могут работать с устройствами ввода-вывода. По завершении ввода-вывода устройство прерывает работу процессора, и ОС выбирает, какой процесс продолжать. При этом минимизируется простой оборудования.
Многопользовательский режим работы = режим разделения времени
В 60-е годы появились операционные системы с разделением времени (СРВ), обеспечивающие диалог многих пользователей с одной ЭВМ через терминалы (дисплеи). В режиме разделения времени ОС выделяет квантами (порциями) процессорное время по очереди разным терминалам, подобно гроссмейстеру в сеансе одновременной игры со многими шахматистам. Главный показатель – время ответа (отклика). Пользователи вновь ведут диалог с компьютером, которого не было при пакетной обработке. Для уменьшения простоев при падении интенсивности диалога ОС может совмещать разделение времени с фоновой пакетной обработкой.
Режим работы и ОС реального времени
ОС реального времени обеспечивают взаимодействие с внешними по отношению к ЭВМ процессами в темпе протекания этих процессов. Они используются для управления технологическими процессами производства, военными системами, транспортом и т. п. и должны быстро реагировать на происходящие в них события.
Универсальные операционные системы и ОС специального назначения
Универсальная ОС (ОС общего назначения) предназначена для широкого круга пользователей компьютера определенного типа.
ОС специального назначения используется для узкого круга задач или для специализированного (например, бортового) компьютера и другого оборудования.
Некоторые ОС, например, знаменитая OS/360 (IBM, 1965) для семейства программно совместимых ЭВМ IBM/360, русифицированная для компьютеров ЕС ЭВМ под названием ОС ЕС, могли работать в нескольких режимах: мультипрограммная пакетная обработка, разделение времени и управление в реальном времени, но это делает систему слишком громоздкой, неповоротливой и сложной.
Классификация операционных систем[1 c. 26 – 28; 2 разд. 3.2]
Первыми ОС (1950-е годы) по назначению и режиму работы были системы пакетной обработки. На вход системы поступал пакет последовательно запускаемых заданий на выполнение программ пользователей. ОС работала в однопрограммном режиме, когда выполняемая программа получала в свое распоряжение все ресурсы ЭВМ. ОС облегчала функции оператора ЭВМ по запуску и завершению программ и оформлению их результатов, уменьшала простои оборудования, при переходе от одного задания к следующему.
Появление в аппаратуре ЭВМ системы прерываний обеспечило одновременную работу устройств компьютера, и в начале 1960-х годов появились мультипрограммные (многозадачные) ОС.
Операционные системы с разделением времени (СРВ) обеспечивают параллельную диалоговую работу многих пользователей за терминалами типа дисплея, подключенными к одной ЭВМ.
С появлением вычислительных сетей в 1970-х годах возникли сетевые операционные системы, обеспечивающие совместное использование сетевых ресурсов, управление распределенной обработкой данных на нескольких узлах сети и удаленный доступ к вычислительным мощностям через сеть.
В конце 1970-х годов появились персональные ЭВМ, благодаря которым необычайно расширилась область применения компьютеров, а в круг их пользователей влились миллионы людей, не являющихся профессионалами в информатике.
Операционные системы персональных компьютеров рассчитаны, как правило, на одного пользователя. Сначала они были простыми и однозадачными, но с возрастанием возможностей аппаратуры быстро усложнились. Главное назначение таких систем – обеспечить широкий набор функций с удобным и дружественным интерфейсом, в том числе (а зачастую и прежде всего) для неподготовленного пользователя.
Модульная структура построения ОС и их переносимость[1 c. 46 – 50; 2 разд. 3.7 –3.8]
Основной принцип организации ОС – иерархический подход: разбиение системы на уровни. Каждый уровень использует функции интерфейса, предоставляемого более низким уровнем, как если бы они воплощались в реальной машине, и аналогичным образом реализует интерфейс своей абстрактной машины, с которым имеют дело верхние уровни.
В ОС до 10 – 15 уровней подобных абстрактных машин. Увеличение числа уровней упрощает части системы, но замедляет ее работу (как и в человеческом обществе). Такая потеря эффективности характерна для строгой иерархии, когда каждый уровень обращается только к непосредственно предшествующему уровню.
Нижние уровни ОС образуют ядро – небольшую интенсивно работающую часть ОС, которая обычно резидентна – постоянно размещена в оперативной памяти. Ядро имеет дело непосредственно с аппаратурой.
Обычно к функциям ядра относятся (в порядке повышения уровня): обработка прерываний, управление процессами (их создание, уничтожение, запуск, приостановка, активизация, синхронизация и взаимодействие), управление вводом-выводом, управление памятью (ее распределение и перераспределение), управление устройствами, поддержка файловой системы, вызов и возврат подпрограмм, функции учета работы. Вход в ядро – обычно по прерыванию с помощью системного вызова.
Выше ядра – программы интерфейса системных вызовов, интерпретаторы командного языка и другие операционные оболочки (например, Norton Commander), библиотеки ОС, а затем – системные процессы и процессы пользователей.
Системный процесс – это часть ОС, выполняемая в виде процесса подобно процессам пользователей. Реализация верхних уровней ОС в виде процессов упрощает разработку и расширение возможностей ОС, перенос ее компонентов в другие операционные системы.
Иерархический подход расширяется вниз в концепции виртуальных машин – на одной реальной машине для пользователей создается иллюзия, что они работают на отдельных виртуальных машинах со своими ОС одного или разных типов.
Виртуальные машины – перенесение мультипрограммирования на самый нижний уровень ОС, где располагается монитор (управляющая программа) виртуальных машин. Программы нижнего уровня каждой ОС имеют дело не с реальной машиной, а с прозрачным для ОС и программ пользователей монитором виртуальной машины, который предоставляет им тот же интерфейс, что и реальная машина.
Микроядерная реализация ОС – технология разработки семейства ОС или создания множества операционных сред в одной ОС на основе общего микроядра.
Это – распространение модульности на ядро ОС: его разбивают на модули и выносят в более высокие уровни системы часть его функций: верхний уровень управления процессами, управление файлами и устройствами. Уменьшенное ядро превращается в микроядро размером в несколько Кбайт, зачастую целиком размещаемое в кэш-памяти процессора, что ускоряет работу ОС. В нем остаются лишь общие функции семейства ОС для одного компьютера или реализации различных операционных сред в одной ОС.
В современных ОС часто сочетают «три кита»: микроядро, объектно-ориентирован-ный подход к разработке верхних уровней ОС – единообразное представление в виде объектов таких вещей, как процессы, потоки, файлы, различные ресурсы, средства коммуникации и синхронизации процессов и т. п., а также реализуемые на основе расширений микроядра и объектного подхода множественные среды – операционные среды «чужих» ОС для выполнения написанных для них программ.
Примеры микроядерных ОС: микроядро Mach (Стив Джобс, университет Карнеги-Меллон); Windows NT, в среде которой можно выполнять DOS-, Windows-, OS/2- и POSIX-программы; семейство микроядерных ОС реального времени QNX; микроядерные реализации UNIX и др.
В архитектуре клиент/сервер процесс-сервер – процесс, отвечающий на запросы клиента посредством сообщений. Процесс-клиент – процесс, запрашивающий сервисы у процесса-сервера, отправляя ему сообщения.
Управление процессором [1 c. 30 – 31; 2 разд. 3.4.1]
Планирование процессов включает определение, когда и какой из задач предоставить для выполнения время центрального процессора.
Процесс (задача) создается перед выполнением программы и уничтожается, когда выполнение завершается. В период существования процесс может находиться в трех основных состояниях.
Процесс активен (выполняется), когда его программа исполняется процессором. По истечении выделенного кванта времени возникает прерывание, и активный процесс переводится в состояние готов – ожидание следующего кванта. Таким способом предотвращается захват ресурсов машины одним процессом. Процесс блокирован, если он остановлен и ожидает наступления некоторого события, например, завершения операции ввода-вывода, после которого его можно продолжить.
Участие некоторых процессов в конкуренции за время процессора можно временно приостановить, например, на периоды резкого повышения нагрузки системы для улучшения ее производительности "в часы пик" или для исправления ошибок при появлении признаков сбоев в работе ОС или процесса, а затем возобновить. Тогда появляются состояния: приостановлен готов, приостановлен блокирован и др.
Планирование (scheduling) процессора – распределение времени процессора.
Планирование долгосрочное (на верхнем уровне) – решение о допуске нового процесса (или задания) в систему для выполнения.
Планирование среднесрочное (на промежуточном уровне) – часть свопинга: решение о (полном или частичном) помещении процесса в основную память для начала конкуренции за процессорное время.
Планирование краткосрочное (на нижнем уровне) – определение процесса (или потока), который получит процессорное время.
Краткосрочное планирование должно удовлетворить критериям пользователя: уменьшение времени отклика между запросом и началом ответа в диалоге, времени оборота между поступлением и завершением процесса, предельного срока завершения процесса и системным критериям: производительность и пропускная способность процессора; учет приоритетов процессов; беспристрастность – равноправие процессов и предотвращение голодания (starvation) – бесконечного откладывания выполнения процесса из-за предпочтения другим процессам при отсутствии дополнительных указаний пользователя; баланс занятости системных ресурсов (который важен также для долгосрочного и среднесрочного планирования).
Алгоритмы краткосрочного планирования – выбора среди готовых к выполнению процессов: первым поступил – первым обслужен (FCFS – first-come-first-served), круговое планирование – циклическое обслуживание с квантованием времени, выбор самого короткого процесса; выбор процесса с меньшим временем оставшейся работы, снижение приоритета процессам, затратившим много времени и др.
Многопроцессорные системы разделяются на слабосвязанные системы с собственной оперативной памятью и каналами ввода-вывода у каждого процессора; системы с функционально специализированными процессорами, например, процессорами ввода-вывода, и сильносвязанные системы с процессорами, использующими общую оперативную память и единую ОС.
В сильносвязанных многопроцессорных системах отличия в производительности разных стратегий планирования не так велики, как в однопроцессорных системах. Для ОС реального времени ключевой фактор – предельные сроки выполнения, что требует специализированных алгоритмов планирования.
Понятие процесса и ядра [1 c. 22 – 24, 46; 2 разд. 3.1, 3.7]
Ядро - сравнительно небольшая интенсивно работающая часть ОС, которая обычно резидентна – постоянно размещена в оперативной памяти и отвечает на вызовы процессов и прерывания от устройств.
Процесс (= задача – task) – программа на стадии выполнения вместе с выделенными для этого выполнения ресурсами. Процесс обычно создается операционной системой по заданию пользователя для выполнения прикладной программы параллельно с другими процессами и является самостоятельным потребителем ресурсов ОС. Процесс присутствует в ОС в виде блока управления процессом (дескриптора процесса) – структуры данных с информацией о процессе: целочисленный идентификатор процесса, его состояние, приоритет, выполняемая программа, выделенные процессу ресурсы: область оперативной памяти, устройства, файлы, программы и т. п.
Параллельно исполняемые процессы конкурируют между собой за ресурсы: прежде всего, область оперативной памяти для загрузки программы, процессорное время, а также устройства, файлы, библиотечные программы ОС и др. В каждый момент центральный процессор исполняет команды не более одного (активного) процесса, остальные процессы находятся в очереди в состоянии ожидания.
К ресурсам ОС относятся:
- аппаратура: процессоры, устройства памяти и ввода-вывода и др.;
- данные: файлы, базы данных, системные переменные и т. п.;
- программы: библиотеки программ, программы управления файлами и вводом - выводом, сервисные программы (утилиты) и т. д.
Многопоточность - параллелизм внутри процесса, т. е. возможность прикладной программы (процесса) выполнять параллельно несколько операций – потоков управления. Поток (thread - нить, тред) – это самостоятельная часть программы (процесса), выполняемая параллельно с другими частями, упрощенный процесс. Поток не является для ОС самостоятельным потребителем ресурсов, а использует ресурсы своего процесса (кроме времени центрального процессора).
С точки зрения ОС, задача (task) – это получатель процессорного времени. В отсутствие потоков задачами являются процессы, а в многопоточной ОС (например, Windows, UNIX) задачами служат потоки.
Структура контекста процесса
Контекст (выполнения) процесса – то же, что и состояние процесса – вся информация, необходимая ОС для перевода в состояние выполнения и управления выполнением процесса: содержимое регистров процессора (включая счетчик команд), состояние процесса и т. п.
Идентификатор и дескриптор процесса
Для каждого процесса создается дескриптор процесса (блок управления процессом – PCB) – структура данных с необходимой для ОС информацией о процессе: целочисленный идентификатор процесса – PID, состояние (процесс выполняется, готов или блокирован); приоритет процесса; полномочия – перечень доступных ему ресурсов; указатели на создавший его родительский процесс и созданные им («дочерние») процессы-потомки: указатели данных и команд процесса; указатели выделенных процессу ресурсов (файлов, программ и др.), доступных процессу объектов ядра и т.п.; а также контекст выполнения – содержимое регистров процессора с указателями на адресное пространство процесса (включая счетчик команд), необходимое для перевода процесса в состояние выполнения.
Иерархия процессов
При порождении процессов создается иерархическая (древовидная) структура процессов, в которой родительский процесс может порождать несколько («дочерних») процессов-потомков, но у каждого процесса-потомка только один процесс-родитель.
Диспетчеризация и синхронизация процессов [1 c. 30 – 39, 104–110; 2 разд. 3.4]
Диспетчеризация (= планирование) – распределение времени процессора.
Для параллельно выполняемых взаимодействующих или решающих единую задачу программ (процессов или потоков) необходима синхронизация, т. е. согласование их действий по времени.
В частности, синхронизация нужна для проблемы взаимного исключения, когда каждому из процессов, обращающихся к разделяемому ими (т. е. совместно используемому) ресурсу, требуется монопольный доступ – исключение одновременного с ним доступа всех остальных процессов к этому ресурсу.
Когда процесс обращается к разделяемому ресурсу (например, данным), говорят, что этот процесс находится в критическом участке (критической области). Когда процессы используют общий ресурс, и один из процессов находится в своем критическом участке, необходимо исключить вхождение остальных процессов в критические участки.
Для синхронизации n процессов Э. Дейкстра предложил семафор – снабженную очередью целочисленную защищенную переменную, значение которой можно читать и изменять только специальными операциями: P, V и инициализация:
Инициализация_семафора (Семафор, Начальное_значение);
Двоичный семафор принимает значения 0 и 1, считающий семафор – целочисленные значения ≥ 0 для управления идентичными экземплярами одного ресурса. Счетчик семафора равен числу свободных экземпляров ресурса. В очереди у семафора процессы ожидают освобождения ресурса – выполнения V-операций.
Критические участки взаимного исключения по семафору S в каждом из синхронизируемых процессов обрамляются операциями P(S) и V(S) (можно трактовать операцию P как сигнал "получить ресурс", а V – сигнал "возвратить ресурс”):
P(S);
Критический участок;
V(S);
Если несколько процессов выполнят операцию P(S) – получение ресурса, это разрешат первому из них, а остальные будут ждать освобождения ресурса V(S) в очереди на этом семафоре.
Операции P(S) и V(S) должны выполняться в режиме атомарного доступа (без прерываний) и поэтому реализуются в ядре ОС.
Например, в ОС Windows XP двоичный семафор реализован в виде пользовательского объекта типа Critical Section для синхронизации потоков одного процесса. Объекты ядра типа mutex (двоичный семафор) и semaphore (со счетчиком) позволяют синхронизировать потоки одного или разных процессов, но требуют затрат времени для переключения в режим ядра и обратно.
Кроме того, в Windows XP для синхронизации потоков одного процесса в пользовательском режиме используют Interlocked-функции, изменяющие значения переменных в режиме атомарного доступа. Для синхронизации потоков одного или разных процессов можно также использовать любые объекты ядра, которые могут находиться в свободном или занятом состоянии (signaled / nonsignaled state) – типа event (событие), process, job (задание), file и другие.
Понятие приоритета и очереди процессов
В каждый момент центральный процессор исполняет команды не более одного (активного) процесса, остальные процессы находятся в очереди в состоянии ожидания. Для учета важности и срочности процессам присваивают приоритеты. Для каждого значения приоритета может создаваться своя очередь процессов.
Средства обработки сигналов
Сигнал – это программное прерывание, уведомляющее процесс о наступлении определенного события. Процесс может игнорировать либо маскировать сигнал – временно игнорировать его, а также перехватывать (catch) сигнал и определять для ОС свою процедуру его обработки или действия по умолчанию: обычно – игнорирование сигнала, либо аварийное завершение процесса с возможным дампом (выводом) памяти, либо приостановка процесса, либо его возобновление.
Сигнал – одно из средств взаимодействия (коммуникации, синхронизации) процессов. Сигнал не позволяет передавать какие-либо данные. Примеры сигналов – операции P(S) и V(S) над семафорами.
Понятие событийного программирования [1 c. 69 – 88; 2 разд. 4.1–4.4]
ОС Windows и ее приложения представляют собой программы, управляемые событиями (или сообщениями - message). Последовательность их действий определяется очередью сообщений о событиях. В Windows есть системная очередь сообщений и очередь сообщений для каждого приложения.
Сообщения драйверов устройств о событиях низкого уровня (нажатии/отпускании клавиши на клавиатуре или кнопки мыши, перемещении мыши) поступают в системную очередь. На их основе Windows передает каждому приложению сообщения обо всех касающихся его событиях пользовательского интерфейса: нажатии в его окне экранной кнопки или выборе строки меню с определенным идентификатором (номером), срабатывании таймера, необходимости перерисовать окно при передвижении окон и т. п. Приложения могут посылать сообщения друг другу (и себе). В ответ на сообщение приложение выполняет соответствующие действия.
Windows сама привязывает мышь и клавиатуру к органам пользовательского интерфейса приложения: иконкам (пиктограммам), окнам, меню, экранным кнопкам, линейкам прокрутки, курсорам, панелям диалога. Приложение избавлено от необходимости отслеживать текущие координаты объектов интерфейса и мыши, коды нажимаемых клавиш или участвовать в выполнении стандартных команд системного меню своего окна.
Упрощенно говоря, например, информация "Кнопка мыши отпущена в точке экрана с координатами (50, 100)" подается приложению в виде "Выбран пункт 5 меню 1 окна 2".
После инициализации Windows-приложение переходит в цикл постоянного опроса собственной очереди сообщений. При появлении сообщения о каком-либо событии, приложение обрабатывает его и вновь опрашивает очередь сообщений. Некоторые сообщения передаются в нужную функцию окна приложения, минуя очередь.
Управление событиями позволяет приложению работать не в заранее заданной последовательности, а гибко реагировать на ситуацию и действия пользователя. Этот механизм особенно удобен для обеспечения входными данными программ с интенсивным диалогом.
Пример: для оформления авиабилета информация о пассажире, рейсе и заплаченной сумме легко вводится в любом порядке, в том числе с исправлением или неоднократным использованием ранее заданных данных (например, при покупке нескольких билетов на один рейс).
Система многозадачного планирования Windows также встроена в ее механизм доставки сообщений.
Пользователь может запустить сразу несколько программ (Windows-приложений). Каждая программа должна создать собственное главное окно приложения со стандартным для Windows-приложений графическим интерфейсом и организовать обработку сообщений Windows.
Средства коммуникации процессов [1 c. 31–39, 93 – 98, 104–110; 2 3.4.2–3.4.3]
Сообщения, сигналы, семафоры, в Windows XP – объекты ядра event (событие) и др.
Способы реализации мультипрограммирования
Понятие прерывания [1 c. 28 – 29; 2 разд. 3.3]
Прерывание (interrupt – прерывать) – аппаратный сигнал, заставляющий ЭВМ изменить обычный порядок исполнения команд в ответ на некоторое событие, например, завершение операции ввода-вывода, нажатие или отпускание клавиши клавиатуры или кнопки мыши, истечение заданного интервала времени, попытка деления на ноль или выполнение программой особой команды для обращения на себя внимания операционной системы: INT в компьютере IBM PC, SVC – вызов супервизора (supervisor call) в других компьютерах. У каждого типа ЭВМ – свой набор возможных причин прерываний.
Появление в компьютерах системы прерываний обеспечило:
1) возможность одновременной работы устройств компьютера (уменьшить простои оборудования), и в начале 1960-х годов появились мультипрограммные (многозадачные) ОС;
2) возможность компьютера реагировать на внешние события, подобно живым существам, т. е. реализовать более рациональное поведение.
При возникновении прерывания аппаратура запоминает состояние процессора, и управление передается программе обработки прерывания, которая обычно является частью ОС.
Обработка прерывания обычно происходит в режиме супервизора, допускающем выполнение привилегированных команд, и включает запоминание состояния прерванной программы (содержимое регистров процессора) и действия, предусмотренные для события, вызвавшего этот тип прерывания. По завершении обработки ОС может переключить процессор в режим пользователя, восстановить состояние и продолжить исполнение прерванной программы либо передать управление другой программе.
Для каждого типа прерывания – своя программа обработки в операционной системе. Иногда прикладным программам разрешают по-своему обрабатывать некоторые типы прерываний – исключительных ситуаций (исключений), но при бесконтрольном использовании это может нарушить работу других программ или ОС.
При обработке прерывания могут возникать другие – вложенные прерывания. Программа обработки прерывания может временно запретить – маскировать другие прерывания, если они нарушают ее работу. Эти прерывания откладываются либо теряются. Длительно это делать нежелательно, особенно в системе реального времени, которая может пропустить важные события.
Система прерываний позволяет управлять одновременной работой устройств компьютера и его реакцией на разные события. Прерывание служит также средством взаимодействия программ – передачи сигналов между ними, в частности, удобным способом реализации системного вызова – обращения программы к услугам операционной системы.
Если на IBM PC программе требуется, например, ввести символ с клавиатуры, то можно выполнить команды (на языке ассемблера):
MOV AH,1 ; Засылка в регистр AH номера требуемой функции
INT 21h ; Инициация прерывания с номером 21h
Программа обработки прерывания с номером 21h выполняет много функций. Номер функции указывается ей в регистре AH. Функция номер 1 в приведенном примере вводит символ с клавиатуры с эхо-отображением его на экране и пересылкой кода символа в регистр AX. Функция номер 8 вводит символ без его появления на экране.
Многопроцессорный режим работы
В многопроцессорных системах ОС обеспечивает распределение работы между несколькими процессорами единого вычислительного комплекса, работающими независимо или взаимодействующими через общую память.
Управление памятью [1 c. 39 – 41; 2 разд. 3.5]
Совместное использование памяти
Защита памяти
Механизм реализации виртуальной памяти
Сегментация виртуального адресного пространства процесса
Стратегия подкачки страниц
Операционная система управляет реальной (физической) и виртуальной памятью. Реальная память имеет иерархическую структуру, распадаясь на несколько уровней.
Центральный процессор работает с программами и данными в оперативной памяти. Для ускорения работы оперативной памяти используется более быстрая и дорогая кэш-память меньшей емкости. Не используемые в настоящий момент программы и данные хранятся во внешней памяти, как правило, на магнитных дисках. Внешняя память больше и дешевле, но медленнее оперативной памяти. Для ускорения работы с диском можно переписать с него часто используемые данные в некоторую область оперативной памяти, играющую роль кэш-памяти для этого диска.
Разработано много методов распределения реальной памяти между процессами и при выполнении отдельного процесса.
Статическое распределение памяти происходит до выполнения программы во время ее трансляции, компоновки или загрузки. Как и любое связывание, более гибким является динамическое распределение памяти, позволяющее экономно использовать ее за счет затрат времени при исполнении программы.
На каждом стыке уровней памяти разного быстродействия, например, диск - оперативная память, операционная система решает следующие три вида задач управления реальной памятью.
1. Выборка – определение момента выбора очередного блока программы или данных для переписи с диска в оперативную память. Стратегии выборки по запросу предусматривают загрузку в память блоков только, когда они запрашиваются. В стратегиях выборки с упреждением система пытается предугадать запросы программы пользователя и загружать блоки в оперативную память до того, как они реально потребуются, чтобы обращающаяся к ним программа выполнялась без задержки.
2. Размещение – поиск свободного места основной памяти для помещения программы или данных. Разбросанные случайным образом свободные участки сцепляются в список свободной памяти: в начале каждого участка указывается его длина и адрес следующего участка.
Используются три метода поиска участка нужного размера: выбор первого подходящего, наиболее подходящего (самого тесного) и наименее подходящего (самого просторного) из участков с размером не менее нужного в списке свободной памяти.
Выбор первого подходящего участка требует меньше времени. Выбор наиболее подходящего участка большинству людей интуитивно кажется наиболее выгодным. Выбор наименее подходящего участка имеет то преимущество, что не оставляет в памяти маленьких "дыр".
Когда требуется память больше любого свободного участка, но меньше суммы всех свободных участков, занятые участки стараются переместить так, чтобы они оказались соседними и образовали один большой свободный участок памяти.
3. Замещение информации в памяти – это определение, какой блок из оперативной памяти необходимо выгрузить во внешнюю память, чтобы освободить занимаемую им, область для записи нового блока, когда в оперативной памяти не хватает свободного места.
Подобные задачи возникают и при реализации виртуальной памяти. Её суть – в том, что виртуальные адреса, на которые ссылается выполняющийся процесс, отделяются от реальных адресов оперативной памяти. Диапазон виртуальных адресов, к которым может обращаться выполняющийся процесс, называется виртуальным адресным пространством этого процесса. Диапазон реальных адресов конкретного компьютера называется его реальным адресным пространством. Множество виртуальных адресов, как правило, значительно превышает диапазон адресов оперативной памяти.
Использование виртуальной памяти освобождает программиста от необходимости учитывать размещение программы в реальной памяти, позволяет игнорировать особенности аппаратуры и делает программу независимой от емкости и распределения реальной памяти конкретной ЭВМ, то есть более мобильной.
Перевод виртуальных адресов в реальные – динамическое преобразование адресов – выполняет программно-аппаратно операционная система прозрачно (незаметно) для пользователя. Адреса, смежные в виртуальном адресном пространстве, не обязательно будут смежными в реальном адресном пространстве.
Только небольшая часть команд и данных каждого процесса, как правило, размещается в оперативной памяти одновременно. Остальная часть хранится на устройствах внешней памяти с быстрым доступом.
Системы виртуальной памяти требуют наличия таблиц отображения виртуальных адресов на реальные адреса. Главная проблема систем виртуальной памяти - минимизация количества информации отображения, которую необходимо держать в оперативной памяти, гарантируя в то же самое время удовлетворительные скоростные характеристики системы.
Достижению этой цели способствует поблочное отображение. Блоки фиксированного размера называются страницами; блоки переменного размера называются сегментами. В некоторых системах оба вида блоков комбинируются.
Принципы построения и защита от сбоев и несанкционированного доступа
ОС обеспечивает надежность и безопасность: защиту устройств компьютера, операционной системы и программ от вредного влияния других программ; сохранность и секретность данных, регулирование прав доступа к ним; сохранение работоспособности вычислительной системы при сбоях и отказах оборудования, ошибочных действиях людей, в случае аварий; защиту окружающей среды.
Злонамеренное ПО (Malicious software) включает вирусы, троянских коней, червей, программы для исчерпания ресурсов.
Вирус – секретная (недокументированная и скрывающая свое присутствие) подпрограмма, внедренная в обычную (полезную) программу, запуск которой приводит к выполнению вируса, обладающего способностью внедрения в другие программы – заражения их.
Троянский конь (Trojan horse) – секретная (недокументированная и скрывающая свое присутствие) подпрограмма, внедренная в обычную (полезную) программу, запуск которой приводит к выполнению троянского коня.
Червь (Worm) – программа, которая способна перемещаться с компьютера на компьютер по сетевым соединениям (и может содержать вирус).