«Карпачев Г.И. Операционные системы и среды Учебное пособие для студентов средних специальных учебных заведений специальности 2203 “Программное обеспечение вычислительной техники и автоматизированных систем” Новосибирск ...»
Новосибирский Государственный университет
Высший Колледж Информатики
Карпачев Г.И.
Операционные системы и среды
Учебное пособие
для студентов средних специальных учебных заведений специальности 2203
“Программное обеспечение вычислительной техники и автоматизированных
систем”
Новосибирск
2005
ББК 32,973-018,2
УДК 681,3,066 В основе учебного пособия лежат материалы из учебника В.Г.Олифер, Н.А.Олифер “Сетевые операционные системы”, предназначенного для высших учебных заведений, отобранные в соответствии с рабочей программой дисциплины “Операционные системы и среды” для специальности (группы специальностей) 2203 “Программное обеспечение вычислительной техники и автоматизированных систем” с некоторыми дополнениями отражающими текущие достижения в области информатики.
Операционные системы и среды
1. Эволюция операционных систем (ОС)
Мультипрограммирование ОС для мэйнфреймов
ОС и глобальные сети
ОС миниЭВМ и первых локальных сетей ЭВМ
ОС 80-х годов
Современный этап развития ОС
2. Назначение и функции ОС
ОС для автономного компьютера
ОС как виртуальная машина
ОС как система управления ресурсами
Функциональные компоненты ОС автономного компьютера
Управление файлами и внешними устройствами
Защита данных и администрирование
Интерфейс прикладного программирования
Пользовательский интерфейс
Сетевые операционные системы (СОС)
Сетевые и распределенные операционные системы (РОС)
Функциональные компоненты СОC
Встроенные сетевые службы и оболочки
Одноранговые и серверные сетевые ОС
Требования к современным ОС
3. Архитектура операционной системы
Ядро и вспомогательные модули ОС
Ядро в привилегированном режиме
Многослойная структура ОС
Аппаратная зависимость и переносимость ОС
Машинно-зависимые компонеты ОС
Переносимость ОС
Микроядерная архитектура
Совместимость и множественные прикладные среды
4. Процессы и потоки
Мультипрограммирование в системе разделения времени (СРВ)
Мультипрограммирование в системе реального времени (Системы реального времени)........ Мультипроцессорная обработка
Планирование потоков и процессов
Создание потоков и процессов
Планирование и диспетчеризация потоков
Состояния потока
Вытесняющие и невытесняющие алгоритмы планирования
Алгоритмы планирования, основанные на квантовании
Алгоритмы планирования, основанные на приоритетах
Смешанные алгоритмы планирования
Мультипрограммирование на основе прерываний
Системные вызовы
Синхронизация процессов и потоков
Необходимость синхронизации и гонки
Блокирующие переменные
Семафоры Дийкстра
Тупики
Синхронизирующие объекты ОС
Сигналы
5. Управление памятью
Типы адресов
Алгоритмы распределения памяти
Свопинг и виртуальная память
Разделяемые сегменты памяти
Иерархия запоминающих устройств
6. Управление файловыми системами и вводом-выводом
Организация параллельной работы устройств ввода-вывода и ОС
7. Распределенная обработка в сетевых ОС
Механизм передачи сообщений в распределенных сетях
Синхронизация
Способы адресации
Вызов удаленных процедур
Связывание клиента с сервером
8 Сетевые файловые системы
Модель сетевой ФС
Интерфейс СФС
9. Сетевая безопасность
Классификация угроз
Политика безопасности
Базовые технологии безопасности
Технология защищенного канала
10. Операционная система MS-DOS
Технология работы в MS-DOS
Командный файл
Командный файл автонастройки ОС autoexec.bat
Настройка ОС файлом конфигурации - CONFIG.SYS
Norton Commander
Приложение
Информатика. Основные термины и определения
1. Эволюция операционных систем (ОС) Идея компьютера была предложена английским математиком Чарльзом Бэббиджем в середине 19 века и представляла механическую аналитическую машину. Первые цифровые вычислительные машины (ЦВМ) были созданы во время 2-ой мировой войны при создании атомной бомбы. Первые ламповые (электронные) ЭЦВМ были созданы в середине 40-х годов века. На первых машинах одна и та же группа людей участвовала и в проектировании и в эксплуатации и в программировании ЦВМ. Это была скорее научно-исследовательская работа в области вычислительной техники (ВТ), а не использование ЭВМ в качестве инструмента решения задач. Программирование осуществлялось исключительно на машинном языке. Не было никакого системного программного обеспечения (СПО), кроме библиотек математических и служебных подпрограмм. Все задачи по организации вычислительного процесса решались вручную каждым программистом с пульта управления (ПУ), который представлял собой примитивное устройство ввода-вывода, состоящее из кнопок, переключателей и индикаторов. Программа представляла собой последовательность машинных команд загружаемых с ПУ и запускаемых на счет кнопкой ПУСК. Первые шаги по автоматизации программирования связаны с появлением АВТОКОДОВ, системных программ, освобождающих программиста от использования абсолютных адресов в программах. Автокод позволял присваивать мнемонические имена переменным, операциям и адресам оперативной запоминающей памяти (ОЗУ) и регистрам арифметико-логического устройства (АЛУ). С середины 50-х г.г. появилась новая техническая база – полупроводники. Выросло быстродействие АЛУ, объемы оперативной и внешней памяти, надежность оборудования.
Появились первые алгоритмические языки и к библиотекам математических и служебных подпрограмм добавились трансляторы с языков программирования – новый вид системного программного обеспечения. Выполнение каждой программы требовало включения большого количества вспомогательных работ: загрузку нужного транслятора (АЛГОЛ, ФОРТРАН, КОБОЛ), запуск трансляторов и получение программ в машинных кодах (исполняемых программ), связывание программ с библиотечными подпрограммами, загрузку программ в ОЗУ, запуск программ, вывод результатов на периферийное устройство. Для организации эффективного совместного использования ЭВМ использовались операторы, профессионально организующие вычислительный процесс. Однако с ростом производительности (быстродействия) ЭВМ, процессор большую часть времени простаивал в ожидании, пока оператором будет запущена очередная задача. Появилась ПАКЕТНАЯ обработка заданий, автоматизировавшая работу оператора по организации вычислительного процесса. Был разработан формализованный язык управления работами (ЯУР), с помощью которого программисты сообщали оператору и вычислительной системе (ВС), какие действия и в какой последовательности он желает производить на ЭВМ. Оператор составлял пакеты заданий, которые в дальнейшем без его участия последовательно запускались на выполнение управляющей программой – монитором. Монитор был в состоянии самостоятельно обрабатывать наиболее часто встречающиеся при работе программ аварийные ситуации, такие как отсутствие исходных данных, переполнение регистров, деление на ноль, обращение к несуществующей области памяти и т.д. Пакет обычно представлял набор перфокарт, который мог быть занесен на магнитную ленту (МЛ) или магнитный диск (МД). Сама программамонитор в первых реализациях также хранилась на перфокартах или перфоленте, а позднее на МЛ или МД. Ранние системы пакетной обработки значительно сократили время на вспомогательные действия по организации вычислительного процесса. Однако, программисты лишились непосредственного доступа к ЭВм, что снизило эффективность их работы – внесение любого исправления в программу требовало значительного времени, чем при интерактивной работе за пультом машины.
Мультипрограммирование ОС для мэйнфреймов К середине 60-х г.г. произошел переход от транзисторов к интегральным микросхемам и появились ЭВМ следующего поколения. С 1965 по 1976 г.г. были разработаны сложные компьютерные архитектуры (IBM 360). В этот период были реализованы все основные механизмы присущие современным ОС: мультипрограммирование, мультипроцессирование, многотерминальный многопользовательский режим, виртуальная память, файловые системы, разграничение доступа и сетевая работа. Это был период расцвета системного программирования, превратившегося в отрасль индустрии, влияющей на практическую деятельность миллионов людей.
Революционным событием стала промышленная реализация мультипрограммрования – способа организации вычислительного процесса, при котором в памяти ЭВМ находилось одновременно несколько программ, попеременно выполняющихся на одном процессоре. Это позволило резко увеличить эффективность использования процессора ВС, компьютер мог использоваться почти постоянно, а не менее половины времени как раньше.
Мультипрограммирование имеет 2 варианта:
В пакетном режиме процессор не простаивал, пока одна программа выполняла операции ввода-вывода, а переключался на другую готовую к выполнению программу. В результате достигалась сбалансированная загрузка выходных устройств компьютера, а следовательно увеличивалось число задач, решаемых в единицу времени.
недостаток пакетного режима обработки лишение пользователя возможности интерактивного взаимодействия со своим программами устранялся режимом – системой разделения времени (СРВ). Этот вариант рассчитан на многотерминальные системы, когда каждый пользователь работает за своим терминалом. В СРВ каждому пользователю периодически выделяется квант процессорного времени, что создает ему иллюзию единоличного владения ЭВМ ( ОС MULTICS, TSS/360 (IBM)).
Эффективность использования оборудования в СРВ ниже, чем в системах пакетной обработки, что является платой за удобство работы пользователя.
Многотерминальный режим использовался не только в СРВ, но и в системах пакетной обработки. Такие ОС получили название систем удаленного ввода заданий.
Терминальные комплексы могли располагаться на большом расстоянии от процессора, соединяясь систем ним систем помощью различных глобальных связей – модемных соединений телефонных сетей или выделенных каналов. Работа терминалов поддерживалась специальными программными модулями, реализующими различные протоколы связи.
К этому времени существенно изменились функции между аппаратными и программными средствами ЭВМ. ОС стали неотъемлемой частью ЭВМ, играя роль” продолжения ” аппаратуры.
При разделении ресурса ЭВМ между программами необходимо быстрое переключение процессора систем одной программы на другую, нужна надежная защита программ и данных от преднамеренной или непреднамеренной порчи другой программой. В процессорах появился привилегированный и пользовательский режимы работы, специальные регистры для быстрого переключения с одной программы на другую, средства защиты областей памяти, развитая система прерываний.
В привилегированном режиме ОС, процессор мог выполнять все команды, в том числе и те из них, которые осуществляли распределение и защиту ресурсов ЭВМ. Программы пользователя не могли иметь доступа к некоторым командам процессора. Система прерываний позволяла синхронизировать работу устройств, работающих параллельно и синхронно, таких как каналы ввода-вывода, диски, принтеры и т.д. аппаратная поддержка ОС стала неотъемлемым свойством любых ВС, включая персональные компьютеры.
Еще одна важная особенность этого периода это появление семейств программносовместимых машин и ОС для них. Программная совместимость требовала и совместимости ОС. ОС, удовлетворяющие этим требованиям оказались чрезвычайно сложными и дорогими.
Например, OS/360 объем кода которой превышал 8 Мегабайт стоила IBM около 80 млн. $.
В начале 70-х г.г. появились первые сетевые ОС, которые позволили рассредоточить не только пользователей, но и организовать распределенное хранение и обработку данных между несколькими ЭВМ связанными электрическими связями. Любая сетевая операционная система (СОС) выполняла кроме функций локальной ОС, функции взаимодействия по сети систем ОС других ЭВМ. Программные модули, реализующие сетевые функции, появились в Ос постепенно, по мере развития сетевых технологий, аппаратной базы ЭВМ и возникновения новых задач, требующих сетевой обработки.
В 1969г. Министерство Обороны США инициировало работу по объединению суперЭВМ оборонных и научно-исследовательских центров в единую сеть. Эта сеть, получившая название ARPANET явилась отправной точкой для создания самой известной глобальной сети Интернет.
ARPANET объединяла ЭВМ различных типов, управляемых разными ОС с добавленными модулями, реализующими коммуникационные протоколы, общие для всех ЭВМ сети. IBM разработала собственную сетевую архитектуру для своих мэйнфреймов (SNA – System NetWork Architeture). В Европе был разработан стандарт Х25 для сетей систем коммутацией пакетов, ставший международным. Х25 обеспечивает работу сети ЭВМ, каждая их которых управляется собственной ОС.
ОС миниЭВМ и первых локальных сетей ЭВМ К середине 70 - х г.г. наряду с суперкомпьютерами широкое распространение получили миниЭВМ (PDP-11. HP, CM), Они использовали преимущества больших интегральных схем (БИС) позволявшие реализовывать достаточно мощные функции при сравнительно невысокой стоимости машины.
Архитектура миниЭВМ была значительно упрощена по сравнению с суперЭВМ, что отразилось и на ОС. ОС миниЭВМ часто делали специализированными. Чаще всего они обеспечивали режим разделения времени или режим реального времени. Эти ОС не всегда были многопользовательскими. Важной вехой стало создание ОС UNIX для PDP-7.
Программный код для UNIX был на 90% написан на языке высокого уровня С. Широкое использование эффективных С-компиляторов сделало UNIX уникальной ОС, легко переносимой на другие типы ЭВМ. Это была первая открытая ОС, которую могли совершенствовать простые пользователи.
Доступность миниЭВМ и их распространенность на предприятиях получили мощным стимулом для создания локальных вычислительных сетей (ЛВС). Первые ЛВС строились с помощью нестандартного коммуникационного оборудования, в простейшем случае путем прямого соединения последовательных портов миниЭВМ. Программное обеспечение (ПО) реализовывалось в виде пользовательских приложений. Первое сетевое приложение для ОС UNIX – UUCP (Unix to Unix Copy Programm) появилось в 1976 г.
Наиболее важные события 80-х годов:
Внедрение протоколов TCP/IP в ARPANET придало этой сети все основные черты, которые определяют Интернет. Интернет стал отличным полигоном для испытаний многих СОС, позволившим проверить в реальных условиях возможности их взаимодействия, степень масштабируемости, способность работать в экстремальных условиях при работе тысяч пользователей.
TCP/IP стал главным транспортным механизмом Интернета и характеризуется:
В это десятилетие появилось несколько новых совершенных версий ОС UNIX (Sun OS, HPUX, IRIX и др.). Появились РС, которые с точки зрения архитектуры не отличались от миниЭВМ, но по стоимости были существенно ниже. РС стали использоваться неспециалистами, что потребовало разработки более “дружелюбного” интерфейса. РС стали причиной бурного роста ЛВС. В результате ОС РС приобрели черты СОС. Однако, это проявилось не сразу. Первая версия ОС РС – MS DOS компании MicroSoft была однопрограммная однопользовательская ОС с интерфейсом командной строки, способная стартовать с дискеты. Основными задачами для нее были управление файлами, расположенными на гибких и жестких дисках в UNIX – подобной иерархической файловой системе, а также поочередный запуск программ. Не было привилегированного режима, мультипрограммирования. Недостающие функции для MS DOS компенсировались внешними программами, предоставляющими удобный графический интерфейс (Norton Commander) или средства тонкого управления дисками (PC Tools).
Сетевые функции реализовывались в основном сетевыми оболочками, работавшими поверх ОС (с версии MS DOS 3.1). В 1984 году Microsoft выпустила продукт Microsoft NetWorks (MSNet). Некоторые их черты – такие как введение в структуру базовых сетевых компонентов – редиректора и сетевого сервера, успешно перешли в более поздние сетевые продукты Microsoft:
LAN Manager, Windows for WorksGroups, Windows NT). Сетевые оболочки выпускали и другие компании: IBM, ArtiSoft и др.).
В 1983 году появилась первая СОС компании Novell OS-Net. Эта СОС изначально проектировалась со встроенными сетевыми функциями и стала эталоном производительности, надежности и защищенности для ЛВС. Сначала она была предназначена для ЛВС звездообразной топологии, центральным звеном которой был специальный компьютер на базе микропроцессора Motorola 68000. Позже с появлением IBM PC XT Novell разработала новый продукт NetWare 86 для семейства машин Intel8088.
ОС NetWare распространялась как ОС для центрального сервера ЛВС и обеспечивала максимальную скорость удаленного доступа к файлам и повышенную безопасность данных. Эта ОС не позволяла использовать файл-сервер как рабочую станцию и имела специфический прикладной программный интерфейс API, что требовало от разработчиков приложений особого опыта и знаний.
В 1987 году Microsoft и IBM выпустили OS/2. Эта система была хорошо продумана. Она поддерживала вытесняющую многозадачность, графический пользовательский интерфейс и виртуальную машину для выполнения DOS – приложений. Фактически она выходила за пределы простой многозадачности с ее концепцией распараллеливания отдельных процессов, получивших название многопоточности.
OS/2 оказалась хорошей платформой для построения ЛВС. Распространение получили сетевые оболочки LAN Manager компании MicroSoft и LAN Server компании IBM. Эти оболочки уступали по производительности файловому серверу NetWare и потребляли больше аппаратных ресурсов, но имели важные достоинства:
выполнение на сервере любых программ, разработанных для OS/2, MS DOS, использование сервера как рабочей станции.
Сетевые разработки MicroSoft и IBM привели к появлению NetBIOS – популярного транспортного протокола и одновременно интерфейса прикладного программирования для ЛВС, получившего применение почти на всех СОС для РС. Этот протокол и сегодня применяется для создания небольших ЛВС. Принцип работы этих сетевых систем можно увидеть в более поздней и удачной ОС 90 –х годов MicroSoft Windows NT.
В 90-е годы все ОС стали сетевыми. Сетевые функции встраиваются в ядро ОС, являясь ее неотъемлемой частью. ОС получили средства для работы со всеми основными технологиями локальных (Ethernet, Fast Ethernet, GigaBit Ethernet,Token Ring,...) и глобальных (Х25, ISDN, ATM) сетей, а также средства для создания составных сетей (IP, IPX, AppleTalk). В ОС появились средства позволяющие поддерживать одновременную сетевую работу с разнородными клиентами и серверами. Появились специализированные ОС, предназначенные только для выполнения коммуникационных задач.
Во второй половине 90-х годов кроме TCP/IP в основной комплект ОС начали включать утилиты, реализующие такие популярные сервисы Интернета как TelNet, FTP, DNS, Web.
Влияние Интернета проявилось и в том, что компьютеры превратились из чисто вычислительного устройства в средство коммуникаций с развитыми вычислительными возможностями.
Особое внимание уделяется корпоративным СОС. Они отличаются способностью хорошо и устойчиво работать в крупных сетях, которые характерны для больших предприятий, имеющих отделения в нескольких городах разных стран. Тройка лидеров корпоративных СОС – Novell NetWare 4.x и 5.0, MicroSoft Windows NT и Windows 2000, UNIX - системы различных производителей платформ.
Существует большое количество разных типов ОС, различающихся областями применения, аппаратными платформами и методами реализации. Будем рассматривать те функции ОС, которые присущи всем ОС как классу программных продуктов.
ОС как комплекс взаимосвязанных программ, действует как интерфейс между приложениями и пользователями с одной стороны, и аппаратурой ЭВМ с другой стороны.
Отсюда вытекают две группы функций:
o предоставление пользователю вместо реальной аппаратуры ЭВМ расширенной виртуальной машины, с которой удобней работать и легче программировать;
o повышение эффективности использования оборудования путем рационального управления им в соответствии с некоторым критерием.
Для решения большинства задач программисту не обязательно знать досконально аппаратуру ЭВМ. Программист может обходиться мощными высокоуровневыми функциями, предоставляемыми ему ОС. ОС скрывает от программиста большую часть особенностей аппаратуры и предоставляет более удобные средства для работы.
Например, при работе с файловой системой программист представляет диск как набор файлов, каждый из которых имеет имя. Такие частности, как способ записи информации на диск или текущее состояние двигателя механизма перемещения магнитных головок чтения-записи не должны интересовать программиста.
ОС избавляет программистов от рутинных операций по управлению физической памятью, таймерами, принтерами, и т. п. устройствами. В результате реальная ЭВМ способная выполнять небольшой набор элементарных действий, превращается в виртуальную машину, выполняющую широкий набор гораздо более мощных функций. Виртуальная машина также управляется командами, но это уже команды более высокого уровня – удалить файл с именем Х, запустить на выполнение программу с именем Y.
Основные ресурсы компьютера – процессоры, оперативная память (ОЗУ), таймеры, наборы данных, диски, накопители на магнитных лентах (МЛ), принтеры, сетевые устройства и т. д.
Ресурсы распределяются между процессами.
Процесс (задача) - базовое понятие большинства ОС и часто определяется как программа на стадии выполнения.
Определений программы существует несколько. Каждое определение делает акцент на определенные характеристики программы.
Программа - алгоритм решения задачи заданный в виде последовательности команд языка компьютера.
Алгоритм – формально точное предписание, преобразующее исходные данные в искомый результат. Характеристики алгоритма:
однозначность результата при заданных исходных данных;
возможность разбиения задачи на конечное число операций выполняемых способность получать результаты для множества исходных данных, соответствующих множеству однотипных задач.
Программа - законченная совокупность команд необходимых для решения определенной задачи.
Программа – статический объект, представляющий собой файл с кодами и данными.
Существует 3 вида программ:
повторно неиспользуемая программа – программа, модифицирующая себя во время выполнения. Когда она вновь потребуется, то в оперативную память повторно используемая программа – программа сама устраняет любые изменения, появившиеся во время выполнения. Одна и та же копия программы может использоваться многократно, при условии, что следующий запрос будет принят, после того как, удовлетворится предшествующий;
реентерабельная программа не модифицирует себя во время выполнения.
Копия программы может начать работу по запросу А, затем полностью выполнить запрос В и вернуться к к окончанию запроса А.
Процесс – динамический объект, возникающий в ОС, после того как пользователь или сама ОС решили запустить программу на выполнение, т. е. создали новую единицу вычислительной работы.
Управление ресурсами вычислительной системы с целью наиболее эффективного их использования является назначением ОС.
Например, мультипрограммная ОС организует одновременное выполнение сразу нескольких процессов на одном компьютере, поочередно переключая процессор с одного процесса на другой, исключая простои процессора, вызываемые обращением процессора компьютера к операциям ввода-вывода. ОС также отслеживает и разрешает конфликты, возникающие при обращении нескольких процессов к одному и тому же устройству ввода-вывода или к одним и тем же данным.
Критерий эффективности работы компьютера может быть различным (пропускная способность ВС, время реакции ВС).
Управление ресурсами включает решение следующих задач:
планирование ресурса – т.е. определение, какому процессу, когда и в каком отслеживание состояния и учет использования ресурса;
разрешение конфликтов между процессами.
Для решения этих задач ОС использует разные алгоритмы, которые определяют облик ОС в целом. Например, алгоритм управления процессором, определяет Ос как систему пакетной обработки или систему реального времени.
Задача организации совместного использования ресурсов несколькими процессорами является весьма сложной из-за случайного характера возникновения запросов на потребление ресурсов. Этой задачей занимается специальная дисциплина прикладной математики – теория массового обслуживания.
Функциональные компоненты ОС автономного компьютера Функции ОС группируются в соответствии с типами ресурсов компьютера, либо в соответствии с задачами применимыми ко всем ресурсам. Иногда такие группы функций называют подсистемами. Это подсистемы:
управления файлами и внешними устройствами.
К общим подсистемам относят:
Управления процессами – важнейшая часть ОС. Для каждого процесса ОС создает системные информационные структуры, которые содержат данные о потребностях процесса в ресурсах ВС, данные о фактически выделенных ресурсах.
Чтобы процесс мог быть выполнен, ОС назначает ему область ОЗУ, в которой будут размещены коды программы и данные процесса и предоставляет ему необходимое количество процессорного времени. Совокупность всех областей ОЗУ занимаемых процессом называется адресным пространством. В информационные структуры включают вспомогательные данные - историю пребывания процесса в ВС, его текущее состояние (активное или заблокированное), степень привилегированности.
В мультипрограммной ОС одновременно существует несколько процессов. Часть из них порождается пользователем и их называют пользовательскими, часть инициируется системой и их называют системными.
Важная задача ОС – защита ресурсов выделенных процессу от остальных процессов (прежде всего это касается адресного пространства процесса).
На протяжении периода существования процесса его выполнение может быть многократно прервано и продолжено. Для того чтобы возобновить выполнение процесса, необходимо восстановить состояние его операционной среды, которое идентифицируется состоянием регистров, программного счетчика, режимом работы процессора, указателями на открытые файлы, данными о незавершенных процессах ввода-вывода, кодами ошибок выполняемых данным процессом системных вызовов и т.д. Эта информация называется контекстом процесса.
В ОС нет однозначного соответствия между процессами и программами. Одна и та же программа может породить несколько параллельно выполняемых процессов, а процесс в ходе своего выполнения сменить программу и начать выполнять другую программу. В смежных программных комплексах иногда полезно организовать работу так, что несколько параллельных процессов взаимодействуют друг с другом и обмениваются данными. Эти средства ОС называют средствами межпроцессного взаимодействия. Таким образом, подсистема управления процессами планирует выполнение процессов, создает и уничтожает процессы, обеспечивает их необходимыми ресурсами, поддерживает синхронизацию процессов и обеспечивает их взаимодействие.
Управление памятью включает в себя распределение имеющейся физической памяти между всеми существующими в ВС процессами, загрузку программ и данных в отведенные им области памяти, настройку адресно-зависимых программ на физические адреса выделенной области, а также защиту областей памяти каждого процесса.
Существует большое разнообразие алгоритмов распределения памяти (в одних память выделяется процессу в виде непрерывных областей). Граница области памяти может быть жестко зафиксирована на все время существования процесса или же динамически перемещается при выделении процессу дополнительных объемов памяти. В одних ОС распределение памяти осуществляется страницами фиксированного объема, в других сегментами переменной длины.
Популярный способ управления памятью – виртуальная память, позволяющая программисту писать программы любой длины, иногда существенно превышающей размер физической памяти. Программный код хранится на диске и при необходимости частями (сегментами или страницами) отображается в физическую память. Подсистема виртуальной памяти выполняет трансляцию виртуальных адресов, полученных в результате компиляции и компоновки программ в физические адреса ячеек ОЗУ.
Защита памяти – способность предохранять выполняемую задачу от записи или чтения памяти, назначенной другой задаче.
Таким образом, функциями ОС по управлению памятью является отслеживание свободной и занятой памяти, выделение памяти процессам и освобождение ее после завершения процесса, вытеснение процессов из ОЗУ на диск, возвращение их в ОЗУ, когда в ней освободилось место, настройка адресов памяти на конкретную область физической памяти.
Управление файлами и внешними устройствами ОС предоставляет пользователям ВС удобные средства для работы с файлами.
Файл – поименованная неструктурированная последовательность байтов хранящихся на внешнем накопителе. Наборы данных или файлы разбросаны случайным образом по цилиндрам и поверхностям дисков различных типов, в виде иерархической структуры. Файловая система ОС выполняет преобразование символьных имен файлов, с которыми работает пользователь в физические адреса данных на диске, организует совместный доступ к файлам, защищает их от несанкционированного доступа.
При выполнении своих функций она взаимодействует с подсистемой управления внешними устройствами подсистемы ввода-вывода, которая по запросам файловой системы осуществляет передачу данных между дисками и ОЗУ. Подсистема ввода-вывода исполняет роль интерфейса ко всем устройствам, подключенным к компьютерам. Спектр этих устройств очень обширен.
Номенклатура выпускаемых накопителей на жестких, гибких, оптических дисках, принтерах, сканерах, мониторах, плоттерах, модемах, сетевых адаптерах, аналогово-цифровых (АЦП) и цифро-аналоговых преобразователях (ЦАП) насчитывает сотни наименований. Эти модели могут существенно отличаться набором и последовательностью команд, с помощью которых осуществляется обмен информацией с процессором и памятью компьютера, скоростью работы, кодировкой данных и т.п. Программа, управляющая конкретной моделью внешнего устройства и учитывающая все его особенности, называется драйвером. ОС включает множество драйверов, что гарантирует подключение к компьютеру большого числа внешних устройств различных производителей. (Низкая популярность OS/2 объясняется отсутствием многих необходимых драйверов). Созданием драйверов занимаются как разработчики ОС, так и специалисты компаний, выпускающих внешние устройства. ОС должна поддерживать хорошо определенный интерфейс между драйверами и остальной частью ОС. Поддержание унифицированного интерфейса прикладных программ к разнородным устройствам вводавывода является одной из наиболее важных задач ОС. В UNIX был разработан такой унифицированный интерфейс на основе концепции файлового доступа. В ней осуществляется обмен с файлами, имеющими имя и представляющими собой неструктурированную последовательность байтов. В качестве файла может выступать как реальный файловый диск, так и алфавитно-цифровой дисплей, печатающее устройство (ПУ), сетевой адаптер. Здесь используется свойство ОС подменять реальную аппаратуру удобными для программиста абстракциями.
Безопасность данных ВС обеспечивается средствами отказоустойчивости ОС, направленными на защиту от сбоев и отказов аппаратуры и ошибок программного обеспечения (ПО), а также средствами защиты от несанкционированного доступа (ошибочных или злонамеренных). Функция защиты ОС тесно связана с администрированием. Администратор определяет права пользователей при их обращении к разным устройствами ресурсам - файлам, каталогам, принтерам и т.д. Администратор ограничивает возможности пользователей в выполнении тех или иных действий. Например, пользователю запрещено завершать работу компьютера, устанавливать системное время, завершать работу чужих процессов и т. д.
Важным средством защиты данных являются функции аудита, заключающиеся в фиксации всех событий, от которых зависит безопасность системы (попыток удачного и неудачного логического входа в систему, операции доступа к некоторым файлам и каталогам и т.п.). Список событий, которые необходимо отслеживать определяет администратор ОС.
Поддержка отказоустойчивости реализуется ОС, как правило, на основе резервирования.
Чаще всего в функции ОС входит поддержание нескольких копий данных на разных дисках или разных фиксированных накопителях. Особым случаем обеспечения отказоустойчивости является использование нескольких процессоров (мультипроцессирование), когда система продолжает работу при отказе одного из процессоров, хотя и с меньшей производительностью.
Поддержка отказоустойчивости также входит в обязанности системного администратора. В состав ОС входят утилиты, позволяющие администратору выполнять регулярные операции резервного копирования для быстрого восстановления важных данных.
Интерфейс прикладного программирования Программисты, разрабатывающие приложения, иногда нуждаются в выполнении действий, которые присущи только ОС (например, управление оборудованием компьютера). ОС обладает рядом сервисных функций доступных программисту и упрощающих написание приложений.
Эти функции называются интерфейсом прикладного программирования (API – Application Programming Interface). Все особенности ОС с различной внутренней организацией, но с одинаковым набором функций API кажутся пользователю одной и той же ОС, что упрощает стандартизацию ОС и обеспечивает переносимость приложений между внутренне различными ОС.
Приложения выполняют обращения к функциям API с помощью системных вызовов.
Способ, которым приложение получает услуги ОС, похож на вызов подпрограмм. Информация, нужная ОС и состоящая обычно из идентификатора команды и данных, помещается в определенное место ОЗУ, в регистры и/ или стек. Затем управление передается ОС, которая выполняет требуемую функцию и возвращает результаты через ОЗУ, регистры или стеки. Если операция неуспешна, то результат включает индексацию ошибки.
ОС должна обеспечивать удобный интерфейс для людей работающих на ВС – конечных пользователей, программистов, администратора ОС. В пакетной ОС эти функции сведены к минимуму и вводятся оператором с помощью команд языка управления работами. Современные ОС имеют развитые функции пользовательского интерфейса для интерактивной работы алфавитно-цифровых и графических терминалов. Командный язык ОС позволяет запускать и останавливать приложения, выполнять различные операции с файлами, получить информацию о состоянии ОС, администрировать систему, Команды могут состоять и считываться из командного файла, содержащего некую последовательность команд и выполняться командным интерпретатором. Ввод команд может быть упрощен, если ОС поддерживает графический пользовательский интерфейс т.е. выбор нужного действия с помощью мыши из меню или указания на графический символ.
ОС компьютерной сети во многом аналогична ОС автономного компьютера. Она реализует эффективный способ разделения ресурсов между множеством выполняемых в сети процессов.
Компьютерная сеть – это набор компьютеров, связанных коммуникационной системой и ПО, позволяющим пользователям сети получать доступ к ресурсам компьютеров сети. Сеть могут образовывать компьютеры разных типов (микропроцессоры, рабочие станции, миниЭВМ, компьютеры, суперкомпьютеры).
Коммуникационная система может включать кабели, повторители, коммутаторы, маршрутизаторы и другие устройства, обеспечивающие передачу сообщений между любой парой компьютеров сети. Сеть позволяет работать как с автономным компьютером, так и получать доступ к информационным и аппаратным ресурсам другого компьютера. СОС играет роль интерфейса экранирующего от пользователя все детали низкоуровневых программноаппаратных средств сети. Например, вместо числовых адресов компьютеров сети (IP-адрес) использовать символьные имена.
Сетевые и распределенные операционные системы (РОС) Сетевая ОС предоставляет пользователю некую виртуальную ВС, работать с которой проще, чем с реальной сетевой аппаратурой. Виртуальная система не полностью скрывает распределенную природу своего реального прототипа, т.е. является виртуальной сетью.
Пользователь СОС должен знать, что он имеет дело с сетевыми ресурсами и что для доступа к ним нужно выполнить определенные операции:
использовать вымышленную локальную букву дисковода на котором он использовать язык команды передачи файлов для перемещения файлов с знать на какой машине сети он запускает задание, и задавать логический Распределенная ОС, динамически и автоматически распределяет работы по разным машинам, представляя набор сетевых машин как виртуальный унипроцессор. Пользователь не знает, на какой машине выполняется его работа. РОС существует как единая ОС всей ВС, объединяя все компьютеры так, что они работают наиболее эффективно используя все ресурсы сети. В настоящее время практически все СОС далеки от истинной распределенности.
СОС может рассматриваться как набор ОС отдельных компьютеров, составляющих сеть и работающих под разными ОС. Все ОС работают независимо друг от друга, самостоятельно управляя собственными процессами и локальными ресурсами. Но все они включают взаимно согласованные коммуникационные протоколы для организации взаимодействия процессов реализующихся на разных компьютерах сети и разделения ресурсов этих компьютеров между пользователями сети. Таким образом, термин СОС используется в 2-х значениях:
как ОС отдельного компьютера, способного работать в сети.
Функциональные компоненты СОC Средства управления локальными ресурсами реализуют все функции ОС автономного компьютера.
Серверная часть предоставляет средства управления локальными ресурсами и услугами в общее пользование.
Клиентская часть предоставляет средства запроса к удаленным ресурсам и услугам.
Транспортные средства совместно с коммуникационной системой обеспечивают передачу сообщений между компьютерами сети.
Клиентская часть СОС не может получить непосредственный доступ к ресурсам другого компьютера. Оно может “попросить” об этом серверную часть ОС. Эти “просьбы” выражаются в виде сообщений, передаваемых по сети. Сообщения могут содержать не только команды на выполнение некоторых действий, но и данные (содержимое файла).
Транспортные средства ОС управляют передачей сообщений между клиентской и серверными частями по коммуникационной системе. Их функции – формирование сообщений, разбиение сообщения на части (пакеты, кадры), преобразование имен компьютеров в цифровые адреса, организацию доставки сообщений, определение маршрута в сложной сети и т.п. Правила взаимодействия компьютеров при передаче сообщений по сети определяются коммуникационными протоколами (Ethernet, Token Ring, IP и т. д.). Коммуникационные протоколы переносят сообщения клиентских и серверных частей ОС по сети, не вникая в их содержание.
Рис.2.1. Функциональные компоненты сетевой ОC На компьютерах сети всегда должна работать серверная часть ОС, постоянно ожидающая прихода запроса из сети на удаленный доступ к ресурсам этого компьютера.
Удобной и полезной функцией клиентской части ОС является способность отличить запрос к удаленному файлу от запроса к локальному файлу. Клиентская часть сама распознает и перенаправляет (redirect) запрос к удаленной машине. Отсюда, клиентскую часть иногда называют редиректором.
Клиентские части ОС выполняют также преобразование форматов запросов к ресурсам из формы принятой в локальной ОС к формам серверной части ОС и обратно.
Встроенные сетевые службы и оболочки СОС различаются глубиной внедрения сетевых служб:
Сетевые службы объединены в виде оболочки;
Сетевые службы производятся и поставляются в виде отдельного продукта.
Сетевая служба – это совокупность серверной и клиентской частей ОС, предоставляющих доступ к конкретному типу ресурса компьютера через сеть.
Сетевая служба предоставляет пользователям сети набор услуг. Имеются следующие виды служб:
Служба администратора сети включает:
базу данных сетевых пользователей компьютера, централизованную справочную службу (о пользователях и всех ее программных и аппаратных компонентах), службу каталогов, службу мониторинга сети, службу резервного копирования и архивирования данных.
Рис. 2.2 Варианты построения встроенных сетевых служб и оболочек Одноранговые и серверные сетевые ОС Компьютеры в сети могут выполнять 3 роли:
выделенный сервер запросов – обслуживание запросов других компьютеров;
клиентский узел – обращение с запросами к ресурсам других машин;
одноранговый узел – совмещение первых двух функций.
Отсюда 3 схемы построения сетей:
одноранговая сеть состоит только из одноранговых узлов:
сеть с выделенными серверами состоит из клиентов и серверов;
гибридная сеть включает узлы всех типов.
Все узлы равноправны. Но пользователь узла может закрывать свои ресурсы от совместного использования. Администратор сети в свою очередь может закрепить за отдельными узлами только серверные функции.
Выделенные серверы работают под управлением серверных ОС. Пользовательские компьютеры управляются клиентскими ОС. Специализация ОС приводит к повышению их эффективности, что существенно для крупных сетей. Повышение эффективности заставляет отказаться от ряда сетевых служб. Например, Novell NetWare оптимизировали работу файлового сервера и службы печати, исключив другие службы. С другой стороны это большой недостаток. Функциональная ограниченность снижает сферу применения СОС. Поэтому существует класс универсальных серверных ОС характеризующихся:
поддержкой мощных аппаратных платформ, в том числе мультипроцессорных;
включением служб централизованного администрирования (справочной службы или службы аутентификации и авторизации пользователей);
более широкий набор сетевых служб.
Клиентские ОС освобождены от серверных функций, что упрощает их организацию.
Компании выпускают 2 варианта одной и той же ОС серверную и клиентскую (Windows NT WorkStation, Windows NT Server).
Главное требование, предъявляемое к ОС – выполнение ею основных функций эффективного управления ресурсами и обеспечения удобного интерфейса для пользователя и приложений. Современная ОС должна поддерживать:
мультипрограммную обработку;
многооконный графический интерфейс пользователя.
Кроме обеспечения требования функциональной полноты ОС должна удовлетворять следующим эксплуатационным требованиям:
расширяемость ОС должна обеспечивать внесение дополнительных изменений, без нарушения целостности системы. Это свойство достигается построением ОС как набора отдельных модулей, взаимодействующих через функциональный переносимость. Код ОС должен обладать способностью переноса с одного процессора на другой, и с одной аппаратной платформы на другую. Такое свойство иногда называют многоплатформенностью;
совместимость. Способность ОС выполнять приложения, написанные для других ОС. Различают совместимость на уровне кодов ОС, и совместимость на уровне исходных текстов. Совместимость включает также поддержку пользовательских надежность и оказоустойчивость. Определяется архитектурными решениями, положенными в основу ОС и качеством реализации (отлаженностью кодов ОС);
безопасность. ОС должна защищать данные и другие ресурсы ВС от несанкционированного доступа, используя средства аутентификации (определения подлинности пользователя), авторизации (предоставления дифференцированных прав пользователям), аудита (фиксации всех подозрительных событий). Особенно это важно в СОС;
производительности. Она должна быть такой, насколько позволяет аппаратная платформ (быстродействие и время реакции).
3. Архитектура операционной системы Под архитектурой ОС понимают состав, назначение и порядок взаимодействия модулей реализующих основные функции ОС.
Обычно в состав ОС входят исполняемы и объектные модули разных типов, модули исходного текста программ, программные модули специального формата (загрузчик О, драйверы ввода-вывода), конфигурационные файлы, файлы документации, модули справочной системы и т.д.
Большинство ОС это хорошо структурированные модульные системы, способные к развитию, расширению и переносу на новые платформы. Единой архитектуры ОС не существует, но существуют универсальные подходы к структурированию ОС.
Различают 2 группы модулей ОС:
ядро, т.е. модули, выполняющие основные функции ОС;
модули, выполняющие вспомогательные функции.
Ядро – часть ОС, без которой ОС полностью не работоспособно и не может выполнять своих функций. В состав ядра входят функции, решающие внутрисистемные задачи организации вычислительного процесса (переключение контекстов, загрузка-выгрузка страниц, обработка прерываний). Другой класс функций ядра служит для поддержки приложений, создавая для них прикладную программную среду. Функции ядра, которые могут вызываться приложениями, образуют интерфейс прикладного программирования –API. Ядро обеспечивает выполнение функций, наиболее часто используемых при организации вычислительного процесса, поэтому скорость их выполнения определяет производительность системы в целом. Модули ядра постоянно находятся в памяти, т.е. являются резидентными.
Ядро оформляется в виде программного модуля специального формата, отличающегося от формата пользовательских приложений. Отличающей особенностью ядра является работа его модулей в привилегированном режиме.
Рис. 3.1 Структура ОС Вспомогательные модули ОС выполняют полезные, но менее обязательные функции (архивирование данных на МЛ, дефрагментацию дисков, текстовое редактирование и т.п.).
Вспомогательные модули оформляются как обычные приложения, т.е. в виде исполняемых модулей стандартного для ОС формата, что не позволяет провести четкую грань между ОС и приложениями.
Вспомогательные модули подразделяются на:
Утилиты - программы, решающие отдельные задачи управления и сопровождения Системные обрабатывающие программы – текстовые или графические редакторы, компиляторы, компоновщики, отладчики;
Библиотеки процедур различного назначения, упрощающие разработку приложений (библиотеки математических функций, функций ввода-вывода);
Программы, предоставляющие дополнительные услуги (калькулятор, игры).
Вспомогательные модули обращаются к функциям ядра с помощью системных вызовов.
Такое разделение ОС обеспечивает легкую расширяемость ОС. Вспомогательные модули загружаются в ОЗУ только на время выполнения своих функций и называются транзитными модулями. Ядро ОС, выполняющееся в привилегированном режиме, облегчает задачу защиты кодов и данных ОС от неправильных действий.
ОС должна обладать исключительными полномочиями чтобы:
Обеспечить надежное управление ходом выполнения приложений;
Играть роль арбитра в споре приложений за ресурсы компьютера в мультипрограммном режиме.
Привилегии ОС обеспечиваются средствами аппаратной поддержки. Аппаратура компьютера должна поддерживать как минимум 2 режима работы – пользовательский (user mode) и привилегированный (kernel mode, supervisor mode).
Пользовательский режим Привилегированный режим Рис. 3.2 Архитектура ОС с ядром в привилегированном режиме Выполнение некоторых инструкций в пользовательском режиме запрещается безусловно (например, переход в привилегированный режим), другие инструкции запрещается выполнять только при определенных условиях (разрешается доступ к последовательному порту, если он выделен приложению в монопольном режиме).
Условия разрешения выполнения критичных инструкций находятся под полным контролем ОС.
Механизмы защиты памяти используются ОС для:
Защиты своих областей памяти от приложений;
Защиты адресных пространств приложений от других приложений.
Между количеством уровней привилегий, реализуемых аппаратно и количеством уровней привилегий поддерживаемых ОС нет прямого соответствия. Процессор Intel имеет 4 уровня привилегий, OS/2 строит из них 3-х уровневую систему, Windows NT и UNIX ограничиваются уровнями. С другой стороны, если аппаратура поддерживает хотя бы 2 уровня привилегий, то ОС может строить сколь угодно развитую систему защиты образующую иерархию. Пример, система защиты файлов и каталогов, позволяющая задать любому пользователю определенные права доступа к файлам.
Переход ядра в привилегированный режим повышает устойчивость работы ОС, но снижает производительность.
Архитектура ОС, основанная на привилегированном ядре и приложениях пользовательского режима стала классической (UNIX, VAX VMS, IBM OS/360, OS/2, Windows NT). Исключение, Novell NetWare, в которой ядро и приложения работают в одном режиме.
Рис. 3.3 Смена режимов при выполнении системного вызова к привилегированному режиму Процессоры INTEL 8088/86 не поддерживают привилегированный режим работы. MS DOS состояла из 2-х модулей (ядра) msdos.sys и io.sys, к которым с системными вызовами обращались командный интерпретатор command.com, системные утилиты и приложения. Таким образом, некорректно написанное приложение могло разрушить основные модули MS DOS.
Вычислительную систему под управлением ОС на основе ядра можно рассматривать как систему 3-х иерархически расположенных слоев.
Рис.3.4 Слои операционной системы Каждый слой обслуживает вышележащий слой, выполняя для него некоторый набор функций, которые образуют межслойный интерфейс. На основе функций нижележащего слоя следующий слой строит свои более мощные функции. Строгие правила касаются взаимодействия между слоями системы, а связи модулей внутри слоя могут быть произвольными.
Такая организация имеет много достоинств. Она существенно упрощает разработку системы, т.к. позволяет сначала определить “сверху-вниз” функции слоев и межслойные интерфейсы, а затем постепенно наращивать мощность функций слоев, двигаясь “снизу-вверх”. При модернизации системы можно изменять модули внутри слоя без необходимости производить какие-либо изменения в остальных слоях, если межслойные интерфейсы остаются в силе.
Ядро ОС также представляет много функциональный комплекс и на него также распространяется многослойный подход.
Рис. 3.5 Многослойная структура ядра ОС Средства аппаратной поддержки ОС – те средства, которые прямо участвуют в организации вычислительных процессов. К ним относятся средства поддержки привилегированного режима, система прерываний, средства переключения контекстов процессов, средства защиты областей памяти и т.п.
Машинно-зависимые модули ОС. В них включают программные модули, в которых отражается специфика аппаратной платформы компьютера. Этот слой должен экранировать вышележащие слои от особенностей аппаратуры. Пример: слой HAL Windows NT.
Базовые механизмы ядра. Выполняют примитивные операции ядра:
Программное переключение контекстов процессов;
Диспетчеризацию прерываний;
Перемещение страниц памяти на диск и обратно и т.п.
Менеджеры ресурсов. Состоят из мощных функциональных модулей, реализующих стратегические задачи по управлению основными ресурсами ВС. Здесь работают менеджеры (диспетчеры) процессов, ввода-вывода, файловой системы, ОЗУ. Каждый из менеджеров ведет учет свободных и используемых ресурсов определенного типа и планирует их распределение в соответствии с запросами приложений.
Интерфейс системных вызовов. Слой взаимодействует непосредственно с приложениями и системными утилитами, образуя прикладной программный интерфейс ОС.
В реальной ОС количество слоев и распределение функций между ними может отличаться от вышеприведенного. Выбор количества слоев ядра является ответственным и сложным делом.
Увеличение числа слоев ведет к некоторому замедлению работы ядра за счет дополнительных накладных расходов на межслойное взаимодействие, а уменьшение количества слоев ухудшает расширяемость и логичность системы.
Аппаратная зависимость и переносимость ОС Многие ОС работают на различных платформах без существенных изменений в своем составе.
Аппаратура большинства компьютеров приобрела много типовых черт, влияющих на работу ОС. Решение об аппаратной или программной реализации функций ОС принимаются разработчиками. Типичный набор средств аппаратной поддержки ОС включает:
Средства поддержки привилегированного режима;
Средства трансляции адресов;
Средства переключения процессов;
Средства защиты областей памяти.
Средства поддержки привилегированного режима обычно основаны на системном регистре процессора (“слово состояния ” машины или процессора). Этот регистр содержит некоторые признаки определяющие режимы работы процессора, в том числе признак текущего режима привилегий. Смена режима привилегий выполняется за счет изменения слова состояния машины в результате прерывания или выполнения привилегированной команды. Число градаций привилегированности может быть разным у разных процессоров (2 или 4, устройств INTEL X86/Pentium 0-1-2-3-4).
Средства трансляции адресов выполняют операции преобразования виртуальных адресов из программных кодов процесса в адреса физической памяти.
Средства переключения процессов предназначены для быстрого сохранения контекста приостанавливаемого процесса и восстановления контекста процесса, который становится активным. Содержимое контекста обычно включает содержимое всех регистров общего назначения процессора, регистра флагов операций (т.е. флагов нуля, переноса, переполнения), а также тех системных регистров и указателей, которые связаны с отдельным процессом, а не с ОС.
Система прерываний позволяет компьютеру реагировать на внешние события, синхронизировать выполнение процессов и работу устройств ввода-вывода, быстрого перехода с одной программы на другую. При возникновении условий прерывания его источник выставляет определенный электрический сигнал, который прерывает работу процессора и вызывает автоматический переход на исполнение процедуры обработки прерываний.
Прерывания играют важнейшую роль в работе ОС, являясь ее движущей силой.
Системный таймер реализуется в виде быстродействующего регистра-счетчика, необходимого ОС для выдержки интервалов времени. Частота “тиков” таймера, как правило, связана с частотой тактового генератора процессора. Прерывания от системного таймера используются ОС для слежения за тем, как отдельные процессы расходуют время процессора.
Средства защиты областей памяти обеспечивают проверку возможности программ осуществлять с данными области ОЗУ такие операции, как чтение, запись или выполнение (при поддержке управления). Если аппаратура компьютера поддерживает механизм трансляции адресов, то средства защиты областей памяти встраиваются в этот механизм.
В модулях ОС отражаются особенности аппаратной платформы такие, как количество типов прерываний, формат таблиц ссылок на процедуры обработки прерываний, состав регистров общего назначения и системных регистров, особенности подключения внешних устройств и многое другие.
Однако, ядро можно спроектировать таким образом, что только часть модулей будет машинно-зависимыми. В хорошо структурированном ядре машинно-зависимые модули локализованы и образуют программный слой, естественно примыкающий к слою аппаратуры.
Объем машинно-зависимых модулей зависит от различий в аппаратных платформах – 16 или –битовые адреса, несовпадения системы команд, одно или многопроцессорный компьютер.
Особое место среди модулей ядра занимают низкоуровневые драйверы устройств. Их можно отнести к слою менеджера ввода-вывода и к слою машинно-зависимых модулей.
В процессорах INTEL X86/Pentium разработка экранирующего машинно-зависимого слоя ОС несколько упрощается за счет встроенных в BIOS драйверов устройств, входящих в базовую конфигурацию компьютера жестких и гибких дисков, дисплея, клавиатуры и т.п. Разработчики ОС могут использовать слой драйверов BIOS как часть машинно-зависимого слоя ОС, а могут заменить все или часть драйверов BIOS компонентами ОС.
Если код ОС может быть сравнительно легко перенесен с процессора одного типа на процессор другого типа и с платформы одного типа на другую, то такую ОС называют переносимой (portable), или мобильной. Свойство мобильности ОС обеспечиваются:
Если большая часть ОС написана на языке С+, трансляторы с которого имеются на всех машинах. Ассемблер используется для тех непереносимых частей системы, которые непосредственно взаимодействуют с аппаратурой, или для частей, где требуется максимальная скорость обработки;
Объем машинно-зависимых частей, взаимодействующих непосредственно с аппаратурой должен быть по возможности минимальным;
Аппаратно-зависимый код должен быть надежно изолирован в нескольких модулях, а не быть распределенным по всей системе. Изоляции подлежат все части ОС, которые отражают специфику, как процедур, так и платформы в В результате должна быть осуществлена подмена реальной аппаратуры унифицированной виртуальной машиной, одинаковой для всех вариантов платформ.
Микроядерная архитектура характеризуется тем, что в привилегированном режиме работает очень небольшая часть ОС, называемая микроядром. В его состав входят машинно-зависимые модули, и модули, выполняющие базовые функции ядра по управлению процессами, обработке прерываний, управлению виртуальной памятью, пересылке сообщений и управлению устройствами ввода-вывода, связанные с загрузкой или чтением регистров. Набор функций микроядра обычно соответствует функциям слоя базовых механизмов обычного ядра.
Такие функции ОС трудно, если не невозможно, выполнить в пространстве пользователя.
Все остальные более высокоуровневые функции ядра оформляются в виде приложений работающих в пользовательском режиме. К таким функциям иногда относят части обычного ядра – файловую систему, управление виртуальной памятью и процессами, менеджер безопасности и др. Работающие в пользовательском режиме менеджеры ресурсов имеют принципиальные отличия от традиционных утилит и обрабатывающих программ ОС. Утилиты и обрабатывающие программы вызываются в основном пользователями. Ситуации, когда одному приложению требуется выполнение функций другого приложения, возникают крайне редко, и ОС классической архитектуры не имеют механизма, с помощью которого одно приложение вызывает функции другого.
Пользовательский режим Рис. 3.6 Перенос основного объема функций ядра в пользовательское пространство В микроядерной архитектуре обслуживание запросов других приложений является основным назначением такого приложения. Поэтому менеджеры ресурсов, вынесенные в пользовательский режим, называют серверами ОС т.е. модулями, основным назначением которых является обслуживание запросов локальных приложений и других модулей ОС.
ОС, основанные на концепции микроядра, в высокой степени удовлетворяют большинству требований, предъявляемых к современным ОС – переносимости, расширяемости, надежности, хорошей поддержкой распределенных приложений.
Основной недостаток – снижение производительности. При классической организации ОС выполнение системного вызова сопровождается двумя переключениями режимов, а при микроядерной архитектуре четырьмя.
Пользовательский режим Рис. 3.7 Реализация системного вызова в микроядерной архитектуре В 2004 году был выпущен на рынок новый двухядерный процессор Intel Pentium Extreme Edition 840 с тактовой частотой 3,2 ГГц. Вскоре о выпуске новой линейки двухядерных процессоров объявила компания AMD. Переход к двухядерной архитектуре практически единственное доступное средство повышения производительности современных процессоров, так как наращивание тактовых частот достигло своего предела..
Рис. 3.8 Архитектура процессора AMD Athlon 64 x На одном кристалле находится 2 ядра, построенных на основе архитектуры AMD64. Ядра взаимодействуют с интегрированным контроллером памяти и контроллером шины Hyper Transport посредством интерфейса системных запросов через своего рода арбитра - Crossbar Switch. Каждое ядро имеет свой собственный кэш L2 и ему доступны данные “соседского” кэша второго уровня, при этом процессор поддерживает когерентность хранимой в этой “быстрой” памяти информации. Подобный подход позволяет избежать повторного обращения к оперативной памяти за данными уже загруженными в кэш одного из ядер, что сокращает время ожидания и снижает нагрузку на шину памяти.
Совместимость и множественные прикладные среды Совместимость – способность ОС выполнять приложения, написанные для других ОС.
Различают совместимость на уровне двоичных кодов и на уровне исходных текстов. Двоичная совместимость позволяет исполняемую программу запускать в среде другой ОС. Совместимость на уровне исходных текстов требует наличия в составе СПО компилятора с исходного языка.
Программа должна быть перекомпилирована и получен новый исполняемый модуль. Эта совместимость важна для разработчиков приложений, в распоряжении которых имеются исходные тексты программ. Для конечных пользователей практическое значение имеет только двоичная совместимость, так как обычно коммерческий продукт поставляется в виде исполняемого кода.
Двоичная совместимость во многом зависит от архитектуры процессора, его системы команд, диапазона адресов. Если эти условия соблюдены, то для соблюдения совместимости нужно выполнить 2 условия:
Вызовы функций API, которые содержат приложения, должны поддерживаться Внутренняя структура исполняемого файла должна соответствовать структуре Если архитектуры процессоров разные, то необходим дополнительный шаг - эмуляция двоичного кода. Эмулятор должен последовательно выбирать каждую двоичную инструкцию, дешифрировать ее, чтобы определить какие действия она задает, а затем выполнить эквивалентную подпрограмму на данном компьютере. Это простая, но очень медленная работа.
Выходом в таких случаях является использование прикладных программных сред (ППС).
Одной из составляющих формирующих ППС является набор функций API, которые ОС предоставляет своим приложениям. ППС имитируют обращения к библиотечным функциям.
Эффективность этого метода связана с тем, что большинство сегодняшних программ работают под управлением графических интерфейсов пользователей (GUI) типа Windows, MAX, UNIX, при этом приложения тратят большую часть времени, производя некоторые хорошо предсказуемые действиями. Они непрерывно выполняют вызовы библиотек GUI для манипулирования окнами. Именно это свойство приложений позволяет ППС компенсировать большие затраты времени на покомандное эмулирование программ. Тщательно спроектированная ППС имеет в своем составе библиотеки, имитирующие внутренние библиотеки GUI, но написанные на “родном” коде. Таким образом, достигается существенное ускорение выполнения программ с API других ОС. Иногда, такой подход называют трансляцией, для того чтобы отличать его от более медленного процесса эмуляции кода по одной команде за раз.
Чтобы программа, написанная для одной ОС, могла быть выполнена в рамках другой ОС, недостаточно лишь обеспечить совместимость API. Концепции, положенные в основу разных ОС, могут входить в противоречие друг с другом. Для обеспечения совместимости необходимо организовать бесконфликтное существование в рамках одной ОС нескольких способов управления ресурсами компьютера.
Существуют разные варианты построения множественных ППС, обеспечивающих различную степень переносимости приложений. В UNIX транслятор ППС реализуется в виде обычного приложения.
В UNIX транслятор ППС реализуется в виде обычного приложения. В ОС с микроядерной архитектурой (Windows NT) ППС выполняется в виде серверов пользовательского режима.
Пользовательский режим Рис.3.9 ППС, транслирующие системные вызовы Пользовательский режим Рис. 3.10 Реализация совместимости на основе нескольких равноправных API Приложения Приложен
ППС ППС ППС
Пользовательский режим Привилегированный режим Рис. 3.11 Микроядерный подход к реализации множественных ППС Мультипрограммирование или многозадачность (multitasking) – способ организации вычислительного процесса, при котором на первом процессоре попеременно выполняется несколько программ. Оно призвано повысить эффективность использования ВС.Критерии эффективности:
Пропускная способность - количество задач, выполняемых ВС в единицу времени;
Удобство работы пользователей, возможность интерактивно работать с несколькими приложениями;
Реактивность системы - способность систем выдерживать заранее заданные интервалы времени между запуском программ и получением результата.
В зависимости от выбранного критерия эффективности ОС делятся на системы пакетной обработки, системы разделения времени (СРВ), системы реального времени (Системы реального времени).
Некоторые ОС могут совмещать одновременно несколько режимов, часть задач выполняется в пакетном режиме, другая часть в СРВ или Системы реального времени.
Мультипрограммирование используется для повышения пропускной способности компьютера с целью минимизации простоев всех устройств компьютера, прежде всего процессора. Системы пакетной обработки предназначаются для решения задач вычислительного характера, не требующих быстрого получения результатов.
В начале работы формируется пакет заданий. Каждое задание содержит требование к системным ресурсам. Из этого пакета формируется мультипрограммная смесь. Для одновременного выполнения выбираются задачи, предъявляющие разные требования к ресурсам, так чтобы обеспечивалась загрузка всех устройств ВС. Например, в смеси желательно одновременное присутствие задач с интенсивным вводом-выводом. В системах пакетной обработки невозможно гарантировать выполнение задания в течение определенного времени.
Совмещение операции ввода-вывода и вычислений достигается разными способами.
В мэйнфреймах часто используют канал – специализированный процессор ввода-вывода, имеющий свою систему команд, отличающуюся от системы команд центрального процессора (ЦП). Например, команды: проверить состояние устройства, установить начало места и т.д. В системе команд ЦП имеется инструкция, которая передает каналу какую программу и с какими параметрами нужно выполнить, после чего ЦП и канал могут работать параллельно.
Рис.4.1 Запуск процессором канальной программы При другом способе операции ввода-вывода реализуются с помощью контроллеров вводавывода, обеспечивающих работу однотипных устройств ввода-вывода. Контроллер автономно отрабатывает команды поступающие от ЦП. Контроллер и ЦП работают асинхронно.
Контроллер работает существенно медленнее, чем ЦП, поэтому ЦП может выполнять другие вычисления между передачей команд контроллеру.
Рис.4.2 Операции ввода-вывода с помощью контроллера Общее время выполнения смеси задач часто меньше, чем их суммарное время последовательного выполнения. Переключение ЦП с выполнения одной задачи на другую происходит по инициативе активной задачи. Время выполнения задачи в мультипрограммном режиме больше времени выполнения в монопольном режиме использования процессора.
Взаимодействие пользователя с ВС, сводится к взаимодействию с диспетчером, который принимает задачу и выдает результат.
Мультипрограммирование в системе разделения времени (СРВ) СРВ призвана исправить основной недостаток пакетной обработки – изоляцию пользователя от процесса выполнения его программы. Каждому пользователю предоставляется терминал, с которого он может вести диалог со своей программой, а приложениям выделяются равные кванты времени для выполнения, после чего процесс принудительно прерывается и ЦП предоставляется другому пользователю.
СРВ обладает меньшей пропускной способностью, чем системы пакетной обработки.
Однако, СРВ более производительны, чем однопрограммные системы, т.к. аппаратура загружается лучше, поскольку работает, пока приложение ждет сообщение от пользователя.
Мультипрограммирование в системе реального времени (Системы реального времени) В системах реального времени существует предельно допустимое время для исполнения управляющей объектом программы. Это время называют временем реакции, а свойство системы - реактивностью. В системе реального времени мультипрограммная смесь представляет собой фиксированный набор заранее разработанных программ, а выбор программы на исполнение осуществляется по прерываниям от объекта или в соответствии с расписанием плановых работ.
Время обработки прерывания определяет требования к классу ЦП даже при небольшой его загрузке.
В системах реального времени не стремятся максимально загрузить все устройства ВС, наоборот, закладывают некоторый запас мощности для работы в режиме пиковой загрузки.
Способ организации вычислительного процесса в системе с несколькими процессорами, при котором несколько задач (процессов, потоков) могут одновременно выполняться на разных процессорах.
Концепция мультипроцессирования известна с 70-х годов. Сейчас, многопроцессорность одно из необходимых требований к компьютерам, исполняющим роль центрального сервера крупной сети.
Мультипроцессирование не исключает режима мультипрограммирования: на каждом из процессоров могут попеременно исполняться некоторый набор задач закрепленный за данным процессором.
Такая организация ВС приводит к усложнению всех алгоритмов управления ресурсами.
Сложность возникает при возрастании конфликтов по обращению к устройствам ввода-вывода, данным, общей памяти и совместно используемым программам.
Поддержка мультипроцессорной обработки имеется во многих популярных ОС (SUN Solaris, IBM OS/2, Widows NT).
Различают 2 вида архитектур мультипроцессорных систем:
Асимметричная архитектура.
Симметричная архитектура имеет в своем составе однородные процессоры и единую схему включения процессоров в систему, и одну большую память между всеми процессорами. В асимметричной архитектуре разные процессоры могут отличаться своими характеристиками и функциональной ролью в системе. Одни процессоры могут выполнять роль вычислителей, другие управлять подсистемами ввода-вывода и т.п. Так как процессоры разные, то требование размещения в едином корпусе отсутствует, т.е. система может состоять из нескольких устройств, а каждое устройство содержать несколько процессоров. Это свойство системы называют масштабированием по горизонтали. Каждое устройство называют кластером, а вся мультипроцессорная система кластерной.
Различают 2 способа организации вычислительного процесса в мультипроцессорных системах.
Асимметричное мультипроцессирование реализуется по принципу “ведущий-ведомый”.
Ведущий процессор берет на себя функции ОС и управляет всеми остальными ведомыми процессорами. Ведомые процессоры работают как обрабатывающие устройства и никаких действий по организации работы ВС не выполняют. Такая система достаточно проста и мало отличается от ОС однопроцессорной ВС. Асимметричная архитектура вычислительного процесса может быть реализована как для симметричной, так и асимметричной мультипроцессорной ВС. На роль ведущего процессора назначается наиболее надежный и производительный процессор.
Симметричное мультипроцессирование как способ организации вычислительного процесса может быть реализовано только в ВС с симметричной мультипроцессорной архитектурой. Здесь процессоры работают с общими внешними устройствами и разделяемом ОЗУ.
Все процессоры равноправно участвуют в управлении вычислительным процессом и в выполнении приложений. Разные процессоры могут в какой-то момент времени одновременно обслуживать как разные, так и одинаковые модули общей ОС. Для этого программы ОС должны обладать свойством повторной входимости (реентерабельности).
ОС полностью децентрализована. Модули ОС выполняются на любом доступном процессоре. Процессор, закончивший очередную задачу, передает управление планировщику задач, который выбирает новую задачу из общей для всех процессоров очереди. В режиме одной задачи могут участвовать сразу несколько процессоров, если задачи допускают распараллеливание.
В современных ОС принято определять 2 типа единиц работ. Более крупная единица работы – процесс (задача) требует для своего исполнения несколько более мелких работ для которых используют термин поток (нить). В чем отличия? Работа ВС заключается в выполнении некоторой программы, оформляемой в виде исполняемого модуля. Для исполнения модулю необходимо предоставить ресурсы. Процесс – единица работы, которой назначаются все виды ресурсов, кроме процессорного времени. Этот важнейший ресурс ВС получает единица работы поток, т.е. последовательность выполнения команд. В простейшем случае понятия процесс и поток совпадают, и процесс состоит из одного потока. В ОС, где отсутствует понятие потока, возникают проблемы с организацией параллельных вычислений в рамках процесса. ОС обеспечивает каждый процесс отдельным адресным пространством и защищает его от других процессов. Взаимодействие процессов обеспечивается путем обращения к ОС с помощью конвейеров, почтовых ящиков, разделяемых секций памяти и т. д. Потоки возникли в ОС как средство распараллеливания вычислений. Многопоточная обработка (multithreading) есть механизм распараллеливания вычислений, учитывающий тесные связи между отдельными ветвями вычислений одного и того же приложения. Понятию “поток” – соответствует последовательный переход процессора от одной команды программы к другой. Создание потоков требует от ОС меньше накладных расходов, чем процессов. Потоки изолируются ОС в меньшей мере, чем процессы. Все потоки одного процесса используют общие файлы, таймеры, устройства, область ОЗУ, одно адресное пространство. Для взаимодействия потокам не нужно обращения к ОС, им достаточно использовать общую память. Мультипрограммирование более эффективно на уровне потоков, а не процессов. Программы становятся более читабельными и логичными. Наибольший эффект достигается когда потоки одного процесса, выполняются на разных процессорах параллельно.
Описатель процесса – информационная структура, содержащая все сведения о процессе, необходимые ОС для управления процессом. Это - идентификатор процесса, данные о расположении в памяти исполняемого модуля, степень привилегированности (т.е. приоритет и права доступа) и т.п.
Примеры описателей: OS/360 – блок управления задачей (TCB – Task Control Block); UNIX – дескриптор процесса, Windows NT – объект- процесс (object-process).
Создание описателя процесса есть появление в системе потребителя ресурса. Оно означает загрузку кодов программы и данных исполняемого модуля в память. При создании процесса ОС создает для него как минимум 1 поток выполнения, т. е. информационную структуру – описатель потока (идентификатор потока, данные о правах доступа и приоритете, состояние потока и др.). В исходном состоянии поток находится в приостановленном состоянии. Запуск потока осуществляется ОС в соответствии с общими правилами предоставления процессорного времени и с учетом всех существующих в данный момент потоках и процессах. Иногда поток обращается к ОС с запросом о создании потоков – потомков. Потомки, как правило, наследуют многие свойства родительских потоков. Во многих системах порождение потомков является основным механизмом создания процессов и потоков. В разных ОС отношение между потоками-потомками и родительскими потоками строятся по-разному.
Планирование и диспетчеризация потоков Планирование – определение момента, когда необходимо прервать выполнение активного потока, и момента запуска другого потока. Для планирования используется информация, содержащаяся в описателе потока. Решаются 2 задачи:
Определение момента времени для смены текущего активного процесса;
Выбор для выполнения потока из очереди готовых потоков обеспечивающих разное качество мультипрограммрования.
В большинстве ОС универсального назначения планирование осуществляется динамически (on - line), т.е. решения принимаются во время работы системы на основе анализа текущей ситуации.
Статический способ планирования применяется в специальных системах, в которых весь набор одновременно выполняемых задач определен заранее (Системы реального времени).
Результатом работы такого планировщика является таблица, называемая расписанием где указывается какому процессу, когда и на какое время предоставляется процессор.
Диспетчеризация заключается в реализации найденного планировщиком решения, т.е. в переключении процессора с одного потока на другой. Она сводится к:
Сохранению контекста текущего процесса;
Диспетчеризация потоков осуществляется совместно с аппаратными средствами процессора.
ОС выполняет планирование потоков с учетом их состояния. В мультипрограммной системе поток может находиться в 3-х состояниях:
Выполнение, активное состояние, поток выполняется процессором;
Ожидание, пассивное состояние, поток заблокирован (ожидает завершения ввода-вывода, сообщения от другого потока, освобождения ресурса) и т. д.;
Готовность, пассивное состояние, поток заблокирован в связи с внешними обстоятельствами (процессор занят другим потоком).
Поток переходит из одного состояния в другое в соответствии с алгоритмом планирования потоков.
Рис. 4.3 Граф состояний потока в многозадачной среде В состоянии ожидания и готовности может находиться несколько потоков. Эти потоки образуют очереди. Очереди потоков организуются путем объединения в списки описателей отдельных потоков.
Каждый описатель потока содержит, по крайней мере, один указатель на другой описатель, соседа по очереди. Такая организация потоков позволяет их легко переупорядочивать, включать и исключать потоки, переводить их из одного состояния в другое.
Рис.4.4 Очередь потоков.
Вытесняющие и невытесняющие алгоритмы планирования Невытесняющий (non- preemptive) алгоритм сам по себе по собственной инициативе отдает управление ОС, чтобы та выбрала из очереди готовый поток.
Вытесняющий (preemptive) алгоритм – способ планирования, при котором решение о переключении процессора принимает ОС, а не активная задача.
В 1-ом режиме программист приложения должен брать на себя часть функций планировщика, что имеет достоинства и недостатки. Неправильное использование этих функций может приводить к “зависанию” ОС и общему краху системы. Достоинство в том, что разработчик приложения может исключать нерациональные прерывания его программы в неудобные для него моменты времени и легче решать проблемы совместного использования данных.
В современных ОС ориентированных на высокопроизводительное выполнение приложений реализованы вытесняющие алгоритмы планирования потоков (UNIX, Windows NT/2000, OS/2).
Невытесняющий алгоритм планирования применен в файловом сервере NetWare, что позволило достичь высокой скорости выполнения файловых операций.
Алгоритмы планирования, основанные на квантовании В основе многих вытесняющих алгоритмов планирования лежит концепция квантования.
Каждому потоку поочередно выделяется непрерывный период процессорного времени – квант.
Смена активного потока происходит, если:
Поток перешел в состояние ожидания; исчерпан квант отведенный потоку.
Кванты, выделенные потокам, могут быть одинаковыми для всех потоков или различными.
Типичное значение кванта в СРВ составляет десятки миллисекунд.
Кванты, выделяемые одному потоку, могут быть фиксированной величины и могут изменяться в разные периоды жизни потока. Например, первоначально потоку предоставляется достаточно большой квант времени, а величина следующего шага уменьшается до некоторой заданной величины. Тогда короткие задачи успевают выполниться в течение 1-го кванта, а длительные вычисления будут проводиться в фоновом режиме.
Другой алгоритм, предусматривает увеличение кванта времени на следующий шаг исполнения потока. Такой подход позволяет уменьшить накладные расходы на переключение задач в том случае, если сразу несколько задач выполняют длительные вычисления.
Иногда поток не использует полностью квант времени (например, из-за ожидания вводавывода). Тогда потоки с интенсивными обращениями к вводу-выводу используют небольшую часть выделенного процессорного времени. В этом случае планировщик может создавать очереди готовых потоков. Приоритет при выделении кванта времен процессора отдается потокам, которые не исчерпали предыдущий квант времени.
Таким образом, существует довольно большое разнообразие алгоритмов планирования основанных на квантовании процессорного времени.
Алгоритмы планирования, основанные на приоритетах Это другая концепция вытесняющих алгоритмов планирования. Приоритет – это характеристика (число) определяющее порядок выполнения потока. Приоритет может выражаться целым или дробным, положительным или отрицательным значением.
В большинстве ОС, поддерживающих потоки, приоритет потока непосредственно связан с приоритетом процесса, в рамках которого поток исполняется. Приоритет процесса назначается ОС при его создании и включается в описатель процесса. При назначении приоритета ОС учитывает, является ли процесс системным или прикладным, каков статус пользователя, было ли явное указание пользователя на присвоение процессу значения приоритета. Во многих ОС предусматривается возможность изменения приоритета в течение жизни потока по инициативе пользователя, когда он выполняет соответствующую команду. ОС может сама изменять приоритеты потоков в зависимости от складывающейся в системе ситуации (динамические приоритеты). Эффективность работы ВС сильно зависит от назначения приоритетов потокам и процессам. Пользователи, назначающие приоритеты могут привести работу ВС к разбалансировке, поэтому ОС часто ограничивает их возможности. Пример. Windows NT использует 32 уровня приоритетов о 0 до 31 и 2 класса потоков – потоки реального времени и потоки с переменными приоритетами.
Windows NT при создании процесса назначает ему базовый приоритет в верхней или нижней части диапазона. Базовый приоритет в дальнейшем может быть повышен или понижен ОС. В частности ОС повышает приоритет потокам, ожидающим ввод с клавиатуры, и понижает приоритет потокам, выполняющим дисковые операции.
Существует 2 разновидности приоритетного планирования:
Обслуживание с относительным приоритетом;
Обслуживание с абсолютным приоритетом.
В обоих случаях выбор потока на выполнение из очереди готовых осуществляется одинаково - выбирается поток, имеющий наивысший приоритет. Однако проблема определения момента смены активного потока решается по-разному. В системах с относительным приоритетом активный поток выполняется до тех пор, пока он сам не покинет процессор, перейдя в состояние ожидания.
В системах с активным приоритетом активный поток прерывается, если в очереди готовых потоков появился поток с большим приоритетом. В системах с относительным приоритетом минимизируются затраты на переключение процессора с одной работы на другую. Для ОСРВ и системы реального времени такая дисциплина обслуживания не подходит, а в системах пакетной обработки относительные приоритеты используются широко.
Потоки с переменным приоритетом Потоки реального времени Рис. 4.5 Приоритеты потоков Windows NT Смешанные алгоритмы планирования Во многих ОС алгоритмы планирования построены с использованием, как концепции квантования, так и приоритетов. Например, в основе планирования лежит квантование, но величина кванта и/или порядок выбора потока из очереди готовых определяется приоритетами потоков. Именно так реализовано планирование в Windows NT.
Мультипрограммирование на основе прерываний Прерывания является основной движущей силой любой ОС. Прерывания возникают либо в зависимости от внешних по отношению к процессу выполнения программы событий, либо при появлении непредвиденных аварийных ситуаций. В зависимости от источника прерывания делятся на:
Внешние прерывания возникают в результате действий пользователя или оператора за терминалом, или же при поступлении сигналов от аппаратуры – завершение операций вводавывода, датчиков объектов, управляемых компьютеров. Данный класс прерываний является асинхронным по отношению к исполняемой программе.
Внутренние прерывания, называемые также исключениями (exeption), происходят синхронно выполнению программы при появлении аварийной ситуации при исполнении команды программы (например, деления на нуль).
Программные прерывания возникают при выполнении особой команды процессора, выполнение которой имитирует прерывание, т.е. переход на новую последовательность команд.
Процедуры ОС, вызываемые по прерываниям, называются обработчиками прерываний или процедурами обслуживания прерываний (ISR – Interrupt Service Routine).
Аппаратные прерывания обрабатываются драйверами соответствующих внешних устройств, исключения - специальными модулями ядра, а программные – процедурами ОС, обслуживающими системные вызовы.
Кроме этих модулей в ОС может находиться также диспетчер прерываний, который координирует работу отдельных обработчиков прерываний.
Системный вызов позволяет приложению обратиться к ОС с просьбой выполнить действия, оформленные как процедура или набор процедур кодового сегмента ОС.
Для прикладного программиста ОС выглядит как некая библиотека, с полезным набором функций упрощающих прикладную программу, или с запросом на выполнение действий запрещенных в пользовательском режиме.
Реализация системных вызовов должна удовлетворять следующим требованиям:
Обеспечивать переключение в привилегированный режим;
Обладать высокой скоростью вызова процедур ОС;
Обеспечивать, по возможности, единообразное обращение к системным Допускать легкое расширение набора системных вызовов;
Контролировать корректное использование программистом системных вызовов.
В большинстве ОС системные вызовы обслуживаются по централизованной схеме, основанной на существовании диспетчера системных вызовов - программе, которая сохраняет содержимое регистров процессора в системном стеке, проверяет, попадает ли запрошенный № вызова в поддерживаемый ОС диапазон и передает управление процедуре ОС, адрес которой задан в таблице адресов системных вызовов. После завершения работы системного вызова управление возвращается диспетчеру, при этом он получает код завершения этого вызова.
Диспетчер восстанавливает регистры процессора, помещает в определенный регистр код возврата и выполняет инструкцию возврата из прерывания, которая восстанавливает непривилегированный режим работы процессора. Для приложения системный вызов внешне ничем не отличается от вызова обычной библиотечной функции языка С, связанной с объектным кодом приложения и выполняющейся в пользовательском режиме.
ОС может выполнять системные вызовы в синхронном или асинхронном режимах.
Синхронный системный вызов означает, что процесс, сделавший такой вызов приостанавливается (переводится в состояние ожидания) до тех пор, пока системный вызов не выполнит для него всю работу. После этого планировщик переводит процесс в состояние готовности и при очередном вызове процесс может гарантированно воспользоваться результатами системного вызова. Асинхронный системный вызов не приводит к переводу процесса в режим ожидания. Большинство системных вызовов в ОС является синхронными, т.к.
это избавляет приложение от работы по выяснению момента появления результата вызова. В новых версиях ОС количество асинхронных вызовов постепенно увеличивается.
Синхронизация процессов и потоков Синхронизация процессов или потоков заключается в согласовании их скоростей путем приостановки потока до наступления некоторого события и последующей его активизации при наступлении этого события. Синхронизация лежит в основе любого взаимодействия потоков, связано ли оно с разделением ресурсов или с обменом данными. Например, поток-получатель должен обращаться за данными после того, как они помещены в буфер потоком-отправителем.
Если же поток-получатель обратился к данным до момента их поступления в буфер, то он должен быть приостановлен. Существует достаточно обширный класс средств ОС, которые обеспечивают взаимную синхронизацию процессов и потоков. Эти средства часто называют средствами межпроцессного взаимодействия (IPC- inter Process Communication). Для синхронизации потоков программист может использовать как собственные средства и приемы синхронизации, так и средства ОС. Например, два потока процесса могут координировать свою работу с помощью глобальной логической переменной доступной для них обоих. Если потоки принадлежат разным процессам, то синхронизация может осуществляться только средствами ОС. ОС использует средства синхронизации также для своих внутренних нужд.
Необходимость синхронизации и гонки Пренебрежение вопросами синхронизации в многопоточной системе может привести к неправильному решению задачи или даже к краху ВС.
Рис. 4.6 Работа с общим файлом базы данных Рассмотрим задачу ведения базы данных клиентов предприятия. Каждому клиенту отводится отдельная запись в базе данных, в которых среди прочих имеются поля Заказ и Оплата.
Программа, ведущая базу данных, оформлена как один процесс, имеющий несколько потоков.
Один из них поток А заносит в базу данных информацию о заказах, другой поток В сведения об оплате клиентами выставленных счетов.
Оба потока, работают над общим файлом базы данных, используя однотипные алгоритмы:
1. считать из базы данных в буфер запись о клиенте с заданным идентификатором;
2. внести новое значение в поле Заказ (для потока А) или Оплата (для потока В);
3. сохранить модифицированную запись в базе данных.
Ситуации, когда 2 или более потока обрабатывают разделяемые данные и конечный результат зависит от соотношения скоростей потоков, называется гонками.
1. Потеря информации о Заказе клиента 2. Потеря информации об Оплате Поток В 3. Все исправления успешны Рис. 4.7 Влияние относительных скоростей потоков на результат решения задачи Критическая секция – часть программы, результат выполнения которой непредсказуемо меняется, если переменные, относящиеся к этой части программы, изменяются другими потоками. Критическая секция всегда определяется по отношению к определенным критическим данным, при несогласованном изменении которых могут возникнуть нежелательные эффекты.
Чтобы исключить эффект гонок по отношению к критическим данным, необходимо, чтобы в каждый момент времени в критической секции находился только один поток.
Используются программистом для синхронизации потоков одного процесса. Обращения к системным вызовам не требуется.
Каждому набору критических данных ставится в соответствие двоичная переменная, которой поток присваивает значение 0, когда он входит в критическую секцию и значение 1, когда он ее покидает.
Реализация взаимного исключения с блокирующими переменными имеет существенный недостаток: в течение времени, когда поток находится в критической секции, другой поток, которому нужен этот ресурс, получив доступ к процессору, будет непрерывно опрашивать блокирующую переменную, бесполезно тратя процессорное время. Это устраняется использованием специальных системных вызовов для работы с критическими секциями.
“проверкаустановка” Рис.4,8. Реализация критических секций с использованием блокирующих переменных На рисунке 4.9 показано, как с помощью этих функций реализовано взаимное исключение в операционной систему Windows NT. Перед тем как начать изменение критических данных, поток выполняет системный вызов EnterCriticalSection(). В рамках этого вызова сначала выполняется, как ив предыдущем случае, проверка блокирующей переменной, отражающей состояние критического ресурса.
Системный вызов EnterCriticalSection() Системный вызов LeaveCriticalSection() Продолжение вычислений Рис.4,9 Реализация взаимного исключения с использованием системных функций входа в критическую секций и выхода из нее Это прием обобщения блокирующих переменных. Вместо обычных переменных используются переменные принимающие целые неотрицательные значения.
Пусть S –переменная, представляет семафор.
Примитивы:
1. V(s) => s:=s+1. Выборка, наращивание и запоминание не могут быть прерваны и производятся единым действием. К s нет доступа во время этой операции.
2. P(s)=> s:=s-1, если это возможно. Если s=0, то поток, вызывающий операцию P ждет, пока уменьшение s станет возможным. Это также неделимая операция.
Напротив, поток-читатель должен приостанавливаться, когда все буферы пусты, и активизироваться при появлении хотя бы одной записи. Введем 2 семафора:
F – число заполненных буферов, причем в исходном состоянии E=N, F=0.
Классический пример использования семафоров в режиме мультипрограммирования потоков, один из которых пишет в D в буферный пул, а другой считывает их из него. Буферный пул состоит из N буферов, каждый может содержать одну запись. В общем случае потокписатель и поток-читатель могут иметь различные скорости и обращаться к буферному пулу с переменной интенсивностью. Для правильной совместной работы поток- писатель должен приостанавливаться, когда все буферы заняты, и активизироваться при освобождении хотя бы одного буфера.
Поток-писатель выполняет P(e). Потоки-читатели проверяют, есть ли в буферном пуле незаполненные буферы.
Рис. 4.10 Использование семафоров для синхронизации потоков Если E=0, т.е. свободных буферов нет, то поток-писатель переходит в состояние ожидания.
Если же E>0, то он уменьшает число свободных буферов, записывает данные в очередной свободный буфер и наращивает F:=F+1.