МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ СТАРООСКОЛЬСКИЙ ТЕХНОЛОГИЧЕСКИЙ ИНСТИТУТ ИМ. А.А. УГАРОВА (филиал) федерального государственного автономного образовательного учреждения высшего образования «Национальный исследовательский технологический университет «МИСиС» ОСКОЛЬСКИЙ ПОЛИТЕХНИЧЕСКИЙ КОЛЛЕДЖ О.И.Спицына ОПЕРАЦИОННЫЕ СИСТЕМЫ Учебное пособие для студентов всех форм обучения специальностей 09.02.04 Информационные системы (по отраслям) 13.02.11 Техническая эксплуатация и обслуживание электрического и электромеханического оборудования Одобрено научно-методическим советом Оскольского политехнического колледжа в качестве учебного пособия Старый Оскол 2016 г. УДК ББК Рецензенты: Преподаватель ОПК СТИ НИТУ «МИСиС» М.В.Горюнова Преподаватель ОГАУ СПО СТСТ и ЖКХ М.В. Малинина Спицына О.И. Операционные системы: учебное пособие. – Старый Оскол: СТИ НИТУ «МИСиС», 2016. – 96 с. Учебное пособие составлено в соответствии с ФГОС3+ и уровню подготовки выпускников по специальности 09.02.04 – «Информационные системы» по дисциплине «Операционные системы» и специальности 13.02.11- «Техническая эксплуатация и обслуживание электрического и электромеханического оборудования» МДК.05.01 Раздел 3 «Операционные системы». В учебном пособии рассматриваются общие принципы организации, состав, структура операционных систем, а также ряд конкретных систем. Способствует организации как аудиторной, так и самостоятельной работы студентов. Учебное издание предназначено для студентов системы СПО. ©Спицына О. И. 2016 ©СТИ НИТУ «МИСиС» 2 Содержание Введение .......................................................................................................................................... 4 Раздел 1. Основы теории операционных систем ............................................................................ 5 Тема 1.1. Общие сведения об операционных системах .............................................................. 5 Тема 1.2. Интерфейс пользователя ............................................................................................... 9 Тема 1.3. Операционное окружение ........................................................................................... 11 Раздел 2. Машинно-зависимые свойства операционных систем ................................................ 20 Тема 2.1. Архитектурные особенности модели микропроцессорной системы IBM PC........ 20 Тема 2.2. Обработка прерываний ................................................................................................ 23 Тема 2.3. Планирование процессов ............................................................................................. 25 Тема 2.4. Обслуживание ввода-вывода ...................................................................................... 31 Тема 2.5. Управление реальной памятью ................................................................................... 38 Тема 2.6. Управление виртуальной памятью ............................................................................ 42 Раздел 3. Работа в различных операционных системах и средах ............................................... 49 Тема 3.1. Операционная система MSDOS .................................................................................. 49 Тема 3.2. Операционная система Windows (материал для дополнительно чтения) .............. 56 Тема 3.4. Операционная система Linux ...................................................................................... 64 Раздел 4. Машинно-независимые свойства операционных систем ............................................ 68 Тема 4.1. Работа с файлами.......................................................................................................... 68 Тема 4.2. Планирование заданий................................................................................................. 78 Тема 4.3. Распределение ресурсов .............................................................................................. 82 Тема 4.4. Защищенность и отказоустойчивость операционных систем ................................. 87 Список тем рефератов ..................................................................................................................... 94 Список использованных источников ............................................................................................. 95 3 Введение Операционная система состоит из обычных программ или микропрограмм, которые обеспечивают возможность эффективного использования аппаратуры. Операционная система - это по преимуществу администратор ресурсов; она управляет процессорами, памятью, устройствами ввода-вывода и данными. В своем развитии операционные системы прошли через ряд поколений. Вычислительные машины нулевого поколения в 40-х годах не имели операционных систем. В 50-х годах в машинах первого поколения появились возможности пакетной обработки. В начале 60-х годов в системах второго поколения были впервые реализованы такие режимы вычислений, как мультипрограммирование, мультипроцессорный режим, разделение времени и режим реального времени, а также концепция независимости программ от устройств ввода-вывода. Системы третьего поколения (середина 60-х - середина 70-х годов) были по преимуществу универсальными, они предусматривали работу во многих режимах. Они стали как бы программной прослойкой между аппаратными средствами и пользователем. В настоящее время доминирующее положение занимают системы четвертого поколения, в том числе средства для вычислительных сетей, для персональных компьютеров, операционные системы виртуальных машин, системы баз данных и системы распределенной обработки данных. В первом приближении ОС можно определить как комплекс программ, обеспечивающих интерфейс между аппаратурой компьютера, прикладными программами и пользователем компьютера. Соответственно этому определению, все функции, выполняемые ОС, подчинены решению двух основных задач: -организации эффективной работы аппаратуры компьютера; -обеспечению удобного использования ресурсов компьютера как прикладными программами, так и пользователем, работающим с компьютером. Основной целью курса является изучение устройства и функционирования современных ОС. При этом будут рассматриваться два круга вопросов: -основные принципы построения ОС, наиболее распространенные алгоритмы выполнения различных функций ОС, типовые структуры данных, используемые для обеспечения работы ОС; -практическое воплощение этих принципов, алгоритмов, структур в наиболее распространенных современных ОС. В задачи курса входит обучение практическим приемам работы с конкретными ОС. 4 Раздел 1. Основы теории операционных систем Тема 1.1. Общие сведения об операционных системах ОС компьютера представляют собой комплекс взаимосвязанных программ, который действует как интерфейс между приложениями и пользователями с одной стороны, и аппаратурой компьютера с другой стороны. В соответствии с этим ОС выполняют две группы функций. 1. расширение возможностей машины; 2. управление ее ресурсами. ОС как расширенная (виртуальная) машина Архитектура (система команд, организация памяти, ввод- вывод данных и структура шин) большинства компьютеров на уровне машинного языка примитивна и неудобна для работы с программами, особенно в процессе ввода- вывода данных. Рассмотрим пример, как происходит ввод- вывод данных с гибкого диска через совместимые микросхемы контроллера NEC PD765, используемых в большинстве компьютеров с процессором Intel. Контроллер PD765 имеет 16 команд и каждая задается передачей от 1 до 9 байт в регистр устройства. Это команды для чтения, перемещения головок диска и форматирования дорожек, а также инициализации, распознавания, установки и калибровки контроллера и приводов. Основными командами являются read и write. Каждая из них требует 16 параметров упакованных в 9 байт. Эти параметры определяют такие элементы, как адрес блока на диске, который нужно прочитать, количество секторов на дорожке, физический режим записи, расстановку промежутков между секторами. Они же сообщают, что делать с меткой адреса данных, которые были удалены. Когда выполнение операции завершается чип контроллера возвращает упакованные в 7 байт 23 параметра, отражающие наличие и тип ошибок. К тому же программист при работе с гибким диском должен постоянно знать, включен двигатель или нет. Если двигатель выключен, его следует включить с длительным ожиданием запуска прежде, чем данные будут прочитаны и записаны. Двигатель не может оставаться включенным слишком долго, т.к. гибкий диск изнашивается. Программа, скрывающая все это и предоставляющая простой список поименованных файлов, которые можно читать и записывать, является операционной системой. С точки зрения пользователя ОС выполняет функцию расширенной машины (виртуальной), в которой проще программировать и работать, чем с аппаратным обеспечением, составляющим реальный компьютер. Итог: ОС предоставляет ряд возможностей, которые могут использовать программы с помощью специальных команд, называемых системными вызовами. ОС как менеджер ресурсов К числу основных ресурсов современных вычислительных систем могут быть отнесены такие ресурсы как процессоры, основная память, таймеры, наборы данных, диски, накопители на магнитных лентах, принтеры, сетевые устройства и др. Ресурсы распределяются между процессами. Процесс – это динамический объект, который возникает в ОС после того, как пользователь или сама ОС решает «запустить программу на выполнение», т.е. создать новую единицу вычислительной работы. Управление ресурсами включает решение следующих общих, не зависящих от типа ресурса задач: 5 планирование ресурса, т.е. определение, какому процессу, когда и в каком количестве (если ресурс может выделяться частями) следует выделить данный ресурс; 2. удовлетворение запросов на ресурс; 3. отслеживание состояния и учет использования ресурса, т.е. поддерживание оперативной информации о том, занят или свободен ресурс и какая доля ресурса уже распределена; 4. разрешение конфликтов между процессами. Управление ресурсами включает их мультиплексирование (распределение) двумя способами: во времени и в пространстве. Когда ресурс распределяется во времени, различные пользователи и программы используют его по очереди. Определение того, как долго ресурс будет использоваться во времени, кто будет следующим и на какое время ему предоставляется ресурс – это задача ОС. Например: три программы оказались работающими, и все они одновременно попытались напечатать свои выходные данные. ОС буферизирует все данные на диске во временном файле во время работы программы. Затем по окончании работы этой программы, система отправляет данные на принтер, в то время как другая программа может формировать свои данные, не обращая внимания, что они фактически не посылаются на принтер. При пространственном мультиплексировании каждый клиент вместо поочередной работы получает часть ресурса. Обычно оперативная память разделяется между работающими программами, которые могут находиться одновременно и постоянно в ОП. Другой ресурс, распределяемый в пространстве – жесткий диск. Во многих системах один и тот же диск может содержать файлы различных пользователей. Для решения общих задач управления разные ОС используют различные алгоритмы, особенность которых, в конечном счете, и определяют облик ОС в целом, включая характеристики производительности, область применения и даже пользовательский интерфейс. Например: применяемый алгоритм управления процессором в значительной степени определяет, может ли ОС использоваться как система разделения времени, система пакетной обработки или система реального времени. 1. Типы ОС ОС для мэйнфреймов Эти компьютеры размером с комнату все еще можно встретить в центрах данных больших корпораций. Мэйнфреймы отличаются от ПК по своим возможностям ввода/вывода. Довольно часто встречаются мэйнфреймы с 1000 дисков и терабайтами данных. ОС для мэйнфреймов в основном ориентированы на обработку множества одновременных заданий, большинству из которых требуется огромное количество операций ввода/вывода. Обычно они предлагают 3 вида обслуживания: пакетную обработку, обработку транзакций (групповые операции), разделение времени. Пакетная обработка представляет собой систему, выполняющую стандартные операции без присутствия пользователей, работающих в интерактивном режиме. Например: обработка исков страховых компаний или составление отчетов о продажах для цепи магазинов. Системы транзакций управляют очень большим количеством маленьких запросов. Например: контролирует процесс работы в банке или бронирование авиабилетов. Каждый отдельный запрос невелик, но система должна отвечать на тысячи запросов в секунду. 6 Системы, работающие в режиме разделения времени, позволяют множеству удаленных пользователей одновременно выполнять свои задания на одной машине. Хорошим примером является работа с большой базой данных. Все эти функции тесно связаны между собой, и зачастую ОС мэйнфрейма выполняет их все. Пример: OS|390. Серверные ОС Работают на серверах, которые представляют собой или очень большие ПК, или рабочие станции, или даже мэйнфреймы. Они одновременно обслуживают множество пользователей и позволяют им делить между собой программные и аппаратные ресурсы. Серверы предоставляют возможности работы с печатающими устройствами, файлами и Интернетом. Интернет - провайдеры обычно запускают в работу несколько серверов для того, чтобы поддерживать одновременный доступ к сети множества клиентов. На серверах хранятся страницы web-сайтов и обрабатываются входящие запросы. UNIX, Windows 2000, Windows 2003 server являются типичными серверными ОС. В этих целях стала использоваться и ОС Linux. Многопроцессорные ОС Все более часто применяемый способ увеличения мощности компьютеров заключается в соединении нескольких центральных процессоров в одной системе. В зависимости от вида соединения процессоров и разделения работы такие системы называются параллельными компьютерами, мультикомпьютерами или многопроцессорными системами. Для них требуются специальные ОС, но зачастую такие операционные системы представляют собой серверные ОС со специальными возможностями. ОС для ПК Работа этих ОС заключается в представлении удобного интерфейса для одного пользователя. Такие системы широко используются для работы с текстами, электронными таблицами и доступа к Интернету. Наиболее яркие примеры Windows 98, 2000, XP, ОС для компьютера Macintosh и Linux. ОС реального времени Главным параметром таких систем является время. Например: в системах управления производством компьютеры, работающие в режиме реального времени, собирают данные о промышленном процессе и используют их для управления машинами на фабрике. Такие процессы должны удовлетворять жестким временным требованиям (пример, конвейер машин). Если некоторое действие должно произойти в конкретный момент времени, или внутри заданного диапазона времени,- то это жесткая система реального времени. Существует гибкая система реального времени, в которой допускаются случающиеся время от времени пропуски сроков выполнения операций. В эту категорию попадают цифровые, аудио и мультимедийные системы. Системы VxWorks и QNX- ОС реального времени. Встроенные ОС Карманный компьютер или PDA (Personal Digital Assistant- цифровой персональный помощник) это маленький компьютер, выполняющий небольшой набор функций (телефонной записной книжки и блокнота). Встроенные системы, управляющие действием устройств, работают на машинах, обычно не считающихся компьютерами. Например, в телевизорах, микроволновых печах и мобильных телефонах. Они обладают теми же самыми характеристиками, что и системы реального времени, но при этом имеют особый размер, память и ограничение мощности, что выделяет их в отдельный класс. Например, PalmOS, Windows CE (Consumer Electronics- битовая техника). 7 ОС системы смарт - карт Самые маленькие ОС работают на смарт - картах, представляющих собой устройство с кредитную карту, содержащее центральный процессор. На такие ОС накладываются крайне жесткие ограничения по мощности процессора и памяти. Некоторые из них могут управлять только одной операцией, например, электронным платежом, но другие ОС на тех же смарт картах выполняют сложные функции. Требования к ОС 1. Главным требованием, предъявляемым к ОС, является выполнение ею основных функций эффективного управления ресурсами и обеспечение удобного интерфейса для пользователя и прикладных программ. Современная ОС, как правило, должна поддерживать мультипрограммную обработку, виртуальную память, свопинг; многооконный графический интерфейс пользователя, а также выполнять многие другие необходимые функции и услуги. Кроме этих требований функциональной полноты к ОС предъявляются не менее важные эксплуатационные требования: 2) Расширяемость. В то время как аппаратная часть компьютера устаревает за несколько лет, полезная жизнь ОС может измеряться десятилетиями. Поэтому ОС всегда изменяются со временем эволюционно, и эти изменения 6олее значимы, чем изменения аппаратных средств. Изменения ОС обычно заключаются в приобретении ею новых свойств, например, поддержке новых типов внешних устройств или новых сетевых технологий. Если код ОС написан таким образом, что дополнения и изменения могут вноситься без нарушения целостности системы, то такую ОС называют расширяемой. Расширяемость достигается за счет модульной структуры ОС, при которой программы строятся из набора отдельных модулей, взаимодействующих только через функциональный интерфейс. 3) Переносимость. В идеале код ОС должен легко переноситься с процессора одного типа на процессор другого типа и с аппаратной платформы (которые различаются не только типом процессоpa, но и способом организации всей аппаратуры компьютера) одного типа на аппаратную платформу другого типа. Переносимые ОС имеют несколько вариантов реализации для разных платформ, такое свойство ОС называют также многоплатформенностью. 4) Совместимость. Существует несколько «долгоживущих» популярных ОС, для которых наработана широкая номенклатура приложений. Поэтому для пользователя, переходящего с одной ОС на другую, очень привлекательна возможность запуска в новой операционной системе привычного приложения. 5) Надежность и отказоустойчивость. Система должна быть защищена как от внутренних, так и от внешних ошибок, сбоев и отказов. Ее действия должны быть всегда предсказуемыми, а приложения не должны иметь возможности наносить вред ОС. Надежность и отказоустойчивость ОС прежде всего определяются архитектурными решениями, положенными в основу ее реализации (отлаженностью кода). Кроме того, важно, включает ли ОС программную поддержку аппаратных средств обеспечения отказоустойчивости, таких, например, как дисковые массивы или источники бесперебойного питания. 6) Безопасность. Современная ОС должна защищать ресурсы вычислительной системы от несанкционированного доступа. Для этого в состав ОС включают различные средства аутентификации, авторизации и аудита. 7) Производительность. ОС должна обладать настолько хорошим быстродействием и временем реакции, насколько это позволяет аппаратная платформа. На производительность ОС влияют: архитектура ОС, качество программирования кода и многообразие поддерживаемых функций. Контрольные вопросы 1. Что такое ресурсы и какова их классификация в теории ОС? Может ли принтер считаться разделяемым ресурсом? 8 2. 3. 4. 5. 6. Приведите примеры ресурсов, разделяемых одновременно. Дайте определение операционной системы. Перечислите основные функции операционной системы. Перечислите типы операционных систем. Каковы основные требования, предъявляемые к ОС? Тема 1.2. Интерфейс пользователя Всякая операционная система имеет командный интерфейс (иногда в скрытой форме). Операционная система поддерживает два интерфейса, уровень которых заметно выше аппаратного (технического): пользовательский интерфейс (UI — User Interface) (командный язык для управления функционирования компьютера и набор сервисных услуг, которые освобождают пользователя от выполнения рутинных операций); программный интерфейс (API — Applied Program Interface) (набор услуг, который освобождает пользователя от программирования рутинных операций). Взаимодействие между пользователем и ЭВМ можно изобразить следующим образом (рис. 1). Системные и прикладные программы Операционная система Пользовательский интерфейс Драйверы Пользователь Оборудование Монитор Мышь+клавиатура На самом деле пользователь работает только с оборудованием. Но при этом (с помощью дисплея, мыши и клавиатуры), создается иллюзия, что он работает напрямую с программой. Рис. 1. Интерфейсы операционной системы В первой из ОС (OS/360) взаимодействие с пользователями было жестко поделено между следующими компонентами: Язык управления процессом –язык оператора ЭВМ. Это язык диалогового режима – команда запуска – остановки задач, привязки носителей информации к устройствам, получения информации о заданиях, ожидающих выполнения, вывода, наличия свободной памяти и свободных устройств и др. Язык управления заданиями (JCL – Job Control Language), на котором прочие пользователи (программисты, разработчики и просто конечные пользователи) описывали состав и структуру процесса обработки данных – последовательность запуска программ, входные и выходные файлы, условия, при которых те или иные программы должны быть выполнены или пропущены и др. Это язык пакетной обработки, не допускающий вмешательства пользователя в собственно процесс вычисления, компиляции и пр. 9 По мере развития ЭВМ, ОС, появления и широкого распространения диалоговых устройств (видеотерминалов) в последующих ОС произошла интеграция данных компонентов в единый командный язык. Для разграничения между командами оператора, администратора, и, конечно, пользователя, используются методы разделения доступа и назначения привилегии, в то время как формат команд является достаточно единообразным. Далее, после распространения ПЭВМ данное разграничение сошло на нет (в ОС MSDOS), поскольку пользователь ПК в едином лице соединяет функции оператора, администратора, и, конечно, пользователя. Затем с появлением локальных сетей и более мощных ПК, работающих в многопользовательских режимах, в сетевых ОС и ОС ПЭВМ, вновь организуется разграничение доступа и т.д. Таким образом, данный процесс является циклическим (точнее, спиралевидным). В большинстве ОС в настоящее время сложился более или менее унифицированный формат командной строки. Командная строка включает в себя: Тип операции (имя команды или программы); Рабочий вход (входные файлы или устройства); Рабочий выход (выходные файлы или устройства) Управляющий вход (управляющие параметры или ключи команды); Управляющий выход (обычно – протокол, содержащий диагностику ошибок, код завершения или другую информацию). Командная строка — приглашение оболочки, обозначающее готовность системы принимать команду пользователя, — в наиболее явной форме демонстрирует идею диалога. На каждую введенную команду пользователь получает ответ от системы: либо очередное приглашение, обозначающее, что команда выполнена и можно вводить следующую, либо сообщение об ошибке, представляющее собой высказывание системы о произошедших в ней событиях, адресованное пользователю. При работе в операционной среде с графическим интерфейсом происходящий диалог пользователя с системой не столь очевиден, хотя с точки зрения системы клик мышью в определенной области на экране аналогичен команде, введенной с клавиатуры, а ответ системы пользователю может быть представлен в виде диалогового окна. Текстовый или графический полноэкранный интерфейс. Он имеет, как правило, в верхней части экрана систему меню с подсказками. Меню часто бывает выпадающим (ниспадающим – pull-down). Для управления компьютером курсор экрана или курсор мыши после поиска в древе каталогов устанавливается на командные файлы программ (*.exe, *.com, *.bat) и для запуска программы нажимается клавиша <Enter> или правая кнопка мыши. Различные файлы могут выделяться разным цветом или иметь разный рисунок. Каталоги (папки) отличаются от файлов размером или рисунком. Данный интерфейс является основным для всех видов программных оболочек. Пример: Norton Commander, и «нортонообразные оболочки» (DOS Navigator, Windows Commander, Disk Commander). Подобные интерфейсы имеют инструменты Windows 3.1 (Диспетчер файлов) и Windows95/XP (Мой компьютер и Проводник). Такой интерфейс весьма удобен, особенно при работе с файлами, поскольку обеспечивает высокую скорость выполнения операций, позволяет создавать пользовательское меню, запускать приложения по расширениям файлов, что превышает скорость работы с программами. Графический многооконный пиктографический интерфейс. Представляет собой рабочий стол (DeskTop), на котором располагаются пиктограммы (значки или иконки программ). Все операции производятся, как правило, мышью. Для управления компьютером курсор мыши подводят к пиктограмме и запуск программы осуществляют щелчком левой кнопки мыши по пиктограмме. Это наиболее удобный и перспективный интерфейс, особенно при работе с программами. Примеры: интерфейс с компьютеров Apple Macintosh, Windows 3.1, Windows 95/98/2000/XP, OS/2, GNOME, KDE. 10 Графический интерфейс пользователя (GUI – Graphics User Interface). Появление ОС и оболочек с развитыми диалоговыми графическими средствами (OS Macintosh, Windows 3.1, а особенно Windows 95/98/ME, а также NT/2000) и средств программирования, позволяющих создавать графические интерфейсы (FoxPro for Windows и пр.), а особенно – объектно–ориентированных систем программирования – привело к внедрению и широкому распространению элементов экранного интерфейса. Графические интерфейсы иногда обозначают следующей аббревиатурой – WIMPD (Windows, Menu, Pointing Device) – окна, меню, указывающие устройство, как основные действующие элементы в подобном интерфейсе. Оболочка Microsoft Windows не была изначально операционной системой, так как она существует «поверх» операционной системы типа MS-DOS. Она возникла в виде стандартного графического интерфейса и прижилась исключительно потому, что пользователь хотел видеть программу, с которой ему часто приходится работать, красивой, практичной, удобной и легкой в освоении и использовании. Контрольные вопросы 1. Какие два интерфейса выше аппаратного поддерживает ОС? 2. Между какими компонентами взаимодействие с пользователями было жестко поделено между в первой из ОС (OS/360) ? 3. Что включает унифицированный формат командной строки? 4. Охарактеризовать текстовый или графический полноэкранный интерфейс 5. Охарактеризовать графический многооконный пиктографический интерфейс. 6. Охарактеризовать графический интерфейс пользователя (GUI – Graphics User Interface). Тема 1.3. Операционное окружение В состав ОС входит множество модулей (т.е. частей со строго определенными функциями и правилами их взаимодействия). Это исполняемые и объектные модули стандартных форматов, библиотеки разных типов, конфигурационные файлы, файлы документации, программные модули специального формата (загрузчик ОС, драйверы ввода/вывода)… Все эти модули ОС можно разделить на два больших класса: 1. Ядро – модули, выполняющие основные функции ОС. 2. Модули, выполняющие вспомогательные функции ОС. Охарактеризуем каждый из этих классов. Ядро и модули, выполняющие вспомогательные функции Наиболее общим подходом структуризации ОС является разделение всех модулей на две группы: 1. Ядро – это модули, выполняющие основные базовые функции, такие как управление процессами, памятью, устройствами ввода- вывода и т.п. Ядро составляет сердцевину ОС, без него ОС является полностью неработоспособной и не сможет выполнять ни одну из функций. В состав ядра входят: a. функции решающие внутрисистемные задачи организации вычислительного процесса. Эти функции не доступны для приложений. b. другой класс функций ядра служит для поддержки приложений, создавая для них прикладную программную среду. Приложения могут обращаться к ядру с запросами - системными вызовами - для выполнения тех или иных действий (например, для открытия и чтения файла, вывода графической информации на дисплей, получения системного времени и т.д.). Функции ядра, которые могут вызываться 11 приложениями, образуют интерфейс прикладного программирования – API (Application Program Interface) Функции, выполняемые модулями ядра, являются наиболее часто используемыми функциями ОС, поэтому скорость их выполнения определяет производительность всей системы в целом. Для обеспечения высокой скорости работы ОС все модули ядра или большая часть их находится в оперативной памяти, т.е. являются резидентными. Крах ядра равносилен краху всей системы, поэтому ядро оформляется в виде программного модуля специального формата, отличающегося от формата пользовательских приложений. 2. Модули, выполняющие вспомогательные функции. Они менее обязательны. К таким вспомогательным модулям могут быть отнесены программы архивирования данных на дисках, дефрагментации диска и т.п. вспомогательные модули ОС могут оформляться либо в виде приложений, либо в виде библиотек процедур. Поскольку некоторые компоненты ОС оформлены как обычные приложения, т.е. в виде исполняемых модулей стандартного формата для данной ОС, то часто бывает сложно провести четкую грань между ОС и приложениями. Решение о том, является ли какая – либо программа частью ОС принимает производитель ОС. Вспомогательные модули ОС подразделяются на следующие группы: a. Утилиты- программы, решающие отдельные задачи управления и сопровождения компьютерной системы, такие, например, как программы сжатия дисков, архивирования данных. b. Системные обрабатывающие программы - текстовые и графические редакторы, компиляторы, компоновщики, отладчики. c. Программы представления пользователю дополнительных услуг - специальный вариант пользовательского интерфейса, калькулятор и т.д. d. Библиотеки процедур различного назначения, упрощающие разработку приложений, например, библиотека математических функций, функции ввода- вывода и т.п. Как и обычные приложения, для выполнения своих задач утилиты, обрабатывающие программы и библиотеки ОС, обращаются к функциям ядра посредством системных вызовов. Разделение ОС на ядро и модули- приложения обеспечивает легкую расширяемость ОС. Чтобы добавить новую высокоуровневую функцию достаточно разработать новое приложение, и при этом не требуется модифицировать ответственные функции ядра системы. Модули ОС, оформленные в виде утилит, системных обрабатывающих программ и библиотек, обычно загружают в ОЗУ только на время выполнения функций, т.е. являются транзитными. Такая организация экономит оперативную память компьютера. Ядро может состоять из следующих слоев: Средства аппаратной поддержки ОС (те, которые прямо участвуют в организации вычислительных процессов – средства поддержки привилегированного режима, системных прерываний, средства переключения контекстов, защиты областей памяти). Машинно-зависимые компоненты ОС – программные модули, в которых отражена специфика аппаратной платформы компьютера. Этот слой экранирует вышележащие слои от особенностей аппаратуры. Базовые механизмы ядра выполняют наиболее примитивные операции ядра, отрабатывая "принятые наверху" решения, т.е. представляют собой исполнительные механизмы для модулей верхних слоев (перемещение страниц из памяти на диск и обратно, программное переключение контекстов…). Менеджеры ресурсов. Мощные функциональные модули этого слоя решают стратегические задачи по управлению основными ресурсами всей системы. Сюда относятся диспетчеры процессов, ввода-вывода, файловой системы, оперативной памяти. Каж12 дый менеджер ведет учет свободных и используемых ресурсов и планирует их распределение в соответствии с запросами приложений. Интерфейс системных вызовов – верхний слой ядра, который взаимодействует непосредственно с приложениями, образуя прикладной программный интерфейс ОС – API. Приведенное разбиение на слои является достаточно условным. В реальной системе количество слоев и распределение функций между ними может быть иным. Кроме того, иногда нарушается иерархия и обращения осуществляются через слой. Выбор количества слоев является очень важным, т.к. увеличение их количества замедляет работу системы, поскольку увеличивается количество межслойных обращений, а уменьшение – ухудшает расширяемость и логичность системы. Интерфейс прикладного программирования Прикладные программисты используют в своих приложениях обращения к ОС, когда для выполнения тех или иных действий им требуется особый статус, которым обладает только операционная система. Программист для своих целей может воспользоваться набором сервисных функций ОС либо реализовать соответствующую функцию самостоятельно, если предлагаемый операционной системой вариант его не вполне устраивает. Возможности операционной системы доступны прикладному программисту в виде набора функций, называющегося интерфейсом прикладного программирования – API. Как уже обсуждалось, эти функции представляют собой верхний слой ядра ОС. Для разработчиков приложений все особенности конкретной операционной системы представлены особенностями её API. Поэтому операционные системы с различной внутренней организацией, но с одинаковым набором функций API, кажутся им одной и той же ОС. Это упрощает стандартизацию операционных систем и обеспечивает переносимость приложений между внутренне различными ОС, соответствующими определенному стандарту на API. Приложения выполняют обращения к функциям API с помощью системных вызовов. Способ реализации системных вызовов зависит от структурной организации ОС, которая, в свою очередь, тесно связана с особенностями аппаратной платформы. Кроме того, он зависит от языка программирования. При использовании языка программирования высокого уровня функции ОС вызываются тем же способом, что и написанные пользователем подпрограммы, требуя задания определенных аргументов в определенном порядке. Многослойная структура ОС Вычислительную систему, работающую под управлением ОС на основе ядра, можно рассматривать как систему, состоящую из 3 иерархических слоев. Каждый слой может взаимодействовать только со смежными слоями. Приложения не могут взаимодействовать с аппаратурой непосредственно, а только через аппаратура слой ядра. Каждый слой обслуживает вышеЯдро ОС лежащий слой. На основе функций нижележащего слоя следующий слой строит свои Утилиты, сифункции – более сложные и более мощные. стемные обрабатывающие проСтрогие правила касаются только граммы, библиодля взаимодействия между слоями системы, теки, а между модулями внутри слоя могут быть произвольными. Отдельный модуль может выполнить свою работу самостоятельно, либо обратиться за помощью к нижележащему слою через межслойный интерфейс. Рис.3. Нечеткость границы между ОС и приложениями 13 Ядро в привилегированном режиме Важным свойством архитектуры ОС, основанной на ядре, является защита кодов и данных ОС за счет выполнения функций ядра в привилегированном режиме. Для надежного управления ходом выполнения приложений ОС должна иметь по отношению к приложениям определенные привилегии. Иначе некорректно работающее приложение может вмешаться в работу ОС и, например, разрушить часть ее кодов. Ни одно приложение не должно иметь возможности без ведома ОС получать дополнительную область память, занимать процессор дольше разрешенного операционной системой времени, непосредственно управлять совместно используемыми внешними устройствами. Обеспечить привилегии ОС невозможно без специальных средств аппаратной поддержки. Аппаратура компьютера должна поддерживать как минимум два режима работы: 1. пользовательский (user mode), 2. привилегированный режим или режим ядра (kernel mode) или режим супервизора (supervisor mode). Приложения ставятся в подчиненное положение за счет запрета выполнения в пользовательском режиме некоторых критичных команд, связанных с переключениями процессора с задачи на задачу, управлением устройствами ввода- вывода, доступа к механизмам защиты и распределения памяти. Выполнение некоторых инструкций в пользовательском режиме запрещается безусловно, тогда, как другие запрещается выполнять только при определенных условиях. Например, выполнение инструкции доступа к памяти для приложений разрешается, если инструкция обращается к области памяти отведенной данному приложению операционной системой, и запрещается при обращении к областям памяти, занимаемым ОС или другими приложениями. Повышение устойчивости ОС, обесСистемный печиваемое переходом ядра в привызов Работа приРабота при- пользовательский вилегированный режим, достигается ложения ложения режим за счет некоторого замедления выполнения вызовов. Системный вызов привилегированного ядра инициирует переключеработа ядра ние процессора из пользовательского режима в привилегированный, а привилегированный при возврате к приложению – перережим Время переключения ключение из привилегированного режимов режима - в пользовательский. Во Рис.2. Смена режимов при выполнении системного вызова к прививсех типах процессоров из-за долегированному ядру. полнительной двукратной задержки переключения переход на процедуру со сменой режима выполняется медленнее, чем вызов процедуры без смены режима. Архитектура ОС на привилегированном ядре и приложениях пользовательского режима стала, по существу, классической. Её используют Unix, VAX, VMS, OS/2, с определенными модификациями Windows NT. В некоторых случаях разработчики организуют работу ядра и приложений в одном режиме. При таком построении ОС обращается к ядру быстрее, но отсутствует аппаратная защита памяти, занимаемой модулями ОС, от некорректно работающего приложения. Это компенсируется тщательной отладкой приложений. Принципы построения ядра Монолитное ядро Монолитное ядро является старейшим принципом организации ОС. Оно применяется в большинстве UNIX-систем. Сборка ядра, т.е. его компиляция – это единственный способ добавить в него новые компоненты или исключить неиспользуемые. Присутствие лишних 14 компонент в ядре нежелательно, т.к. оно располагается в несвопируемой памяти (т.е. не может быть вытеснено из физической памяти). Кроме того, исключение ненужных компонент повышает надежность операционной системы в целом. Для надежного управления вычислительным процессом ОС должна иметь по отношению к приложениям определенные привилегии. Рассмотрим, в чем они состоят. Во-первых, все основные функции ОС, составляющие ядро, выполняются в привилегированном режиме, т.е. аппаратура должна поддерживать как минимум два режима работы – пользовательский и привилегированный (т.н. режим ядра). Вспомогательные функции ОС при этом оформляются в виде приложений и выполняются в пользовательском режиме наряду с обычными пользовательскими программами (Рис.1). Рис. 1. Вспомогательные функции ОС оформляются в виде приложений и выполняются в пользовательском режиме. Приложения ставятся в подчиненное положение за счет запрета в пользовательском режиме некоторых инструкций (переключение процессора с задачи на задачу, управление механизмом защиты памяти). Некоторые инструкции запрещены в пользовательском режиме безусловно (например, инструкция перехода в привилегированный режим), а некоторые – при определенных условиях. Например, инструкция ввода-вывода может быть запрещена при доступе к контроллеру жесткого диска, который хранит данные, общие для ОС и всех приложений, но разрешена при доступе к последовательному порту, который выделен в монопольное владение данному приложению. Условия разрешения выполнения критичных инструкций находятся под полным контролем ОС. Во-вторых, привилегии ОС при доступе к памяти выражаются в том, что код ядра имеет доступ к областям памяти всех приложений, но сам полностью от них защищен. Каждое приложение пользовательского режима работает в своем адресном пространстве и тем самым защищено от вмешательства каких-либо других приложений. Взаимодействие между пользовательской программой и ядром ОС осуществляется посредством системных вызовов. Системный вызов очень похож на обращение к обычной функции, отличие состоит в том, что при системном вызове задача переходит в режим ядра. В этом режиме работает код ядра ОС, причем он исполняется в адресном пространстве и в контексте вызвавшей его задачи. Системный вызов реализуется посредством программного прерывания. Микроядерная архитектура Микроядерная архитектура – это такая схема ядра ОС, при которой все его компоненты, кроме микроядра, являются самостоятельными процессами, работающими, возможно, в разных адресных пространствах, и взаимодействуют друг с другом путем передачи сообщений. Микроядро – это модуль ядра ОС, обеспечивающий взаимодействие между процессами, планирование процессов, первичную обработку прерываний и базовое управление памятью. 15 В привилегированном режиме остается работать только микроядро, которое защищено от остальных частей ОС и приложений. Набор функций микроядра обычно соответствует функциям слоя базовых механизмов обычного ядра. Остальные, более высокоуровневые функции ядра, оформляются в виде приложений, работающих в пользовательском режиме (Рис.4). Рис.4. Перенос основного объема функций ядра в пользовательское пространство. Опять же не существует однозначного решения, какие функции относить к микроядру, а какие – оформлять отдельными модулями. В общем случае многие менеджеры ресурсов, являющиеся обычно составными частями монолитного ядра (файловая система, менеджер безопасности, подсистемы управления виртуальной памятью и процессами), становятся модулями, работающими в пользовательском режиме. Но менеджеры ресурсов, хотя и работают в пользовательском режиме, имеют принципиальные отличия от традиционных утилит и обрабатывающих программ операционной системы. Утилиты и обрабатывающие программы вызываются пользователями, поэтому в ОС с классической архитектурой отсутствует механизм вызова одного приложения другим. При микроядерной архитектуре приложения, выделенные из состава ядра, специально предназначены для обслуживания запросов других приложений (например, создание процесса, выделение памяти, проверка прав доступа к ресурсу и т.п.). Поэтому менеджеры ресурсов, вынесенные в пользовательский режим, называются серверами ОС, т.е. модулями, основным назначением которых является обслуживание запросов локальных приложений и других модулей ОС. Очевидно, что необходимым условием для реализации микроядерной архитектуры является наличие удобного и эффективного способа вызова процедур одного процесса из другого. Осуществление этого механизма является одной из главных задач микроядра. Схема механизма обращения к функциям ядра ОС, оформленным в виде серверов (причем это обращение может осуществляться как со стороны приложения, так и со стороны другого сервера), имеет следующий вид (Рис. 5). Рис.5. Реализация системного вызова в микроядерной архитектуре. 16 Клиент (прикладная программа или компонент ОС) запрашивает у сервера выполнения некоторой функции, посылая ему для этого сообщение. Непосредственная передача сообщений между приложениями невозможна в силу изоляции их адресных пространств. Микроядро, работающее в привилегированном режиме, имеет доступ к адресным пространствам всех приложений, поэтому может выполнять функции посредника. Микроядро передает сообщение, содержащее имя и параметры вызываемой процедуры, нужному серверу, тот выполняет операцию, после чего ядро возвращает результаты клиенту с помощью другого сообщения. Таким образом, микроядерная архитектура соответствует модели клиент–сервер, в которой роль транспортных средств выполняет микроядро. Сравнение двух архитектур: достоинства и недостатки Мы рассмотрели две модели архитектуры ядра ОС. Каждая имеет свои достоинства и недостатки, поэтому ни одна из них не может полностью вытеснить другую.ОС с микроядерной архитектурой удовлетворяет большинству требований, предъявляемых к современной ОС, обладая переносимостью, расширяемостью, надежностью. Действительно, множественность и размытость межслойных интерфейсов классической ОС ухудшает расширяемость такой системы. Напротив, ограниченный набор четко определенных интерфейсов микроядра позволяет легко добавлять новые функции путем простой разработки новых приложений. Отключение ненужных функций ОС осуществляется изменением файла настроек начальной конфигурации системы. Надежность системы с микроядром повышается потому, что каждый сервер работает в своей области памяти и не может влиять не только на микроядро, но и на другие модули ОС. Уменьшение кода микроядра также уменьшает вероятность ошибок. Сведем все вышесказанное в таблицу для удобства сравнения. Монолитная архитектура Микроядерная архитектура + Высокая скорость работы – вызовы функций ядра представляют собой обычные вызовы процедур. - Дополнительные накладные расходы снижают производительность системы. + Простота проектирования систем – не нужно беспокоиться о разбиении на модули и спецификациях интерфейсов, т.к. любой модуль может вызвать любую функцию. - Необходимо очень аккуратно проектировать разбиение на отдельные компоненты, чтобы минимизировать взаимодействия между слоями. - Множественность и размытость интерфейсов ухудшает расширяемость системы. Для добавления новых (или удаления старых) компонент необходимо выполнять перекомпиляцию ядра и перезагрузку системы. + Высокая степень модульности ядра ОС улучшает расширяемость, т.к. облегчается добавление новых компонент и отключение ненужных. Можно выполнять загрузку/выгрузку компонент, не прерывая работы системы. - Сложность отладки – после внесения изменений необходимо выполнять заново сборку ядра и перезапуск системы. Сложно находить ошибки. + Упрощается процесс отладки компонент ядра (можно использовать обычные средства отладки), легче найти ошибки, уменьшаются их последствия. - Низкая надежность – все компоненты работают в одном адресном пространстве и ошибка в одной влечет повреждение других и крах всей системы. + Повышается надежность, т.к. каждый сервер работает в своем адресном пространстве и не может влиять на работу других. + Простота организации распределенной обработки информации. Основным недостатком микроядерного подхода является снижение производительности, т.к. вместо обычных двух переключений режимов при выполнении системного вызова 17 в ОС с классической архитектурой здесь происходит четыре переключения (см. рисунок выше). Следовательно, ОС на основе микроядра при прочих равных условиях всегда будет менее производительной, чем ОС с классической архитектурой. Этим объясняется то, что микроядерный подход не получил того распространения, которое ему предрекали. Для повышения производительности ОС некоторые часто используемые приложения вносятся в состав микроядра. Например, в ОС Windows NT 3.1, 3.5 диспетчер окон, графическая библиотека входили в состав сервера пользовательского режима. Частое использование этих приложений снижало производительность всей системы. Поэтому при разработке очередной версии системы – Windows NT 4.0 – эти функции были внесены в микроядро, что существенно повысило эффективность работы системы. Архитектура большинства современных ОС содержит как черты монолитного ядра, так и элементы микроядерной архитектуры. Один из подходов выбирается в роли базового, с последующими коррективами в сторону альтернативного подхода. Ранее говорилось о необходимости перекомпиляции монолитного ядра для внесения изменений – например, для изменения аппаратных драйверов. В современных UNIX-системах этот недостаток устранен за счет динамической загрузки драйверов устройств. Т.е., хотя драйверы и работают в едином адресном пространстве, они должны иметь четко специфицированный интерфейс с остальной частью ядра ОС, чтобы обеспечить их загрузку в любой момент времени. В ядре Linux разрешена динамическая загрузка любых компонент ядра – т.н. модулей. В момент загрузки модуля его код загружается в адресное пространство ядра и связывается с остальной частью ядра. Существуют системы с монолитным ядром под управлением микроядра (например, 4.4 BSD и MkLinux, основанные на микроядре Mach). Микроядро управляет виртуальной памятью и работой низкоуровневых драйверов. Остальные функции, в т.ч. взаимодействие с прикладными программами, выполняет монолитное ядро. Операционная система Windows NT, например, хотя и cчитается микроядерной, но имеет также и черты классической ОС. Микроядро её слишком сложно и велико, чтобы иметь приставку "микро" (оно занимает более 1 мегабайта). Компоненты ядра взаимодействуют друг с другом путем передачи сообщений, как в микроядерной ОС. Но в то же время они работают в одном адресном пространстве и используют общие структуры данных, как ОС с монолитным ядром. Таким образом, ОС Windows NT с полным правом может называться гибридной. Контрольные вопросы 1. По какому принципу подразделяются все модули, входящие в состав ОС? 2. Какие функции выполняют модули ядра ОС? 3. Для чего модули ядра являются резидентными? 4. Каковы функции вспомогательных модулей ОС? 5. Что означает термин "транзитные модули"? Являются ли транзитными модули ядра ОС? 6. Какие группы принято выделять в числе вспомогательных модулей ОС? 7. В каком случае приложение может получить статус модуля операционной системы? 8. Какова структура ядра ОС? 9. Каким образом происходят взаимодействия между различными модулями при многослойной структуре? 10. Каковы функции слоя базовых механизмов ядра? 11. К какому слою относится модуль управления памятью? 12. Для чего нужен слой машинно-зависимых компонентов ядра? 13. Могут ли различные операционные системы казаться одинаковыми программисту? В каком случае это происходит? 14. К функциям какого слоя ядра могут напрямую обращаться приложения? 18 15. Всегда ли разбиение ядра на слои выполняется одинаково? Почему важно правильно выбрать количество слоёв? 16. Что такое пользовательский интерфейс? Какие существуют способы его организации в современных ОС? 17. Какие существуют способы организации ядра ОС? 18. Какой способ организации ядра называется монолитной архитектурой? В чём его отличие от микроядерной архитектуры? 19. В каком режиме выполняются функции ядра? 20. В чём состоят привилегии режима ядра по отношению к пользовательскому режиму? 21. Каким образом пользовательское приложение может вызвать выполнение функций ядра? 22. Для чего нужен отдельный стек режима ядра? 23. Какие модули работают в пользовательском режиме, а какие – в привилегированном? 24. Каким образом реализуется системный вызов? Что происходит при его выполнении? 25. Что из себя представляет микроядро? 26. Каким образом осуществляется разделение функций ядра в микроядерной архитектуре? 27. Отличаются ли менеджеры ресурсов, вынесенные из состава ядра в пользовательский режим, от вспомогательных модулей ОС и различных приложений? 28. Каковы функции микроядра? 29. Всегда ли однозначно в микроядерной архитектуре происходит выделение определённых функций из ядра? Могут ли быть различия этих функций в разных реализациях микроядерной архитектуры? 30. Каковы особенности системного вызова в микроядерной архитектуре? 31. Каковы основные недостатки микроядерной архитектуры? А её достоинства? 32. В чём преимущество монолитной архитектуры по сравнению с микроядерной? В чём её недостатки? 33. Какие существуют способы использовать достоинства обеих архитектур и избавиться от их недостатков? 19 Раздел 2. Машинно-зависимые свойства операционных систем Тема 2.1. Архитектурные особенности модели микропроцессорной системы IBM PC. Архитектурой компьютера называется его описание на некотором общем уровне, включающее описание пользовательских возможностей программирования, системы команд, системы адресации, организации памяти и т.д. Архитектура определяет принципы действия, информационные связи и взаимное соединение основных логических узлов компьютера: процессора, оперативного ЗУ, внешних ЗУ и периферийных устройств. Общность архитектуры разных компьютеров обеспечивает их совместимость с точки зрения пользователя. Персональный компьютер типа IBM PC имеет довольно традиционную архитектуру микропроцессорной системы и содержит все обычные функциональные узлы: процессор, постоянную и оперативную память, устройства ввода/вывода, системную шину, источник питания (рис. 1). Основные особенности архитектуры персональных компьютеров сводятся к принципам компоновки аппаратуры, а также к выбранному набору системных аппаратных средств. Рис. 1. Архитектура персонального компьютера типа IBM PC Важная особенность подобной архитектуры — ее открытость, то есть возможность включения в компьютер дополнительных устройств, причем как системных устройств, так и разнообразных плат расширения. Открытость предполагает также возможность простого встраивания программ пользователя на любом уровне программного обеспечения компьютера. Процессор непосредственно реализует операции обработки информации и управления вычислительным процессом, осуществляя выборку машинных команд и данных из оперативной памяти и запись в ОП, включение и отключение ВУ. Основными блоками процессора являются: • устройство управления (УУ) с интерфейсом процессора (системой сопряжения и связи процессора с другими узлами машины); • арифметико-логическое устройство (АЛУ); 20 • процессорная память (внутренний кэш). Микропроцессор, иначе, центральный процессор - Central Processing Unit (CPU) функционально законченное программно- управляемое устройство обработки информации, выполненное в виде одной или нескольких больших (БИС) или сверхбольших (СБИС) интегральных схем. Микропроцессор выполняет следующие функции: 1. чтение и дешифрацию команд из основной памяти; 2. чтение данных из ОП и регистров адаптеров внешних устройств; 3. прием и обработку запросов и команд от адаптеров на обслуживание ВУ; 4. обработку данных и их запись в ОП и регистры адаптеров ВУ; 5. выработку управляющих сигналов для всех прочих узлов и блоков ПК. В большинстве машин реализованы принципы фон Неймана в следующем виде: • оперативная память (ОП) организована как совокупность машинных слов (МС) фиксированной длины или разрядности (имеется в виду количество двоичных единиц или бит, содержащихся в каждом МС). Например, ранние ПЭВМ имели разрядность 8, затем появились 16-разрядные, а затем — 32- и 64-разрядные машины. В свое время существовали также 45разрядные (М-20, М-220), 35-разрядные (Минск-22, Минск-32) и др. машины; • ОП образует единое адресное пространство, адреса МС возрастают от младших к старшим; • В ОП размещаются как данные, так и программы, причем в области данных одно слово, как правило, соответствует одному числу, а в области программы — одной команде (машинной инструкции — минимальному и неделимому элементу программы); • команды выполняются в естественной последовательности (по возрастанию адресов в ОП), пока не встретится команда управления (условного/безусловного перехода, или ветвления — branch), в результате которой естественная последовательность нарушится; • ЦП может произвольно обращаться к любым адресам в ОП для выборки и/или записи в МС чисел или команд. Команда (instruction) — описание операции, которую необходимо выполнить. Каждая команда начинается с кода операции (КОП), содержит необходимые адреса, характеризуется форматом, который определяет структуру команды, ее организацию, код, длину, метод расположения адресов. Длина различных команд может быть как одинаковой, так и разной. Команды подразделяются на арифметические, логические, ввода/вывода, передачи данных. Каждая команда выполняется в компьютере за один либо несколько тактов. Последовательность взаимосвязанных команд именуется макрокомандой. Использование макрокоманд упрощает программирование и обеспечивает механизм вставки добавлений в программы (см. далее макроассемблер, MASM). Цикл процессора — период времени, за который осуществляется выполнение команды исходной программы в машинном виде; состоит из нескольких тактов. Такт работы процессора — промежуток времени между соседними импульсами генератора тактовых импульсов, частота которых есть тактовая частота процессора. Эта частота является одной из основных характеристик компьютера и во многом определяет скорость его работы, поскольку каждая операция в вычислительной машине выполняется за определенное количество тактов. Выполнение короткой команды (арифметика с фиксированной точкой, логические операции), о которых речь здесь и пойдет, обычно занимает пять тактов: • выборка команды; • расшифровка кода операции (декодирование); • генерация адреса и выборка данных из памяти; • выполнение операции; • запись результата в память. 21 Процедура, соответствующая такту, реализуется определенной логической цепью (схемой) процессора, обычно именуемой микропрограммой. Регистры — устройства, предназначенные для временного хранения данных ограниченного размера. Важной характеристикой регистра является высокая скорость приема и выдачи данных. Регистр состоит из разрядов, в которые можно быстро записывать, запоминать и считывать слово, команду, двоичное число и т. д. Обычно регистр имеет ту же разрядность, что и машинное слово. Регистр, накапливающий данные, именуют аккумулятором. Регистр, обладающий способностью перемещать содержимое своих разрядов, называют сдвиговым. В этих регистрах за один такт хранимое слово поразрядно сдвигается на одну позицию. Сдвиговые регистры используются при обработке данных, кодировании и декодировании. Некоторые регистры служат счетчиками. Счетчик является устройством, которое на своих выходах выдает (в двоичной форме) сумму числа импульсов, подаваемых на его единственный вход. Максимальное число импульсов, которое счетчик может подсчитать, называется его емкостью. Регистры общего назначения (РОН) — (General Purpose Registers) — общее название для регистров, которые временно содержат данные, передаваемые или принимаемые из памяти. Регистр команды (РК),(Instruction Register - IR) служит для размещения текущей команды, которая находится в нем в течение текущего цикла процессора. Регистр (РАК), счетчик (СчАК) адреса команды (Program Counter — PC) — регистр, содержащий адрес текущей команды. Регистр адреса (числа) — РА(Ч) — содержит адрес одного из операндов выполняемой команды (регистров может быть несколько). Регистр числа (РЧ) — содержит операнд выполняемой команды, РЧ также несколько. Регистр результата (РР) — предназначается для хранения результата выполнения команды. Сумматор — регистр, осуществляющий операции сложения (логического и арифметического двоичного) чисел или битовых строк, представленных в прямом или обратном коде (иногда РЧ и РР включают в состав сумматора). Существуют и другие регистры, например, регистр состояния — Status Register (SR).Типичным содержанием SR является информация о результатах завершения команды (ноль, переполнение, деление на ноль, перенос и пр.). УУ использует информацию из SR для исполнения условных переходов (например, «в случае переполнения перейти по адресу 4170»). Типичная команда содержит: • код операции (КОП) — характеризующий тип выполняемого действия (сложение, вычитание и пр. чисел; сравнение строк; передача управления, обращение к ВУ и пр.); • номера индексного (ИР) и базисного (БР) регистров (в некоторых машинах — адреса слов, ячеек ОП, в которых размещена соответствующая информация); • адреса операндов Al, A2 и т. д., участвующих в выполнении команды (чисел, строк, других команд программы). Осуществляется расшифровка (декодирование) команды. Адреса Al, A2 и пр. помешаются в регистры адреса. Если в команде указаны ИР или БР, то их содержимое используется для модификации РА — фактически выбираются числа или команды, смещенные в ту или иную сторону по отношению к адресу, указанному в команде. Контрольные вопросы 1. Что входит понятие архитектуры компьютера? 22 2. Регистры какой группы предоставляют доступ к некоторой дополнительной информации о состоянии МП и о результате выполнения последней арифметикологической операции? 3. Что подразумевают под интерфейсами при рассмотрении общей схемы ЭВМ ? 4. Перечислить классы по функциональному назначению доступных регистров. 5. Особенностью какой группы регистров является то, что они могут использоваться при различных арифметико-логических операциях ? 6. За что "сегментные" регистры получили свое название? 7. Регистры какой группы предоставляют доступ к некоторой дополнительной информации о состоянии МП и о результате выполнения последней арифметикологической операции? 8. Рассказать об организация памяти. Тема 2.2. Обработка прерываний Прерывания являются основной движущей силой любой ОС. Периодические прерывания от таймера вызывают смену процессов в мультипрограммной ОС, а прерывания от устройств ввода- вывода управляют потоками данных, которыми вычислительная система обменивается с внешним миром. Система прерываний позволяет ОС реагировать на внешние события, происходящие асинхронно вычислительному процессу: сигнал готовности устройств ввода - вывода, аварийные сигналы аппаратуры вычислительной системы и т.д. В зависимости от источника прерывания делятся на 3 больших класса: 1.Внешние прерывания, связанные с сигналами от внешних устройств (аппаратные) могут возникать в результате действий пользователя или в результате поступления сигналов от аппаратных устройств – сигналов завершения операций ввода- вывода, вырабатываемых контроллерами внешних устройств (принтер, HDD и др.), или же сигналов датчиков управляемых компьютером технических объектов. Данный класс прерываний является асинхронным по отношению к потоку инструкций прерываемой программы. Аппаратура процессора работает так, что асинхронные прерывания возникают между выполнением двух соседних инструкций, при этом система после обработки прерывания продолжает выполнение процесса, уже начиная со следующей инструкции. 2.Внутренние прерывания (исключения), возникающие в результате ошибок вычислений, происходят синхронно выполнению программы при появлении аварийной ситуации в ходе исполнения некоторой инструкции программы (внутри выполнения). Пример: деление на 0, обращение к несуществующему адресу. 3.Программные прерывания, представляющие собой удобный способ вызова процедур ОС. Отличаются от 1 и 2-ых тем, что по своей сути не являются “истинными” прерываниями. Возникают при выполнении особой команды процессора, выполнение которой имитирует прерывание, т.е. Переход на новую последовательность инструкций. Прерываниям приписывают приоритет, с помощью которого они ранжируются по степени важности и срочности. Механизм прерываний поддерживается аппаратными средствами компьютера и программными средствами ОС. Аппаратная поддержка прерываний имеет свои особенности, зависящие от типа процессора и других аппаратных компонентов, передающих сигналы запроса прерываний от внешнего устройства к процессору (таких как контроллер ВУ, шины подключения ВУ, контроллер прерываний, являющийся посредником между сигналами шины и процессора). Особенности аппаратной реализации прерываний оказывают влияние на средства программной поддержки прерываний, работающие в составе ОС, 23 Прерывания обычно обрабатываются модулями ОС. Процедуры, вызываемые по прерываниям, называются обработчиками прерываний или процедурами обслуживания прерываний. Аппаратные прерывания обрабатываются драйверами соответствующих внешних устройств, исключения - специальными модулями ядра, а программные прерывания – процедурами ОС, обслуживающими системные вызовы. Кроме этих модулей в ОС может находиться диспетчер прерываний, который координирует работу отдельных обработчиков прерываний. Существует два основных способа выполнения прерываний: 1.Векторный, когда в процессор передается номер вызываемой процедуры обработки прерывания. Это целое число в диапазоне о 0до 255, указывающее на одну из 256 программ обработки прерываний, адреса которых хранятся в таблице обработчиков прерываний. Вектор прерываний представляет собой электрический сигнал, выставляемый на соответствующие шины процессора и несущий в себе информацию об определенном, закрепленном за данным устройством номере, который идентифицирует соответствующий обработчик прерываний. 2.Опрашиваемый, когда процессор вынужден последовательно опрашивать потенциальные источники запуска прерываний. Последовательность действий аппаратных и программных средств по обработке прерываний Обобщенно последовательность действий аппаратных и программных средств по обработке прерываний можно описать следующим образом: 1.При возникновении сигнала (для аппаратных прерываний) или условия (для внутренних прерываний) прерывания, происходит первичное аппаратное распознавание прерывания. Если прерывания данного типа в настоящий момент запрещены (например, приоритетной схемой, т.е. при обслуживании запросов прерываний из разных классов выбирается запрос, имеющий высший приоритет), то процессор продолжает естественный ход выполнения команд. В противном случае в зависимости от поступившей в процессор информации (уровня прерывания, вектора прерывания или условия внутреннего прерывания) происходит автоматический вызов процедуры обработки прерывания, адрес которой находится в таблице векторов прерываний, размещенной либо в регистрах процессора, либо в определенном месте оперативной памяти. 2.Автоматически сохраняется некоторая часть контекста прерванного процесса, которая позволяет возобновить исполнение процесса после обработки прерывания: значения счетчика команд, слова состояния процесса, несколько регистров общего назначения, которые требуются программе обработки прерываний. 3.Одновременно с загрузкой адреса процедуры обработки прерываний в счетчик команд может автоматически выполняться загрузка нового значения слова состояния машины, которое определяет режим работы процессора при обработке прерывания, в т.ч. работу в привилегированном состоянии. Прерывания практически во всех мультипрограммных ОС обрабатываются в привилегированном режиме работы модулями ядра, т.к. при этом нужно выполнить ряд критических операций, от которых зависит жизнеспособность системы, - управлять внешними устройствами, планировать потоки и т.д. 4.Временно запрещаются прерывания данного типа, чтобы не образовалась очередь вложенных друг в друга потоков одной и той же процедуры. 5.После того, как прерывание обработано ядром ОС, прерванный контекст восстанавливается, и работа процесса возобновляется с прерванного места. Часть контекста восстанавливается аппаратно по команде возврата из прерываний (например: адрес следующей команды и слово состояния процессора) а часть – программным способом. 24 Контрольные вопросы 1.Что такое прерывание? Когда оно было введено в действие и с какой целью? 2.Из каких этапов состоит механизм обработки прерывания? 3.Можно ли запретить все прерывания на время работы обработчика прерываний? Почему? 4.К какому типу прерываний относятся прерывания клавиатуры? Прерывания таймера? Возникновение деления на ноль в ходе выполнения программы? Обращение к запрещённой странице памяти, занятой кодом ОС? 5.Приведите примеры аппаратных прерываний. 6.Могут ли в ходе нормальной работы программы возникать исключительные ситуации? Почему? 7.Какие существуют способы реализации механизма аппаратных прерываний? В чём их различие? 8.Что такое маскирование прерываний и для чего оно может применяться? 9.Каким образом можно реализовывать различные дисциплины обслуживания прерываний с помощью маскирования? 10.В чём различия между дисциплиной обслуживания прерываний с относительными приоритетами и с абсолютными? 11.Где содержится информация об уровне приоритета текущего обработчика прерываний? 12.Каковы функции супервизора прерываний? 13.Чем отличается реализация механизма прерывания в мультипрограммной системе от однопрограммной системы? 14.Когда происходит возврат к выполнявшейся до поступления сигнала прерывания программе в мультипрограммной системе? Тема 2.3. Планирование процессов Процесс это программный модуль, выполняемый процессором. С каждым процессом связывают его адресное пространство – список адресов в памяти от минимума (обычно от 0) до максимума, которые процесс может прочесть и в которые может писать. Адресное пространство содержит саму программу, данные к ней и стек. Со всяким процессом связывают некий набор регистров, включая счетчик команд, указатель стека и другие аппаратные регистры, а также другую информацию, необходимую для запуска программ (контекст процесса). Предположим, периодически ОС решает остановить работу одного процесса и запустить другой, потому, что первый израсходовал отведенную для него часть рабочего времени ЦП. Позже этот процесс должен быть запущен заново из того же состояния, в котором его остановили, следовательно, всю информацию нужно где-либо сохранить на время приостановки процесса. Во многих ОС вся информация о каждом процессе, дополнительная к содержимому его собственного адресного пространства, хранится в таблице ОС. Эта таблица называется таблицей процессов (блок управления процессом) и представляет собой массив структур, по одной на каждый существующий в данный момент процесс. Т.о. приостановленный процесс состоит из собственного адресного пространства, называемого образом памяти, и компонентов таблицы процесса, содержащей помимо других величии, его регистры. Состояния процессов Различают следующие состояния процессов: 1. новый (только что создан); 2. работающий (в этот конкретный момент используемый ЦП); 3. готовый к работе (процесс временно приостановлен, чтобы позволить выполниться другому процессу); 25 4. ожидающий или заблокированный (процесс не может быть запущен прежде, чем произойдет некоторое внешнее событие, например операция ввода- вывода). Переход от одного состояния в другое не может осуществляться произвольным образом. На рисунке 1 показана типовая диаграмма перехода процессов. прерывание новый принят готовый работающий выход отсылка планировщика завершение вв.- выв. ожидающий ожидание вв-выв завершенный Рис. 1. Типовая диаграмма перехода процессов. Создание процессов В универсальных системах необходим способ завершения и создания процессов по мере необходимости. Основные события, приводящие к созданию процессов: 1. инициализация системы, 2. выполнение изданного работающим процессом системного запроса на создание процесса; 3. запрос пользователя на создание процесса; 4. инициирование пакетного задания. Обычно при запуске ОС создаются несколько процессов. Некоторые из них являются высокоприоритетными процессами, т.е. обеспечивающими взаимодействие с пользователями и выполняющие заданную работу. Остальные процессы являются фоновыми, они не связаны с конкретными пользователями, но выполняют особые функции Например: один фоновый процесс может быть предназначен для обработки приходящей на компьютер почты, активизируясь по мере появления писем. Другой фоновый процесс может обрабатывать запросы к web-страницам, расположенным на компьютере, и активизироваться для обслуживания полученного запроса. Фоновые процессы называются демонами. В больших системах насчитывается десятки демонов. Для вывода запущенных процессов используется программа PS. В Windows 95/98 –Ctrl-Alt-Del. В Windows 2000 можно воспользоваться Диспетчером задач. Процессы могут создаваться «по просьбе» текущего процесса. Создание нового процесса особенно полезно в тех случаях, когда выполняемую задачу проще сформировать как набор связанных, но независимых взаимодействующих процессов. Если необходимо организовать выборку большого количества данных из сети для дальнейшей обработки, удобно создать один процесс для выборки данных и размещения их в буфере совместно используемом, в то время как второй процесс будет считывать данные из буфера и обрабатывать их. В интерактивных системах пользователь может запустить программу, набрав на клавиатуре команду или щелкнув по пиктограмме. В результате будет создано окно и запущена в нем программа. Пользователь может открыть несколько окон, каждому из которых будет соответствовать свой процесс. Пользователь может переключаться между окнами и взаимодействовать с процессом, например, вводя данные. Системы пакетной обработки. Пользователь посылает пакетное задание, а ОС создает новый процесс и запускает следующее задание из очереди в тот момент, когда освобождаются необходимые ресурсы. Во всех этих случаях новый процесс формируется одинаково: текущий процесс выполняет системный запрос на создание нового процесса. 26 Завершение процессов Завершение процессов осуществляется чаще всего благодаря одному из следующих событий: 1. Обычный выход (преднамеренно). По мере выполнения своей работы процессы завершаются. После окончания компиляции программы компилятор выполняет системный запрос, чтобы сообщить ОС об окончании работы. Программы, рассчитанные Ра работу с экраном, также поддерживают преднамеренное завершение. В текстовых редакторах, браузерах и других программах такого типа обычно есть кнопка или пункт меню, щелкнув по которому можно удалить все временные файлы, открытые процессом и, затем, завершить процесс. 2. Выход по ошибке (преднамеренно). Например, по неустранимой ошибке. Если пользователь набрал команду для компиляции программы, а соответствующего файла не существует, компилятор просто закончит свою работу. Интерактивные процесс, рассчитанные на работу с экраном, обычно не завершают работу при получении неверных параметров, вместо этого выводят диалоговое окно, прося ввести правильные параметры. 3. Выход по неисправимой ошибке (непреднамеренно). Чаще всего связан с ошибкой в самой программе. Например: обращение к несуществующей области памяти и деление на нуль. Процесс прерывается, а не завершается. 4. уничтожение другим процессом (непреднамеренно). Причиной завершения процесса может быть выполнение другим процессом системного запроса на уничтожение процесса. В обоих случаях «киллер» должен обладать соответствующими правами по отношению к «убиваемому» процессу. Иерархия процессов Если процесс может создавать несколько других проА цессов, то созданные - называются дочерними. Связанные процессы,- это те, которые объединены для выполнения некоторой задачи, и им нужно часто передавать данные от одВ С ного к другому и синхронизировать свою деятельность. В Unix процесс и его «дети» и дальнейшие потомки обD разуют группу процессов. Сигнал, посылаемый пользоватеE F лем с клавиатуры, доставляется всем членам группы, взаимодействующим с клавиатурой в данный момент (обычно это Рис.2 Иерархия процессов процессы, созданные в текущем окне). Каждый их процессов может перехватить сигнал, игнорировать его или выполнить другое действие, предусмотренное по умолчанию. Например: в Unix, процесс init. При запуске этот процесс считывает файл, в котором находится информация о количестве терминалов. Затем процесс разветвляется таким образом, чтобы каждому терминалу соответствовал один процесс. Процессы ждут, пока пользователь какой-либо не войдет в систему. Если пароль правильный, процесс входит в систему, запускает оболочку для команд пользователя, которые в свою очередь могут запускать процессы. Т.о. все процессы принадлежат дереву процессов, начинающемуся с процесса init. В Windows не существует иерархии процессов, все процессы равноправны. Вытесняющие и невытесняющие алгоритмы планирования С самых общих позиций все множество алгоритмов планирования можно разделить на два класса: вытесняющие и невытесняющие алгоритмы планирования. Невытесняющие (non-preemptive) алгоритмы основаны на том, что активному потоку позволяется выполняться, пока он сам, по собственной инициативе, не отдаст управление операционной системе для того, чтобы та выбрала из очереди другой готовый к выполнению поток. 27 Вытесняющие (preemptive) алгоритмы — это такие способы планирования потоков, в которых решение о переключении процессора с выполнения одного потока на выполнение другого потока принимается операционной системой, а не активной задачей. Основным различием между вытесняющими и невытесняющими алгоритмами является степень централизации механизма планирования потоков. При вытесняющем мультипрограммировании функции планирования потоков целиком сосредоточены в операционной системе и программист пишет свое приложение, не заботясь о том, что оно будет выполняться одновременно с другими задачами. При этом операционная система выполняет следующие функции: определяет момент снятия с выполнения активного потока, запоминает его контекст, выбирает из очереди готовых потоков следующий, запускает новый поток на выполнение, загружая его контекст. При невытесняющем мультипрограммировании механизм планирования распределен между операционной системой и прикладными программами. Прикладная программа, получив управление от операционной системы, сама определяет момент завершения очередного цикла своего выполнения и только затем передает управление ОС с помощью какого-либо системного вызова. ОС формирует очереди потоков и выбирает в соответствии с некоторым правилом (например, с учетом приоритетов) следующий поток на выполнение. Такой механизм создает проблемы как для пользователей, так и для разработчиков приложений. Почти во всех современных операционных системах, ориентированных на высокопроизводительное выполнение приложений (UNIX, Windows NT, OS/2, VAX/VMS), реализована вытесняющая многозадачность. Алгоритмы планирования, основанные на квантовании В основе многих вытесняющих алгоритмов планирования лежит концепция квантования. В соответствии с этой концепцией каждому процессу поочередно для выполнения предоставляется ограниченный непрерывный период процессорного времени — квант. Смена активного процесса происходит, если: процесс завершился и покинул систему; произошла ошибка; процесс перешел в состояние ожидания; исчерпан квант процессорного времени, отведенный данному процессу. Алгоритмы, основанные на приоритетах. Вытесняющие алгоритмы этого класса основаны на механизме абсолютных приоритетов, при котором задача снимается с выполнения, когда появляется в системе задание с более высоким приоритетом Метод очередей ресурсов Одним из методов планирования процессов является метод очередей ресурсов. Новые процессы находятся во входной очереди, называемой очередью заданий (работ). Входная очередь располагается во внешней памяти, во входной очереди процессы ожидают освобождения ресурса – адресного пространства в оперативной памяти. Готовые к выполнению процессы располагаются в основной памяти и связаны с очередью готовых процессов. Процессы в этой очереди ожидают освобождения ресурса процессорное время. Процесс в состоянии ожидания завершения операции ввода- вывода находится в одной из очередей к оборудованию ввода- вывода. При прохождении через компьютер процесс мигрирует между очередями под управление программы, которая называется планировщик (scheduler). Операционная система, обеспечивающая режим мультипрограммирования, обычно включает два планировщика – долгосрочный и краткосрочный. На уровень долгосрочного планирования выносятся редкие системные действия, требующие больших затрат системных ресурсов, на уровень краткосрочного планирования – частые и более короткие процессы. 28 Основное отличие между долгосрочным и краткосрочным планированием заключается в частоте запуска. Например, краткосрочный планировщик может запускаться каждые 100 мс, долгосрочный – один раз в несколько минут. Долгосрочный планировщик решает, какой из процессов, находящийся во входной очереди, должен быть переведен в очередь готовых процессов в случае освобождения ресурса памяти. Он выбирает процесс из входной очереди с целью создания неоднородной мультипрограммной смеси. Мультипрограммная смесь- это множество одновременно выполняемых задач. Выбираются задачи, предъявляющие разные требования к ресурсам, так, чтобы обеспечивалась сбалансированная загрузка всех устройств вычислительной машины. Например, желательно одновременное присутствие вычислительных задач и задач с интенсивным вводом- выводом. На уровне долгосрочного планирования объектом является не отдельный процесс, а некоторое объединение процессов по функциональному назначению, которое называется приложением. Краткосрочный планировщик решает, какой из процессов, находящихся в очереди готовых процессов, должен быть передан на выполнение в CPU. В различных средах требуются различные алгоритмы планирования. Это связано с тем, что различные ОС и различные приложения ориентированы на разные задачи. Можно выделить 3 среды: a. системы с пакетной обработкой данных; b. интерактивные системы; c. системы реального времени. Существуют различные алгоритмы или стратегии решения этой задачи. 1.Первый пришел – первый обслуживается (first come – first served - FCFS) заключается в том, что процессор передается тому процессу, который раньше всех его запросил. Когда процесс попадает в очередь готовых процессов, таблица управления готовых процессов присоединяется к хвосту очереди. Стратегии FCFS присущ “эффект конвоя”. В том случае, когда в компьютере имеется один большой процесс и несколько малых, то все процессы собираются в начало очереди к оборудованию. Т.о., “эффект конвоя” приводит к снижению загруженности как процессора так и периферийного оборудования. 2.Стратегия “наиболее короткая работа выполняется первой”(FJF – Shortest Job First). Одним из методов борьбы с “эффектом конвоя” является стратегия, позволяющая процессу из очереди выполняться первым. Стратегия SJF снижает время ожидания очереди. Используется в основном в системах с пакетной обработкой. 3.Приоритетное планирование. Эта стратегия предполагает, что каждому процессу приписывается приоритет, определяющий очередность представления ему CPU. Обычно приоритет – это целое положительное число, находящееся в диапазоне, например, от 0 до 7 или от 0 до 1024. Чем меньше число, тем выше приоритет. Приоритеты назначаются исходя из совокупности внутренних и внешних по отношению к ОС факторов. Внутренние: требования к памяти; количество открытых файлов; отношение среднего времени ввода- вывода к среднему использованию ресурсов CPU и т.д. Внешние: важность процесса; тип и величина файлов. Внутренние факторы могут использоваться для автоматического назначения приоритетов самой ОС, а внешние для принудительного, с помощью оператора. Главный недостаток приоритетного планирования – возможность блокирования на неопределенно долгое время низкоприоритетных процессов. 29 Для устранения этого недостатка используют следующие методы: процессы, время ожидания которых превышает фиксированную величину, например , 15 минут, автоматически получают единичное приращение. 4.“Карусельная” или циклическая стратегия планирования (RR- Round Robin) – применяется в системах разделения времени. Определяется небольшой отрезок времени tk- квант времени (10,..,100 мс). Очередь готовых процессов рассматривается как кольцевая. Процессы циклически перемещаются по очереди, получая CPU на время, равное 1 кванту. Новый процесс добавляется в хвост очереди. Если процесс не завершился в пределах выделенного ему кванта, его работа принудительно прерывается, и он перемещается в хвост очереди. Свойства RR сильно зависят от величины кванта. Чем больше временной квант, тем ближе стратегия RR к FCFS. При очень малых квантах стратегию называют разделением процессора. 5.Планирование с использованием многоуровневой очереди. Эта стратегия разработана для ситуации, когда процессы могут быть легко классифицированы на несколько групп. Например: интерактивные (процессы переднего плана) и пакетные (фоновые). Интерактивные и пакетные процессы имеют различные требования к краткосрочному планировщику. Стратегия многоуровневой очереди разделяет очередь готовых процессов на несколько очередей, в каждой из которых находятся процессы с одинаковыми свойствами, и каждый из которых может планироваться индивидуальной стратегией, например, RR – стратегия для интерактивных процессов и FCFS для пакетных процессов. Взаимодействие очередей осуществляется по следующим правилам: ни один процесс с более низким приоритетом не может быть запущен, пока не выполнятся процессы во всех очередях с более высоким приоритетом. Работа процесса из очереди с более низким приоритетом может быть приостановлена, если в одной из очередей с более высоким приоритетом появился процесс. 6.Использование многоуровневой очереди с обратными связями. Обычная многоуровневая очередь не допускает перемещение процессов между очередями. Многоуровневая очередь с обратными связями предполагает, что процессы при определенных условиях могут перемещаться между очередями. Здесь организуется N очередей. Все новые процессы поступают в конец первой очереди. Первый процесс из i-той очереди поступает на обслуживание лишь тогда, когда все очереди от 1 до i-той пустые. На обслуживание выделяется квант времени tk. Если за это время обслуживание процесса завершится полностью, то он покидает систему. В противном случае недообслуженный процесс поступает в конец i+1 очереди. После обслуживания процесса из i-той очереди система выбирает для обслуживания процесс из непустой очереди с самым младшим номером. Таким процессом может быть следующий процесс из очереди i или из очереди i+1 (если i- пустая). Новый процесс поступает в новую очередь (i=1). В такой ситуации после окончания tk, выделенного для обслуживания процесса из очереди i, будет начато обслуживание процесса первой очереди. Если система выходит на обслуживание процессов из N- ой очереди, то они обслуживаются либо по алгоритму FCFS (каждая заявка обслуживается до конца), либо по циклическому алгоритму. Данная система наиболее быстро обслуживает все короткие по времени обслуживания процессы. Недостаток: затраты времени на перемещение процессов из одной очереди в другую. Данная система является универсальной и сочетает в себе свойства стратегий FCFS, SJF, приоритетной, RR, многоуровневой очереди. 7.Приоритетная многоочередная стратегия обслуживания. Вновь поступающие процессы устанавливаются не обязательно в первую очередь, а в очередь в соответствии с использующимися приоритетами, которые определяются парамет- 30 рами обслуживания процессов. Приоритетные многоочередные алгоритмы могут быть с абсолютным и относительным приоритетом. При абсолютном приоритете процесса приоритет определяется номером очереди, и первыми обслуживаются процессы, обладающие наивысшим приоритетом. Процесс из очереди i-1 будет прерывать обработку процесса из очереди i. Время ожидания высокоприоритетных процессов сокращается, но за счет большой задержки в обслуживании низкоприоритетных процессов. Обслуживание с относительным приоритетом не вызывает прерывания обслуживаемого процесса до его завершения, даже если он менее приоритетный. Контрольные вопросы 1.В каких состояниях может находиться поток в мультипрограммной системе? 2.Какое из состояний потока возможно только в мультипрограммной системе и невозможно в однопрограммной? 3.В каких состояниях может находиться несколько потоков, образуя при этом очередь, а в каких – только один поток? 4.По каким причинам поток может перейти из состояния выполнения в состояние готовности? 5.По каким причинам поток может выйти из состояния выполнения? В каких состояниях он может при этом оказаться? 6.Может ли произойти переход из состояния готовности в состояние ожидания? Почему? 7.Что представляет из себя дескриптор процесса и каково его назначение? Какая информация может в нём содержаться? 8.Что такое контекст активности процесса? Из чего он состоит? 9.Что включает в себя контекст памяти? 10.Каков механизм вызова одной процедуры из другой? Какие действия при этом совершаются? 11.Что такое стек выполнения? Как он реализуется? 12.Что представляет из себя контекст процессора? 13.Что такое слово состояния процессора? Какая информация в нём содержится? Тема 2.4. Обслуживание ввода-вывода Основными задачами подсистемы ввода-вывода являются: организация параллельной работы процессора и устройств ввода-вывода, при обеспечении приемлемого уровня реакции каждого драйвера и минимизации общей загрузки процессора; согласование скоростей работы процессора, оперативной памяти и устройств ввода-вывода; разделение устройств ввода-вывода между процессами; обеспечение удобного логического интерфейса к устройствам ввода-вывода. При всем многообразии внешних устройств ЭВМ и способов управления ими их программные интерфейсы могут быть сведены к трем основным моделям, определяющимся способом подключения устройств к ЭВМ: регистры устройств; контроллеры ввода-вывода; прямой доступ к памяти; каналы ввода-вывода; процессоры ввода-вывода. Устройство может быть подключено к процессору через регистры устройства, как показано на Рис. 1. Такое подключение применяется для устройств, которые имеют простое 31 управление, и обмен с ними ведется небольшими порциями данных (байт, слово, двойное слово). Устройство может иметь большое число регистров, которые, однако, сводятся к трем основным типам: регистры состояния - для передачи в процессор информации о состоянии, регистры управления - для передачи на устройство команд, регистры данных - для обмена данными между процессором и устройством. Регистры управления и состояния, как правило, являются однонаправленными, регистры данных могут быть как одно-, так и двунаправленными. Регистры устройств являются расширением адресного пространства ЭВМ. Рис. 1. Прямое подключение устройства Сколько-нибудь сложные по управлению устройства подсоединяются к ЭВМ через контроллеры ввода-вывода (устройства управления), причем один контроллер может обслуживать несколько однотипных устройств, как показано на Рис. 2. С точки зрения программного интерфейса это подключение ничем не отличается от предыдущего варианта, регистры контроллера выглядят для программы так же, как и регистры устройств. Рис. 2. Подключение через контроллер Быстродействие устройств много ниже быстродействия центрального процессора, поэтому обычно после выдачи команды на устройство программа должна дожидаться ее завершения. Программа может убедиться в завершении операции одним из двух способов: опросом или прерыванием. Опрос предполагает периодическое чтение регистра состояния устройства и проверку в нем признака завершения операции. Крайним случаем опроса является занятое ожидание - когда программа опрашивает устройство практически непрерывно, ничем другим не занимаясь. Помимо того, что при этом непроизводительно расходуется процессорное время, занятое ожидание еще и небезопасно: при отсутствии сигнала окончания от устройства (например, при сбое последнего) программа может "зависнуть" в состоянии занятого ожидания, а если она при этом была в непрерываемом состоянии - заблокировать работу всей системы. Более действенным способом сигнализации об окончании операции является прерывание от устройства. При большом разнообразии механизмов прерываний в разных архитектурах вычислительных систем все они обеспечивают сохранение вектора состояния прерванного процесса и идентификацию устройства, приславшего прерывание. При использовании прерываний ОС после выдачи команды ввода-вывода на устройство переводит процесс в со32 стояние ожидания. Прерывание, присланное устройством, обрабатывается ядром ОС, которое при этом разблокирует процесс, ожидающий завершения операции. Для устройств, с которыми обмен ведется большими порциями информации, применяется прямой доступ к памяти (ПДП), показанный на Рис. 3. Контроллер ПДП работает параллельно с центральным процессором и обменивается данными прямо с оперативной памятью, минуя центральный процессор. Сам контроллер ПДП выглядит для программы как устройство с доступом через регистры. Программа должна его запрограммировать, записав в его регистры адрес области оперативной памяти, с которой происходит обмен, и размер блока данных, а затем запустить операцию, которая инициирует прямой обмен. Регистр данных контроллера ПДП при этом используется только для передачи управляющей информации. Об окончании обмена программа может узнать либо по прерыванию, либо опрашивая регистр состояния контроллера. Контроллер ПДП обычно содержит собственную буферную память для сглаживания разницы в быстродействии устройства и оперативной памяти. Аппаратура ПДП обычно не обеспечивает динамическую трансляцию адресов. Поэтому ОС, получив от процесса запрос на выполнение операции ввода-вывода через ПДП, фиксирует в реальной памяти ту часть виртуального адресного пространства программы, с которой происходит обмен - до окончания обмена. Отметим также, что непрерывное виртуальное адресное пространство процесса может отображаться в несмежные страничные кадры реальной памяти, поэтому ОС может водить-выводить непрерывный с точки зрения процесса блок данных за несколько операций обмена . Рис. 3. Подключение через ПДП В сущности, и контроллер обычного устройства, и контроллер ПДП представляют собой специализированные процессорные устройства, но более полно это качество присуще каналу ввода-вывода. Каналы представляют собой специализированные процессоры, имеющие свою систему команд и работающие параллельно с центральным процессором, но использующие ту же оперативную память. В отличие от контроллеров, которые являются специализированными по типам устройств, каналы являются универсальными процессорами ввода-вывода, к одному каналу могут быть одновременно подсоединены контроллеры разных устройств. Работа канала во многом похожа на работу контроллера ПДП: канал программируется, а затем запускается операция, в ходе которой канал обеспечивает прямой обмен с оперативной памятью, минуя центральный процессор. Подключение через канал показано на Рис.4. 33 Рис. 4. Подключение через канал ввода-вывода Существует несколько типов каналов (селекторный, мультиплексный, байтмультиплексный), предназначенных для подключения устройств с разными скоростями обмена, но для программиста все они выглядят одинаково. Средства программирования канала, во-первых, гораздо более мощные и гибкие, чем контроллера ПДП, во-вторых, позволяют унифицировать программирование ввода-вывода для различных устройств. Выполнение операции ввода-вывода подразумевает совместное (параллельное или квазипараллельное) функционирование нескольких "субъектов": основной программы, выполняющейся на центральном процессоре (далее - программа ЦП), канала и устройства (далее - канал), аппаратного механизма прерываний и программы обработки прерываний. Программа ЦП формирует в оперативной памяти программу канала, сообщает системе ввода-вывода ее адрес, назначает Блок управления событием, в котором будет сделана отметка о завершении операции, и выдает команду "Начать ввод-вывод", адресующую канал и устройство. Канал проверяет готовность канала/устройства и начинает выполнение канальной программы. При этом команда "Начать ввод-вывод" завершается, и программа ЦП продолжает свое выполнение. Когда у программы ЦП возникает необходимость дождаться завершения операции, она опрашивает Блок управления событием. Если в нем есть отметка о выполнении, программа продолжает выполняться, в противном случае - переводится в состояние ожидания до появления отметки в Блоке управления событием. Канал при завершении операции сообщает системе ввода-вывода информацию о своем состоянии и инициирует прерывание по вводувыводу. Аппаратный механизм прерывания сохраняет текущее состояние программы и обеспечивает передачу управления на программу обработки прерываний по вводу-выводу. Программа обработки прерываний распознает канал и устройство, пославшие прерывания, и передает управление на соответствующую ветвь обработки. Из информации о состоянии канала определяется причина прерывания. Выполняются действия по обработке соответствующей ситуации. Диагностическая информация может быть также записана в область памяти, доступную для программы ЦП. Если прерывание, сообщает об окончании операции, обработчик прерывания делает отметку в Блоке управления событием. Обработчик прерывания возвращает управление в прерванную программу. Программа ЦП, если это необходимо, анализирует диагностическую информацию о результатах выполнения операции. Программа канала размещается в оперативной памяти и представляет собой массив канальных команд. Каждая команда канальной программы - структура данных фиксированной длины, содержащая код операции, адрес области памяти, с которой происходит обмен, код контроля доступа к памяти, признаки режима выполнения, объем передаваемых или принимаемых данных. Различаются несколько типов операций: "чтение" (передача данных из устройства в память), "запись" (передача данных из памяти в устройство), "управление" (выполнение специфических операций на устройстве, например, перемотка магнитной ленты) - эти команды специфичны для устройств, устройство может иметь несколько модификаций одной команды. Общей для всех устройств является команда "уточнить состояние" - передача в память информации о состоянии устройства. Команда "переход в канале" на устройство не передается, она изменяет последовательность выполнения канальных команд. Код контроля досту34 па к памяти позволяет предотвратить вторжение процесса в операциях ввода-вывода в области памяти, принадлежащие другим процессам или ОС. Среди признаков режима выполнения наибольший интерес представляют три. Признак "цепочка команд" определяет продолжение программы канала в следующей команде. Признак "цепочка данных" задает выполнение следующей канальной команды как продолжения текущей: поле кода операции в ней игнорируется, но все остальные поля обновляются. Если отсутствуют признаки "цепочка команд" или "цепочка данных", канальная команда считается последней в программе. Признак "программно управляемое прерывание" задает генерацию прерывания при выборке каналом команды, содержащей этот признак, это дает возможность синхронизировать работу программы на центральном процессоре с выполнением канальной программы. Взаимодействие между субъектами выполнения операции ввода-вывода происходит также через фиксированные адреса памяти, в которые записывается управляющая и диагностическая информация: Адресное слово канала, Слово состояния канала, Слово состояния программы. Как и контроллер ПДП, канал не выполняет динамическую трансляцию адресов, кроме того, в системах, где процесс работает только в своей виртуальной памяти, не имея дела с реальным адресами, ОС транслирует программу канала, размещая результат трансляции в недоступной для процесса области. В этом случае процесс не может модифицировать программу канала в ходе ее выполнения. Контроллер ПДП и канал ввода-вывода являются специализированными процессорами. Следующим шагом в интеллектуализации контроллеров ввода-вывода являются процессоры ввода-вывода - универсальные процессоры, выполняющие функции контроллера вводавывода. Взаимодействие ОС с процессором ввода-вывода происходит через механизм обмена сообщениями, поддерживаемый микроядром. Данные могут передаваться как в составе сообщения, так и выбираться процессором ввода-вывода непосредственно из оперативной памяти. Являясь универсальным процессором, процессор ввода-вывода работает под управлением своей собственной мини-ОС и программа управления устройством имеет статус приложения в этой ОС. Внешние устройства ЭВМ отличаются большим разнообразием в форматах управляющей информации и в алгоритмах управления. Даже в канальной модели интерфейса разные устройства имеют разные модификации команд чтения/записи/управления, не говоря уже о том, что транзакция на устройстве обычно подразумевает выполнение нескольких команд, и последовательности их бывают совершенно различными для разных устройств. Подсистема ввода-вывода обычно имеет ярко выраженную многослойную структуру, которая помогает объединить большое количество разнотипных драйверов в систему с общим интерфейсом (рис.5). Два нижних уровня этой слоеной системы составляет hardware: сами устройства, непосредственно выполняющие операции, и их контроллеры, служащие для организации совместной работы устройств и остальной вычислительной системы. Следующий уровень составляют драйверы устройств ввода-вывода, скрывающие от разработчиков операционных систем особенности функционирования конкретных устройств, и обеспечивающие четко определенный интерфейс между hardware и вышележащим уровнем – уровнем базовой подсистемы ввода-вывода, которая, в свою очередь, предоставляет механизм взаимодействия между драйверами и программной частью вычислительной системы в целом. 35 Рис.5 Многослойная структура ввода-вывода Модули ОС, которые осуществляют трансляцию однотипных для всех устройств обращений к ним из процессов и из других модулей ОС в специфические для устройства управляющие воздействия и управляют выполнением этих воздействий, называются драйверами. Каждому типу устройства соответствует свой драйвер. Драйвер устройства имеет два основных уровня, как показано на рис. 6. Первый (верхний) уровень принимает системные вызовы от процессов и формирует на основании каждого вызова запрос. Этот же уровень выстраивает запросы в очередь и поддерживает упорядоченность этой очереди в соответствии с принятой дисциплиной обслуживания. Второй (нижний) уровень драйвера выбирает из очереди первый запрос и обслуживает его: формирует управляющие воздействия и передает их на устройство, обрабатывает прерывания от устройства и сообщает ядру ОС о наступлении событий, связанных с вводом-выводом. Рис. 6. Структура драйвера Верхний уровень драйвера определяет очередность, в которой обслуживаются запросы от разных процессов. Для реализации политики обслуживания драйвер должен учитывать как приоритеты процессов, так и доступность устройств. Логически являясь частью ОС, драйверы, тем не менее, оформляются как отдельные модули. Поскольку каждый драйвер однозначно связан с устройством определенного типа (а возможно, и данной модификации), то и состав набора драйверов зависит от конфигурации аппаратных средств. Кроме того, обязательно должна быть обеспечена возможность подключения к системе новых внешних устройств без внесения изменений в ОС. При модульности драйверов это достигается простым добавлением нового драйвера к системному программному обеспечению. Драйверы загружаются в память либо при загрузке системы, либо (реже) - динамически, при возникновении потребности в них. Выбор драйверов для загрузки выполняется либо по явным указаниям в процедуре инициализации ОС, либо неявно - по име36 ющимся таблицам конфигурации системы, либо полностью автоматически - путем опроса при загрузке всех установленных устройств, опознания их и подключения соответствующих драйверов. Приводимые ниже примеры показывают, что на драйверы некоторых устройств часто возлагаются дополнительные функции помимо непосредственного управления вводомвыводом. Драйвер клавиатуры. Этот драйвер предназначен для ввода символов с клавиатуры терминала. В большинстве аппаратных архитектур нажатие любой клавиши на клавиатуре вызывает прерывание. Обработчик этого прерывания в типовом случае выполняет: чтение кода клавиши и перевод его в код символа; запоминание кодов символов в своем буфере; распознавание специальных клавиш или/и комбинаций клавиш (например, Ctrl+Break) и вызов специальных их обработчиков; обработку специальных клавиш редактирования содержимого буфера (например, Backspace). Драйверы дисковых запоминающих устройств. Обычной функцией такого драйвера является перевод виртуального адреса на диске в реальный (физический). Физический адрес на диске состоит из трех компонент: головка, дорожка, сектор (в дисковых архитектурах без разбиения на сектора - смещение на дорожке). Драйвер же формирует для процессов виртуальный диск, представляемый как линейная последовательность секторов, виртуальным адресом является номер сектора. В соответствии со структурой физического адреса доступ к данным на диске состоит из трех этапов - выборок составляющих этого адреса: выбора головки, выбора дорожки и выбора сектора. Выбор головки чтения/записи производится простым электрическом переключением практически мгновенно. Выбор дорожки - самый времяемкий этап: он требует механического перемещения головок к требуемой дорожке; время этого перемещения зависит от расстояния перемещения. Выбор сектора на дорожке требует ожидания момента, когда требуемый сектор окажется под головкой (за счет вращения диска), время выбора сектора много меньше времени выбора дорожки. Драйвер упорядочивает очередь запросов таким образом, чтобы минимизировать среднее время поиска дорожки. Другим примером функций, возлагаемых на драйвер дисков, может быть поддержка RAID-технологий - использование избыточных дисковых устройств для обеспечения возможности восстановления данных при сбоях. В настоящее время имеется широкий спектр реализаций RAID-технологий - от полного переноса их на аппаратуру ввода-вывода до полной реализации их в драйвере. В целом ряде случаев данные, передаваемые из процесса на устройство или в обратном направлении, должны быть дополнительно преобразованы. Такими преобразованиями могут быть: кеширование данных, сжатие данных, криптографическое кодирование данных, согласование с форматами сетевых протоколов и т.д. 1. 2. 3. 4. 5. 6. Контрольные вопросы Назвать основные задачи системы ввода-вывода На какие на три типа подразделяются каналы ввода/вывода? От чего зависит разделение функций между контроллером и периферийным устройством? В чем состоит основная идея организации программного обеспечения ввода-вывода? Охарактеризуйте известные вам интерфейсы устройств. Как осуществляется управление устройствами. 37 7. Приведите примеры драйверов устройств. Тема 2.5. Управление реальной памятью Память является важнейшим ресурсом, требующим тщательного управления со стороны мультипрограммной операционной системы. Распределению подлежит вся оперативная память, не занятая операционной системой. Обычно ОС располагается в самых младших адресах, однако может занимать и самые старшие адреса. Функциями ОС по управлению памятью являются: отслеживание свободной и занятой памяти, выделение памяти процессам и освобождение памяти при завершении процессов, вытеснение процессов из оперативной памяти на диск, когда размеры основной памяти не достаточны для размещения в ней всех процессов, и возвращение их в оперативную память, когда в ней освобождается место, а также настройка адресов программы на конкретную область физической памяти. Типы адресов Для идентификации переменных и команд используются символьные имена (метки), виртуальные адреса и физические адреса (Рис. 1). Рис. 1. Типы адресов Символьные имена присваивает пользователь при написании программы на алгоритмическом языке или ассемблере. Виртуальные адреса вырабатывает транслятор, переводящий программу на машинный язык. Так как во время трансляции в общем случае не известно, в какое место оперативной памяти будет загружена программа, то транслятор присваивает переменным и командам виртуальные (условные) адреса, обычно считая по умолчанию, что программа будет размещена, начиная с нулевого адреса. Совокупность виртуальных адресов процесса называется виртуальным адресным пространством. Каждый процесс имеет собственное виртуальное адресное пространство. Максимальный размер виртуального адресного пространства ограничивается разрядностью адреса, присущей данной архитектуре компьютера, и, как правило, не совпадает с объемом физической памяти, имеющимся в компьютере. Физические адреса соответствуют номерам ячеек оперативной памяти, где в действительности расположены или будут расположены переменные и команды. Переход от виртуальных адресов к физическим может осуществляться двумя способами. В первом случае замену виртуальных адресов на физические делает специальная системная программа - перемещающий загрузчик. Перемещающий загрузчик на основании имеющихся у него исходных 38 данных о начальном адресе физической памяти, в которую предстоит загружать программу, и информации, предоставленной транслятором об адресно-зависимых константах программы, выполняет загрузку программы, совмещая ее с заменой виртуальных адресов физическими. Второй способ заключается в том, что программа загружается в память в неизмененном виде в виртуальных адресах, при этом операционная система фиксирует смещение действительного расположения программного кода относительно виртуального адресного пространства. Во время выполнения программы при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический. Второй способ является более гибким, он допускает перемещение программы во время ее выполнения, в то время как перемещающий загрузчик жестко привязывает программу к первоначально выделенному ей участку памяти. Вместе с тем использование перемещающего загрузчика уменьшает накладные расходы, так как преобразование каждого виртуального адреса происходит только один раз во время загрузки, а во втором случае - каждый раз при обращении по данному адресу. В некоторых случаях (обычно в специализированных системах), когда заранее точно известно, в какой области оперативной памяти будет выполняться программа, транслятор выдает исполняемый код сразу в физических адресах. Все методы управления памятью могут быть разделены на два класса: методы, которые используют перемещение процессов между оперативной памятью и диском, и методы, которые не делают этого (Рис. 2.). Начнем с последнего, более простого класса методов. Рис. 2. Классификация методов распределения памяти Распределение памяти фиксированными разделами Самым простым способом управления оперативной памятью является разделение ее на несколько разделов фиксированной величины. Это может быть выполнено вручную оператором во время старта системы или во время ее генерации. Очередная задача, поступившая на выполнение, помещается либо в общую очередь (Рис. 3а), либо в очередь к некоторому разделу (Рис. 3б). 39 Рис. 3. Распределение памяти фиксированными разделами: а - с общей очередью; б - с отдельными очередями Подсистема управления памятью в этом случае выполняет следующие задачи: сравнивая размер программы, поступившей на выполнение, и свободных разделов, выбирает подходящий раздел, осуществляет загрузку программы и настройку адресов. При очевидном преимуществе - простоте реализации - данный метод имеет существенный недостаток - жесткость. Так как в каждом разделе может выполняться только одна программа, то уровень мультипрограммирования заранее ограничен числом разделов не зависимо от того, какой размер имеют программы. Даже если программа имеет небольшой объем, она будет занимать весь раздел, что приводит к неэффективному использованию памяти. С другой стороны, даже если объем оперативной памяти машины позволяет выполнить некоторую программу, разбиение памяти на разделы не позволяет сделать этого. Распределение памяти динамическими разделами В этом случае память машины не делится заранее на разделы. Сначала вся память свободна. Каждой вновь поступающей задаче выделяется необходимая ей память. Если достаточный объем памяти отсутствует, то задача не принимается на выполнение и стоит в очереди. После завершения задачи память освобождается, и на это место может быть загружена другая задача. 40 Рис. 4. Распределение памяти динамическими разделами Таким образом, в произвольный момент времени оперативная память представляет собой случайную последовательность занятых и свободных участков (разделов) произвольного размера. На Рис. показано состояние памяти в различные моменты времени при использовании динамического распределения. Так в момент t0 в памяти находится только ОС, а к моменту t1 память разделена между 5 задачами, причем задача П4, завершаясь, покидает память. На освободившееся после задачи П4 место загружается задача П6, поступившая в момент t3. Задачами операционной системы при реализации данного метода управления памятью является: -ведение таблиц свободных и занятых областей, в которых указываются начальные адреса и размеры участков памяти, -при поступлении новой задачи - анализ запроса, просмотр таблицы свободных областей и выбор раздела, размер которого достаточен для размещения поступившей задачи, -загрузка задачи в выделенный ей раздел и корректировка таблиц свободных и занятых областей, -после завершения задачи корректировка таблиц свободных и занятых областей. Программный код не перемещается во время выполнения, то есть может быть проведена единовременная настройка адресов посредством использования перемещающего загрузчика. Выбор раздела для вновь поступившей задачи может осуществляться по разным правилам, таким, например, как "первый попавшийся раздел достаточного размера", или "раздел, имеющий наименьший достаточный размер", или "раздел, имеющий наибольший достаточный размер". Все эти правила имеют свои преимущества и недостатки. По сравнению с методом распределения памяти фиксированными разделами данный метод обладает гораздо большей гибкостью, но ему присущ очень серьезный недостаток фрагментация памяти. Фрагментация - это наличие большого числа несмежных участков свободной памяти очень маленького размера (фрагментов). Настолько маленького, что ни одна из вновь поступающих программ не может поместиться ни в одном из участков, хотя суммарный объем фрагментов может составить значительную величину, намного превышающую требуемый объем памяти. Перемещаемые разделы Одним из методов борьбы с фрагментацией является перемещение всех занятых участков в сторону старших либо в сторону младших адресов, так, чтобы вся свободная па41 мять образовывала единую свободную область (Рис. ). В дополнение к функциям, которые выполняет ОС при распределении памяти переменными разделами, в данном случае она должна еще время от времени копировать содержимое разделов из одного места памяти в другое, корректируя таблицы свободных и занятых областей. Эта процедура называется "сжатием". Сжатие может выполняться либо при каждом завершении задачи, либо только тогда, когда для вновь поступившей задачи нет свободного раздела достаточного размера. В первом случае требуется меньше вычислительной работы при корректировке таблиц, а во втором - реже выполняется процедура сжатия. Так как программы перемещаются по оперативной памяти в ходе своего выполнения, то преобразование адресов из виртуальной формы в физическую должно выполняться динамическим способом. Рис. 5. Распределение памяти перемещаемыми разделами Хотя процедура сжатия и приводит к более эффективному использованию памяти, она может потребовать значительного времени, что часто перевешивает преимущества данного метода. Тема 2.6. Управление виртуальной памятью Методы распределения памяти с использованием дискового пространства. Понятие виртуальной памяти Уже достаточно давно пользователи столкнулись с проблемой размещения в памяти программ, размер которых превышал имеющуюся в наличии свободную память. Решением было разбиение программы на части, называемые оверлеями. 0-ой оверлей начинал выполняться первым. Когда он заканчивал свое выполнение, он вызывал другой оверлей. Все оверлеи хранились на диске и перемещались между памятью и диском средствами операционной системы. Однако разбиение программы на части и планирование их загрузки в оперативную память должен был осуществлять программист. Развитие методов организации вычислительного процесса в этом направлении привело к появлению метода, известного под названием виртуальная память. Виртуальным называется ресурс, который пользователю или пользовательской программе представляется обладающим свойствами, которыми он в действительности не обладает. Так, например, пользователю может быть предоставлена виртуальная оперативная память, размер которой превосходит всю имеющуюся в системе реальную оперативную память. Пользователь пишет программы так, как будто в его распоряжении имеется однородная оперативная память большого объема, но в действительности все данные, используемые программой, хранятся на одном 42 или нескольких разнородных запоминающих устройствах, обычно на дисках, и при необходимости частями отображаются в реальную память. Таким образом, виртуальная память - это совокупность программно-аппаратных средств, позволяющих пользователям писать программы, размер которых превосходит имеющуюся оперативную память; для этого виртуальная память решает следующие задачи: -размещает данные в запоминающих устройствах разного типа, например, часть программы в оперативной памяти, а часть на диске; -перемещает по мере необходимости данные между запоминающими устройствами разного типа, например, подгружает нужную часть программы с диска в оперативную память; -преобразует виртуальные адреса в физические. Все эти действия выполняются автоматически, без участия программиста, то есть механизм виртуальной памяти является прозрачным по отношению к пользователю. Наиболее распространенными реализациями виртуальной памяти является страничное, сегментное и странично-сегментное распределение памяти, а также свопинг. Страничное распределение На Рис. показана схема страничного распределения памяти. Виртуальное адресное пространство каждого процесса делится на части одинакового, фиксированного для данной системы размера, называемые виртуальными страницами. В общем случае размер виртуального адресного пространства не является кратным размеру страницы, поэтому последняя страница каждого процесса дополняется фиктивной областью. Вся оперативная память машины также делится на части такого же размера, называемые физическими страницами (или блоками). Размер страницы обычно выбирается равным степени двойки: 512, 1024 и т.д., это позволяет упростить механизм преобразования адресов. При загрузке процесса часть его виртуальных страниц помещается в оперативную память, а остальные - на диск. Смежные виртуальные страницы не обязательно располагаются в смежных физических страницах. При загрузке операционная система создает для каждого процесса информационную структуру - таблицу страниц, в которой устанавливается соответствие между номерами виртуальных и физических страниц для страниц, загруженных в оперативную память, или делается отметка о том, что виртуальная страница выгружена на диск. Кроме того, в таблице страниц содержится управляющая информация, такая как признак модификации страницы, признак невыгружаемости (выгрузка некоторых страниц может быть запрещена), признак обращения к странице (используется для подсчета числа обращений за определенный период времени) и другие данные, формируемые и используемые механизмом виртуальной памяти. При активизации очередного процесса в специальный регистр процессора загружается адрес таблицы страниц данного процесса. При каждом обращении к памяти происходит чтение из таблицы страниц информации о виртуальной странице, к которой произошло обращение. Если данная виртуальная страница находится в оперативной памяти, то выполняется преобразование виртуального адреса в физический. Если же нужная виртуальная страница в данный момент выгружена на диск, то происходит так называемое страничное прерывание. Выполняющийся процесс переводится в состояние ожидания, и активизируется другой процесс из очереди готовых. Параллельно программа обработки страничного прерывания находит на диске требуемую виртуальную страницу и пытается загрузить ее в оперативную память. Если в памяти имеется свободная физическая страница, то загрузка выполняется немедленно, если же свободных страниц нет, то решается вопрос, какую страницу следует выгрузить из оперативной памяти. В данной ситуации может быть использовано много разных критериев выбора, наиболее популярные из них следующие: - дольше всего не использовавшаяся страница, 43 - первая попавшаяся страница, Рис. 6. Страничное распределение памяти - страница, к которой в последнее время было меньше всего обращений. В некоторых системах используется понятие рабочего множества страниц. Рабочее множество определяется для каждого процесса и представляет собой перечень наиболее часто используемых страниц, которые должны постоянно находиться в оперативной памяти и поэтому не подлежат выгрузке. После того, как выбрана страница, которая должна покинуть оперативную память, анализируется ее признак модификации (из таблицы страниц). Если выталкиваемая страница с момента загрузки была модифицирована, то ее новая версия должна быть переписана на диск. Если нет, то она может быть просто уничтожена, то есть соответствующая физическая страница объявляется свободной. На Рис. показан механизм преобразования виртуального адреса в физический при страничной организации памяти. Виртуальный адрес при страничном распределении может быть представлен в виде пары (p, s), где p - номер виртуальной страницы процесса (нумерация страниц начинается с 0), а s - смещение в пределах виртуальной страницы. Учитывая, что размер страницы равен 2 в степени к, смещение s может быть получено простым отделением k младших разрядов в двоичной записи виртуального адреса. Оставшиеся старшие разряды представляют собой двоичную запись номера страницы p. При каждом обращении к оперативной памяти аппаратными средствами выполняются следующие действия: 1. на основании начального адреса таблицы страниц (содержимое регистра адреса таблицы страниц), номера виртуальной страницы (старшие разряды виртуального адреса) и длины записи в таблице страниц (системная константа) определяется адрес нужной записи в таблице, 44 Рис. 7. Механизм преобразования виртуального адреса в физический при страничной организации памяти 2. из этой записи извлекается номер физической страницы, 3. к номеру физической страницы присоединяется смещение (младшие разряды виртуального адреса). Использование в пункте (3) того факта, что размер страницы равен степени 2, позволяет применить операцию конкатенации (присоединения) вместо более длительной операции сложения, что уменьшает время получения физического адреса, а значит повышает производительность компьютера. На производительность системы со страничной организацией памяти влияют временные затраты, связанные с обработкой страничных прерываний и преобразованием виртуального адреса в физический. При часто возникающих страничных прерываниях система может тратить большую часть времени впустую, на свопинг страниц. Чтобы уменьшить частоту страничных прерываний, следовало бы увеличивать размер страницы. Кроме того, увеличение размера страницы уменьшает размер таблицы страниц, а значит уменьшает затраты памяти. С другой стороны, если страница велика, значит велика и фиктивная область в последней виртуальной странице каждой программы. В среднем на каждой программе теряется половина объема страницы, что в сумме при большой странице может составить существенную величину. Время преобразования виртуального адреса в физический в значительной степени определяется временем доступа к таблице страниц. В связи с этим таблицу страниц стремятся размещать в "быстрых" запоминающих устройствах. Это может быть, например, набор специальных регистров или память, использующая для уменьшения времени доступа ассоциативный поиск и кэширование данных. Страничное распределение памяти может быть реализовано в упрощенном варианте, без выгрузки страниц на диск. В этом случае все виртуальные страницы всех процессов постоянно находятся в оперативной памяти. Такой вариант страничной организации хотя и не предоставляет пользователю виртуальной памяти, но почти исключает фрагментацию за счет того, что программа может загружаться в несмежные области, а также того, что при загрузке виртуальных страниц никогда не образуется остатков. 45 Сегментное распределение При страничной организации виртуальное адресное пространство процесса делится механически на равные части. Это не позволяет дифференцировать способы доступа к разным частям программы (сегментам), а это свойство часто бывает очень полезным. Например, можно запретить обращаться с операциями записи и чтения в кодовый сегмент программы, а для сегмента данных разрешить только чтение. Кроме того, разбиение программы на "осмысленные" части делает принципиально возможным разделение одного сегмента несколькими процессами. Например, если два процесса используют одну и ту же математическую подпрограмму, то в оперативную память может быть загружена только одна копия этой подпрограммы. Сегментное распределение памяти показано на Рис. 8. Рис. 8. Распределение памяти сегментами Виртуальное адресное пространство процесса делится на сегменты, размер которых определяется программистом с учетом смыслового значения содержащейся в них информации. Отдельный сегмент может представлять собой подпрограмму, массив данных и т.п. Иногда сегментация программы выполняется по умолчанию компилятором. При загрузке процесса часть сегментов помещается в оперативную память (при этом для каждого из этих сегментов операционная система подыскивает подходящий участок свободной памяти), а часть сегментов размещается в дисковой памяти. Сегменты одной программы могут занимать в оперативной памяти несмежные участки. Во время загрузки система создает таблицу сегментов процесса (аналогичную таблице страниц), в которой для каждого сегмента указывается начальный физический адрес сегмента в оперативной памяти, размер сегмента, правила доступа, признак модификации, признак обращения к данному сегменту за последний интервал времени и некоторая другая информация. Если виртуальные адресные пространства нескольких процессов включают один и тот же сегмент, то в таблицах сегментов этих процессов делаются ссылки на один и тот же участок оперативной памяти, в который данный сегмент загружается в единственном экземпляре. Виртуальный адрес при сегментной организации (Рис. 9) памяти может быть представлен парой (s, d), где s - номер сегмента, а d - смещение в сегменте. Физический адрес получается путем сложения начального физического адреса сегмента, найденного в таблице сегментов по номеру s, и смещения d. 46 Рис. 9. Преобразование логического адреса в физический при сегментной организации Система с сегментной организацией функционирует аналогично системе со страничной организацией: время от времени происходят прерывания, связанные с отсутствием нужных сегментов в памяти, при необходимости освобождения памяти некоторые сегменты выгружаются, при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический. Кроме того, при обращении к памяти проверяется, разрешен ли доступ требуемого типа к данному сегменту. Недостатком данного метода распределения памяти является фрагментация на уровне сегментов и более медленное по сравнению со страничной организацией преобразование адреса. Странично-сегментное распределение Как видно из названия, данный метод представляет собой комбинацию страничного и сегментного распределения памяти и, вследствие этого, сочетает в себе достоинства обоих подходов. Рис. 10. Схема преобразования виртуального адреса в физический для сегментно-страничной организации памяти 47 Виртуальное пространство процесса делится на сегменты, а каждый сегмент в свою очередь делится на виртуальные страницы, которые нумеруются в пределах сегмента. Оперативная память делится на физические страницы. Загрузка процесса выполняется операционной системой постранично, при этом часть страниц размещается в оперативной памяти, а часть на диске. Для каждого сегмента создается своя таблица страниц, структура которой полностью совпадает со структурой таблицы страниц, используемой при страничном распределении. Для каждого процесса создается таблица сегментов, в которой указываются адреса таблиц страниц для всех сегментов данного процесса. Адрес таблицы сегментов загружается в специальный регистр процессора, когда активизируется соответствующий процесс. На Рис.10 показана схема преобразования виртуального адреса в физический для данного метода. Свопинг Разновидностью виртуальной памяти является свопинг. При свопинге, в отличие от рассмотренных ранее методов реализации виртуальной памяти, процесс перемещается между памятью и диском целиком, то есть в течение некоторого времени процесс может полностью отсутствовать в оперативной памяти. Введение виртуальной памяти позволяет решать другую, не менее важную задачу – обеспечение контроля доступа к отдельным сегментам памяти и, в частности, защиту пользовательских программ друг от друга и защиту ОС от пользовательских программ. Каждый процесс работает со своими виртуальными адресами, трансляцию которых в физические выполняет аппаратура компьютера. Таким образом, пользовательский процесс лишен возможности напрямую обратиться к страницам основной памяти, занятым информацией, относящейся к другим процессам. Контрольные вопросы 1. Что такое виртуальная память? 2. Для чего нужно преобразование памяти? Какие существуют этапы такого преобразования и какими системами они выполняются? 3. От чего зависит размер виртуальной памяти? Может ли он отличаться от размера памяти физической? Как именно? 4. Каковы достоинства и недостатки простого непрерывного распределения памяти? 5. Может ли при мультипрограммном режиме использоваться аналог простого непрерывного распределения для каждой из помещённых в память программ? 6. Для чего могут использоваться оверлейные структуры? В каких ОС они применяются – в однопрограммных или мультипрограммных? 7. Какое из преобразований более эффективно – страничное или сегментное? 8. Какое из преобразований вызывает большую фрагментацию памяти и почему? 9. Каковы недостатки сегментного преобразования памяти? 10. Какие алгоритмы существуют для размещения задачи в памяти? Какой из них эффективнее – размещение задачи в самом подходящем участке или в самом неподходящем и почему? 11. Для чего может потребоваться выталкивание страниц из памяти и куда они при этом попадают? 12. Какой из алгоритмов вталкивания работает эффективнее – вталкивание по запросу или с упреждением – и почему? 13. В каком случае возникает явление пробуксовки и каковы методы борьбы с ним? 14. Как организована защита страниц в мультипрограммных системах? 48 Раздел 3. Работа в различных операционных системах и средах Тема 3.1. Операционная система MSDOS MSDOS была создана на основе DOS (Disk Operating System) Тимоти Паттерсоном в фирме Micro Soft, и была продана компьютерным компаниям для установки вместе с их оборудованием. В 1981 году корпорация IBM создала первый персональный компьютер IBM PC, основанный на процессоре Intel 8086. Этот компьютер был оснащен 16-разрядной однопользовательской ОС реального режима с командной строкой – MS-DOS 1.0. Два года спустя бала выпущена более мощная ОС MS- DOS 2.0, состоящая из 24 Кбайт резидентного кода. Она содержала программу обработки командной строки (оболочку) с большим количеством функций, позаимствованных у ОС Unix. С годами в ОС MS – DOS появилось много новых функций, но она по- прежнему оставалась ОС, ориентированной на командную строку. Основные составные части MS – DOS блок начальной загрузки; модуль взаимодействия с BIOS (IO.SYS для версии 5 и выше); модуль обработки прерываний (MSDOS.SYS); командный процессор (COMMAND.COM); внешние команды (программы) MS – DOS; драйверы устройств; файл config.sys; файл autoexec.bat. BIOS находится в постоянной памяти компьютера, он индивидуален для каждой вычислительной системы и поставляется ее изготовителем. В этом модуле содержатся аппаратнозависимые драйверы следующих устройств: консоль (монитор) с клавиатурой, устройство печати, последовательный канал связи, часы/календарь, дисковое устройство начальной загрузки (блочно-ориентированное устройство). Основные функции BIOS: автоматическое тестирование основных аппаратных компонентов при включении машины, в том числе оперативной памяти; вызов блока начальной загрузки DOS по окончании тестирования; обслуживание системных вызовов или прерываний; Т.о., BIOS является своеобразной программной оболочкой аппаратных средств ПК, представляя возможность другим программам, в частности самой DOS обращаться к аппаратным компонентам через механизм прерывания Блок начальной загрузки – это короткая программа, находящаяся в первом секторе диска с ОС MS – DOS. Функция этой программы заключается в считывании в память еще двух модулей ОС, которые завершают процесс загрузки ОС. На жестком диске загрузчик ОС состоит из 2 частей. Это связано с тем, что жесткий диск может быть разбит на несколько логических дисков (разделов). Первая часть загрузчика находится в первом секторе жесткого диска. Она выбирает, с какого из разделов жесткого диска следует продолжать загрузку. Вторая часть загрузчика находится в первом секторе этого раздела. Она считывает в память модули и передает им управление. Загрузчик просматривает корневой каталог системного диска. Проверяет, являются ли первые два файла в каталоге модулями IO.SYS и MSDOS.SYS. Если да- то загружает их в ОП и передает управление MS – DOS, если нет – то выводит на экран сообщение. Модуль взаимодействия с BIOS IO.SYS- это резидентный модуль. Расширяет возможности BIOS или изменяет её свойства с помощью дополнительных драйверов. Модуль обработки прерываний (MSDOS.SYS) – это резидентный модуль. Он обеспечивает интерфейс высокого уровня для прикладных программ, содержит программные средства для 49 управления файлами, устройствами ввода- вывода, обработки ошибок и т.д. Прикладная программа вызывает функции этого модуля через механизм прерываний, передавая (принимая) информацию к (от) MS – DOS через регистры центрального процессора или (и) области ОП. MSDOS.SYS транслирует (переводит) запрос прикладной программы в один или несколько вызовов, адресованных IO.SYS и BIOS. Командный процессор обрабатывает команды, вводимые пользователем. Командный процессор находится в файле COMMAND.COM на диске, с которого загружается ОС. Некоторые команды он выполняет сам, эти команды называются внутренними. Для выполнения остальных (внешних) команд командный процессор отыскивает на диске программу с соответствующим именем и передает ей управление. По окончании работы программы он удаляет её из ОП и выводит сообщение о готовности к выполнению других команд. Командный процессор состоит из 3 частей: Резидентной – она размещается в ОП сразу после MSDOS.SYS, включает процедуры обслуживания некоторых прерываний, процедуры обработки стандартных ошибок MS – DOS, процедуру загрузки транзитной части командного процессора; Инициализирующей - в ОП она следует сразу же за резидентной частью, во время загрузки ОС передает ей управление, она выполняет файл AUTOEXEC.BAT и некоторые другие действия. Эта часть командного процессора стирается из ОП первой же загруженной программой; Транзитной - загружается в старшие адреса ОП, обрабатывает все внутренние команды, команды с клавиатуры и из bat- файлов, выдает системную подсказку MS – DOS , загружает в ОП программы и передает им управление. Внешние команды – дополнительные программы, входящие в состав MS – DOS, выполняющие определенные функции. Это программы, поставляемые с ОС в виде отдельных файлов, которые выполняют действия обслуживающего характера, например форматирование дисков, проверку дисков и т.п. Драйверы устройств – это специальные резидентные программы, которые дополняют систему ввода – вывода и обеспечивают обслуживание новых и нестандартное использование имеющихся устройств. Драйверы загружаются в память при загрузке ОС, их имена указываются в файле CONFIG.SYS. Файл конфигурирования системы CONFIG.SYS. текстовый файл, содержащий информацию о подгружаемых дополнительных драйверах и некоторую другую информацию, касающуюся MS – DOS и выполняемых в ее среде прикладных программ. Выполняется этот файл автоматически после загрузки командного процессора. Файл автозапуска программ при загрузке ОС AUTOEXEC.BAT. Текстовый файл, содержащий дополнительную настроечную информацию. Выполняется автоматически после файла CONFIG.SYS. 50 Структура жесткого диска Таблица разделов MBR Раздел 1 (FAT) Раздел 2 а Элемент таблицы Элемент таблицы … Boot FAT FAT 2 Корневой каталог Кластеры данных б Ячейка таблицы Дескриптор Ячейка таблицы Дескриптор Ячейка таблицы Дескриптор … … Рис.1 Структура жесткого диска (а), раздела FAT (б). Первый сектор жесткого диска (Рис.1а) содержит главную загрузочную запись (Master Boot Record- MBR), которая занимает его начальную часть и является программой, которая во время начальной загрузки с жесткого диска помещается в по определенному адресу ОЗУ, после чего ей передается управление. В конце первого сектора жесткого диска располагается таблица разделов диска, каждый элемент которой содержит данные: признак активного раздела; номер головки, сектора и цилиндра начального сектора раздела; номер головки и цилиндра последнего сектора раздела; относительный номер сектора начального раздела; размер раздела в секторах и пр. При загрузке ОС с жесткого диска вначале модули инициализации BIOS считывают загрузочную запись в память, и ей передается управление. Главная загрузочная запись просматривает таблицу разделов и находит активный раздел. Кроме программы начальной загрузки ОС, в загрузочной записи находятся параметры, описывающие характеристики данного логического диска. Все параметры располагаются в самом начале сектора, в его форматированной области. Формат этой области различается для DOS различных версий. Загрузочный сектор может содержать такие данные: название фирмы-производителя операционной системы и версию, физический номер диска, метку диска и т.д. Файловые системы MS – DOS Одно из основных понятий файловой системы MS – DOS (FAT-16) – логический диск. Каждый логический диск имеет свое уникальное имя. Только логические диски A: и C: могут быть системными (содержать модули MS – DOS). Элементы файловой структуры: загрузочный сектор, FAT- таблица, корневой каталог, область данных,- создаются утилитами в процессе инициализации диска. Физическое размещение на диске ОС MS – DOS: 0-ой сектор - загрузчик, 1-18-й сектора – основная и дублирующая FAT- таблицы, 19-20 –корневой каталог, 33-…- io.sys, msdos.sys далее область пользователя –кластеры данных (Рис 1б). Файловая система FAT не может контролировать отдельно каждый сектор диска, поэтому она объединяет смежные секторы в кластеры. Т.о. уменьшается общее количество 51 единиц хранения, которыми должна управлять файловая система. Недостатки файловой системы FAT: фрагментация диска, зависимость производительности от количества файлов, хранящихся в одном каталоге; при большом количестве файлов (около 1000) выполнение операции считывания списка файлов в каталоге может занять несколько минут. Это обусловлено тем, что в FAT каталог имеет линейную неупорядоченную структуру, и имена файлов идут в хронологическом порядке. В результате, чем больше в каталоге записей, тем медленнее работают программы, т.к. при поиске файла требуется просмотреть последовательно все записи в каталоге; т.к. FAT проектировалась для однопользовательской ОС, она не предусматривает хранение информации о владельце или полномочия доступа к файлу/каталогу. Использование памяти системой MS – DOS Базовая память Все программы, работающие с DOS, могут использовать базовую память размером до 640 Кбайт. При инсталляции DOS в младшие адреса записываются системные файлы IO.SYS и MSDOS.SYS. После этих файлов в базовую память загружаются файлы CONFIG.SYS и AUTOEXEC.BAT. затем загружается командный процессор (резидентная часть). Часть памяти, которая остается после загрузки всех этих файлов, может быть использована прикладными программами. 16 Мбайт Наращенная память 1088 Кбайт HMA-память UMB Верхняя память (UMA) Rom-BIOS Кадр 64 Кб, страница 16кБ*4 видеоадаптеры Расширенная память EMS 1024 Кбайт 16 Кбайт стр. 16 Кбайт стр. 16 Кбайт стр. 16 Кбайт стр. 16 Кбайт стр. EMS (max 32Mb) 640КБайт Область пользователя Резидентная часть command.com MSDOS.SYS IO.SYS Таблица векторов прерывания 110 Кбайт Базовая память (RAM) Транзитная часть command.com 0 Рис. Расположение и содержание областей памяти Рис.1. Использование пяти системой MS-DOS. Верхняя память (UMA) Эта область памяти размещается в зоне 640-1024 Кб и имеет размер 384 Кб. В эту область помещаются системные данные, относящиеся к аппаратной части, копия BIOS и другие данные. Некоторые области верхней памяти после загрузки остаются свободными, даже после запуска драйверов всех устройств. Это блоки верхней памяти – UMB. Одна из сфер применения UMB – выполнение программ, использующих расширенную память EMS (Expanded Memory Standard). В один блок размером 64 Кб, который делится на 4 страницы по 16 Кб, копируется необходимая для выполнения программа из расширенной памяти. В MS DOS имеется множество команд, позволяющих эффективно использовать верхнюю память. Объем доступной памяти в стандарте EMS достигает 32 Мб. 52 Расширенная память (EMS) Эта память разработана для получения доступа к памяти большого объема в среде MS DOS, через верхнюю память к памяти объемом до 32 Мбайт. Для управления расширенной памятью в компьютерах с процессорами 80386, 80486 была предусмотрена специальная программа EMM386.EXE. эта программа обеспечивала доступ к информации, хранящейся в расширенной памяти, через страничный кадр верхней памяти. Прикладная программа сама не способна получить непосредственный доступ к информации в расширенной памяти. Наращенная память (EMB) Область наращенной (EMB – Extended Memory Block) памяти начинается с 1024 Кб. Размер этой памяти зависит от возможностей процессора. Процессор 80286 может управлять памятью до 16 Мб, 80486- до 4 Гбайт. Процессор может использовать эту память лишь в защищенном режиме. Область старших адресов (HMA) Если компьютер снабжен наращенной памятью, то первые 64 Кб этой памяти называются областью старших адресов –HMA. Эта область использовалась процессорами 80286,80386,80486 в реальном режиме. Драйвер HIMEM.SYS управляет наращенной памятью. Он предотвращает одновременное использование одной и той же частью этой памяти несколькими программами. Драйвер позволяет загружать MS – DOS в HMA, что позволяет освободить около 55 Кб базовой памяти. Большинство программ не могут пользоваться наращенной памятью, т.к. адреса этой памяти находятся за пределами 640 Кбайт. Действие некоторых специальных программ и драйверов MS DOS основано на использовании наращенной памяти: Кэш- память: SMARTDRV.SYS представляет собой программу кэширования диска. Этот драйвер создает в наращенной памяти кэш- буфер для хранения информации, считанной с диска. Управление памятью (HIMEM.SYS, EMM386.EXE) Для того чтобы оптимально использовать ресурсы компьютера необходимо знать принципы управления памятью. Оптимизация означает создание равновесия между скоростью работы системы и предоставлением программам большого объема памяти. К управлению памятью MS DOS имеют отношение различные установки и команды. Четыре из них могут определяться в CONFIG.SYS: DEVICE=C:\DOS\HIMEM.SYS DOS=HIGH,UMB DEVICE=C:\DOS\EMM386.EXE RAM DEVICEHIGH=C:\DOS\RAMDRIVE.SYS DEVICEHIGH=C:\DOS\EGA.SYS (HIMEM.SYS, EMM386.EXE расположены в каталоге DOS). При исполнении этих установок и программ управления сначала определяется или запускаются HIMEM.SYS, DOS=HIGH,UMB и EMM386.EXE. Лишь после этого можно использовать установку DEVICEHIGH, которая перемещает резидентные программы в верхнюю память. Для установки программы HIMEM.SYS необходимо использовать команду DEVICE. Эта команда должна располагаться перед любой другой аналогичной командой для драйверов устройств, использующих наращенную память. Работая совместно с программой EMM386.EXE, драйвер HIMEM.SYS позволяет использовать верхнюю память, а также эмулировать расширенную память в наращенной памяти. Команда DOS=HIGH,UMB содержит две установки. Установка HIGH определяет загрузку файлов IO.SYS, MSDOS.SYS, COMMAND.COM в область старших адресов. Уста53 новка UMB позволяет перемещать из базовой памяти в верхнюю память драйверы и другие резидентные программы, используя для этого свободные блоки, создает возможность использования программой EMM386.EXE одного свободного участка верхней памяти размером 64 Кб в качестве страничного кадра для EMS. Установка RAM определяет выделение одного свободного блока UMB размером 64 Кб для EMS. Команды MS-DOS Для получения сведений об определенной команде наберите HELP <имя команды> CD Вывод имени либо смена текущей папки. CMD –запуск еще одного интерпретатора строк. COLOR Установка цвета текста и фона, используемых по умолчанию. COMP Сравнение содержимого двух файлов или двух наборов файлов. COPY Копирование одного или нескольких файлов в другое место. DATE Вывод либо установка текущей даты. DEL Удаление одного или нескольких файлов. DIR Вывод списка файлов и подпапок из указанной папки. DISKCOPY Копирование содержимого одного гибкого диска на другой. ERASE Удаление одного или нескольких файлов. EXIT Завершение работы программы CMD.EXE (интерпретатора командных строк). FORMAT Форматирование диска для работы с Windows. HELP Выводит справочную информацию о командах Windows. LABEL Создание, изменение и удаление меток тома для дисков. MD Создание папки. MOVE Перемещение одного или нескольких файлов из одной папки в другую. PRINT Вывод на печать содержимого текстовых файлов. PROMPT Изменение приглашения в командной строке Windows. RD Удаление папки. REN Переименование файлов и папок. SORT Сортировка ввода. TIME Вывод и установка системного времени. TREE Графическое отображение структуры папок заданного диска или заданной папки. TYPE Вывод на экран содержимого текстовых файлов. VER Вывод сведений о версии Windows. VOL Вывод метки и серийного номера тома для диска. Форматирование диска FORMAT том: [/FS:система] [/V:метка] [/Q] [/A:размер] [/C] [/X] FORMAT том: [/V:метка] [/Q] [/F:размер] FORMAT тома: [/V:метка] [/Q] [/T:дорожки /N:секторы] FORMAT тома: [/V:метка] [/Q] Основные системные утилиты DOS (для версии MS-DOS 6.22). Внешние команды DOS выполняют вспомогательные программы (утилиты), расположенные в каталоге DOS на диске С:. 1. format имя диска: - форматирование диска (для дискет format a: или format b:). Создание системного диска: format имя диска: /s Будьте внимательны: при форматировании диска (дискеты) вся информация на нем уничтожается! 2. fdisk - разбиение жесткого диска на разделы (логические диски С, D, E и так далее). Внимание: при разбиении жесткого диска на разделы вся информация на нем уничтожается! 54 3. sys имя диска: - перенос файлов ядра DOS на диск (дискету), создание системного диска (дискеты). Используется также для смены (обновления версии) DOS. 4. mem - вывод карты оперативной памяти. Чаще используется команда mem/c/p или mem/d/p (ключ p - постраничный вывод информации). 5. chkdsk c: /f - проверка файловой системы и восстановление потерянных кластеров. 6. scandisk - проверка файловой системы и диска на наличие логических сбоев. Для дискет scandisk a: или scandisk b: 7. label имя диска: - создание или обновление метки на диске, дискете. 8. undelete имя диска: - восстановление случайно стертых файлов. 9. diskcopy имя диска: имя диска: - создание точной копии дискеты. 10. print имя файла prn - печать файла на принтере в фоновом режиме. Отмена фоновой печати: print /t 11. graphics - поддержка печати информации с экрана (при нажатии клавиши Print Screen). 12. defrag c: /fd - устранение фрагментации файлов и оптимизация размещения информации на жестком диске (эта программа аналогична программе Speed Disk из комплекта Norton Utilities). 13. deltree имя каталога - удаление дерева каталогов (с файлами). Внимание: Использовать эту команду можно только, если Вы уверены в необходимости удаления данного дерева каталогов! В противном случае будет утрачена важная информация! 14. msd - диагностика компьютера. 15. edit - вызов текстового редактора MS-DOS Editor. 16. qbasic - вызов языка программирования BASIC. 17. doskey - вызов программы, облегчающей редактирование содержимого командной строки (вводимых команд DOS). 18. tree c:\имя каталога /f - вывод содержимого указанного каталога. 19. msav - проверка дисков антивирусной программой MS-Antivirus. 20. memmaker - оптимизатор распределения оперативной памяти. Контрольные вопросы 1. Что такое дисковая операционная система? 2. Какие операционные системы вам известны? 3. Какие версии DOS вам известны? 4. Какие компоненты входят в состав DOS? Что такое ядро DOS? 5. Что такое командный процессор и какие функции он выполняет? 6. Что такое драйвер? 7. Как происходит начальная загрузка DOS? 8. Что представляет из себя файловая система MS-DOS? 9. Какие существуют правила для задания на диске имени файла и ката лога? Что такое задание файла по маске? 10. Как строится полное имя файла и каталога? 11. Какие функции выполняют файлы autoexec.bat и config.sys и какова типичная структура? 12. Какие основные внутренние команды DOS вы знаете? 13. Какие вам известны основные внешние команды DOS? 14. Как создать каталог и файл в MS-DOS? a. Записать команды в MS DOS: b. создать каталог G1; c. открыть каталог G1; d. создать текстовый файл t.txt; e. перейти в родительский каталог; f. создать каталог G2; g. скопировать файл t.txt из G1 в G2; 55 h. i. j. вывести на экран файл t.txt из G1; переименовать файл t.txt из каталога G2 на t2.txt; распечатать содержание каталога G1; k. удалить каталоги G1 и G2. 15. Привести характеристику внешних команд. Тема 3.2. Операционная система Windows (материал для дополнительно чтения) Microsoft Windows – операционные системы корпорации Microsoft, различные версии которых предназначены для широкого класса устройств – от суперкомпьютеров до встроенных систем. В настоящее время Microsoft Windows установлена на большинстве персональных компьютеров: по данным сайта анализа веб трафика StatCounter (http://gs.statcounter.com) операционные системы Windows (версий XP, Vista, 7) в августе 2012 года были установлены на 88% компьютеров в мире; в то же время по данным компании вебаналитики Net Applications (http://marketshare.hitslink.com)Windows занимает 92% рынка настольных компьютеров и ноутбуков. В настоящее время существует несколько семейств (family) операционных систем Windows, предназначенных для использования на разных типах компьютеров: семейство клиентских операционных систем Windows NT (Windows XP, Windows Vista, Windows 7, Windows 8 и др.); семейство серверных операционных систем Windows NT Server (Windows Server 2003, Windows Server 2008 и др.); семейство мобильных операционных систем Windows Mobile и Windows Phone (Windows Mobile 6, Windows Phone 7 и др.); семейство встроенных операционных систем реального времени Windows CE (Windows CE 7.0 и др.). Кроме того, в прошлом выпускались 16 разрядные операционные системы (Windows 1.0, Windows 2.х, Windows 3.х) и семейство операционных систем Windows 9x (Windows 95, Windows 98, Windows Me). 56 Рис. 1. История развития семейств операционных систем Windows 16 разрядные Windows Первой Windows была Windows 1.0, выпущенная в ноябре 1985 года. Это была не полноценная операционная система, а надстройка над операционной системой MS-DOS. Windows 1.0 предоставляла пользователю графический оконный интерфейс и возможность запускать несколько приложений одновременно (и то и другое отсутствовало в MS DOS). Сначала эту программу хотели назвать Interface Manager, но затем склонились к названию Windows ("окна"), как более точно отражающему суть работы с новой программой. Минимальные системные требования к памяти ограничивались 256 КБ. В Windows 2.0 (декабрь 1987 года) были введены некоторые улучшения графического интерфейса (в частности поддержка перекрывающихся окон) и работы с памятью. Также для большего удобства стали использоваться комбинации клавиш. В мае 1988 года и в марте 1989 года появляются соответственно Windows 2.10 и Windows 2.11, поддерживающие новые на то время процессоры Intel 80286 и Intel 80386. В мае 1990 года выходит Windows 3.0 с улучшенной графикой и поддержкой виртуальной памяти. В 1992 1993 гг. появляются версии Windows for Workgroups 3.1 и 3.11, в ко- 57 торых имеется поддержка работы в одноранговых сетях и сетях под управлением сервера. Это были последние версии 16 разрядных Windows. Windows 9x В августе 1995 года выпускается Windows 95 – 32 разрядная клиентская операционная система, в которой была встроенная поддержка работы с Интернетом (браузер Internet Explorer) и модемными сетями, а также технология Plug-and-Play ("подключи и работай"), позволяющая быстро подключать к компьютеру различные устройства. Впервые появилась кнопка Пуск (Start) и Панель задач (Taskbar). Windows 95 требовала минимум 4 МБ оперативной памяти. На смену Windows 95 в июне 1998 года приходит Windows 98 с множеством программ для работы с Интернетом (Internet Explorer 4, Outlook Express и др.), поддержкой DVD и USB, первым появлением Панели быстрого запуска программ (Quick Launch bar). Windows 98 была последней операционной системой, основанной на MS DOS. Последней версией в семействе 9x стала Windows Me (Millennium Edition, сентябрь 2000 года). Эта система была нацелена на домашних пользователей, и, следовательно, имела широкую поддержку работы с мультимедиа (Windows Media Player 7, Windows Movie Maker), Интернетом и домашними сетями. Другим направлением развития операционных систем Windows в 90-е годы стало семейство NT. Windows NT В июле 1993 года была выпущена первая операционная система семейства NT – Windows NT 3.1. Есть разные варианты объяснения названия NT, самый распространенный вариант – это аббревиатура от New Technology ("новая технология"). Разработка системы, основанной на новом ядре (не MS DOS), началась в 1989 году. К новой операционной системе предъявлялись следующие основные требования: 32 разрядность; поддержка многопроцессорных систем; поддержка вытесняющей многозадачности и виртуальной памяти; высокая производительность; возможность работы в качестве сервера и клиента; переносимость; совместимость с другими версиями Windows и MS DOS, а также частичная совместимость с UNIX; безопасность; надежность; поддержка Unicode. Windows NT 3.1 соответствовала всем этим требованиям, а на ядре этой системы (конечно, с изменениями) основаны все современные версии Windows, включая Windows 8. Windows NT 3.1 поддерживала процессоры Intel 80386, Intel 80486, MIPS R4000 и DEC Alpha. Существовали клиентская и серверная версии системы – Windows NT и Windows NT Advanced Server. Windows NT, помимо других файловых систем, поддерживала специально разработанную в Microsoft файловую систему NTFS (New Technology File System). В 1994-1996 годах последовательно выходят операционные системы Windows NT 3.5, Windows NT 3.51 и Windows NT 4.0. Целями разработки Windows NT 3.5 были повышение производительности и надежности, а также уменьшение размера системы. В Windows NT 3.51 была включена поддержка процессора IBM PowerPC. Windows NT 4.0 обладала таким же графическим интерфейсом как и система Windows 95. Windows 2000, вышедшая в декабре 1999 года, разрабатывалась в качестве системы для профессиональных пользователей, объединяющей два направления – Windows 9x и Windows NT. Система Windows 2000 включала Active Directory (служба и базу данных ре58 сурсов для управления большими сетями) и поддержку значительного числа Plug-and Play устройств, в том числе беспроводных сетей, USB, IEEE 1394 и др. Существовало 4 версии Windows 2000 – одна клиентская (Professional) и три серверных (Server, Advanced Server и Datacenter Server). Windows 2000 была последней системой, для которой выпускались одновременно клиентские и серверные версии. Следующим шагом стало объединение обоих направлений клиентских систем: и систем для профессиональных пользователей (Windows 2000 Professional), и систем для домашних пользователей (Windows Me). Результатом такого объединения стала операционная система Windows XP (август 2001 года). Благодаря своей стабильности, скорости и удобному интерфейсу, Windows XP стала (и до сих пор является) одной из самых распространенных операционных систем в мире. Важным шагом явилось появление 64 разрядных версий Windows XP (Windows XP 64-bit Edition). Количество строк кода в Windows XP – 45 миллионов. В марте 2003 года выходит серверная операционная система Windows Server 2003, имеющая большую производительность и поддерживающая более мощное оборудование, чем Windows 2000. Система имеет 4 основные версии: Web, Standard, Enterprise и Datacenter. Например, версия Datacenter поддерживает 64 процессора и до 64 ГБ оперативной памяти (до 512 ГБ на 64 разрядных платформах). Клиентская операционная система Windows Vista вышла в ноябре 2006 года. Акцент при разработке этой системы был сделан на безопасность – контроль учетных записей пользователей (User Account Control), шифрование дисков (BitLocker Drive Encryption), антишпионское программное обеспечение (Windows Defender) и др. В Windows Vista был также изменен пользовательский интерфейс, в частности поменяла вид кнопка Пуск (Start). В феврале 2008 года появилась операционная система Windows Server 2008, основанная на коде Windows Vista – поэтому большая часть нововведений Windows Vista перешла и в Windows Server 2008. В июле 2009 года выходит Windows 7, отличающаяся расширенной поддержкой ноутбуков и планшетов. Основные особенности Windows 7 – новые приемы работы с окнами, мгновенный поиск информации на компьютере, поддержка сенсорных экранов (Windows Touch), большие возможности по настройке оформления рабочей среды. В 2012 году Microsoft выпускает новейшие версии операционных систем – клиентскую Windows 8 (октябрь 2012 года) и серверную Windows Server 2012 (сентябрь 2012 года). Windows 8 – операционная система, одинаково рассчитанная как на обычные настольные компьютеры и ноутбуки, так и на планшетные компьютеры, завоевавшие в последнее время существенную долю всего рынка персональных компьютеров (см. лекцию 3 "Windows 8"). Windows 10 — операционная система для персональных компьютеров, разработанная корпорацией Microsoft в рамках семейства Windows NT. После Windows 8 система получила номер 10, минуя 9. Впервые эта ОС была представлена в сентябре 2014 года. Система призвана стать единой для разных устройств, таких как персональные компьютеры, планшеты, смартфоны, консоли Xbox One и пр. Доступна единая платформа разработки и единый магазин универсальных приложений, совместимых со всеми поддерживаемыми устройствами. Windows 10поставляется в качестве услуги с выпуском обновлений на протяжении всего цикла поддержки. В течение первого года после выхода системы пользователи могут бесплатно обновиться до Windows 10 на устройствах под управлением легальных Windows 7, Windows 8.1 и Windows Phone 8.1. Среди значимых нововведений — голосовая помощница Кортана, возможность создания и переключения нескольких рабочих столов и др. Windows 10 — последняя «коробочная» версия Windows, все последующие версии будут распространяться исключительно в цифровом виде. Лицензионное соглашение Windows 10 позволяет компании Microsoft собирать многочисленные сведения о пользователе, историю его интернет-деятельности, пароли к сайтам и точкам доступа, данные, набираемые на клавиатуре и многое другое. 59 Windows CE Windows CE – операционная система реального времени для встраиваемых систем. Символы "CE", по утверждению Microsoft, обозначают "Compact, Connectable, Compatible, Companion, Efficient"1 . В настоящее время эта система имеет официальное название Windows Embedded Compact). Windows CE поставляется разработчикам устройств в виде набора компонентов, из которых можно создать операционную систему для конкретного устройства. Например, операционные системы Windows Mobile построены на основе Windows CE. Первая версия Windows CE 1.0 появилась в 1996 году и была разработана как урезанная версия Windows 95. В дальнейшем команда разработчиков Windows CE сотрудничала с командой Windows 2000, затем Windows CE развивалась как независимая система. На сентябрь 2012 года последней версией является Windows CE 7.0. Windows Mobile и Windows Phone Windows Mobile – операционная система для смартфонов и карманных персональных компьютеров (КПК, Personal Digital Assistant – PDA), основанная на Windows CE. Первые версии операционных систем этого семейства назывались Pocket PC (2000 год). С 2003 года утвердилось наименование Windows Mobile – были выпущены операционные системы Windows Mobile 2003, Windows Mobile 5, Windows Mobile 6. Последней версией с таким названием стала система Windows Mobile 6.5 (2009 год). С октября 2010 года Microsoft выпустила новую операционную систему для мобильных устройств – Windows Phone 7, несовместимую с Windows Mobile, хотя и основанную также на Windows CE. В Windows Phone 7 появился новый пользовательский интерфейс, в настоящее время называемый Modern UI. В октябре 2012 года ожидается выходит Windows Phone 8, основанной на ядре Windows NT. Архитектура Windows NT. Windows представляет собой операционную систему с гибридным ядром. В ней основные системные функции по управлению процессами, памятью, устройствами, файловой системой и безопасностью реализованы в компонентах, работающих в режиме ядра; но существует ряд важных системных компонентов пользовательского режима, например системные процессы входа в систему, локальной аутентификации, диспетчера сеансов, а также подсистемы окружения. Архитектура Windows представлена на рис.2. 60 Рис. 2 Архитектура Windows Компоненты пользовательского режима В пользовательском режиме работают следующие виды процессов: o системные процессы (system processes) – компоненты Windows, отвечающие за решение критически важных системных задач (т. е. аварийное завершение одного из этих процессов вызывает крах или нестабильную работу всей системы), но выполняемые в пользовательском режиме. Основные системные процессы: o Winlogon.exe – процесс входа в систему и выхода из неё; o Smss.exe (Session Manager – диспетчер сеансов) – процесс выполняет важные операции при инициализации системы (загрузка необходимых DLL, запуск процессов Winlogon и Csrss и др.), а затем контролирует работу Winlogon и Csrss; o Lsass.exe (Local Security Authentication Subsystem Server – сервер подсистемы локальной аутентификации) – процесс проверяет правильность введенных имени пользователя и пароля; o Wininit.exe – процесс инициализации системы (например, запускает процессы Lsass и Services); o Userinit.exe – процесс инициализации пользовательской среды (например, запускает системную оболочку – по умолчанию, Explorer.exe); o Services.exe (SCM, Service Control Manager – диспетчер управления службами) – процесс, отвечающий за выполнение служб – см. ниже; 61 службы (сервисы, services) – приложения, работающие в фоновом режиме и не требующие взаимодействия с пользователем. Службы могут быть как частью операционной системы (например, Windows Audio – служба для работы со звуком, или Print Spooler – диспетчер печати), так и частью пользовательского приложения (например, служба СУБД SQL Server). За службы отвечает системный процесс Services.exe; пользовательские приложения (user applications) ¬– прикладные программы, запускаемые пользователем; подсистемы окружения (environment subsystems) – компоненты, предоставляющие доступ приложениям к некоторому подмножеству системных функций. Windows поддерживает две подсистемы окружения: o собственно Windows – при помощи данной подсистемы выполняются 32 разрядные приложения Windows (Win32), а также 16 разрядные приложения Windows (Win16), приложения MS DOS и консольные приложения (Console). За подсистему Windows отвечает системный процесс Csrss.exe и драйвер режима ядра Win32k.sys; o POSIX (Portable Operating System Interface for UNIX – переносимый интерфейс операционных систем UNIX) – подсистема для UNIX-приложений. Начиная с Windows Server 2003 R2 компонент, реализующий эту подсистему, называется SUA (Subsystem for UNIX-based Applications). Компонент не устанавливается в Windows по умолчанию. Все перечисленные процессы пользовательского режима (кроме подсистемы POSIX) для взаимодействия с модулями режима ядра используют библиотеки Windows DLL (Dynamic Link Library – динамически подключаемая библиотека). Каждая DLL экспортирует набор Windows API функций, которые может вызывать процесс. Windows API (Windows Application Programming Interface, WinAPI) – это способ взаимодействия процессов пользовательского режима с модулями режима ядра. WinAPI включает тысячи функций и хорошо документирован. Основные Windows DLL следующие: Kernel32.dll – базовые функции, в том числе работа с процессами и потоками, управление памятью и вводом выводом; Advapi32.dll – функции, в основном связанные с управлением безопасностью и доступом к реестру; User32.dll – функции, отвечающие за управление окнами и их элементами в GUI приложениях (Graphical User Interface – графический интерфейс пользователя); Gdi32.dll – функции графического пользовательского интерфейса (Graphics Device Interface, GDI), обеспечивающие рисование на дисплее и принтере графических примитивов и вывод текста. Библиотека Ntdll.dll экспортирует в большинстве своем недокументированные системные функции, реализованные, в основном, в Ntoskrnl.exe. Набор таких функций называется Native API ("родной" API). Библиотеки Windows DLL преобразуют вызовы документированных WinAPI функций в вызовы функций Native API и переключают процессор на режим ядра. Компоненты режима ядра Диспетчер системных сервисов (System Service Dispatcher) работает в режиме ядра, перехватывает вызовы функций от Ntdll.dll, проверяет их параметры и вызывает соответствующие функции из Ntoskrnl.exe. Исполнительная система и ядро содержатся в Ntoskrnl.exe (NT Operating System Kernel – ядро операционной системы NT) (по поводу использования термина "ядро" в Windows см. лекцию 1 "Введение в операционные системы"). Исполнительная система (Executive) представляет собой совокупность компонентов (называемых диспетчерами – manager), которые реализуют основные задачи операционной системы: 62 диспетчер процессов (process manager) – управление процессами и потоками (см. лекцию 6 "Процессы и потоки"); диспетчер памяти (memory manager) – управление виртуальной памятью и отображение её на физическую; монитор контроля безопасности (security reference monitor) – управление безопасностью; диспетчер ввода вывода (I/O manager), диспетчер кэша (cache Manager), диспетчер Plug and Play (PnP Manager) – управление внешними устройствами и файловыми системами; диспетчер электропитания (power manager) – управление электропитанием и энергопотреблением; диспетчер объектов (object manager), диспетчер конфигурации (configuration manager), механизм вызова локальных процедур (local procedure call) – управление служебными процедурами и структурами данных, которые необходимы остальным компонентам. Ядро (Kernel) содержит функции, обеспечивающие поддержку компонентам исполнительной системы и осуществляющие планирование потоков, механизмы синхронизации, обработку прерываний. Компонент Windows USER и GDI отвечает за пользовательский графический интерфейс (окна, элементы управления в окнах – меню, кнопки и т. п., рисование), является частью подсистемы Windows и реализован в драйвере Win32k.sys. Взаимодействие диспетчера ввода вывода с устройствами обеспечивают драйверы (drivers) – программные модули, работающие в режиме ядра, обладающие максимально полной информацией о конкретном устройстве (драйверы подробнее рассматриваются в лекции 10 "Управление устройствами"). Однако, и драйверы, и ядро не взаимодействуют с физическими устройствами напрямую – посредником между программными компонентами режима ядра и аппаратурой является HAL (Hardware Abstraction Layer) – уровень абстрагирования от оборудования, реализованный в Hal.dll. HALпозволяет скрыть от всех программных компонентов особенности аппаратной платформы (например, различия между материнскими платами), на которой установлена операционная система. Контрольные вопросы 1. Перечислите основные семейства операционных систем Windows и дайте их краткую характеристику. 2. Назовите основных представителей 16 разрядных Windows. 3. Перечислите основные отличия операционных систем Windows NT от Windows 9x. 4. Чем отличаются клиентские и серверные версии Windows NT? 5. Охарактеризуйте операционные системы семейства Windows CE. 6. Охарактеризуйте операционные системы семейства Windows Mobile/Windows Phone. 7. К какому типу ядер в большей степени относится Windows NT, к монолитным или микроядрам? Ответ обоснуйте. 8. Перечислите основные компоненты пользовательского режима. 9. Перечислите основные компоненты режима ядра. 10. Что такое Windows API? Где можно найти информацию по этому вопросу? 11. Каковы основные функции исполнительной системы, входящей в состав Ntoskrnl.exe? 12. Каковы основные функции ядра, входящего в состав Ntoskrnl.exe? 13. Что такое HAL? 63 Тема 3.4. Операционная система Linux Linux – многозадачная, многопользовательская ОС для бизнеса, образования и индивидуального программирования. Linux принадлежит семейству UNIX-подобных операционных систем. В 1987 году автор ОС UNIX Кен Томпсон создал маленький клон системы UNIX для образовательных целей, так называемую систему MINIX. Функционально система MINIX похожа на UNIX, включая поддержку стандарта POSIX (который разработан специально для того, чтобы писать программы, работающие в любой UNIX- системе). Желание иметь свободно распространяемую рабочую версию MINIX подвигло финского студента Линуса Торвальдса к написанию системы Linux (1991 г.). С тех пор система Linux была значительно расширена, но она все еще сохраняет большую часть структуры, общей для системы MINIX и UNIX. ОС Linux не так требовательна к системным ресурсам как другие ОС. Например, для организации Интернет- сервера вполне хватит компьютера с процессором Intel 80486DX с 32 мегабайтами ОЗУ. Системные требования, конечно, зависят от версии ядра и выбираемого дистрибутива. В Linux поддерживается классическая схема мультипрограммирования. Каждый процесс выполняется в собственном виртуальном адресном пространстве, т.е. процессы защищены друг от друга и крах одного процесса никак не повлияет на другие выполняющиеся процессы и всю систему в целом. Один процесс не может прочитать что-либо из памяти другого процесса или записать в него без разрешения другого процесса. Санкционирование взаимодействия между процессами допускается системой. В ядро Linux внедрен механизм потоков. В ОС Linux доступны исходные тексты ядра, что позволяет модифицировать систему. Для увеличения объёма доступной памяти Linux осуществляет также разбиение диска на страницы: т.е. на диске может быть выделено 256 Мбайт пространства для свопинга. Ядро поддерживает универсальный пул памяти для пользовательских программ и дискового КЭШа. Выполняемые программы используют динамические библиотеки.В Linux применяется графический интерфейс X Window. Файловая система Linux В DOS файл- это поименованная область данных на диске. В Linux понятие файла значительно расширено. Практически все, с чем имеет дело Linux, является файлом. Команды, вводимые с клавиатуры – это файлы, устройства компьютера – файлы. Файловая система Linux – ext2 (ext3). Кроме неё ОС поддерживает ещё более десятка файловых систем, используя для этого файловую систему NFS. При компоновке операционной системы Linux предлагается сделать выбор файловой системы, которая будет встроена в ядро. Другие файловые системы при необходимости будут динамически подгружаться во время исполнения в виде модулей. К основным понятиям файловых систем Unix относятся: Блок загрузки (boot block); Суперблок (superblock); Индексный (информационный) узел (inode); Блок данных (data block); Блок каталога (directory block); Косвенный блок (indirection block). Блок загрузки служит для первоначального запуска Unix. В суперблоке содержится общая информация о файловой системе, о количестве свободных блоков (свободного места на диске) и информационных узлов (индексных дескрипторов). Суперблок при загрузке системы помещается в оперативную память и все изменения в файловой системе, таким образом, сохраняются только в оперативной памяти. Суперблок 64 сохраняется на диске периодически, а также обязательно в конце сеанса работы системы. Благодаря этому достигается более высокая надежность системы. Именно поэтому необходимо перед выключением питания компьютера необходимо размонтировать систему, выполнив стандартную процедуру завершения работы. Иначе при последующем включении информация в суперблоке может не соответствовать реальному состоянию файловой системы. Что может привести к потере важных данных, либо к краху системы. В индексном (информационном) узле хранится вся информация об отдельном файле, кроме его имени: тип файла, права доступа, дата последнего изменения, указателя на блоки с фактическими данными файла. Имя файла и его индексный дескриптор (номер его индивидуального информационного узла) хранится в блоке каталога. Нумерация дескрипторов последовательна и начинается с 1. По сути настоящим именем файла, с точки зрения системы, является его индексный дескриптор. Поэтому в Linux есть возможность одному файлу присвоить несколько имен. Структура файловой системы Файловая система ext3 имеет следующую структуру. 1. суперблок; 2. описатель группы блоков; Группа блоков Суперблок n 3. карта блоков; Описатель группы блоков 4. карта информационных … узлов; Карта блоков Файловая 5. таблица информационГруппа блоков Карта inode система ных узлов; 3 ext2 Таблица inode 6. блоки данных. Группа блоков Блок данных 1 Суперблок имеется в каждой 2 группе блоков, но это всего … лишь копия суперблока первой Группа блоков Блок данных n группы блоков: так достигается 1 избыточность файловой системы. Описатель (дескриптор) группы содержит информацию о группе Рис.1 Структура файловой системы блоков. Каждая группа блоков имеет свой дескриптор группы. Карты блоков и информационных узлов – это массивы битов, которые указывают на блоки или информационные узлы соответственно. Каждый блок в битовой карте блоков указывает, отведен ли соответствующий ему блок какому- либо файлу. Если бит равен 1, то значит блок занят. Таким образом битовая карта блоков служит для поиска свободного пространства для новых файлов. Аналогично обстоит дело и с битовой картой информационных узлов. Только применительно к индексным дескрипторам. Блоки данных – это блоки, содержащие реальные данные. Типы файлов В ОС Linux существует 4 вида файлов: 1. файлы устройств, 2. каталоги, 3. обычные файлы, 4. ссылки. Каждое поддерживаемое устройство компьютера представляется в файловой системе файлом устройства. При выполнении операций чтения или записи с подобным файлом происходит обмен данными между устройством, на которое указывает этот файл. Такой способ 65 доступа к устройствам позволяет не использовать специальные программы, а также специальные методы программирования, такие, как работа с прерываниями. Файлы устройств находятся в каталоге /dev/ttySO – первый последовательный порт (COM1)/ Обычные файлы представляют собой обычные файлы с данными. Делятся на нормальные (текстовые) и двоичные. Каталоги – это специальные файлы, содержащие информацию о других файлах (файлах устройств, обычных файлов и ссылок). Ссылки реализуют механизм хранения одного и того же файла под разными именами. Максимальная длина имени файла составляет 254 символа. Имя может содержать любые символы, кроме /\?<>|»*. Не рекомендуется использовать слишком длинные имена., а также русскоязычные имена файлов. Linux чувствительна к регистру символов, поэтому file.txt, FILE.TXT, File.txt – совершенно разные имена файлов и данные файлы могут находиться в одном каталоге. Понятие «расширение файлов» в Linux отсутствует. Стандартные каталоги В ОС Linux есть каталоги, которые называются стандартными или системными. Эти каталоги присутствуют, практически, в каждой ОС Linux. В этих каталогах находятся файлы, необходимые для управления и сопровождения системы, а также стандартные программы. / корневой каталог; /bin содержит стандартные программы; /home содержит домашние каталоги пользователей; /usr содержит все программы, используемые системой; /sbin команды для системного администрирования; /var содержит файлы, которые постоянно изменяются, например спулы для принтера, а также файлы почтовых ящиков; /ect содержит файлы настройки системы; /dev здесь находятся файлы устройств; /tmp каталог для временных файлов; /mnt обычно здесь создаются точки монтирования. Можно монтировать файловую систему к любому каталогу. Стандартные имена устройств Наиболее используемые имена устройств: TtyN консоль mouse мышь audio звуковая карта modem модем ttySN последовательный порт. Файл /dev/ttyS0 аналогичен файлу COM1 в DOS lpN параллельный порт hdxN IDE жесткий диск sdxN SCSI жесткий диск Таблица основных команд Linux и их аналоги в MS DOS Команда Аналог в Действие Linux DOS ls, dir Вывод на экран информации о файлах и каталогах dir cd Смена текущего каталога cd pwd Текущий каталог - cp Копирование файлов в другой каталог и/или с другим именем copy mv Перенос файла и переименование его move,rename rm Удаление файла del mkdir Создание каталога mcdir,md 66 rm Удаление каталога rm,rmdir man Вывод помощи (по командам ОС) help more Вывод содержимого файла на экран с паузами после заполнения каждого экрана more cat filename Вывод на экран содержимого файла nbsp type cat > Newfilename ВПеренаправление содержимого файла в новый файл/создание нового файла с заданым в другом файле содержимым - Ctrl+D Окончание перенаправления - grep Поиск строк в файле, соответствующих запросу - chmode Смена атрибутов файла atrib chown Смена владельца файла - df Вывод информации о наличии свободного места на диске dir find Поиск и вывод на экран имен файлов, соответствующих заданным критериямnbsp - file Вывод информации о файле - vc Подсчет слов или знаков в файле - Для облегчения работы с файлами имеется возможность использовать шаблоны имен файлов (или метасимволы): ? – один любой символ; * – произвольное (0 и более) количество любых символов. Контрольные вопросы 1. Дать характеристику структуры файловой системы ОС Linux 2. 3. 4. 5. 6. 7. a. b. c. d. e. f. g. h. i. j. Типы файлов. Свойства файловой системы ext. Назвать стандартные имена устройств. Перечислить стандартные каталоги. Команда работы с каталогами и файлами. Записать команды в ОС Linux: создать каталог G1; открыть каталог G1; создать текстовый файл t.txt; перейти в родительский каталог; создать каталог G2; скопировать файл t.txt из G1 в G2; вывести на экран файл t.txt из G1; переименовать файл t.txt из каталога G2 на t2.txt; распечатать содержание каталога G1; перенести файл t.txt из каталога G1 в каталог G2; удалить каталоги G1 и G2. 67 Раздел 4. Машинно-независимые свойства операционных систем Тема 4.1. Работа с файлами Цели и задачи файловой системы Одной из основных задач ОС является представление удобств пользователю при работе с данными, хранящимися на дисках. Для этого используется файловая система. Логическая модель файловой системы – дерево каталогов. Базовый элемент модели – файл. Файл – это поименованная область внешней памяти, в которую можно записывать и из которой можно считывать данные. Основные цели использования файла: 1. долговременное и надежное хранение информации; 2. совместное использование информации. Файлы обеспечивают естественный и легкий способ разделения информации между приложениями и пользователями за счет понятного человеку символьного имени и постоянства хранимой информации и расположения файла. Пользователь должен иметь удобные средства работы с файлами, включая каталоги, средства поиска файлов по признакам, набор команд для создания, модификации и удаления файлов. Файл может быть создан одним пользователем, а затем использоваться другим. При этом администратор может определить права доступа к нему других пользователей. Файловая система - это часть операционной системы, включающая: Совокупность файлов на диске; Набор структур данных, используемых для управления файлами (каталоги, таблицы распределения свободного и занятого пространства на диске); Комплекс системных программных средств, реализующих различные операции над файлами. Файловая система распределяет дисковую память, поддерживает именование файлов, отображает имена файлов в соответствующие адреса во внешней памяти, обеспечивает доступ к данным, поддерживает разделение, защиту и восстановление файлов. Все эти функции ОС берёт на себя. Программисту не нужно иметь дело с деталями. Задачи, решаемые файловой системой, зависят от способа организации вычисляемого процесса. В однопользовательских ОС: 1. Именование файлов, 2. Программный интерфейс для приложений, 3. Отображение логической модели файловой системы на физическую организацию хранилища данных, 4. Устойчивость файловой системы к сбоям питания, ошибкам аппаратных и программных средств. В мультипрограммных ОС: 5. Совместный доступ к файлу нескольких процессов, д.т. Предусмотрены средства блокировки, предотвращение гонок, исключение тупиков, согласование копий и т.д. В многопользовательских ОС: 6. Защита файлов от несанкционированного доступа Имена файлов Файлы идентифицируются именами. Пользователи дают файлам символьные имена, при этом учитываются ограничения ОС как на используемые символы, так и на длину имени. До недавнего времени эти границы были весьма узкими. Так в популярной файловой системе FAT длина имен ограничивается известной схемой 8.3 (8 символов - собственно имя, 3 символа - расширение имени), а в ОС UNIX System V имя не может содержать более 14 симво68 лов. Однако пользователю гораздо удобнее работать с длинными именами, поскольку они позволяют дать файлу действительно мнемоническое название, по которому даже через достаточно большой промежуток времени можно будет вспомнить, что содержит этот файл. Поэтому современные файловые системы, как правило, поддерживают длинные символьные имена файлов. Например, Windows NT в своей новой файловой системе NTFS устанавливает, что имя файла может содержать до 255 символов, не считая завершающего нулевого символа. При переходе к длинным именам возникает проблема совместимости с ранее созданными приложениями, использующими короткие имена. Чтобы приложения могли обращаться к файлам в соответствии с принятыми ранее соглашениями, файловая система должна уметь предоставлять эквивалентные короткие имена (псевдонимы) файлам, имеющим длинные имена. Таким образом, одной из важных задач становится проблема генерации соответствующих коротких имен. Длинные имена поддерживаются не только новыми файловыми системами, но и новыми версиями хорошо известных файловых систем. Например, в ОС Windows 95 используется файловая система VFAT, представляющая собой существенно измененный вариант FAT. Среди многих других усовершенствований одним из главных достоинств VFAT является поддержка длинных имен. Кроме проблемы генерации эквивалентных коротких имен, при реализации нового варианта FAT важной задачей была задача хранения длинных имен при условии, что принципиально метод хранения и структура данных на диске не должны были измениться. Обычно разные файлы могут иметь одинаковые символьные имена. В этом случае файл однозначно идентифицируется так называемым составным именем, представляющем собой последовательность символьных имен каталогов. В некоторых системах одному и тому же файлу не может быть дано несколько разных имен, а в других такое ограничение отсутствует. В последнем случае операционная система присваивает файлу дополнительно уникальное имя, так, чтобы можно было установить взаимно-однозначное соответствие между файлом и его уникальным именем. Уникальное имя представляет собой числовой идентификатор и используется программами операционной системы. Примером такого уникального имени файла является номер индексного дескриптора в системе UNIX. Типы файлов Файлы бывают разных типов: обычные файлы, специальные файлы, файлы-каталоги. Обычные файлы в свою очередь подразделяются на текстовые и двоичные. Текстовые файлы состоят из строк символов, представленных в ASCII-коде. Это могут быть документы, исходные тексты программ и т.п. Текстовые файлы можно прочитать на экране и распечатать на принтере. Двоичные файлы не используют ASCII-коды, они часто имеют сложную внутреннюю структуру, например, объектный код программы или архивный файл. Все операционные системы должны уметь распознавать хотя бы один тип файлов - их собственные исполняемые файлы. Специальные файлы - это файлы, ассоциированные с устройствами ввода-вывода, которые позволяют пользователю выполнять операции ввода-вывода, используя обычные команды записи в файл или чтения из файла. Эти команды обрабатываются вначале программами файловой системы, а затем на некотором этапе выполнения запроса преобразуются ОС в команды управления соответствующим устройством. Специальные файлы, так же как и устройства ввода-вывода, делятся на блок-ориентированные и байт-ориентированные. Каталог - это, с одной стороны, группа файлов, объединенных пользователем исходя из некоторых соображений (например, файлы, содержащие программы игр, или файлы, составляющие один программный пакет), а с другой стороны - это файл, содержащий системную информацию о группе файлов, его составляющих. В каталоге содержится список файлов, входящих в него, и устанавливается соответствие между файлами и их характеристиками (атрибутами). 69 В разных файловых системах могут использоваться в качестве атрибутов разные характеристики, например: - информация о разрешенном доступе, - пароль для доступа к файлу, - владелец файла, - создатель файла, - признак "только для чтения", - признак "скрытый файл", - признак "системный файл", - признак "архивный файл", - признак "двоичный/символьный", - признак "временный" (удалить после завершения процесса), - признак блокировки, - длина записи, - указатель на ключевое поле в записи, - длина ключа, - времена создания, последнего доступа и последнего изменения, - текущий размер файла, - максимальный размер файла. Каталоги могут непосредственно содержать значения характеристик файлов, как это сделано в файловой системе MS-DOS, или ссылаться на таблицы, содержащие эти характеристики, как это реализовано в ОС UNIX (Рис. ). Каталоги могут образовывать иерархическую структуру за счет того, что каталог более низкого уровня может входить в каталог более высокого уровня (Рис. 2. ). Рис. 1. Структура каталогов: а - структура записи каталога MS-DOS (32 байта); б - структура записи каталога ОС UNIX 70 Рис. 2. Логическая организация файловой системы а - одноуровневая; б - иерархическая (дерево); в - иерархическая (сеть) Иерархия каталогов может быть деревом или сетью. Каталоги образуют дерево, если файлу разрешено входить только в один каталог, и сеть - если файл может входить сразу в несколько каталогов. В MS-DOS каталоги образуют древовидную структуру, а в UNIX'е - сетевую. Как и любой другой файл, каталог имеет символьное имя и однозначно идентифицируется составным именем, содержащим цепочку символьных имен всех каталогов, через которые проходит путь от корня до данного каталога. Логическая организация файла Программист имеет дело с логической организацией файла, представляя файл в виде определенным образом организованных логических записей. Логическая запись - это наименьший элемент данных, которым может оперировать программист при обмене с внешним устройством. 71 Рис. 3. Способы логической организации файлов Даже если физический обмен с устройством осуществляется большими единицами, ОС обеспечивает доступ к отдельной логической записи. На Рис. показаны несколько схем логической организации файла. Записи могут быть фиксированной длины или переменной длины. Записи могут быть расположены в файле последовательно (последовательная организация) или в более сложном порядке, с использованием так называемых индексных таблиц, позволяющих обеспечить быстрый доступ к отдельной логической записи (индекснопоследовательная организация). Для идентификации записи может быть использовано специальное поле записи, называемое ключом. В файловых системах ОС UNIX и MS-DOS файл имеет простейшую логическую структуру - последовательность однобайтовых записей. Физическая организация и адрес файла Физическая организация файла описывает правила расположения файла на устройстве внешней памяти, в частности на диске. Файл состоит из физических записей - блоков. Блок наименьшая единица данных, которой внешнее устройство обменивается с оперативной памятью. Непрерывное размещение - простейший вариант физической организации (Рис. 4а), при котором файлу предоставляется последовательность блоков диска, образующих единый сплошной участок дисковой памяти. Для задания адреса файла в этом случае достаточно указать только номер начального блока. Другое достоинство этого метода - простота. Но имеются и два существенных недостатка. Во-первых, во время создания файла заранее не известна его длина, а значит не известно, сколько памяти надо зарезервировать для этого файла, во-вторых, при таком порядке размещения неизбежно возникает фрагментация, и пространство на диске используется не эффективно, так как отдельные участки маленького размера (минимально 1 блок) могут остаться не используемыми. Следующий способ физической организации - размещение в виде связанного списка блоков дисковой памяти (Рис. 4б). При таком способе в начале каждого блока содержится указатель на следующий блок. В этом случае адрес файла также может быть задан одним числом - номером первого блока. В отличие от предыдущего способа, каждый блок может быть присоединен в цепочку какого-либо файла, следовательно фрагментация отсутствует. Файл может изменяться во время своего существования, наращивая число блоков. Недостатком является сложность реализации доступа к произвольно заданному месту файла: для того, чтобы прочитать пятый по порядку блок файла, необходимо последовательно прочитать че72 тыре первых блока, прослеживая цепочку номеров блоков. Кроме того, при этом способе количество данных файла, содержащихся в одном блоке, не равно степени двойки (одно слово израсходовано на номер следующего блока), а многие программы читают данные блоками, размер которых равен степени двойки. Рис. 4. Физическая организация файла а - непрерывное размещение; б - связанный список блоков; в - связанный список индексов; г - перечень номеров блоков Популярным способом, используемым, например, в файловой системе FAT операционной системы MS-DOS, является использование связанного списка индексов. С каждым блоком связывается некоторый элемент - индекс. Индексы располагаются в отдельной области диска (в MS-DOS это таблица FAT). Если некоторый блок распределен некоторому файлу, то индекс этого блока содержит номер следующего блока данного файла. При такой физической организации сохраняются все достоинства предыдущего способа, но снимаются оба отмеченных недостатка: во-первых, для доступа к произвольному месту файла достаточно прочитать только блок индексов, отсчитать нужное количество блоков файла по цепочке и определить номер нужного блока, и, во-вторых, данные файла занимают блок целиком, а значит имеют объем, равный степени двойки. В заключение рассмотрим задание физического расположения файла путем простого перечисления номеров блоков, занимаемых этим файлом. ОС UNIX использует вариант данного способа, позволяющий обеспечить фиксированную длину адреса, независимо от размера файла. Для хранения адреса файла выделено 13 полей. Если размер файла меньше или равен 10 блокам, то номера этих блоков непосредственно перечислены в первых десяти полях адреса. Если размер файла больше 10 блоков, то следующее 11-е поле содержит адрес блока, в котором могут быть расположены еще 128 номеров следующих блоков файла. Если файл больше, чем 10+128 блоков, то используется 12-е поле, в котором находится номер блока, содержащего 128 номеров блоков, которые содержат по 128 номеров блоков данного файла. И, наконец, если файл больше 10+128+128(128, то используется последнее 13-е поле для тройной косвенной адресации, что позволяет задать адрес файла, имеющего размер максимум 10+ 128 + 128(128 + 128(128(128. 73 Права доступа к файлу Определить права доступа к файлу - значит определить для каждого пользователя набор операций, которые он может применить к данному файлу. В разных файловых системах может быть определен свой список дифференцируемых операций доступа. Этот список может включать следующие операции: - создание файла, - уничтожение файла, - открытие файла, - закрытие файла, - чтение файла, - запись в файл, - дополнение файла, - поиск в файле, - получение атрибутов файла, - установление новых значений атрибутов, - переименование, - выполнение файла, - чтение каталога, - и другие операции с файлами и каталогами. В самом общем случае права доступа могут быть описаны матрицей прав доступа, в которой столбцы соответствуют всем файлам системы, строки - всем пользователям, а на пересечении строк и столбцов указываются разрешенные операции (Рис. ). В некоторых системах пользователи могут быть разделены на отдельные категории. Для всех пользователей одной категории определяются единые права доступа. Например, в системе UNIX все пользователи подразделяются на три категории: владельца файла, членов его группы и всех остальных. Рис. 5. Матрица прав доступа Различают два основных подхода к определению прав доступа: избирательный доступ, когда для каждого файла и каждого пользователя сам владелец может определить допустимые операции; мандатный подход, когда система наделяет пользователя определенными правами по отношению к каждому разделяемому ресурсу (в данном случае файлу) в зависимости от того, к какой группе пользователь отнесен. Кэширование диска В некоторых файловых системах запросы к внешним устройствам, в которых адресация осуществляется блоками (диски, ленты), перехватываются промежуточным программным слоем-подсистемой буферизации. Подсистема буферизации представляет собой буфер74 ный пул, располагающийся в оперативной памяти, и комплекс программ, управляющих этим пулом. Каждый буфер пула имеет размер, равный одному блоку. При поступлении запроса на чтение некоторого блока подсистема буферизации просматривает свой буферный пул и, если находит требуемый блок, то копирует его в буфер запрашивающего процесса. Операция ввода-вывода считается выполненной, хотя физического обмена с устройством не происходило. Очевиден выигрыш во времени доступа к файлу. Если же нужный блок в буферном пуле отсутствует, то он считывается с устройства и одновременно с передачей запрашивающему процессу копируется в один из буферов подсистемы буферизации. При отсутствии свободного буфера на диск вытесняется наименее используемая информация. Таким образом, подсистема буферизации работает по принципу кэш-памяти. Общая модель файловой системы Функционирование любой файловой системы можно представить многоуровневой моделью (Рис. ), в которой каждый уровень предоставляет некоторый интерфейс (набор функций) вышележащему уровню, а сам, в свою очередь, для выполнения своей работы использует интерфейс (обращается с набором запросов) нижележащего уровня. Рис. 6. Общая модель файловой системы. Задачей символьного уровня является определение по символьному имени файла его уникального имени. В файловых системах, в которых каждый файл может иметь только одно символьное имя (например, MS-DOS), этот уровень отсутствует, так как символьное имя, присвоенное файлу пользователем, является одновременно уникальным и может быть использовано операционной системой. В других файловых системах, в которых один и тот же файл может иметь несколько символьных имен, на данном уровне просматривается цепочка каталогов для определения уникального имени файла. В файловой системе UNIX, например, уникальным именем является номер индексного дескриптора файла (i-node). На следующем, базовом уровне по уникальному имени файла определяются его характеристики: права доступа, адрес, размер и другие. Как уже было сказано, характеристики файла могут входить в состав каталога или храниться в отдельных таблицах. При открытии файла его характеристики перемещаются с диска в оперативную память, чтобы уменьшить среднее время доступа к файлу. В некоторых файловых системах (например, HPFS) при открытии файла вместе с его характеристиками в оперативную память перемещаются несколько первых блоков файла, содержащих данные. 75 Следующим этапом реализации запроса к файлу является проверка прав доступа к нему. Для этого сравниваются полномочия пользователя или процесса, выдавших запрос, со списком разрешенных видов доступа к данному файлу. Если запрашиваемый вид доступа разрешен, то выполнение запроса продолжается, если нет, то выдается сообщение о нарушении прав доступа. На логическом уровне определяются координаты запрашиваемой логической записи в файле, то есть требуется определить, на каком расстоянии (в байтах) от начала файла находится требуемая логическая запись. При этом абстрагируются от физического расположения файла, он представляется в виде непрерывной последовательности байт. Алгоритм работы данного уровня зависит от логической организации файла. После определения номера физического блока, файловая система обращается к системе ввода-вывода для выполнения операции обмена с внешним устройством. В ответ на этот запрос в буфер файловой системы будет передан нужный блок, в котором на основании полученного при работе физического уровня смещения выбирается требуемая логическая запись. Отображаемые в память файлы По сравнению с доступом к памяти, традиционный доступ к файлам выглядит запутанным и неудобным. По этой причине некоторые ОС, начиная с MULTICS, обеспечивают отображение файлов в адресное пространство выполняемого процесса. Это выражается в появлении двух новых системных вызовов: MAP (отобразить) и UNMAP (отменить отображение). Первый вызов передает операционной системе в качестве параметров имя файла и виртуальный адрес, и операционная система отображает указанный файл в виртуальное адресное пространство по указанному адресу. В действительности при отображении файла внутренние системные таблицы изменяются так, чтобы данный файл служил хранилищем страниц виртуальной памяти на диске. Таким образом, чтение по адресу 512 К вызывает страничный отказ, в результате чего страница 0 переносится в физическую память. Аналогично, запись по адресу 512 К + 1100 вызывает страничный отказ, в результате которого страница, содержащая этот адрес, перемещается в память, после чего осуществляется запись в память по требуемому адресу. Если эта страница вытесняется из памяти алгоритмом замены страниц, то она записывается обратно в файл в соответствующее его место. При завершении процесса все отображенные и модифицированные страницы переписываются из памяти в файл. Современные архитектуры файловых систем Разработчики новых операционных систем стремятся обеспечить пользователя возможностью работать сразу с несколькими файловыми системами. В новом понимании файловая система состоит из многих составляющих, в число которых входят и файловые системы в традиционном понимании. Новая файловая система имеет многоуровневую структуру (Рис. ), на верхнем уровне которой располагается так называемый переключатель файловых систем (в Windows 95, например, такой переключатель называется устанавливаемым диспетчером файловой системы - installable filesystem manager, IFS). Он обеспечивает интерфейс между запросами приложения и конкретной файловой системой, к которой обращается это приложение. Переключатель файловых систем преобразует запросы в формат, воспринимаемый следующим уровнем - уровнем файловых систем. Каждый компонент уровня файловых систем выполнен в виде драйвера соответствующей файловой системы и поддерживает определенную организацию файловой системы. Переключатель является единственным модулем, который может обращаться к драйверу файловой системы. Приложение не может обращаться к нему напрямую. Драйвер файловой системы может быть написан в виде реентерабельного кода, что позволяет сразу нескольким приложениям выполнять операции с файлами. Каждый драйвер файловой системы в процес76 се собственной инициализации регистрируется у переключателя, передавая ему таблицу точек входа, которые будут использоваться при последующих обращениях к файловой системе. Рис. 7. Архитектура современной файловой системы Для выполнения своих функций драйверы файловых систем обращаются к подсистеме ввода-вывода, образующей следующий слой файловой системы новой архитектуры. Подсистема ввода вывода - это составная часть файловой системы, которая отвечает за загрузку, инициализацию и управление всеми модулями низших уровней файловой системы. Обычно эти модули представляют собой драйверы портов, которые непосредственно занимаются работой с аппаратными средствами. Кроме этого подсистема ввода-вывода обеспечивает некоторый сервис драйверам файловой системы, что позволяет им осуществлять запросы к конкретным устройствам. Подсистема ввода-вывода должна постоянно присутствовать в памяти и организовывать совместную работу иерархии драйверов устройств. В эту иерархию могут входить драйверы устройств определенного типа (драйверы жестких дисков или накопителей на лентах), драйверы, поддерживаемые поставщиками (такие драйверы перехватывают запросы к блочным устройствам и могут частично изменить поведение существующего драйвера этого устройства, например, зашифровать данные), драйверы портов, которые управляют конкретными адаптерами. Большое число уровней архитектуры файловой системы обеспечивает авторам драйверов устройств большую гибкость - драйвер может получить управление на любом этапе выполнения запроса - от вызова приложением функции, которая занимается работой с файлами, до того момента, когда работающий на самом низком уровне драйвер устройства 77 начинает просматривать регистры контроллера. Многоуровневый механизм работы файловой системы реализован посредством цепочек вызова. В ходе инициализации драйвер устройства может добавить себя к цепочке вызова некоторого устройства, определив при этом уровень последующего обращения. Подсистема ввода-вывода помещает адрес целевой функции в цепочку вызова устройства, используя заданный уровень для того, чтобы должным образом упорядочить цепочку. По мере выполнения запроса, подсистема ввода-вывода последовательно вызывает все функции, ранее помещенные в цепочку вызова. Внесенная в цепочку вызова процедура драйвера может решить передать запрос дальше - в измененном или в неизмененном виде - на следующий уровень, или, если это возможно, процедура может удовлетворить запрос, не передавая его дальше по цепочке. Тема 4.2. Планирование заданий Планирование и диспетчеризация потоков (процесоов) На протяжении существования процесса выполнение его потоков может быть многократно прервано и продолжено. (В системе, не поддерживающей потоки, все сказанное ниже о планировании и диспетчеризации относится к процессу в целом.) Переход от выполнения одного потока к другому осуществляется в результате планирования и диспетчеризации. Работа по определению того, в какой момент необходимо прервать выполнение текущего активного потока и какому потоку предоставить возможность выполняться, называется планированием. Планирование потоков осуществляется на основе информации, хранящейся в описателях процессов и потоков. При планировании могут приниматься во внимание приоритет потоков, время их ожидания в очереди, накопленное время выполнения, интенсивность обращений к вводу-выводу и другие факторы. ОС планирует выполнение потоков независимо от того, принадлежат ли они одному или разным процессам. Так, например, после выполнения потока некоторого процесса ОС может выбрать для выполнения другой поток того же процесса или же назначить к выполнению поток другого процесса. Планирование потоков, по существу, включает в себя решение двух задач: определение момента времени для смены текущего активного потока; выбор для выполнения потока из очереди готовых потоков. Существует множество алгоритмов планирования, по-разному решающих эти задачи. Именно особенности планирования определяют специфику операционной системы. В большинстве ОС планирование осуществляется динамически, т.е. решения принимаются во время работы на основании анализа текущей ситуации. Потоки и процессы появляются в случайные моменты времени и непредсказуемо завершаются. Статический тип планирования может быть использован в специализированных системах, в которых весь набор одновременно выполняемых заданий определен заранее (системы реального времени). Планировщик составляет расписание на основании знаний о характеристиках набора задач. Затем это расписание используется операционной системой для диспетчеризации. Диспетчеризация заключается в реализации найденного в результате планирования (динамического или статистического) решения, то есть в переключении процессора с одного потока на другой. Прежде чем прервать выполнение потока, ОС запоминает его контекст, с тем чтобы впоследствии использовать эту информацию для последующего возобновления выполнения данного потока. Контекст отражает, во-первых, состояние аппаратуры компьютера в момент прерывания потока: значение счетчика команд, содержимое регистров общего назначения, режим работы процессора, флаги, маски прерываний и другие параметры. Вовторых, контекст включает параметры операционной среды, а именно ссылки на открытые 78 файлы, данные о незавершенных операциях ввода-вывода, коды ошибок выполняемых данным потоком системных вызовов и т. д. Диспетчеризация сводится к следующему: сохранение контекста текущего потока, который требуется сменить; загрузка контекста нового потока, выбранного в результате планирования; запуск нового потока на выполнение. В контексте потока отражены, во-первых, состояние аппаратуры компьютера в момент прерывания (значение счетчика команд, содержимое регистров общего назначения, режим работы процессора, флаги, маски прерываний и др. параметры), во-вторых, параметры операционной среды (ссылки на открытые файлы, данные о незавершенных операциях вводавывода, коды ошибок выполняемых данным потоком системных вызовов и т.п.). В контексте потока можно выделить часть, общую для всех потоков данного процесса (ссылки на открытые файлы), и часть, относящуюся только к данному потоку (содержимое регистров, счетчик команд, режим процессора). Этот факт может быть использован для сокращения потерь времени при переключении контекстов. Например, в среде NetWare различаются три вида контекстов – глобальный контекст (контекст процесса), контекст группы потоков и контекст отдельного потока. Соотношение между данными этих контекстов аналогично соотношению глобальных и локальных переменных в программе. Иерархическая организация контекстов ускоряет переключение потоков: при переключении с потока одной группы на поток другой группы в пределах одного процесса глобальный контекст не изменяется, а меняется лишь контекст группы. Переключение глобальных контекстов происходит только при переходе с потока одного процесса на поток другого процесса. Планирование в системах реального времени. Планирование здесь имеет особое значение. Поскольку выполнение процессов привязано к внешним условиям, система должна реагировать на сигналы управляемого объекта в пределах заданных временных ограничений. Системы реального времени подразделяются на жёсткие (hard) и мягкие (soft) в зависимости от степени критичности условий работы. Система называется жёсткой, если последствия несоблюдения временных ограничений катастрофичны – например, система управления полетами или атомной электростанцией. Если же последствия нарушения временных ограничений не столь серьёзны, то система называется мягкой, например, система резервирования билетов. В жёстких системах время выполнения процессов четко ограничено директивными сроками. Директивные сроки – это два числа Tb и Tf. Первое обозначает время, раньше которого процесс не может начать работу, а второе – время, к которому он должен её завершить. В таких системах время завершения выполнения каждой из критических задач должно быть гарантировано для всех возможных сценариев работы системы. Такие гарантии могут быть даны либо в результате исчерпывающего тестирования всех возможных сценариев поведения управляемого объекта и управляющих программ, либо в результате построения статического расписания, либо в результате выбора математически обоснованного динамического алгоритма планирования. Точные критерии возможности существования расписания являются очень сложными в вычислительном отношении. В мягких системах применяются менее затратные способы планирования. В рассмотренных выше системах UNIX System V Release 4, OS/2 и Windows NT имеется приоритетный класс реального времени. Для потоков этого класса обеспечено только предпочтение в скорости обслуживания, но не гарантировано выполнение заданных временных ограничений. Поэтому эти ОС могут быть основой для построения лишь мягких систем реального времени, но непригодны для жёстких систем. За последние годы появился ряд интересных подходов к планированию, основанных на дополнительной информации о заданиях: 79 Время готовности – время, когда задание становится доступным для выполнения. В повторяющемся или периодическом задании время готовности представляет собой последовательность заранее известных времён. Предельное время начала выполнения – время, когда должно начаться выполнение задания. Предельное время завершения выполнения – время, когда задание должно быть полностью завершено. Обычно задания имеют ограничение по предельному времени начала либо завершения выполнения, но не оба одновременно. Время выполнения – время, требующееся заданию для его полного выполнения. Иногда это время известно, иногда система сама оценивает среднее значение. Требования к ресурсам – множество ресурсов, требующихся заданию для его выполнения. Приоритет – мера относительной важности задания. Жёсткие задания реального времени имеют абсолютный приоритет и приводят к сбою системы при нарушении временных ограничений этих заданий. Структура подзадач. Задача может быть разбита на обязательные и необязательные подзадачи, при этом жёсткие предельные сроки имеют только обязательные подзадачи. Для заданной стратегии вытеснения и использования либо предельного времени начала выполнения, либо предельного времени завершения применение планирования, выбирающего для выполнения задание с наиболее ранним предельным временем, позволяет минимизировать долю заданий с нарушенными временными ограничениями. Если определяется предельное время начала работы, то целесообразно применять невытесняющее планирование. В таком случае желательно, чтобы задания после завершения обязательной или критической части самостоятельно блокировались и позволяли выполняться другим заданиям с предельным временем начала работы. Для системы с предельным временем завершения больше подходит вытесняющая стратегия. Рассмотрим пример планирования периодических заданий с предельным временем завершения. Пусть система собирает и обрабатывает данные от двух датчиков, A и B. Сроки сбора данных от датчика A – каждые 20 мс, от датчика B – каждые 50 мс. Процесс снятия данных, включая накладные расходы ОС, занимает: для датчика A – 10 мс, для датчика B – 25 мс. Предположим, что используется схема с приоритетами. В случае более высокого приоритета A задание B получит только 20 мс процессорного времени в двух смежных интервалах по 10 мс, после этого будет достигнуто его предельное время выполнения, а задание ещё не выполнится (см. иллюстрацию ниже). 80 Если более высокий приоритет назначить заданию B, то (что очевидно) в срок не успеет выполниться задание A. Хотя по суммарному времени выполнения 5 заданий А и 2 задания В должны успевать выполниться за 100 мс. В данной ситуации наиболее целесообразно использовать вытесняющее планирование с предельным временем завершения (т.е. каждый раз в ситуации выбора на выполнение выбирается то задание, которое имеет меньшее предельное время завершения). В момент времени t=0 поступают задания A1 и B1. Поскольку предельный срок A1 наступает раньше, сначала выполняется A1. После его завершения начинает выполняться B1, но после появления в момент t=20 задания A2 его предельное время завершения оказывается меньшим, поэтому выполнение B1 прерывается и не продолжается, пока не выполнится A2 (к моменту t=30). В момент времени t=40 появляется очередное задание A3, но его предельное время завершения больше, чем у выполняющегося B1, поэтому сначала оно завершится (в момент t=45), и только затем начнет выполняться A3. Данная схема проиллюстрирована на рисунке. Контрольные вопросы 1. Что такое планирование и каковы его цели? 2. Назовите две основные задачи планирования. 3. В чём отличие статического типа планирования от динамического? В каких системах используется статическое планирование? 4. Что такое диспетчеризация? Какие действия входят в её состав? 5. Каким образом можно уменьшить потери времени при переключении контекста одного потока на другой? 6. Какую из задач планирования позволяют решить невытесняющие алгоритмы планирования? 7. На каких приоритетах основаны алгоритмы, решающие первую задачу планирования – на абсолютных или относительных? Почему? 8. На каких приоритетах основаны алгоритмы, решающие вторую задачу планирования – на абсолютных или относительных? Почему? 9. Каковы особенности планирования в системах реального времени? 10. В чём отличие жёстких систем реального времени от мягких? 81 Тема 4.3. Распределение ресурсов Синхронизация процессов Основной задачей мультипрограммной ОС является распределение ресурсов между процессами и потоками – двумя базовыми единицами работы ОС. В ОС, в которых существуют как процессы, так и потоки, процесс рассматривается как заявка на потребление ресурсов кроме одного –процессорного времени. Процессорное время распределяется ОС между потоками, представляющими собой последовательность команд. Потоки возникли в ОС как средство распараллеливания вычислений. В ОС, не поддерживающих потоков, процесс всегда состоит из одного потока. Все потоки одного процесса используют общие файлы, таймеры, устройства, одно и тоже адресное пространство, одну и туже область оперативной памяти. Каждый поток имеет собственный стек и счетчик команд. Один поток может использовать стек другого. Чтобы организовать взаимодействие и обмен данными, потокам не требуется обращаться к ОС, им достаточно использовать общую память. Один поток записывает, а другой считывает. Потоки разных процессов защищены друг от друга. Для синхронизации процессов и потоков, решающих общие задачи и совместно использующих ресурсы, в ОС существуют специальные средства: критические секции, семафоры, мьютексы, события, таймеры. Потребность в синхронизации, гонки Потребность в синхронизации потоков возникает только в мультикомпьютерных ОС. Сложно сказать на каком этапе выполнения будет находиться процесс в определенный момент времени. Потоки, в общем случае, протекают независимо, асинхронно друг к другу. Любое взаимодействие процессов или потоков связано с их синхронизацией, которая заключается в согласовании их скоростей путем приостановки потока до наступления некоторого события и последующей активизации его при наступлении этого события. Синхронизация лежит в основе любого взаимодействия потоков, связано ли это с распределением ресурсов, или с обменом данными. Например: поток - получатель должен обращаться за данными после того, как они помещены в буфер потоком - отправителем. Если же поток - получатель обратится к данным до момента их поступления в буфер, то он должен быть приостановлен. Пренебрежение вопросами синхронизации может привести к неправильному решению задачи. Пример: задача ведения базы данных клиентов некоторого предприятия Рис.1.. Каждому клиенту в базе данных отводится отдельная запись, в которой среди прочих полей имеются поля заказ и оплата. Программа оформлена как единый процесс, имеющий несколько потоков, в том числе: поток А – который заносит информацию о заказах, поступивших от клиентов, поток B – фиксирует сведения об оплате, выставленных счетов. 82 Поток А А1 А2 А3 Считать запись в буфер Внести изменения в поле «Заказ» Сохранить запись в файле Критическая секция Оплата Заказ Запись о клиенте Поток B B1 B2 B3 Считать запись в буфер Внести изменения в поле «Оплата» Сохранить запись в файле Критическая секция Рис.1. Задача ведения базы данных Оба потока работают над общим файлом базы данных, используя однотипные алгоритмы, включающие три шага. Предположим, что в некоторый момент поток А обновляет поле Заказ записи о клиенте N. Для этого он считывает запись в буфер (А1), модифицирует значение поля Заказ (А2), но записать в базу данных (А3) не успевает, т.к. его выполнение прерывается, например, вследствие завершения кванта времени. Предположим, что потоку В тоже удалось внести сведения об оплате клиента N , он выполняет В1 и В2, а затем прерывается. При этом в буфере у потока В находится запись о клиенте N, в которой поле Заказ имеет первоначальное значение. Когда управление передается потоку А, то он, продолжая свою работу, запишет запись о клиенте N с модифицированным полем Заказ в базу данных (А3). А затем после его прерывания и активизации потока В последний запишет поверх только, что обновленной записи свой вариант записи в которой обновлено значение поля Оплата. Т.о., в базе данных будут зафиксированы сведения о том, что клиент N произвел оплату, но информация о заказе окажется утерянной. Сложность проблемы синхронизации кроется в нерегулярности возникающих ситуаций. Ситуация, когда два или более потоков обрабатывают разделяемые данные, и конечный результат зависит от соотношения скоростей потоков, называется гонками. Критические секции Важным понятием синхронизации потоков является понятие «критической секции» программы (КС). КС – это часть программы, результат выполнения которой может непредсказуемо меняться, если переменные, относящиеся к этой части программы, изменяются другими потоками в то время, когда выполнение этой части еще не завершено. КС всегда определяется по отношению к определенным критическим данным, при несогласованном изменении которых могут возникать нежелательные эффекты. В предыдущем примере такими критическими данными являлись файлы базы данных. Чтобы исключить эффект гонок по отношению к критическим данным, необходимо обеспечить, чтобы в каждый момент времени в критической секции, связанной с этими данными, находился только один поток. При этом неважно, находится этот поток в активном или в приостановленном состоянии. Этот прием называется взаимным исключением. Для синхронизации потоков одного процесса можно использовать глобальные блокирующие переменные (Рис2). 83 Попытка доступа к разделяемому ресурсу D Неделимая операция «проверкаустановка» Ресурс свободен F(D)=1? Нет, занят Да, свободен Занят ресурс F(D)=0 Критическая секция (работа с ресурсом D) Освободить ресурс F(D)=1 Продолжение вычислений Рис.2 Реализация критических секций с использованием критических переменных Каждому набору критических данных ставится в соответствие двоичная переменная, которой поток присваивает значение 0, когда входит в критическую секцию, и значение 1, когда её покидает. При этом потоки могут быть прерваны операционной системой в любой момент времени и в любом месте, исключение - между проверкой и установкой блокирующей переменной. Недостаток: в течение времени, когда один поток находится в критической секции, Попытка доступа к разделяемому ресурсу Системный вызов EnterCriticalSection() Нет Ресурс свободен?F(D)=1? Перевести данный поток в состояние ожидания Да Установить блокирующую переменную в состояние «занято» F(D)=0 Критическая секция (работа с ресурсом D) Установить блокирующую переменную в состояние «свободно» F(D)=1 Системный вызов LeaveCriticalSection(). Перевести поток, ожидающий ресурс D, в состояние «готовность» Продолжение вычислений Рис.3 Реализация взаимного исключения с использованием системных функций входа в критическую секцию и выхода из неё. другой поток, которому требуется этот же ресурс, получив доступ к процессору, будет непрерывно опрашивать блокирующую переменную, бесполезно тратя выделяемое процес84 сорное время, которое могло быть использовано для выполнения какого- либо другого потока. Для устранения этого недостатка во многих ОС предусматриваются специальные системные вызовы для работы с критическими секциями (Рис.3). Например: Windows NT. Перед тем как начать изменения критических данных, поток выполняет системный вызов EnterCriticalSection(). В рамках этого вызова сначала выполняется проверка блокирующей переменной. Если системный вызов определил, что ресурс занят F(D)=0, то он переводит поток в состояние ожидания (D) и делает отметку о том, что данный поток д.б. активизирован, когда соответствующий ресурс освободится. Поток, который в данный момент использует ресурс, после выхода из критической секции должен выполнить системную функцию LeaveCriticalSection(). В результате чего блокирующая переменная принимает значение F(D)=1, а система просматривает очередь ожидающих этот ресурс потоков, и переводит первый поток из очереди в состояние готовности. Т.о. исключается непроизводительная потеря времени. Семафоры Обобщением блокирующих переменных являются семафоры Дийкстры. Вместо двоичных переменных Дийкстра предложил использовать переменные, которые могут принимать целые неотрицательные значения. Такие переменные, используемые для синхронизации вычислительных процессов, называются семафорами. Для работы с семафорами вводится два примитива P и V. Пусть S – семафор. Тогда действия V(S) и P(S) определяются следующим образом: 1.V(S): переменная S увеличивается на 1 единичным действием. Выборка, наращивание и заполнение могут быть прерваны. К S нет доступа другим потокам во время выполнения этой операции. 2.P(S): уменьшение S на 1, если это возможно. Если S=0 и невозможно уменьшение S, оставаясь в области неотрицательных значений, то в этом случае поток, вызывающий операцию P, ждет, пока это уменьшение станет возможным. Успешная проверка и уменьшение - неделимая операция. Никакие прерывания во время выполнения примитивов в P и V невозможны. В частном случае, когда S может принимать только 0 или 1, он превращается в блокирующую переменную. Пример. Даны 2 потока, один пишет в буферный пул, а другой считывает из буферного пула. Пул состоит из n буферов, каждый из них может содержать 1 запись. В общем случае поток- писатель и поток – читатель могут иметь разные скорости и обращаться к буферному пулу с разной интенсивностью. Для правильной совместной работы поток – писатель должен приостанавливаться, когда все буферы оказываются занятыми, и активизироваться при освобождении хотя бы одного буфера. Поток – читатель – приостанавливаться, когда все буферы пусты, и активизироваться при появлении хотя бы одной записи. Ведем 2 семафора: e – число пустых буферов и f- число заполненных буферов. Поток – писатель, прежде всего, выполняет операцию P(e), проверяя, имеются ли в буферном пуле свободные буферы. Если e=0, то нет, следовательно, переходит в состояние ожидания. Если e>0, то он уменьшает число свободных буферов, записывает данные, и после этого наращивает число занятых буферов операцией V(f). Поток – читатель действует аналогичным образом, с той разницей, что начинает работу с проверки наличия занятых буферов, а после чтения данных наращивает количество свободных буферов V(e). Критическим ресурсом здесь является буферный пул, который может быть представлен как набор идентичных ресурсов – отдельных буферов. С буфером могут работать сразу несколько потоков, столько, сколько буферов. Использование двоичной переменной не позволяет организовать доступ к критическому ресурсу более 1 потока. 85 Т.о., семафоры позволяют эффективно решать задачу синхронизации доступа к ресурсным пулам, таким, например, как набор идентичных в функциональном назначении внешних устройств (модемов, принтеров), или набор областей памяти одинаковой величины. Во всех этих случаях с помощью семафоров можно организовать доступ к разделяемым ресурсам сразу нескольких потоков. Тупики Тупики - это проблема синхронизации – взаимные блокировки (дедлоки, клинчи, тупики). Пример. Пусть двум потокам, принадлежащим разным процессам и выполняющимся в режиме мультипрограммирования, для выполнения работы нужно два ресурса: принтер и последовательный порт (распечатка информации, поступающей по модемной связи) А1 А2 А3 А4 А1 В1 В2 Занять порт Занять принтер … Освободить порт Освободить принтер Прерывание А2 потока А В1 В2 Занять принтер Занять порт … Освободить принтер Освободить порт В3 В4 Блокировка потока А А1 А2 Блокировка потока В Прерывание потока А В1 t а) А1 А2 Блокировка потока В Прерывание потока А В1 В2 В3 В4 t б) А1 А2 А3 А4 В1 В2 В3 В4 t в) Рис.4. Возникновение взаимных блокировок при выполнении программы Поток A сначала запрашивает принтер, а затем порт, а поток B запрашивает порт, а потом принтер. Пусть после того, как ОС назначила принтер потоку A и установила связанную с этим ресурсом блокирующую переменную, поток A был прерван. Управление получил поток B, который сначала выполнил запрос на получение COM-порта, затем при выполнении следующей команды был заблокирован, т.к. принтер был уже занят потоком A. Управление снова получил поток A, который сделал попытку занять порт и был заблокирован, т.к. порт выделен уже потоку B. В таком положении потоки могут находиться сколь угодно долго. В зависимости от соотношения скоростей потоков они могут либо взаимно блокировать друг друга а), либо образовывать очереди к разделяемым ресурсам б), либо совершенно независимо использовать ресурсы в). Тупики могут быть образованы большим числом потоков. Тупики могут быть предотвращены: на стадии написания программ; каждый раз при запуске задач ОС анализирует их потребности в ресурсах и определяет, может ли в данной мультипрограммной смеси возникнуть тупик. Если – да, то запуск новой задачи временно откладывается. если тупиковая ситуация возникла, то можно снять часть потоков. Контрольные вопросы 1. Всегда ли взаимодействуют задачи в мультипрограммной системе? 86 Могут ли оказывать друг на друга какое-то влияние независимые задачи? Что такое критические ресурсы? Для чего нужна синхронизация процессов и в чём она состоит? Какие проблемы могут возникать при отсутствии синхронизации взаимодействующих потоков? 6. Что такое критическая секция? 7. Какие требования предъявляются к критическим секциям? 8. Что такое взаимное исключение в проблеме КС? Какие существуют способы его реализации? 9. Чем плох алгоритм с жёсткой синхронизацией? 10. Каковы достоинства алгоритма Деккера? Есть ли у него недостатки? 11. Что такое семафоры? Какие операции применимы к ним? 12. Каковы преимущества семафоров при организации взаимного исключения? Как можно использовать семафоры при работе с КС? 2. 3. 4. 5. Тема 4.4. Защищенность и отказоустойчивость операционных систем Классификация угроз безопасности ОС Классификация угроз по цели: Несанкционированное чтение информации. Несанкционированное изменение информации. Несанкционированное уничтожение. Полное или частичное разрушение операционной системы, полное или частичное ее завешивание, завешивание программных модулей, физическое стирание с диска системных файлов (вирусы, DoS). Классификация по принципу воздействия на ОС: Использование легальных каналов получения информации, например угроза несанкционированного чтения при некорректном определения профиля пользователя администратором. скрытых каналов получения информации – использование недокументированных возможностей ОС (переполнение буфера – запуск некоторого программного кода). Создание новых каналов получения информации с помощью программных закладок. По характеру воздействия на ОС: Активное воздействие – несанкционированное действия злоумышленника в системе (подбор пароля, украли базу паролей). Пассивное воздействие – несанкционированное наблюдение злоумышленника за процессами, происходящими в системе (сниффер). По типу слабости защиты: Неадекватная политика безопасности, в том числе, ошибки администратора системы. Ошибки и недокументированные возможности программного обеспечения ОС: люки – случайные или преднамеренные служебные входы. Ранее внедренная программная закладка. По способу воздействия на объект атаки: Непосредственное воздействие. Превышение пользователем своих полномочий. Работа от имени другого пользователя. Использование результатов работы другого пользователя (перехват информационных потоков). По способу действий злоумышленника: o В интерактивном режиме. 87 В пакетном режиме (с помощью специально написанной программы, скрипта, которая действует самостоятельно, без участия злоумышленника). По объекту атаки: ОС в целом. Объекты ОС (файлы, устройства, и т.д.). Субъекты ОС (пользователи, системные процессы, и т.д.). Каналы передачи данных. По используемым средствам атаки: o Штатные средства ОС, без использования дополнительного ПО. o ПО третьих фирм (вирусы, вредоносные программы, отладчики, сетевые мониторы, сканеры). o Специально разработанное ПО. o Типичные атаки на ОС 1. Сканирование файловой системы 2. Кража ключевой информации. Простейший случай – подсматривание паролей, набираемых пользователем. 3. Подбор пароля. 4. Сборка мусора. В данном случае восстанавливается информация, которая помечена как удаленная, но реально не удаленная с диска или из памяти. Например, если в памяти обрабатывался конфиденциальный документ, то после закрытия текстового редактора, можно просканировать память и выделить его. 5. Превышение полномочий. Злоумышленник использует дырки в ПО или ОС и получает полномочия, превышающие те, которые были ему выданы в соответствии с политикой безопасности. Обычно это достигается путем запуска программы от имени другого пользователя или подмены динамически подгружаемой библиотеки. 6. Программные закладки. 7. Жадные программы. Так называются программы, преднамеренно захватывающие значительную часть ресурсов компьютера, в результате чего другие программы не могут выполняться или выполняются крайне медленно и неэффективно. Часто запуск жадной программы приводит к краху ОС. Понятие защищенной операционной системы Операционная система называется защищенной, если она обеспечивает защиту от основных классов угроз, рассмотренных ранее. Данная система должна обязательно содержать следующие компоненты: 1. Средства разграничения доступа пользователей к ресурсам. 2. Средства проверки подлинности пользователя. 3. Средства противодействия случайному или преднамеренному выводу операционной системы из строя. Административные меры защиты Защиту ОС невозможно обеспечить только аппаратно-программными средствами. Нужна постоянная квалифицированная поддержка со стороны администратора. Без постоянной квалифицированной поддержки со стороны администратора, даже самая надежная ПАЗИ оборачивается фикцией. Основными административными мерами защиты являются следующие: 1. Постоянный контроль корректности функционирования ОС, особенно подсистемы ее защиты. Регистрация событий, ведение логов и контроль логов. 2. Постоянное исследование и корректирование политики безопасности. После установки программных продуктов, атак и т.д. 3. Инструктирование пользователей ОС о необходимости соблюдения мер безопасности при работе с ОС и контроль за соблюдением этих мер. 88 4. Регулярное создание и обновление резервных копий программ и данных ОС. 5. Постоянный контроль изменений в файлах конфигурации данных и политике безопасности ОС. Под аппаратным обеспечение средств защиты ОС понимается совокупность средств и методов, используемых для решения следующих задач: Управление оперативной и виртуальной памятью компьютера. Распределение процессорного времени между задачами в многозадачной ОС. Синхронизация выполнения параллельных задач в многозадачной ОС. Обеспечение корректности совместного доступа задач к ресурсам ОС. Исключение тупиковых ситуаций в процессе совместного доступа задач к ресурсам ОС. Большая часть из этих задач в значительной степени решаются с помощью аппаратнореализованных функций процессоров и других узлов компьютера. Базовые технологии безопасности Помимо различных угроз со стороны злоумышленников, существует опасность потери данных в результате несчастного случая. Например, форс-мажорные ситуации, аппаратные или программные ошибки, человеческий фактор. Большая часть этих проблем может быть разрешена при помощи своевременного создания соответствующих резервных копий, хранимых на всякий случай вдали от оригинальных данных. Один из самых распространенных способов защиты информации - криптография - наука, изучающая способы шифрования открытого текста. Перечислим базовые технологии безопасности: 1. Шифрование с секретным ключом -система шифрования, обладающая следующим свойством: по ключу шифрования легко найти ключ дешифрации. 2. Шифрование с открытым ключом - в этом случае для дешифрации используется простая операция, но для дешифрации требуется выполнить огромный объем сложных вычислений. 3. Необратимые функции - зашифрованное сообщение невозможно расшифровать или очень трудно. 4. Цифровые подписи - удостоверяют документы, как и настоящие подписи. Аутентификация, авторизация, аудит Аутентификация - процесс определения взаимодействия клиента с настоящим файловым сервером. Так, когда пользователь регистрируется на компьютере, ОС, как правило, желает определить, кем является данный пользователь и запускает процесс, называемый аутентификацией пользователя. Использование ПК для доступа к серверам локальной сети или для входа в коммерческий web-сайт всегда требует регистрации. Большинство методов аутентификации пользователей основаны на распознавании: 1. Чего-то, известного пользователю (например, пароля); 2. Чего-то, имеющегося у пользователя (например, смарт-карта); 3. Чего-то, чем является пользователь (аутентификация с использованием биометрических данных). Отказоустойчивость файловых и дисковых систем Отказоустойчивость (fault tolerance), способность системы выполнять свои функции при отказе отдельных элементов аппаратуры и неполной доступности данных, (скрыть от пользователя отказ отдельных ее элементов). В отказоустойчивой системе отказ одного из ее элементов приводит к некоторому снижению качества ее работы (деградации), а не к полному останову. Так, при отказе одного из файловых серверов в предыдущем примере увеличивает89 ся только время доступа к базе данных из-за уменьшения степени распараллеливания запросов, но в целом система будет продолжать выполнять свои функции. Восстанавливаемость файловых систем. Избыточные дисковые подсистемы RAID. В основе средств обеспечения отказоустойчивости дисковой памяти лежит общий для всех отказоустойчивых систем принцип избыточности, и дисковые подсистемы RAID (Redundant Array of Inexpensive Disks, дословно — «избыточный массив недорогих дисков») являются примером реализации этого принципа. Идея технологии RAID-массивов состоит в том, что для хранения данных используется несколько дисков, даже в тех случаях, когда для таких данных хватило бы места на одном диске. Организация совместной работы нескольких централизованно управляемых дисков позволяет придать их совокупности новые свойства, отсутствовавшие у каждого диска в отдельности. RAID-массив может быть создан на базе нескольких обычных дисковых устройств, управляемых обычными контроллерами, в этом случае для организации управления всей совокупностью дисков в операционной системе должен быть установлен специальный драйвер. В Windows NT, например, таким драйвером является FtDisk — драйвер отказоустойчивой дисковой подсистемы. Существуют также различные модели дисковых систем, в которых технология RAID реализуется полностью аппаратными средствами, в этом случае массив дисков управляется общим специальным контроллером. Дисковый массив RAID представляется для пользователей и прикладных программ единым логическим диском. Такое Логическое устройство может обладать различными качествами в зависимости от стратегии, заложенной в алгоритмы работы средств централизованного управления и размещения информации на всей совокупности дисков. Это логическое устройство может, например, обладать повышенной отказоустойчивостью или иметь производительность, значительно большую, чем у отдельно взятого диска, либо обладать обоими этими свойствами. Различают несколько вариантов RAID-массивов, называемых также уровнями: RAID-0, RAID-1, RAID-2, RAID-3, RAID-4, RAID-5 и некоторые другие. При оценке эффективности RAID-массивов чаще всего используются следующие критерии: степень избыточности хранимой информации (или тесно связанная с этим критерием стоимость хранения единицы информации); производительность операций чтения и записи; степень отказоустойчивости. Рис. 1 Организация массива RAID-0 В логическом устройстве RAID-0 (рис. 1) общий для дискового массива контроллер при выполнении операции записи расщепляет данные на блоки и передает их параллельно на все диски, при этом первый блок данных записывается на первый диск, второй — на второй и т. д. Различные варианты реализации технологии RAID-0 могут отличаться размерами бло90 ков данных, например в наборах с чередованием, представляющих собой программную реализацию RAID-0 в Windows NT, на диски поочередно записываются полосы данных (strips) по 64 Кбайт. При чтении контроллер мультиплексирует блоки данных, поступающие со всех дисков, и передает их источнику запроса. По сравнению с одиночным диском, в котором данные записываются и считываются с диска последовательно, производительность дисковой конфигурации RAID-0 значительно выше за счет одновременности операций записи/чтения по всем дискам массива. Рис. 2. Организация массива RAID-1 Уровень RAID-0 не обладает избыточностью данных, а значит, не имеет возможности повысить отказоустойчивость. Если при считывании произойдет сбой, то данные будут безвозвратно испорчены. Более того, отказоустойчивость даже снижается, поскольку если один из дисков выйдет из строя, то восстанавливать придется все диски массива. Имеется еще один недостаток — если при работе с RAID-0 объем памяти логического устройства потребуется изменить, то сделать это путем простого добавления еще одного диска к уже имеющимся в RAID-массиве дискам невозможно без полного перераспределения информации по всему изменившемуся набору дисков. Уровень RAID-1 (рис. 2) реализует подход, называемый зеркальным копированием (mirroring). Логическое устройство в этом случае образуется на основе одной или нескольких пар дисков, в которых один диск является основным, а другой диск (зеркальный) дублирует информацию, находящуюся на основном диске. Если основной диск выходит из строя, зеркальный продолжает сохранять данные, тем самым обеспечивается повышенная отказоустойчивость логического устройства. За это приходится платить избыточностью — все данные хранятся на логическом устройстве RAID-1 в двух экземплярах, в результате дисковое пространство используется лишь на 50 %. При внесении изменений в данные, расположенные на логическом устройстве RAID1, контроллер (или драйвер) массива дисков одинаковым образом модифицирует и основной, и зеркальный диски, при этом дублирование операций абсолютно прозрачно для пользователя и приложений. Удвоение количества операций записи снижает, хотя и не очень значительно, производительность дисковой подсистемы, поэтому во многих случаях наряду с дублированием дисков дублируются и их контроллеры. Такое дублирование (duplexing) помимо повышения скорости операций записи обеспечивает большую надежность системы — данные на зеркальном диске останутся доступными не только при сбое диска, но и в случае сбоя дискового контроллера. Некоторые современные контроллеры (например, SCSI-контроллеры) обладают способностью ускорять выполнение операций чтения с дисков, связанных в зеркальный набор. При высокой интенсивности ввода-вывода контроллер распределяет нагрузку между двумя 91 дисками так, что две операции чтения могут быть выполнены одновременно. В результате распараллеливания работы по считыванию данных между двумя дисками время выполнения операции чтения может быть снижено в два раза Таким образом, некоторое снижение производительности, возникающее при выполнении операций записи, с лихвой компенсируется повышением скорости выполнения операций чтения. Уровень RAID-2 расщепляет данные побитно: первый бит записывается на первый диск, второй бит — на второй диск и т. д. Отказоустойчивость реализуется в RAID-2 путем использования для кодирования данных корректирующего кода Хэмминга, который обеспечивает исправление однократных ошибок и обнаружение двукратных ошибок. Избыточность обеспечивается за счет нескольких дополнительных дисков, куда записывается код коррекции ошибок. Так, массив с числом основных дисков от 16 до 32 должен иметь три дополнительных диска для хранения кода коррекции. RAID-2 обеспечивает высокую производительность и надежность, но он применяется в основном в мэйнфреймах и суперкомпьютерах. В сетевых файловых серверах этот метод в настоящее время практически не используется из-за высокой стоимости его реализации. В массивах RAID-3 используется расщепление (stripping) данных на массиве дисков с выделением одного диска на весь набор для контроля четности. То есть если имеется массив из N дисков, то запись на N-1 из них производится параллельно с побайтным расщеплением, а N-й диск используется для записи контрольной информации о четности. Диск четности является резервным. Если какой-либо диск выходит из строя, то данные остальных дисков плюс данные о четности резервного диска позволяют не только определить, какой из дисководов массива вышел из строя, но и восстановить утраченную информацию. Это восстановление может выполняться динамически, по мере поступления запросов, или в результате выполнения специальной процедуры восстановления, когда содержимое отказавшего диска заново генерируется и записывается на резервный диск. Рассмотрим пример динамического восстановления данных. Пусть массив RAID-3 состоит из четырех дисков: три из них — ДИСК 1, ДИСК 2 и ДИСК 3 — хранят данные, а ДИСК 4 хранит контрольную сумму по модулю 2 (XOR). И пусть на логическое устройство, образованное этими дисками, записывается последовательность байт, каждый из которых имеет значение, равное его порядковому номеру в последовательности. Тогда первый байт 0000 0001 попадет на ДИСК 1, второй байт 0000 0010 - на ДИСК 2, а третий по порядку байт - на ДИСК 3. На четвертый диск будет записана сумма по модулю 2, равная в данном случае 0000 0000 (рис. 3). Вторая строка таблицы, приведенной на рисунке, соответствует следующим трем байтам и их контрольной сумме и т. д. Представим, что ДИСК 2 вышел из строя. Рис.3 Пример распределения данных по дискам массива RAID-3 При поступлении запроса на чтение, например, пятого байта (он выделен жирным шрифтом) контроллер дискового массива считывает данные, относящиеся к этой строке со всех трех оставшихся дисков — байты 0000 0100, 0000 0110, 0000 0111 — и вычисляет для них сумму по модулю 2. Значение контрольной суммы 0000 0101 и будет являться восстановленным значением потерянного из-за неисправности пятого байта. Если же требуется записать данные на отказавший диск, то эта операция физически не выполняется, вместо этого корректируется контрольная сумма — она получает такое значение, как если бы данные были действительно записаны на этот диск. Однако динамическое восстановление данных снижает производительность дисковой подсистемы. Для полного восстановления исходного уровня производительности необходи92 мо заменить вышедший из строя диск и провести регенерацию всех данных, которые хранились на отказавшем диске. Рис. 4. Организация массива RAID-3 Минимальное количество дисков, необходимое для создания конфигурации RAID-3, равно трем. В этом случае избыточность достигает максимального значения — 33 %. . При увеличении числа дисков степень избыточности снижается, так, для 33 дисков она составляет менее 1%. Уровень RAID-3 позволяет выполнять одновременное чтение или запись данных на несколько дисков для файлов с длинными записями, однако следует подчеркнуть, что в каждый момент выполняется только один запрос на ввод-вывод, то есть RAID-3 позволяет распараллеливать ввод-вывод в рамках только одного процесса (рис. 4). Таким образом, уровень RAID-3 повышает как надежность, так и скорость обмена информацией. Организация RAID-4 аналогична RAID-3, за тем исключением, что данные распределяются на дисках не побайтно, а блоками. За счет этого может происходить независимый обмен с каждым диском. Для хранения контрольной информации также используется один дополнительный диск. Эта реализация удобна для файлов с очень короткими записями и большей частотой операций чтения по сравнению с операциями записи, поскольку в этом случае при подходящем размере блоков диска возможно одновременное выполнение нескольких операций чтения. Рис. 5. Организация массива RAID-5 93 Однако по-прежнему допустима только одна операция записи в каждый момент времени, так как все операции записи используют один и тот же дополнительный диск для вычисления контрольной суммы. Действительно, информация о четности должна корректироваться каждый раз, когда выполняется операция записи. Контроллер должен сначала считать старые данные и старую контрольную информацию, а затем, объединив их с новыми данными, вычислить новое значение контрольной суммы и записать его на диск, предназначенный для хранения контрольной информации. Если требуется выполнить запись в более чем один блок, то возникает конфликт по обращению к диску с контрольной информацией. Все это приводит к тому, что скорость выполнения операций записи в массиве RAID-4 снижается. В уровне RAID-5 (рис. 5) используется метод, аналогичный RAID-4, но данные о контроле четности распределяются по всем дискам массива. При выполнении операции записи требуется в три раза больше оперативной памяти. Каждая команда записи инициирует ту же последовательность «считывание—модификация—запись» в нескольких дисках, как и в методе RAID-4. Наибольший выигрыш в производительности достигается при операциях чтения. Поскольку информация о четности может быть считана и записана на несколько дисков одновременно, скорость записи по сравнению с уровнем RAID-4 увеличивается, однако она все еще гораздо ниже скорости отдельного диска метода RAID-1 или RAID-3. Кроме рассмотренных выше имеются еще и другие варианты организации совместной работы избыточного набора дисков, среди них можно особо отметить технологию RAID-10, которая представляет собой комбинированный способ, при котором данные «расщепляются» (RAID-0) и зеркально копируются (RAID-1) без вычисления контрольных сумм. Обычно две пары «зеркальных» массивов объединяются и образуют один массив RAID-0. Этот способ целесообразно применять при работе с большими файлами. Контрольные вопросы 1. Что такое безопасность? 2. Когда возникает необходимость защиты информации? 3. Какие существуют задачи безопасности? 4. Что означает целостность данных? 5. Что значит модификация данных? 6. Что означает доступность системы? 7. Какие существуют технологии безопасности? 8. Что такое аутентификация? 9. Какие существуют методы аутентификации? 10. Что такое отказоустойчивость? 11. Как влияет на отказоустойчивую систему отказ какого-либо ее элемента? 12. Каково свойство всех RAID-систем? Список тем рефератов 1. Программные средства человеко-машинного интерфейса. Мультимедиа. Аудио. Видео. Просмотр, создание мультимедиа. 2. Операционные оболочки (Total Commander, Norton Commander, Far, Explorer и т.д.). Назначение и возможности оболочки. Панели и система меню. Настройка оболочки. Структура и принципы функционирования. Интерфейс. Основные компоненты. 3. Назначение, функции сетевых ОС. Общий обзор сетевых ОС: NetWare, Windows NT Server, LAN Server. 4. Методы шифрования данных. 5. Компьютерные вирусы. Классификация. Способы распространения. Средства борьбы. 6. Защита от компьютерных вирусов. Программы для защиты от вирусов (Norton Antivirus, AVP и пр.). 94 7. Методы сжатия изображений, аудио, видео. 8. Файловые системы. NTFS, FAT16, FAT32. 9. Распределенные вычисления в сети Internet. 10. Системное программное обеспечение. (Norton Utilites, Speed Disk, CheckDisk, дефрагментаторы и пр.) 11. Восстановление данных. Программное обеспечение для восстановления данных (EasyRecovery, Restorer2000 и т.д.). Особенности восстановления для различных файловых систем. 12. История развития ОС Windows. 13. Безопасность ОС Windows NT. 14. Графический интерфейс Linux. 15. Использование памяти в Windows NT. 16. Особенности ОС Windows 10. Список использованных источников Основные источники: 1. Олифер В.Г., Сетевые операционные системы / В.Г. Олифер, А.А. Олифер – Спб.: Питер, 2012- 545с. 2. Попов И.И., Операционные системы, среды и оболочки: Учебное пособие/И.И.Попов, Т.Л. Партыка - М.:ФОРУМ: ИНФРА-М,2014 -560с. 3. Таненбаум Э., Современные операционные системы / Э. Таненбаум - Спб.: Питер, 2014- 1120с. Дополнительные источники: 1. Максимов Н.В., Архитектура ЭВМ вычислительных систем: Учебник /Н.В. Максимов, Т.Л. Партыка, И.И.Попов- М.:ФОРУМ: ИНФРА-М, 2014.-600с. Интернет-источники: 1. Котельников Е., Введение во внутренне устройство Windows: [Электронный ресурс]: http://www.intuit.ru/studies/courses/10471/1078/info 2. Сафонов В., Основы современных операционных систем: [Электронный ресурс]: http://www.intuit.ru/studies/courses/641/497/info 3. Windows 10, Материал из Википедии — свободной энциклопедии [Электронный ресурс]: https://ru.wikipedia.org/wiki/Windows_10 Периодические издания: 1. Информатика. Методический журнал для учителей информатики. М.: Издательский дом «Первое сентября». Издается ежемесячно. 95