Федеральное агентство по образованию
Омский государственный институт сервиса
Кафедра высшей математики и информатики
С. Ф. Храпский
ОПЕРАЦИОННЫЕ СИСТЕМЫ, СРЕДЫ И ОБОЛОЧКИ
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Учебное пособие
Д О П У Щ Е Н О
Министерством образования и науки Российской Федерации
В качестве учебного пособия
Для студентов высших учебных заведений, обучающихся
по специальности «Прикладная информатика (в сфере сервиса)»
УДК 681.3
Х – 90
Храпский С. Ф.
Операционные системы, среды и оболочки. Основные теоретические сведения: Учебное пособие. – Омск: ОГИС, 2005. – 268 c.
ISBN 5-93252-039-6
Учебное пособие разработано с целью обеспечения обучающихся и преподавателей систематизированным учебным материалом по теоретическим основам операционных систем.
Рассмотрены основные понятия операционных систем, сред и оболочек, вопросы управления процессами и ресурсами, особенности построения перациионных систем для многопроцессорных вычислительных машин и многомашинных вычислительных систем, общие концепции и принципы разработки операционных систем, история развития операционных систем и эволюция их функциональных характеристик. Представлены примеры практической реализации наиболее распространенных современных операционных систем.
Учебное пособие подготовлено в соответствии с требованиями ГОС ВПО специальности 351400 «Прикладная информатика (в сфере сервиса)».
Предназначено для студентов очной и заочной форм обучения специальности 351400 «Прикладная информатика (в сфере сервиса)», изучающих дисциплину «Операционные системы, среды и оболочки». Может быть использовано при изучении ряда смежных дисциплин этой специальности, а также студентами других специальностей, изучающих соответствующие разделы в дисциплинах «Информатика», «Информационные технологии», «Информационные системы».
УДК 681.3
Библиогр.: 18 назв., словарь, алфавитно-предметный указ. (в конце)
Рецензенты:
д-р техн. наук, профессор В. Ю. Юрков
(Сибирская государственная автомобильно-дорожная академия)
канд. техн. наук, доцент В. И. Стариков
(Омский государственный институт сервиса)
Ответственный за выпуск
зав. кафедрой ВМиИ, канд. пед. наук, доцент О. Н. Лучко
ISBN 5-93252-039-6 Ó Омский государственный
институт сервиса
Оглавление
Предисловие………………………………………...……………………………………..... Введение……………………………………………………………………………………... 1. Управление процессами в автономных однопроцессорных вычислительных машинах…………………………...…………… 1.1. Понятия вычислительного процесса и ресурса…………………………………….. 1.2. Планирование процессов…………………………………………………………….. 1.3. Межпроцессное взаимодействие……………………………………………………. 1.4. Понятия потока («нити») и многопоточности……………………………………… Контрольные вопросы и задания………………………………………………………… 2. Управление ресурсами в автономных однопроцессорных компьютерах…….…. 2.1. Управление памятью…………………………………………………………………. 2.2. Управление вводом-выводом………………………………………………………... 2.3. Управление файлами и файловая система………………………………………….. Контрольные вопросы и задания…………………...……………………………………. 3. Управление процессами и ресурсами в автономных многопроцессорных вычислительных машинах………………………………………………………………. 3.1. Реализация операционных систем многопроцессорных вычислительных машин. 3.2.Планирование и синхронизация в многопроцессорных вычислительных машинах…….................………………...... Контрольные вопросы и задания………………………………………...………………. 4.Управление процессами и ресурсами в многомашинных вычислительных системах.................................................................................................. 4.1. Способы организации управления процессами и ресурсами в многомашинных вычислительных системах……………………………………………. 4.2. Понятия сетевой и распределенной операционных систем………………………... 4.3. Варианты реализации распределенных операционных систем……………………. Контрольные вопросы и задания…………………………...……………………………. 5. Общие концепции разработки операционных систем………………………….. 5.1. Основные принципы построения операционных систем ………………………….. 5.2. Архитектурные особенности проектирования операционных систем……………. 5.3. Принципы построения системных и прикладных программных интерфейсов…... Контрольные вопросы и задания……………………...…………………………………. 6. История развития операционных систем и эволюция их функциональных характеристик………………………..……….…..... 6.1.Операционные системы разных этапов разработки вычислительных машин.......... 6.2. История развития и характеристики операционных систем UNIX......................... 6.3. История развития и характеристики операционных систем семейства Windows.. Контрольные вопросы и задания……………………………...…………………………. 7. Пример практической реализации операционной системы: UNIX………………. 7.1. Обзор системы UNIX…………………………………………………………………. 7.1.1. Общие представления…………………………………………………………….. 7.1.2. Интерфейсы системы UNIX……………………………………………………… 7.1.3. Оболочка и утилиты системы UNIX…………………………………………….. 7.1.4. Структура ядра системы UNIX…………………………………………………... 7.2. Процессы в UNIX……………………………………………………………………... 7.2.1. Основные понятия………………………………………………………………… 7.2.2. Реализация процессов в UNIX…………………………………………………… 7.2.3. Планирование в системе UNIX…………………………………………………... 7.3. Управление памятью в UNIX………………………………………………………… 7.3.1. Основные понятия………………………………………………………………… 7.3.2. Реализация управления памятью в UNIX……………………………………….. 7.4. Ввод-вывод в системе UNIX…………………………………………………………. 7.4.1. Основные понятия………………………………………………………………… 7.4.2. Реализация ввода-вывода в системе UNIX……………………………………… 7.4.3. Потоки данных в UNIX……………………………………….....……...………... 7.5. Файловые системы UNIX…………………………………………………………….. 7.5.1. Основные понятия………………………………………………………………… 7.5.2. Реализация классической файловой системы UNIX…………………....……… 7.5.3. Реализация файловой системы Berkeley Fast…………………………………... 7.5.4. Реализация файловой системы Linux.................................................................... 7.5.5. Реализация файловой системы NFS...................................................................... 7.6. Безопасность в UNIX..................................................................................................... 7.6.1. Основные понятия................................................................................................... 7.6.2. Реализация безопасности в UNIX.......................................................................... Контрольные вопросы и задания........................................................................................ 8. Пример практической реализации операционной системы: Windows 2000.......... 8.1. Обзор структуры операционной систем Windows 2000............................................. 8.1.1. Структура системы.................................................................................................. 8.1.2. Реализация объектов................................................................................................ 8.1.3. Подсистемы окружения........................................................................................... 8.2. Процессы и потоки в Windows 2000............................................................................ 8.2.1. Основные понятия.................................................................................................... 8.2.2. Межпроцессное взаимодействие............................................................................ 8.2.3. Реализация процессов и потоков............................................................................ 8.2.4. Загрузка Windows 2000............................................................................................ 8.3. Управление памятью в Windows 2000......................................................................... 8.3.1. Основные понятия.................................................................................................... 8.3.2. Реализация управления памятью............................................................................ 8.4. Ввод-вывод в системе Windows 2000........................................................................... 8.4.1. Основные понятия.................................................................................................... 8.4.2. Реализация ввода-вывода в Windows 2000............................................................ 8.5. Файловые системы Windows 2000................................................................................ 8.5.1. Файловые системы типа FAT................................................................................. 8.5.2. Файловая система типа NTFS................................................................................. 8.6. Безопасность в Windows 2000....................................................................................... 8.6.1. Основные понятия.................................................................................................... 8.6.2. Реализация защиты в Windows 2000...................................................................... Контрольные вопросы и задания........................................................................................ Заключение.............................................................................................................................. Библиографический список................................................................................................. Словарь терминов и определений...................................................................................... Алфавитно-предметный указатель.................................................................................... |
Предисловие
Учебное пособие предназначено для студентов очной и заочной форм обучения специальности 351400 «Прикладная информатика (в сфере сервиса)», изучающих дисциплину «Операционные системы, среды и оболочки», и разработано с целью обеспечения обучающихся и преподавателей систематизированным учебным материалом по теоретическим основам операционных систем.
Рассмотрены основные понятия операционных систем, сред и оболочек, вопросы управления процессами и ресурсами, особенности построения операционных систем для многопроцессорных вычислительных машин и многомашинных вычислительных систем, общие концепции и принципы разработки операционных систем. Приведены краткие исторические сведения о возникновении и развитии операционных систем, а также даны оценки их свойств и характеристик. В качестве примеров практической реализации реально функционирующих современных операционных систем описаны наиболее распространенные и «знаковые» системы семейств UNIX и Windows.
Представленные в учебном пособии сведения могут найти применение при изучении ряда смежных дисциплин специальности 351400 «Прикладная информатика (в сфере сервиса)», а также соответствующих разделов в дисциплинах «Информатика», «Информационные технологии», «Информационные системы» других специальностей.
Учебное пособие подготовлено кандидатом технических наук, проректором ОГИС по информационным технологиям Сергеем Филипповичем Храпским.
В разделах 7 и 8 использованы материалы книги Э. Таненбаума «Современные операционные системы» (см. Библиографический список).
Данное учебное пособие по порядку изучения является следующим за учебным пособием С.Ф. Храпского «Вычислительные системы, сети и телекоммуникации» (ОГИС, 2005 г.). Поэтому при изложении материала предполагается наличие у читателя предварительных знаний по основным понятиям и терминологии вычислительной техники.
Автор
Введение
Операционные системы являются основой программного обеспечения вычислительных машин (и их систем – вычислительных систем). Операционная система (далее – ОС) – это комплекс управляющих и обрабатывающих программ, который, с одной стороны, выступает как интерфейс между пользователем (с его задачами) и аппаратными компонентами вычислительных машин (далее – ВМ) и вычислительных систем (далее – ВС), а с другой стороны предназначен для эффективного управления вычислительными процессами, а также наиболее рационального распределения и использования вычислительных ресурсов ВМ и ВС.
Обеспечение пользователю определенного уровня удобств осуществляется посредством того, что ОС представляет для него так называемую «расширенную» (или виртуальную) машину, которая избавляет пользователя от необходимости работать напрямую с аппаратными компонентами и берет на себя выполнение большинства рутинных операций. Таким образом, абстрактная «расширенная» машина, с которой, благодаря ОС, имеет дело пользователь, гораздо проще и удобнее в обращении, чем реальная аппаратура, лежащая в основе этой абстрактной машины.
Идея о том, что ОС прежде всего система, обеспечивающая удобный интерфейс пользователям, соответствует рассмотрению ее сверху вниз. Другой взгляд, снизу вверх, дает представление об ОС как о некотором механизме, распределяющим и управляющим всеми компонентами и ресурсами ВМ и ВС с целью обеспечения максимальной эффективности их функционирования.
Таким образом, ОС выполняет функции управления вычислительными процессами в ВМ и ВС, распределяет ресурсы ВМ и ВС между различными вычислительными процессами и образует программную среду, в которой выполняются прикладные программы пользователей. Такая среда называется операционной средой.
Благодаря наличию операционной системы пользователи-программисты при написании собственных программ могут вообще не знать многих деталей управления конкретными ресурсами ВМ и ВС, а должны только обращаться к ОС как к некоторой программной подсистеме с соответствующими вызовами и получать от нее необходимые функции и сервисы. Набор таких функций и правил обращения к ним как раз и образуют то базовое понятие, которое называют операционной средой. Таким образом можно сказать, что термин «операционная среда» означает, прежде всего, соответствующие интерфейсы, необходимые программам и пользователям для обращения к ОС с целью получить определенные сервисы.
Параллельное существование терминов «операционная система» и «операционная среда» вызвано тем, что операционная система в общем случае может поддерживать несколько операционных сред. Операционная среда в свою очередь может включать несколько разных пользовательских и программных интерфейсов. Например, ряд ОС предоставляют для пользователя интерфейсы командной строки, интерфейсы-оболочки (типа Norton Commander и т.п.), а также графические интерфейсы. Если же говорить о программных интерфейсах, то это те интерфейсы, к которым могут обращаться программисты для получения соответствующих функций и сервисов. Можно сказать, что операционная среда – это то системное программное окружение, в котором могут выполняться программы, созданные по правилам работы этой среды.
Операционная система в значительной степени определяет функциональные возможности, удобства пользования и эффективность работы ВМ и ВС. На сегодняшний день существует большое количество разных типов ОС, отличающихся областями применения, аппаратными платформами и методами реализации. Естественно, это обуславливает и значительные функциональные различия этих ОС. Поэтому при изучении операционных систем очень важно из всего многообразия выделить те функции, которые присущи всем операционным системам как классу программных продуктов. Именно общие понятия ОС, концепции их построения и функциональные возможности являются предметами рассмотрения данного учебного пособия. В заключительных разделах учебного пособия уделено внимание историческим сведениям о возникновении и развитии ОС, а также даны оценки свойств и характеристик современных ОС. Представлены примеры практического построения, состава и особенностей функционирования наиболее популярных и эффективных операционных систем.
Управление процессами в автономных
Однопроцессорных вычислительных машинах
Резюме
Ключевыми понятиями операционных систем являются понятия «процесса» и «ресурса». Процесс представляет собой некоторую последовательность операций при выполнении программы или ее части в совокупности с используемыми данными. Процессы обладают рядом характеристик и признаков, основными из которых являются временные характеристики, генеалогические признаки, характеристики результативности, времени и места развития, связности и принадлежности к операционной системе.
Под ресурсомпонимается любой потребляемый или расходуемый процессом объект. Ресурсы классифицируются по различным свойствам, важнейшими из которых являются реальность и активность, продолжительность времени существования, характер использования, форма реализации.
За время своего существования процессы могут неоднократно изменять свое состояние, проходя через стадии создания, готовности, выполнения, ожидания и завершения своей работы. Подсистема управления процессами планирует выполнение процессов, то есть распределяет процессорное время между несколькими одновременно существующими в системе процессами, а также занимается созданием и уничтожением процессов, обеспечивает процессы необходимыми системными ресурсами, поддерживает взаимодействие между процессами. Одним из методов планирования процессов, ориентированных на эффективную загрузку ресурсов, является метод очередей ресурсов. Процессы мигрируют между различными очередями под управлением специальной программы операционной системы – планировщика. Наиболее часто используемые на практике алгоритмы планирования процессов – это алгоритмы, основанные на квантовании,и алгоритмы, основанные на приоритетах.
Основные типы процедур планирования процессов – вытесняющие и невытесняющие. При невытесняющей процедуре планирования (невытесняющей многозадачности) активный процесс выполняется до тех пор, пока он сам, по собственной инициативе, не отдаст управление планировщику операционной системы для того, чтобы тот выбрал из очереди другой, готовый к выполнению процесс. При вытесняющей процедуре планирования (вытесняющей многозадачности) решение о переключении процессора с выполнения одного процесса на выполнение другого процесса принимается планировщиком операционной системы, а не самой активной задачей.
Одними из основных движущих сил, изменяющих состояния процессов, являются так называемые прерывания, которые представляют собой механизм принудительной передачи управления от выполняемой программы к соответствующей программе обработки прерывания. Прерывания классифицируются на аппаратные (которые могут быть внешними и внутренними) и программные. Порядок обработки прерываний зависит от типа используемой дисциплины обслуживания прерываний.
Порядок взаимосвязи процессов определяется правилами синхронизации. Часть программы, в которой осуществляется доступ к разделяемым данным, называется критической секцией (критической областью) программы. Ситуации, когда два или более процессов обрабатывают разделяемые данные, и конечный результат зависит от соотношения скоростей процессов, называются гонками. Исключение эффекта гонок по отношению к некоторому ресурсу обеспечивается различными способами взаимного исключения, такими как использование механизмов блокирующих переменных, семафоров, мьютексов.
Существенной проблемой синхронизации процессов являются их взаимные блокировки или тупики. Проблема взаимоблокировок требует решения задач предотвращения взаимоблокировок, распознавания взаимоблокировок и восстановления системы после взаимоблокировок. Высокоуровневым средством синхронизации процессов, исключающим взаимоблокировки, является так называемый монитор, который представляет собой набор процедур, переменных и структур данных.
Потоки («нити») представляют собой «легковесную» (или «облегченную») форму процессов. Потоки в отличие от процессов не имеют своих собственных ресурсов, они развиваются в том же виртуальном адресном пространстве, могут пользоваться теми же файлами, виртуальными устройствами и иными ресурсами, что и данный процесс. Единственное, что им необходимо иметь, – это процессорный ресурс. Многопоточность обеспечивает возможность параллельного выполнения несколько видов операций в одной прикладной программе. Параллельные вычисления способствуют более эффективному использованию ресурсов центрального процессора и существенно уменьшают суммарное время выполнения программ.
Контрольные вопросы и задания
1. Дайте определение понятиям «вычислительный процесс» и «ресурс».
2. Как классифицируются процессы и ресурсы?
3. Решение каких задач включает в себя планирование процессов?
4. Перечислите виды состояний процессов.
5. Что такое контекст и дескриптор процесса?
6. Каковы возможные причины выхода процесса из состояния выполнения?
7. Охарактеризуйте наиболее распространенные алгоритмы плани-рования процессов.
8. В чем заключается сущность алгоритмов планирования процес-сов, основанных на квантовании?
9. Опишите различия между относительными и абсолютными прио-ритетами.
10. Дайте определение понятиям вытесняющая и невытесняющая многозадачность.
11. Дайте определение понятию «прерывание».
12. Какие этапы реализуются механизмом обработки прерываний?
13. Приведите примеры внешних прерываний.
14. Какими событиями вызываются внутренние прерывания?
15. Поясните понятие программного прерывания.
16. Охарактеризуйте применяемые дисциплины обслуживания прерываний.
17. В чем заключается механизм синхронизации процессов?
18. Что такое «критическая область» программы и с какими целями она используется?
19. С помощью каких механизмов осуществляется взаимодействие процессов?
20. В чем различие понятий очередей процессов и взаимоблоки-ровок процессов?
21. Перечислите способы преодоления тупиковых ситуаций при взаимодействии процессов.
22. Опишите понятие монитора как высокоуровневого средства синхронизации процессов.
23. В чем различие понятий «процесс» и «поток»?
24. С какой целью в ОС используется механизм потоков («нитий»)?
Управление ресурсами в автономных
Однопроцессорных компьютерах
Резюме
Функциями ОС по управлению памятью являются: отслеживание свободной и занятой памяти, выделение памяти процессам и освобождение памяти при завершении процессов, вытеснение процессов из оперативной памяти на диск и возвращение их в оперативную память, настройка адресов программы на конкретную область физической памяти.
Для идентификации команд и переменных используются символьные имена (метки), виртуальные адреса и физические адреса.
Самым простым способом управления оперативной памятью является разделение ее на несколько разделов фиксированной величины. При распределении памяти разделами переменной величины память ВМ заранее не делится на разделы и сначала вся оперативная память свободна. Каждому вновь поступающему процессу выделяется необходимая память.
Эффективным методом управления памятью является применение механизма так называемой виртуальной памяти с использованием, например, дискового пространства. Наиболее распространенными способами реализации виртуальной памяти является страничное, сегментное и странично-сегментное распределение памяти, а также свопинг, когда некоторые процессы, находящиеся в состоянии ожидания, временно целиком выгружаются на диск.
Память ВМ представляет собой иерархию запоминающих устройств, включающую внутренние регистры процессора, различные типы сверхоперативной, оперативной и постоянной памяти, внешнюю память на магнитных дисках и других типах устройств. Разные типы запоминающих устройств отличаются средним временем доступа и стоимостью хранения данных в расчете на один бит.
Кэширование информации – это способ организации совместного функционирования двух типов запоминающих устройств, отличающихся временем доступа и стоимостью хранения данных, который позволяет уменьшить среднее время доступа к данным за счет динамического копирования наиболее часто используемой информации из относительно более «медленного» ЗУ в более «быстрое» ЗУ (называемое кэш-памятью). Кэширование выполняется автоматически системными средствами.
Одной из главных функций ОС является управление всеми устройствами ввода-вывода ВМ, а именно передача устройствам соответствующих команд, перехват прерываний, обработка ошибок, обеспечение интерфейса между устройствами ввода-вывода и остальной частью машины. Устройства ввода-вывода делятся на блок-ориентированные устройства (которые хранят информацию в блоках фиксированного размера и каждый блок имеет свой собственный адрес) и байт-ориентированные устройства (которые не адресуемы и не позволяют производить операцию поиска, а генерируют или потребляют последовательность байтов).
Основная идея организации программного обеспечения ввода-вывода состоит в разбиении его на несколько уровней, причем нижние уровни обеспечивают экранирование особенностей аппаратуры от верхних, а те, в свою очередь, обеспечивают удобный интерфейс для пользователей. При этом ключевым принципом является как можно большая независимость программного обеспечения от конкретного типа устройства ввода-вывода. Весь зависимый от устройства программный код помещается в драйвер устройства. Каждый драйвер управляет устройствами одного типа или, может быть, одного класса.
Устройства ввода-вывода могут быть разделяемыми, допускающими одновременный доступ нескольких пользователей к устройству (например, дисковые устройства), и выделенными, не допускающими одновременную работу с ними разными пользователями (например, устройства печати – принтеры).
Для освобождения процессора от операций последовательного вывода данных из оперативной памяти или последовательного ввода в нее используется механизм прямого доступа внешних устройств к памяти – ПДП или DMA. При этом специальный контроллер DMA забирает у процессора управление локальной магистралью для выставления соответствующих сигналов записи информации в память или чтения информации из памяти на шины адреса, данных и управления. Контроллер DMA имеет несколько каналов DMA, которые могут подключаться к различным устройствам ввода-вывода.
Под файлом обычно понимают набор данных, организованных в виде совокупности записей одинаковой структуры. Для управления этими данными создаются соответствующие системы управления файлами. Возможность иметь дело с логическим уровнем структуры данных и операций, выполняемых над ними в процессе их обработки, предоставляет файловая система. Файловая система – это набор спецификаций и соответствующее им программное обеспечение, которые отвечают за создание, уничтожение, организацию, чтение, запись, модификацию и перемещение файловой информации, а также за управление доступом к файлам и за управление ресурсами, которые используются файлами. Файлы идентифицируются символьными именами, которые дают им пользователи. При этом учитываются ограничения ОС как на используемые символы, так и на длину имени.
Файлы подразделяются на обычные, специальные и файлы-каталоги. Обычные файлы в свою очередь подразделяются на текстовые и двоичные.
Различают логическую и физическую организации файла. Логическая организация представляет файл в виде определенным образом организованных логических записей. Физическаяорганизация файла описывает правила расположения файла на устройстве внешней памяти, в частности на диске.
Информация на магнитных дисках размещается и передается блоками. В некоторых ОС такая наименьшая единица обмена называется кластером. При этом кластер может состоять из нескольких блоков.
Наиболее известными способами физической организации файлов являются непрерывное размещение блоков данного файла на диске, размещение в виде связанного списка блоков дисковой памяти, использование связанного списка индексов, простое перечисление номеров блоков файла.
В разных файловых системах может быть определен свой список прав доступа к файлам, то есть набор операций, которые пользователь может применить к данному файлу.
Функционирование любой файловой системы можно представить многоуровневой моделью, в которой каждый уровень предоставляет некоторый интерфейс (набор функций) вышележащему уровню, а сам, в свою очередь, для выполнения своей работы использует интерфейс нижележащего уровня.
Некоторые ОС обеспечивают отображение файлов в адресное пространство выполняемого процесса.
Контрольные вопросы и задания
1. Охарактеризуйте существующие методы управления оперативной памятью.
2. Какие способы распределения виртуальной памяти чаще всего применяются, в чем их недостатки и преимущества?
3. Укажите отличие блок-ориентированных устройств ввода-вывода от байт-ориентированных?
4. В чем заключается смысл разбиения программного обеспечения ввода-вывода на несколько уровней?
5. Приведите примеры разделяемых и выделенных устройств ввода-вывода.
6. Опишите механизм прямого доступа устройств к памяти.
7. Дайте определение понятиям «система управления файлами» и «файловая система».
8. Какие функции в операционных системах выполняет система управления файлами?
9. Опишите структуру магнитного диска.
10. Дайте понятие логической организации файлов.
11. Охарактеризуйте наиболее известные способы физической организации файлов.
12. Какие уровни составляют многоуровневую модель функционирования файловой системы?
Резюме
По своему основному содержанию операционные системы для многопроцессорных ВМ представляют собой обычные ОС, выполняющие традиционные функции по обработке системных вызовов, управлению памятью, обслуживанию файловой системы, управлению устройствами ввода-вывода. Главным отличием в реализации ОС для многопроцессорных ВМ является изменение содержания состояния «выполнение» процессов. В этом состоянии может находиться не один процесс (как в однопроцессорных ВМ), а сразу несколько процессов, выполняющихся на разных процессорах многопроцессорной ВМ.
Простейший способ организации таких ОС состоит в том, чтобы статически разделить оперативную память по числу центральных процессоров и дать каждому центральному процессору свою собственную память с собственной копией операционной системы. Такой примитивный подход обладает рядом существенных недостатков и в настоящее время используется редко, хотя широко применялся на первоначальном этапе становления многопроцессорных ВМ.
При другом способе организации ОС для многопроцессорных ВМ используется всего одна копия операционной системы, работающая только на одном центральном процессоре, называемом «ведущим». Все системные вызовы перенаправляются для обработки на этот центральный процессор. Остальные процессоры в этой схеме – «ведомые». Такая модель системы позволяет решить большинство проблем предыдущего способа организации ОС, но ее недостаток состоит в том, что при относительно большом количестве центральных процессоров «ведущий» может стать узким местом всей системы.
Устранить эти недостатки позволяет схема, при которой в памяти также находится всего одна копия ОС, но выполнять ее может любой процессор. Эта модель обеспечивает динамический баланс процессов и памяти, поскольку в ней имеется всего один набор таблиц ОС.
Способ разрешения указанных выше проблем состоит в связывании мьютекса (то есть блокировки) с ОС, в результате чего вся система превращается в одну большую критическую область. Эффективным механизмом также является «расщепление» ОС на независимые критические области, не взаимодействующие друг с другом.
Сложность планирования процессов в многопроцессорной ВМ заключается в том, что планировщик решает вопросы не только очередности запуска процессов на выполнение, но и выбора центрального процессора, на котором должен быть запущен тот или иной процесс. Другим фактором, усложняющим планирование, является то, что в ряде случаев все процессы являются независимыми, тогда как в других случаях они формируют группы.
Простейший алгоритм планирования независимых процессов – поддержание единой структуры данных для готовых процессов.
В многопроцессорных ВМ часто встречается удержание процессом спин-блокировки. Чтобы решить данную проблему, в некоторых системах планировщик не останавливает процесс, удерживающий спин-блокировку, а, напротив, дает ему еще немного времени, чтобы тот завершил выполнение критической области и отпустил мьютекс.
Для увеличения скорости выполнения процессов применяется двухуровневый алгоритм планирования, удерживающий выполнение процессов на одном и том же центральном процессоре, что позволяет прежде всего использовать преимущество «родственности» содержимого кэш-памяти.
При планировании процессов, связанных друг с другом каким-либо способом, используется алгоритм «совместного использования (или разделения) пространства».
Для синхронизации центральных процессоров в многопроцессорных ВМ применяется специальный мьютекс-протокол, основой которого является команда процессора TSL, позволяющая проверить и установить блокировку. Один из способов снижения существенного шинного трафика, неизбежно создаваемого командой TSL, заключается в использовании алгоритма двоичного экспоненциального отката, применяемого в сетевых технологиях. Более эффективный способ состоит в том, чтобы каждому центральному процессору, желающему заполучить мьютекс, позволить опрашивать свою собственную переменную блокировки.
Важной проблемой планирования и синхронизации процессов в многопроцессорных ВМ является решение вопроса ожидания освобождения мьютекса или переключения на другой поток. Одно из решений этой проблемы заключается в том, чтобы всегда использовать циклический опрос. Вторым подходом является использование только переключений. Третий вариант состоит в том, чтобы каждый раз принимать, по-возможности, наиболее эффективное решение.
Контрольные вопросы и задания
1. В чем заключается основное отличие в реализации ОС для многопроцессорных ВМ от ОС однопроцессорных ВМ?
2. Охарактеризуйте особенности функционирования ОС многопроцессорных ВМ, организованных путем статического разделения оперативной памяти по числу центральных процессоров и выделении каждому центральному процессору собственной копии ОС.
3. Какими достоинствами и недостатками обладает способ организации ОС многопроцессорных ВМ по схеме «ведущий-ведомый»?
4. Опишите механизмы преодоления проблем в модели реализации ОС многопроцессорных ВМ, позволяющей любому процессору выполнять процедуры единственной копии операционной системы, находящейся в памяти.
5. Какие факторы усложняют планирование процессов в многопроцессорных ВМ по сравнению с аналогичным планированием в однопроцессорных машинах?
6. Какой механизм применяется для преодоления удержания процессом спин-блокировки?
7. Представьте достоинства использования двухуровневого алгоритма планирования процессов в многопроцессорных ВМ.
8. Опишите алгоритм «совместного использования пространства», его преимущества и недостатки.
9. Каким образом выполняется синхронизация центральных процессоров в многопроцессорных ВМ?
Управление процессами и ресурсами
В многомашинных вычислительных системах
Способы организации управления процессами
Варианты реализации распределенных
Резюме
Эффективным способом повышения производительности и надежности вычислительной техники является объединение отдельных автономных ВМ в многомашинные вычислительные системы.
Различают два класса многомашинных вычислительных систем: ММВСсосредоточенного типа и ММВС распределенного типа (которые обычно называют распределенными вычислительными системами или вычислительными сетями).
Существенным отличием ММВС от автономных (одно- или многопроцессорных) ВМ является то, что каждая машина, входящая в состав ММВС, имеет свою собственную оперативную память. Вследствии такого архитектурного построения механизмы организации межпроцессной взаимосвязи в ММВС и в автономных ВМ принципиально различны. В автономных машинах базой для взаимодействия процессов служит общая разделяемая память. В ММВС при отсутствии какой бы то ни было разделяемой памяти основой межпроцессного взаимодействия служит обмен физическими пакетами данных (так называемыми сообщениями) посредством некоторой коммуникационной среды.
В наиболее простом варианте системные средства обеспечения связи могут быть сведены к двум основным системным вызовам (примитивам): один – для отправки сообщения, другой – для получения сообщения. Системные вызовы могут быть блокирующими (синхронными) или неблокирующими (асинхронными).
В более сложной форме передача сообщений скрыта от пользователя под видом вызова удаленной процедуры RPC. Идея вызова удаленных процедур состоит в расширении механизма передачи управления и данных внутри программы, выполняющейся на одной ВМ, на передачу управления и данных через коммуникационные каналы, связывающие разные ВМ.
Операционные системы вычислительных сетей обычно называют сетевыми ОС. В вычислительных сетях есть узкоспециализированные правила, описывающие типы и форматы сообщений, которые могут посылаться в этих сетях, а также регламентирующие ответы на эти сообщения. Набор таких правил, с помощью которых машины взаимодействуют в сети, называется протоколом. Понятие протокола является фундаментальным понятием сетевых ОС, позволяющим определить и описать конкретные функции тех програмных частей операционных систем, которые отвечают за взаимодействие удаленных процессов.
Сетевые средства связи обычно строятся по многослойному (многоуровневому) принципу. Каждый уровень такой многослойной иерархии может взаимодействовать непосредственно только со своими вертикальными соседями, руководствуясь вертикальными протоколами, которые принято называть интерфейсами.
Самым нижним уровнем в многослойных сетевых иерархиях является уровень, на котором реализуется реальная физическая связь между двумя узлами сети на основе горизонтального протокола физического взаимодействия. Все одинаковые уровни, лежащие выше физического, виртуально обмениваются данными посредством соответствующих горизонтальных протоколов.
Всю совокупность вертикальных и горизонтальных протоколов, достаточную для организации взаимодействия удаленных процессов в вычислительных сетях, принято называть семейством протоколов или стеком протоколов. Сети, построенные на основе разных стеков протоколов, могут быть объединены между собой с использованием вычислительных устройств, осуществляющих трансляцию из одного стека протоколов в другой.
Наиболее совершенным и перспективным классом ОС являются так называемые распределенные операционные системы. Распределенная система создает для пользователя полную иллюзию того, что он работает в обычной автономной системе.
В распределенных ОС к лежащей в основе системы вычислительной сети должна быть добавлена некая общая модель, которая способна превратить множество слабосвязанных ВМ в однородную «конструкцию», базирующуюся на единой концепции.
Одним из наиболее эффективных способов построения распределенных ОС является установка специального промежуточного уровня программного обеспечения поверх сетевой операционной системы. Этот уровень предоставляет однородный уровень для взаимодействующих с ним приложений. Среди различных типов промежуточного программного обеспечения следует выделить документное, файловое, объектное и координационное. Примерами промежуточного программного обеспечения служат такие системы, как WWW, AFS, CORBA, Linda, Jini.
Контрольные вопросы и задания
1. С какими целями ВМ объединяют в многомашинные вычислительные системы?
2. Охарактеризуйте особенности построения и отличия ММВС сосредоточенного и распределенного типов.
3. В чем важнейшее отличие ММВС от автономных (централизованных) ВМ?
4. Посредством чего в ММВС осуществляется межпроцессное взаимодействие?
5. Представьте основные системные вызовы для отправки и получения сообщений.
6. Чем отличаются блокирующие (синхронные) системные вызовы от неблокирующих (асинхронных)?
7. Какие проблемы возникают при организации программ с неблокирующими примитивами и какие методы применяются для разрешения этих проблем?
8. В чем заключается основная идея так называемого вызова удаленных процедур?
9. Опишите механизмы реализации вызовов удаленных процедур.
10. Охарактеризуйте наиболее часто встречающиеся классы отказов механизма вызова удаленных процедур и способы реакции системы на них.
11. Дайте определение понятиям «сетевая операционная система» и «сетевой протокол».
12. По какому принципу строятся сетевые средства связи?
13. Опишите основные функции вертикальных и горизонтальных протоколов.
14. Что понимается под стеком протоколов вычислительной сети?
15. В чем отличие распределенных операционных систем от традиционных сетевых ОС?
16. Охарактеризуйте наиболее эффективные способы реализации распределенных операционных систем.
17. Приведите примеры практического построения разных типов промежуточного программного обеспечения.
Общие концепции разработки
Операционных систем
Архитектурные особенности проектирования
Резюме
Основными принципами построения современных эффективных операционных систем являются принципы модульности, генерируемости, функциональной избыточности, виртуализации, независимости выполняемых программ от внешних устройств, совместимости с другими ОС, открытости, легкой наращиваемости, мобильности (переносимости на другие аппаратные платформы), обеспечения надежной безопасности.
При модульном построении в ОС выделяется некоторая часть важных программных модулей, которые для более эффективной организации вычислительного процесса должны постоянно находиться в оперативной памяти. Эту часть ОС называют ядром операционной системы. Помимо программных модулей, входящих в состав ядра и постоянно располагающихся в оперативной памяти, может быть множество других системных программных модулей, которые загружаются в оперативную память только при необходимости, а в случае отсутствия свободного пространства могут быть замещены другими подобными модулями. Такие модули получили название транзитных или диск-резидентных.
Операционные системы прошли длительный путь развития и совершенствования своей архитектуры от монолитных систем до хорошо структурированных модульных систем, способных к развитию, расширению и легкому переносу на новые платформы. Монолитная ОС представляет собой набор процедур, каждая из которых имеет определенный интерфейс и может вызывать любую другую процедуру для выполнения некоторой нужной для нее полезной работы. При построении монолитной системы все отдельные процедуры связываются вместе в единый объектный файл.
Обобщением предыдущего подхода является организация ОС как иерархии уровней. Уровни образуются группами функций операционной системы, таких как файловая система, управление процессами и устройствами и т.п. Каждый уровень может взаимодействовать только со своим непосредственным соседом – выше- или нижележащим уровнем. Процессы передают запросы вверх и вниз по этим уровням. Такой структурный подход также воспринимается как монолитный. На смену монолитному подходу пришла модель клиент-сервер и тесно связанная с ней концепция микроядра.
Модель клиент-сервер предполагает наличие, во-первых, программного компонента – потребителя какого-либо сервиса, то есть клиента, а во-вторых, программного компонента – поставщика этого сервиса, то есть сервера. Взаимодействие между клиентом и сервером стандартизуется, так что сервер способен обслуживать клиентов, реализованных различными способами и, может быть, разными производителями. Ядро ОС (называемое здесь микроядром), работая в привилегированном режиме, доставляет сообщение нужному серверу, сервер выполняет операцию, после чего ядро возвращает результаты клиенту с помощью другого сообщения. Подход с использованием микроядра заменил вертикальное распределение функций (в монолитных ОС) на горизонтальное.
Технология микроядер заложила основы модульных систем, способных развиваться регулярным образом. Благодаря наличию четко определенных интерфейсов возможна постепенная эволюция и расширение ОС.
Достижению целей легкой расширяемости ОС в наибольшей степени соответствует объектно-ориентированный подход, при котором каждый программный компонент является функционально изолированным от других.
Модульность операционных систем нового поколения позволяет намного легче реализовать поддержку множественных прикладных сред, которые обеспечивают совместимость (на двоичном уровне) конкретной ОС с приложениями, написанными для других ОС и процессоров.
Под интерфейсами операционных систем понимают специальные системные и прикладные программные интерфейсы, предназначенные для управления процессами, памятью и вводом-выводом. Для использования прикладными программами системных ресурсов ОС и реализуемых ею функций предназначен прикладной программный интерфейс API, который может быть реализован на уровне ОС, на уровне системы программирования или на уровне внешней библиотеки процедур и функций.
Контрольные вопросы и задания
1. Перечислите основные принципы построения операционных систем.
2. Опишите принцип модульности построения ОС.
3. Охарактеризуйте принцип генерируемости ОС.
4. Какие преимущества дает реализация принципа функциональной избыточности?
5. Изложите основные положения принципа виртуализации.
6. В чем заключается принцип независимости программ от внешних устройств?
7. Что дает на практике построение ОС с учетом принципа совместимости?
8. Покажите практическое значение принципа переносимости ОС.
9. Опишите принципы обеспечения безопасности.
10. Перечислите и охарактеризуйте основные структурные модели, применяемые при проектировании ОС.
11. Для выполнения каких задач предназначены системные и прикладные программные интерфейсы?
12. Какие возможности предоставляют разработчику программного обеспечения функции прикладного программного интерфейса?
13. Опишите основные варианты реализации функций прикладного программного интерфейса, укажите их достоинства и недостатки.
История развития операционных систем
И эволюция их функциональных характеристик
История развития и характеристики
История развития и характеристики
Резюме
Прообразом современных операционных систем являются разработанные в середине 1950-х годов системы пакетной обработки, которые просто автоматизировали запуск одной программ за другой, а последовательность подлежащих выполнению программ при этом составляла так называемый пакет заданий. Системы пакетной обработки стали первыми системными программами, предназначенными для управления вычислительным процессом.
Следующим этапом эволюции ОС стала разработка в 1960-х годах универсальных ОС, которые были способны работать на разных типах ВМ, имеющих различный набор периферийных устройств и используемых в разных областях человеческой деятельности. Попытки удовлетворения сложных и часто противоречивых требований приводили к тому, что такие ОС были чрезвычайно громоздкими и имели низкую надежность при эксплуатации. Однако, несмотря на указанные проблемы, операционная система OS/360 и другие ей подобные ОС получили широкое признание потребителей. Важнейшим достижением ОС этого периода явилась реализация мультипрограммного режима и спулинга.
Следующий период в эволюции операционных систем связан с появлением в 1980-х годах ВМ на больших интегральных схем. ВМ стали доступны отдельным небольшим организациям и учреждениям, а впервые предложенные в то время «персональные компьютеры» были доступны уже отдельному человеку. ВМ все чаще объдинялись в распределенные вычислительные сети. Такие ВМ и сети на их основе стали широко использоваться неспециалистами, что потребовало разработки «дружественного» программного поддержки сетевого взаимодействия. На рынке операционных систем в то время начали доминировать системы двух классов: многопользовательские многозадачные (мультипрограммные) ОС клона UNIX и однопользовательские однозадачные (однопрограммные) ОС клона MS-DOS.
ОС UNIX получила несколько ветвей развития исходной архитектуры. Это ОС System V (корпорации AT&T) и BSD (Калифорнийского университета в Беркли). Впоследствии на основе обеих ветвей был создан ряд новых версий ОС UNIX. Третья самостоятельная ветвь развития UNIX начиналась с микроядерной системы MINIX, за которой в 1991 году последовала значительно более мощная многозадачная многопользовательская ОС LINUX.
В настоящее время существуют версии ОС UNIX для многих типов ВМ. Независимо от версии, общими для UNIX чертами являются многопользовательский режим со средствами защиты данных от несанкционированного доступа, реализация мультипрограммного режима разделения времени с вытесняющей многозадачностью, использование механизмов виртуальной памяти и свопинга, унификация операций ввода-вывода на основе расширенного использования понятия «файл», иерархическая файловая система, хорошая переносимость системы и множество других свойств.
Операционные системы корпорации Microsoft под названием MS-DOS и их аналоги других корпораций были разработаны для персональных компьютеров клона IBM PC. Управление компьютером при помощи команд DOS, вводимых в режиме командной строки, требует определенных знаний, большой аккуратности и внимания. Для того, чтобы сделать общение с компьютером более простым, были предложены так называемые программы-оболочки, представляющие собой программные надстройки операционной системы, позволяющие пользователю осуществлять действия по управлению ресурсами компьютера в рамках более развитого и удобного, чем командная строка, псевдографического интерфейса,. Следующим историческим шагом в развитии оболочек операционных систем стало появление в 1986 г. графической многооконной операционной оболочки Windows от корпорации Microsoft, которая работала на базе MS-DOS, а основой пользовательского интерфейса Windows послужил графический интерфейс пользователя GUI, представляющий собой в данном случае иерархически организованную систему окон и других графических объектов. Дальнейшим развитием семейства Microsoft Windows стала разработка полноценных операционных систем Windows 95 (Windows 4.0) и Windows NT, положившим начало двух ветвей ОС от Microsoft: Windows 95/98/ME и Windows NT/2000/XP/2003.
Полноценной ОС Windows стала начиная с четвертой версии, получившей наименование Windows 95. Ключевыми позициями, отличающими Windows 95 от Windows 3.х, явились новое 32-разрядное ядро, усовершенствованный механизм многозадачности, улучшенная поддержка аппаратного обеспечения, новые и существенно обновленные приложения. Следующими версиями стали Windows 98, Windows 98 SE и Windows ME. Главными достоинствами новых систем явилось включение более мощных версий браузера Internet Explorer, расширение поддержки новых аппаратных устройств с новыми интерфейсами.
Параллельно с развитием линии ОС Windows 9.х корпорация Microsoft в 1988 году начала разработку и непрерывно продолжает развивать линию принципиально отличающихся от Windows 9.х операционных систем «новой технологии» – Windows NT (NT – New Technology). Windows NT является 32-х разрядной ОС с приоритетной многозадачностью. В качестве фундаментальных компонентов в состав этой ОС входят развитый сетевой сервис и средства обеспечения безопасности. Windows NT совместима со многими другими операционными и файловыми системами, а также с разнородными сетями, поддерживает работу высокопроизводительных многопроцессорных вычислительных комплексов.
На смену версии Windows NT 4.0. пришла существенно усовершенствованная и усиленная ОС Windows 2000 Professional. Серверной версией Windows 2000 Professional является система Windows 2000 Server, включающаяет множество дополнительных специальных функций.
В конце 2001 г. корпорация Microsoft выпустила новую версию ОС – Windows XP, продолжившую линию Windows NT и по сути являющейся модифицированной ОС Windows 2000 Professional. Новая серверная версия системы Windows Server 2003 обладает рядом преимуществ по сравнению с Windows 2000 Server. Это самая быстрая, самая надежная и наиболее защищенная из всех серверных ОС Windows, выпущенных Microsoft до настоящего времени.
Значительную роль в развитии ОС играет фирма Novell со своим сетевым операционными системами семейства NetWare.
Историческое значение имеет ОС OS/2 корпорации IBM, которая появилась на рынке раньше Windows 95 и была первой работающей 32-х разрядной ОС для персональных компьютеров, а кроме того поддерживала вытесняющую многозадачность, виртуальную память и имела средства работы в сети Internet.
Следует отметить также некоторые специализированные ОС. Например, IOS компании Cisco Systems предназначена исключительно для выполнения коммуникационных задач, MacOS ориентирована на конкретную аппаратную платформу компьютеров семейства Macintosh, PalmOS и Windows CE работают в сверхминиатюрных так называемых «карманных» компьютерах.
Отметим также ОС Solaris фирмы Sun Microsystems, которая благодаря высокому уровню отказоустойчивости предпочтительна для использования в интер- и интрасетях.
Контрольные вопросы и задания
1. Охарактеризуйте начальные этапы разработки и развития ОС.
2. Опишите основные характерные особенности ОС семейства MS-DOS и историю их эволюции.
3. Какие функции выполняют операционные оболочки, какова их роль в совершенствовании пользовательского интерфейса ОС?
4. Дайте характеристику ОС семейства UNIX, представьте области практического применения наиболее популярных версий UNIX.
5. В чем особенности реализации и функционирования сетевых операционных систем компании Novell?
6. Охарактеризуйте ОС семейства Windows 95/98/ME.
7. Назовите главные достоинства ОС линии Windows NT.
8. Какие качества характерны для современных серверных версий ОС Windows?
9. Перечислите известные специализированные ОС.
Пример практической реализации
Операционной системы: UNIX
Обзор системы UNIX
Процессы в UNIX
Основные понятия
Единственными активными сущностями в системе UNIX являются процессы. Процессы UNIX очень похожи на классические последовательные процессы, которые рассматривались в разделе 1. Каждый процесс запускает одну программу и изначально получает один поток управления. Другими словами, у процесса есть один счетчик команд, указывающий на следующую исполняемую команду процессора. Большинство версий UNIX позволяют процессу после того, как он запущен, создавать дополнительные потоки. UNIX представляет собой многозадачную систему, так что несколько независимых процессов могут работать одновременно. У каждого пользователя может быть одновременно несколько активных процессов, так что в большой системе могут одновременно работать сотни и даже тысячи процессов. Действительно, на большинстве однопользовательских рабочих станций (даже без участия пользователя) работают десятки фоновых процессов, называемых демонами (daemon).Они запускаются автоматически при загрузке системы. Демоны позволяют планировать в системе UNIX активность на минуты, часы, дни и месяцы вперед, управлять входящей и исходящей электронной почтой, очередями на принтер, проверять наличие свободных страниц памяти и т. д. Демоны реализуются в системе UNIX относительно просто, так как каждый из них представляет собой отдельный процесс, независимый ото всех остальных процессов.
В операционной системе UNIX посредством системного вызова fork создается точная копия исходного процесса (так называемого родительского процесса). Новый процесс называется дочерним процессом. У родительского и у дочернего процессов есть свои собственные образы памяти. Если родительский процесс впоследствии изменяет какие-либо свои переменные, изменения остаются невидимыми для дочернего процесса, и наоборот.
Открытые файлы совместно используются родительским и дочерним процессами. Это значит, что если какой-либо файл был открыт до выполнения системного вызова fork, он останется открытым в обоих процессах и в дальнейшем. Изменения, произведенные с этим файлом, будут видимы каждому процессу. Такое поведение является единственно разумным, так как эти изменения будут также видны любому другому процессу, который тоже откроет этот файл.
У родительского процесса может быть много дочерних процессов. Поскольку у дочерних процессов также могут быть дочерние процессы, исходный процесс может создать целое дерево детей, внуков, правнуков и т. д.
В системе UNIX процессы могут общаться друг с другом с помощью разновидности обмена сообщениями. Можно создать канал между двумя процессами, в который один процесс может писать поток байтов, а другой процесс может его читать. Эти каналы иногда называют трубами. Синхронизация процессов достигается путем блокирования процесса при попытке прочитать данные из пустого канала. Когда данные появляются в канале, процесс разблокируется.
Процессы также могут общаться другим способом: при помощи программных прерываний. Один процесс может послать другому так называемый сигнал. Процессы могут сообщить системе, какие действия следует предпринимать, когда придет сигнал. У процесса есть выбор: проигнорировать сигнал, перехватить его или позволить сигналу убить процесс (действие по умолчанию для большинства сигналов). Если процесс выбрал перехват посылаемых ему сигналов, он должен указать процедуры обработки сигналов. Когда сигнал прибывает, управление сразу же передается обработчику. Когда процедура обработки сигнала завершает свою работу, управление снова возвращается в то место процесса, в котором оно находилось, когда пришел сигнал. Обработка сигналов аналогична обработке аппаратных прерываний ввода-вывода. Процесс может посылать сигналы только членам его группы процессов, состоящей из его прямого родителя, всех прародителей, братьев и сестер, а также детей (внуков и правнуков). Процесс может также послать сигнал сразу всей своей группе за один системный вызов.
Сигналы в UNIX используются и для других целей. Например, если процесс выполняет вычисления с плавающей точкой и непреднамеренно делит число на 0, он получает сигнал исключения при выполнении операции с плавающей точкой. Сигналы UNIX описываются стандартом POSIX. В большинстве систем UNIX также имеются дополнительные сигналы, но программы, использующие их, могут оказаться непереносимыми на другие версии UNIX.
В первых версиях системы UNIX понятия потоков не существовало. После введения этого понятия и возможности управления потоками были стандартизированы соответствующие системные вызовы в виде части стандарта POSIX – P1003.1c.
В исходном варианте стандарта POSIX не указывается, должны ли потоки реализовываться в пространстве ядра или в пространстве пользователя. Преимущество потоков в пользовательском пространстве состоит в том, что они легко реализуются без необходимости изменения ядра, а переключение потоков осуществляется очень эффективно. Недостаток потоков в пространстве пользователя заключается в том, что если один из потоков заблокируется (например, на операции ввода-вывода, семафоре или страничном прерывании), все потоки процесса блокируются. Ядро полагает, что существует только один поток, и не передает управление процессу потока, пока блокировка не снимется. Таким образом, системные вызовы, определенные в части стандарта P1003.1c были подобраны так, чтобы потоки могли быть реализованы любым способом. До тех пор, пока пользовательские программы четко придерживаются семантики стандарта POSIX – P1003.1c, оба способа реализации работают корректно. Когда используется системная реализация потоков, они являются настоящими системными вызовами. При использовании потоков на уровне пользователя они полностью реализуются в динамической библиотеке в пространстве пользователя.
Синхронизация потоков может осуществляться при помощи мьютексов. Как правило, мьютекс охраняет какой-либо ресурс, например буфер, совместно используемый двумя потоками. Чтобы гарантировать, что только один поток в каждый момент времени имеет доступ к общему ресурсу, предполагается, что потокиблокируют (захватывают) мьютекс перед обращением к ресурсу и разблокируют (отпускают) его, когда ресурс им более не нужен. До тех пор пока потоки соблюдают данный протокол, состояния состязания можно избежать. Напомним, что название мьютекс (mutex) образовано от английских слов mutual exclusion – взаимное исключение, так как мьютексы подобны двоичным семафорам, то есть семафорам, способным принимать только значения 0 и 1. Таким образом мьютекс может находиться в одном из двух состояний: блокированный и разблокированный. Поток может заблокировать мьютекс с помощью системного вызова. Если мьютекс уже заблокирован, то поток, обратившийся к этому вызову, блокируется. Когда поток, захвативший мьютекс, выполнил свою работу в критической области, он должен освободить мьютекс, обратившись к соответствующему системному вызову.
Мьютексы предназначены для кратковременной блокировки, например для защиты совместно используемой переменной. Они не предназначаются для долговременной синхронизации, например для ожидания, когда освободится накопитель на магнитной ленте. Для долговременной синхронизации применяются так называемые переменные состояния. Переменные состояния используются следующим образом: один поток ждет, когда переменная примет определенное значение, а другой поток сигнализирует ему изменением этой переменной. Например, обнаружив, что нужный ему накопитель на магнитной ленте занят, поток может обратиться к системному вызову, задав в качестве параметра адрес переменной, которую все потоки согласились связать с накопителем на магнитной ленте. Когда поток, использующий накопитель на магнитной ленте, наконец, освободит это устройство, он обращается к соответствующему системному вызову, чтобы изменить переменную состояния и тем самым сообщить ожидающим потокам, что накопитель свободен. Если ни один поток в этот момент не ждет, когда освободится накопитель на магнитной ленте, этот сигнал просто теряется. Другими словами, переменные состояния не считаются семафорами.
Основные понятия
У каждого процесса в системе UNIX есть адресное пространство, состоящее из трех сегментов: текста (программы), данных и стека. Текстовый (программный) сегмент содержит машинные команды, образующие исполняемый код программы. Он создается компилятором и ассемблером при трансляции программы, написанной на языке высокого уровня, в машинный код. Как правило, текстовый сегмент разрешен только для чтения. Текстовый сегмент не изменяется ни в размерах, ни по своему содержанию.
Сегмент данных содержит переменные, строки, массивы и другие данные программы. Он состоит из двух частей: инициализированных данных и неинициализированных данных. По историческим причинам вторая часть называется BSS (Bulk Storage System – запоминающее устройство большой емкости или массовое запоминающее устройств). Инициализированная часть сегмента данных содержит переменные и константы компилятора, значения которых должны быть заданы при запуске программы. Например, на языке С можно объявить символьную строку и в то же время задать ее значение, то есть проинициализировать ее. Когда программа запускается, она предполагает, что в этой строке уже содержится некий осмысленный текст. Чтобы реализовать это, компилятор назначает строке определенное место в адресном пространстве и гарантирует, что в момент запуска программы по этому адресу будет располагаться соответствующая строка. С точки зрения операционной системы, инициализированные данные не отличаются от текста программы – тот и другой сегменты содержат сформированные компилятором последовательности битов, загружаемые в память при запуске программы.
Неинициализированные данные необходимы лишь с точки зрения оптимизации. Когда начальное значение глобальной переменной явно не указано, то, согласно семантике языка С, ее значение устанавливается равным 0. На практике большинство глобальных переменных не инициализируются, и, таким образом, их начальное значение равно 0. Это можно реализовать следующим образом: создать целый сегмент исполняемого двоичного файла, точно равного по размеру числу байтов данных, и проинициализировать весь этот сегмент нулями. Однако с целью экономии места на диске этого не делается. Файл содержит только те переменные, начальные значения которых явно заданы. Вместо неинициализированных переменных компилятор помещает в исполняемый файл просто одно слово, содержащее размер области неинициализированных данных в байтах. При запуске программы операционная система считывает это слово, выделяет нужное число байтов и обнуляет их.
В отличие от текстового сегмента, который не может изменяться, сегмент данных может модифицироваться. Программы изменяют свои переменные постоянно. Более того, многим программам требуется выделение дополнительной памяти динамически, во время выполнения. Чтобы реализовать это, операционная система UNIX разрешает сегменту данных расти при динамическом выделении памяти программам и уменьшаться при освобождении памяти программами. Программа может установить размер своего сегмента данных с помощью системного вызова brk. Таким образом, чтобы получить больше памяти, программа может увеличить размер своего сегмента данных. Этим системным вызовом пользуется библиотечная процедура, используемая для выделения памяти.
Третий сегмент – это сегмент стека. На большинстве вычислительных машин он начинается около старших адресов виртуального адресного пространства и растет вниз к 0. Если указатель стека оказывается ниже нижней границы сегмента стека, как правило, происходит аппаратное прерывание, при котором операционная система понижает границу сегмента стека на одну страницу памяти. Программы не управляют явно размером сегмента стека. Когда программа запускается, ее стек не пуст. Напротив, он содержит все переменные окружения (оболочки), а также командную строку, введенную в оболочке при вызове этой программы. Таким образом, программа может узнать параметры, с которыми она была запущена.
Когда два пользователя запускают одну и ту же программу, например текстовый редактор, в памяти можно хранить две копии программы редактора. Однако такой подход является неэффективным. Вместо этого большинством систем UNIX поддерживаются текстовые сегменты совместного использования. Отображение выполняется аппаратным обеспечением виртуальной памяти.
Сегменты данных и стека никогда не бывают общими, кроме как после выполнения системного вызова fork, и то только те страницы, которые не модифицируются любым из процессов. Если размер любого из сегментов должен быть увеличен, то отсутствие свободного места в соседних страницах памяти не является проблемой, так как соседние виртуальные страницы памяти не обязаны отображаться на соседние физические страницы.
На некоторых вычислительных машинах аппаратное обеспечение поддерживает раздельные адресные пространства для команд и для данных. Если такая возможность есть, система UNIX может ею воспользоваться. Например, на компьютере с 32-разрядными адресами при возможности использования раздельных адресных пространств можно получить 4 Гбайт адресного пространства для команд и еще 4 Гбайт адресного пространства для данных. Передача управления по адресу 0 будет восприниматься как передача управления по адресу 0 в текстовом пространстве, тогда как при обращении к данным по адресу 0 будет использоваться адрес 0 в пространстве данных. Таким образом, это свойство удваивает доступное адресное пространство.
Многими версиями UNIX поддерживается отображение файлов на адресное пространство памяти. Это свойство позволяет отображать файл на часть адресного пространства процесса, так чтобы можно было читать из файла и писать в файл, как если бы это был массив, хранящийся в памяти. Отображение файла на адресное пространство памяти делает произвольный доступ к нему существенно более легким, нежели при использовании системных вызовов, таких как read и write. Совместный доступ к библиотекам предоставляется именно при помощи этого механизма.
Дополнительное преимущество отображения файла на память заключается в том, что два или более процессов могут одновременно отобразить на свое адресное пространство один и тот же файл. Запись в этот файл одним из процессов мгновенно становится видимой всем остальным. Таким образом, отображение на адресное пространство памяти временного файла (который будет удален после завершения работы процессов) представляет собой механизм реализации общей памяти для нескольких процессов, причем у такого механизма будет высокая пропускная способность. В предельном случае два или более процессов могут отобразить на память файл, покрывающий все адресное пространство, получая, таким образом, форму совместного использования памяти – нечто среднее между процессами и потоками. В этом случае, как и у потоков, все адресное пространство используется совместно, но каждый процесс может управлять собственными файлами и сигналами, что отличает этот вариант от потоков.
Основные понятия
Подход, применяемый в операционной системе UNIX для доступа программ к устройствам ввода-вывода (таким как диски, принтеры, сетевые устройства и т.п.), заключается в интегрировании всех устройств в файловую систему в виде так называемых специальных файлов. Каждому устройству ввода-вывода назначается имя пути, обычно в каталоге /dev. Например, диск может иметь путь /dev/hd1, у принтера может быть путь /dev/lр, а у сети – /dev/net. Доступ к этим специальным файлам осуществляется так же, как и к обычным файлам. Для этого не требуется никаких специальных команд или системных вызовов, а используются обычные системные вызовы read и write. Программы могут открывать, читать специальные файлы, а также писать в них тем же способом, что и в обычные файлы. Таким образом, для выполнения ввода-вывода не требуется специального механизма.
Специальные файлы подразделяются на две категории: блочные и символьные. Блочный специальный файл – это специальный файл, состоящий из последовательности нумерованных блоков. Основное свойство блочного специального файла заключается в том, что к каждому его блоку можно адресоваться и получить доступ отдельно. Другими словами, программа может открыть блочный специальный файл и прочитать, скажем, 124-й блок, не читая сначала блоки с 0 по 123. Блочные специальные файлы обычно используются для дисков. Символьные специальные файлы, как правило, используются для устройств ввода или вывода символьного потока. Символьные специальные файлы используются такими устройствами, как клавиатуры, принтеры, сети, мыши, плоттеры и т. д.
С каждым специальным файлом связан драйвер устройства, осуществляющий управление соответствующим устройством. У каждого драйвера есть так называемый номер старшего устройства, служащий для его идентификации. Если драйвер одновременно поддерживает несколько устройств, например два диска одного типа, то каждому диску присваивается номер младшего устройства, идентифицирующий это устройство. Вместе номера старшего устройства и младшего устройства однозначно обозначают каждое устройство ввода-вывода.
Другим примером ввода-вывода является работа с сетью, впервые появившаяся в Berkeley UNIX. Ключевым понятием в схеме Berkeley UNIX является сокет. Сокеты образуют пользовательский интерфейс с сетью. Сокеты могут динамически создаваться и разрушаться. При создании сокета вызывающему процессу возвращается дескриптор файла, требующийся для установки соединения, чтения и записи данных, а также разрыва соединения.
Каждый сокет поддерживает определенный тип работы в сети, указываемый при создании сокета. Наиболее распространенными типами сокетов являются: 1) надежный байтовый поток (ориентиро-ванный на соединение), 2) надежный поток пакетов (ориенти-рованный на соединение), 3) ненадежная передача пакетов.
Первый тип сокетов позволяет двум процессам на различных машинах установить между собой эквивалент «трубы» (канала между процессами на одной машине). Байты подаются в канал с одного конца и в том же порядке выходят с другого. Такая система гарантирует, что все посланные байты прибудут на другой конец канала и прибудут именно в том порядке, в котором были отправлены.
Второй тип сокетов отличается от первого тем, что он сохраняет границы между пакетами. Если отправитель пять раз отдельно обращается к системному вызову write, каждый раз отправляя по 512 байт, а получатель запрашивает 2560 байт по сокету типа 1, он получит все 2560 байт сразу. При использовании сокета типа 2 ему будут выданы только первые 512 байт. Чтобы получить остальные байты, получателю придется выполнить системный вызов read еще четыре раза.
Третий тип сокета особенно полезен для приложений реального времени и ситуаций, в которых пользователь хочет реализовать специальную схему обработки ошибок. Сеть может терять пакеты или доставлять их в неверном порядке. В отличие от сокетов первых двух типов, сокет типа 3 не предоставляет никаких гарантий доставки. Преимущество этого режима заключается в более высокой производительности, которая в некоторых ситуациях оказывается важнее надежности (например, для доставки мультимедиа, при которой скорость ценится существенно выше, нежели сохранность данных).
При создании сокета один из параметров указывает протокол, используемый для него. Для надежных байтовых потоков, как правило, используется протокол TCP (Transmission Control Protocol – протокол управления передачей). Для ненадежной передачи пакетов обычно применяется протокол UDP (User Data Protocol – пользовательский протокол данных). Все эти протоколы составляют основу Интернета. Для надежного потока пакетов специального протокола нет.
Прежде чем сокет может быть использован для работы в сети, с ним должен быть связан адрес. Этот адрес может принадлежать к одному из нескольких пространств адресов. Наиболее распространенным пространством является пространство адресов Интернета, использующее 32-разрядные числа для идентификации конечных адресатов в протоколе IPv4 и 128-разрядные числа в протоколе IPv6.
Как только сокеты созданы на машине-источнике и машине-приемнике, между ними может быть установлено соединение (для ориентированной на соединение связи). Одна сторона обращается к системному вызову listen, указывая в качестве параметра локальный сокет. При этом системный вызов создает буфер и блокируется до тех пор, пока не прибудут данные. Другая сторона обращается к системному вызову connect, задавая в параметрах дескриптор файла для локального сокета и адрес удаленного сокета. Если удаленная машина принимает вызов, тогда система устанавливает соединение между двумя сокетами.
Функции установленного соединения аналогичны функциям канала. Процесс может читать из канала и писать в него, используя дескриптор файла для локального сокета. Когда соединение далее не требуется, оно может быть закрыто обычным способом, при помощи системного вызова close.
Основные понятия
Файл в системе UNIX – это последовательность байтов произвольной длины (от 0 до некоторого максимума), содержащая произвольную информацию. Не делается принципиального различия между текстовыми (ASCII) файлами, двоичными файлами и любыми другими файлами. Значение битов в файле целиком определяется владельцем файла. Системе это безразлично. Изначально размер имен файлов был ограничен 14 символами, но в системе Berkeley UNIX этот предел был расширен до 255 символов, что впоследствии было принято в System V, а также в большинстве других версий. В именах файлов разрешается использовать все ASCII-символы, кроме символа NUL.
По соглашению многие программы ожидают, что имена файлов должны состоять из основного имени и расширения, отделяемого от основного имени файла точкой (которая в системе UNIX также считается символом). Эти соглашения никак не регулируются операционной системой, но некоторые компиляторы и другие программы ожидают файлов именно с такими расширениями. Расширения могут иметь произвольную длину, кроме того, файлы могут иметь по нескольку расширений.
Для удобства использования файлы могут группироваться в каталоги. Каталоги хранятся на диске в виде файлов, и до определенного предела с ними можно работать как с файлами. Каталоги могут содержать подкаталоги, что приводит к иерархической файловой системе. Корневой каталог называется / и, как правило, содержит несколько подкаталогов. Символ / также используется для разделения имен каталогов.
Существует два способа задания имени файла в системе UNIX, как в оболочке, так и при открытии файла из программы. Первый способ заключается в использовании абсолютного пути, указывающего, как найти файл от корневого каталога. Пример абсолютного пути: /man/labs/operat/numb4. Он сообщает системе, что в корневом каталоге следует найти каталог man, затем в нем найти каталог labs, который содержит каталог operat, а в нем расположен файл numb4.
Абсолютные имена путей часто бывают длинными и неудобными. По этой причине операционная система UNIX позволяет пользователям и процессам обозначить каталог, в котором они работают в данный момент, как рабочий каталог (также называемый текущим каталогом). Имена путей также могут указываться относительно рабочего каталога. Путь файла, заданный относительно рабочего каталога, называется относительным путем.
Если пользователю необходимо обратиться к файлам, принадлежащим другим пользователям, или к своим файлам, расположенным в другом месте дерева файлов, а абсолютное имя пути представляется достаточно длинным, то в системе UNIX эта проблема решается при помощи так называемых связей, представляющих собой записи каталога, которые указывают на другие файлы.
Кроме обычных файлов, системой UNIX также поддерживаются символьные специальные файлы и блочные специальные файлы. Символьные специальные файлы используются для моделирования последовательных устройств ввода-вывода, таких как клавиатуры и принтеры. Если процесс откроет файл /dev/tty и прочитает из него, он получит символы, введенные с клавиатуры. Если открыть файл /dev/lp и записать в него данные, то эти данные будут распечатаны на принтере.
Блочные специальные файлы, часто с такими именами, как /dev/hd1, могут использоваться для чтения и записи необработанных дисковых разделов, минуя файловую систему. Таким образом, поиск байта номер k, за которым последует чтение, приведет к чтению k-то байта на соответствующем дисковом разделе, игнорируя i-узел и файловую структуру. Необработанные блочные устройства используются для страничной подкачки и свопинга программами установки файловой системы (например, mkfs) и программами, исправляющими ломаные файловые системы (например, fsck).
При наличии у вычислительной машины нескольких дисков возникает вопрос управления ими. Одно из решений заключается в том, чтобы установить самостоятельную файловую систему на каждый отдельный диск и управлять ими как отдельными файловыми системами. При таком решении пользователь должен помимо каталогов указывать также и устройство, если оно отличается от используемого по умолчанию. Такой подход применяется в операционных системах MS-DOS, Windows 98 и VMS. Решение, применяемое в операционной системе UNIX, заключается в том, чтобы позволить монтировать один диск в дерево файлов другого диска. Например, можно смонтировать дискету в каталог жесткого диска. При этом пользователь будет видеть единое дерево файлов и уже не должен думать о том, какой файл на каком устройстве хранится.
Другим интересным свойством файловой системы UNIX является блокировка. В некоторых приложениях два и более процессов могут одновременно использовать один и тот же файл, что может привести к конфликту. Одно из решений данной проблемы заключается в том, чтобы создать в приложении критические области. Однако если эти процессы принадлежат независимым пользователям, такой способ координации действий, как правило, очень неудобен. Рассмотрим, например, базу данных, состоящую из многих файлов в одном или нескольких каталогах, доступ к которым могут получить никак не связанные между собой пользователи. С каждым каталогом или файлом можно связать семафор и достичь взаимного исключения, заставляя процессы выполнять операцию down на соответствующем семафоре, прежде чем читать или писать определенные данные. Недостаток этого решения заключается в том, что недоступным становится весь каталог или файл, даже если процессам нужна всего одна запись. По этой причине стандартом POSIX предоставляется гибкий и детальный механизм, позволяющий процессам за одну неделимую операцию блокировать даже единственный байт файла или целый файл по желанию. Механизм блокировки требует от вызывающего его процесса указать блокируемый файл, начальный байт и количество байтов. Если операция завершается успешно, система создает запись в таблице, в которой указывается, что определенные байты файла заблокированы.
Стандартом определены два типа блокировки: блокировка с монополизацией и блокировка без монополизации. Если часть файла уже содержит блокировку без монополизации, то повторная установка блокировки без монополизации на это место файла разрешается, но попытка установки блокировку с монополизацией будет отвергнута. Если же какая-либо область файла содержит блокировку с монополизацией, то любые попытки заблокировать любую часть этой области файла будут отвергаться, пока не будет снята монопольная блокировка. Для успешной установки блокировки необходимо, чтобы каждый байт в данной области был доступен. При установке блокировки процесс должен указать, хочет ли он сразу получить управление или будет ждать, пока не будет установлена блокировка. Если процесс выбрал вызов с ожиданием, то он блокируется до тех пор, пока с запрашиваемой области файла не будет снята блокировка, установленная другим процессом, после чего процесс активизируется, и ему сообщается, что блокировка установлена. Если процесс решил воспользоваться системным вызовом без ожидания, он немедленно получает ответ об успехе или неудаче операции.
Реализация классической файловой системы UNIX
Все системы UNIX могут поддерживать несколько дисковых разделов, каждый со своей файловой системой.
В классической системе UNIX раздел диска содержит файловую систему со следующей структурой. Блок 0 не используется системой и часто содержит программу загрузки компьютера. Блок 1 представляет собой суперблок. В нем хранится критическая информация о размещении файловой системы, включая количество i-узлов, количество дисковых блоков, а также начало списка свободных блоков диска (обычно несколько сот записей). При уничтожении суперблока файловая система окажется нечитаемой. Следом за суперблоком располагаются i-узлы (i-nodes, сокращение от index-nodes – индекс-узлы). Они нумеруются от 1 до некоторого максимального числа. Каждый i-узел имеет 64 байт в длину и описывает ровно один файл, i-узел содержит учетную информацию (включая всю информацию, возвращаемую системным вызовом stat, который ее просто берет в i-узле), а также достаточное количество информации, чтобы найти все блоки файла на диске. Следом за i-узлами располагаются блоки с данными. Здесь хранятся все файлы и каталоги. Если файл или каталог состоит более чем из одного блока, блоки файла не обязаны располагаться на диске подряд. В действительности блоки большого файла, как правило, оказываются разбросанными по всему диску.
Каталог в классической файловой системе представляет собой несортированный набор 16-байтовых записей. Каждая запись состоит из 14-байтного имени файла и номера i-узла. Чтобы открыть файл в рабочем каталоге, система просто считывает каталог, сравнивая имя искомого файла с каждой записью, пока не найдет нужную запись или пока не закончится каталог.
Если искомый файл присутствует в каталоге, система извлекает его i-узел и использует его в качестве индекса в таблице i-узлов (на диске), чтобы найти соответствующий i-узел и считать его в память. Этот i-узел помещается в таблицу i-узлов – структуру данных в ядре, содержащую все i-узлы открытых в данный момент файлов и каталогов. Формат i-узлов варьируется от одной версии UNIX к другой. Как минимум i-узел должен содержать все поля, возвращаемые системным вызовом stat.
Поиск файла по абсолютному пути, например /man/labs/operat немного сложнее. Сначала система находит корневой каталог, как правило, использующий i-узел с номером 2 (i-узел 1 обычно резервируется для хранения дефектных блоков). Затем он ищет в корневом каталоге строку «man», чтобы получить номер i-узла каталога /man. Затем считывается этот i-узел, и из него извлекаются номера блоков, в которых располагается каталог /man. После этого считывается каталог /man, в котором ищется строка «labs». Когда нужная запись найдена, из нее извлекается номер i-узла для каталога /man/labs и т. д. Таким образом, использование относительного имени файла не только удобнее для пользователя, но также представляет существенно меньшее количество работы для файловой системы.
Рассмотрим далее, как система считывает файл. По дескриптору файла файловая система должна найти i-узел соответствующего файла. С каждым дескриптором файла должен быть связан указатель в файле, определяющий байт в файле, который будет считан или записан при следующем обращении к файлу. Указатель помещается в таблицу дескрипторов файла. При этом каждый процесс, открывающий файл, получает собственную позицию в файле. Для передачи указателя от одного процесса другому вводится в обращение новая таблица – таблица открытых файлов, которая располагается между таблицей дескрипторов файлов и таблицей i-узлов. Указатели хранятся в файле, а бит чтения/записи в этой таблице. Задача таблицы открытых файлов заключается в том, чтобы позволить родительскому и дочернему процессам совместно использовать один указатель в файле, но для посторонних процессов выделять отдельные указатели.
Каждый i-узел содержит дисковые адреса первых 10 блоков файла. Если позиция в файле попадает в его первые 10 блоков, то считывается нужный блок файла, а данные копируются пользователю. Для поддержки файлов, длина которых превышает 10 блоков, в i-узле содержится дисковый адрес одинарного косвенного блока. Этот блок содержит дисковые адреса дополнительных блоков файла. Например, если размер блока составляет 1 Кбайт, а дисковый адрес занимает 4 байта, то одинарный косвенный блок может хранить до 256 дисковых адресов. Такая схема позволяет поддержать файлы размером до 266 Кбайт. Для файлов, размер которых превосходит 266 Кбайт, используется двойной косвенный блок. Он содержит адреса 256 одинарных косвенных блоков, каждый из которых содержит адреса 256 блоков данных. Такая схема позволяет поддержать файлы размером до 10 + 2 в степени 16 блоков (67 119 104 байт). Если и этого оказывается недостаточно, в i-узле есть место для тройного косвенного блока. Его указатели показывают на 256 двойных косвенных блоков.
Основные понятия
Каждый пользователь операционной системы UNIX регистрируется в системе, получая свой уникальный UID (User ID – идентификатор пользователя). UID представляет собой целое число в пределах от 0 до 65 535. Идентификатором владельца помечаются файлы, процессы и другие ресурсы. По умолчанию владельцем файла является пользователь, создавший этот файл, хотя владельца можно сменить.
Пользователи могут организовываться в группы, которые также нумеруются 16-разрядными целыми числами, называемыми GID (Group ID – идентификатор группы). Назначение пользователя к группе выполняется вручную системным администратором и заключается в создании нескольких записей в системной базе данных, в которой содержится информация о том, какой пользователь к какой группе принадлежит. Вначале пользователь мог принадлежать только к одной группе, но теперь в некоторых версиях системы UNIX пользователь может одновременно принадлежать к нескольким группам.
Основной механизм безопасности в операционной системе UNIX заключается в следующем. Каждый процесс несет на себе UID и GID своего владельца. Когда создается файл, он получает UID и GID создающего его процесса. Файл также получает набор разрешений доступа, определяемых создающим процессом. Эти разрешения определяют доступ к этому файлу для владельца файла, для других членов группы владельца файла и для всех прочих пользователей. Для каждой из этих трех категорий определяется три вида доступа: чтение, запись и исполнение файла, что обозначается соответственно буквами r, w и х (read, write, execute). Возможность исполнять файл, конечно, имеет смысл только в том случае, если этот файл является исполняемой двоичной программой. Попытка запустить файл, у которого есть разрешение на исполнение, но который не является исполняемым (то есть не начинается с соответствующего заголовка), закончится ошибкой. Поскольку существует три категории пользователей и три вида доступа для каждой категории, все режимы доступа к файлу можно закодировать 9 битами.
Пользователь, UID которого равен 0, является особым пользователем и называется суперпользователем (superuser или root). Суперпользователь может читать и писать все файлы в системе, независимо от того, кто ими владеет и как они защищены. Процессы с UID=0 также обладают возможностью обращаться к небольшой группе системных вызовов, доступ к которым запрещен для обычных пользователей. Как правило, пароль суперпользователя известен только системному администратору.
Каталоги представляют собой файлы и обладают теми же самыми режимами защиты, что и обычные файлы. Отличие состоит в том, что бит х интерпретируется в отношении каталогов как разрешение не исполнения, а поиска в каталоге. У специальных файлов, соответствующих устройствам ввода-вывода, есть те же самые биты защиты. Благодаря этому может использоваться тот же самый механизм для ограничения доступа к устройствам ввода-вывода. Существует общая проблема регулируемого доступа ко всем устройствам ввода-вывода и другим системным ресурсам. Эта проблема решается с помощью добавления к указанным выше 9 бит нового бита защиты – бита SETUID. Когда выполняется программа с установленным битом SETUID, то запускаемому процессу присваивается не UID вызвавшего его пользователя или процесса, a UID владельца файла. Когда процесс пытается открыть файл, то проверяется его рабочий UID, а не UID запустившего его пользователя. Таким образом, если программой, обращающейся к принтеру, будет владеть демон с установленным битом SETUID, тогда любой пользователь сможет запустить ее и запущенный процесс будет обладать полномочиями демона, но только для запуска этой программы (которая может устанавливать задания в очередь на принтер).
Помимо бита SETUID, есть также еще и бит SETGID, работающий аналогично и временно предоставляющий пользователю рабочий GID программы. Однако на практике этот бит почти не используется.
Резюме
Операционная система UNIX широко используется на вычислительных машинах различных классов от ноутбуков до суперкомпьютеров. В операционной системе UNIX есть три интерфейса: оболочка, библиотека языка С и сами системные вызовы. Оболочка позволяет пользователям вводить команды и исполнять их. Это могут быть простые команды, конвейеры или более сложные структуры. Ввод и вывод могут перенаправляться. В библиотеке С содержатся системные вызовы, а также множество расширенных вызовов. Каждый из системных вызовов выполняет определенные необходимые функции.
К ключевым понятиям операционной системы UNIX относятся процесс, модель памяти, ввод-вывод и файловая система. Процессы могут создавать дочерние процессы, в результате чего формируются деревья процессов. Для управления процессами в UNIX используются две ключевые структуры данных: таблица процессов и структура пользователя. Таблица процессов постоянно находится в памяти, а структура пользователя может выгружаться на диск. При создании процесса дублируется запись в таблице процессов, а также образ памяти процесса. Для планирования применяется алгоритм, основанный на приоритетах, отдающий предпочтение интерактивным процессам.
Модель памяти состоит из трех сегментов для каждого процесса: для текста (исполняемого кода), данных и стека. Изначально для управления памятью использовался свопинг, но в большинстве современных версий системы UNIX для этого применяется страничная подкачка. Состояние каждой страницы отслеживается в карте памяти, а страничный демон поддерживает достаточное количество свободных страниц при помощи алгоритма часов.
Доступ к устройствам ввода-вывода осуществляется при помощи специальных файлов, у каждого из которых есть старший номер устройства и младший номер устройства. Для снижения числа обращений к диску в блочных устройствах ввода-вывода применяется буферный кэш. Для управления кэшем используется алгоритм LRU (Least-Recently-Used – «наиболее давнего использования»). Символьный ввод-вывод может осуществляться в обработанном и необработанном режимах. Для дополнительных возможностей символьного ввода-вывода применяются дисциплины линии связи или потоки.
Файловая система в UNIX – иерархическая, с файлами и каталогами. Все диски монтируются в единое дерево каталогов, начинающееся в одном корне. Отдельные файлы могут быть связаны с любым каталогом дерева. Чтобы пользоваться файлом, его нужно сначала открыть. При этом процессу, открывающему файл, возвращается дескриптор файла, который затем используется при чтении этого файла и записи в файл. Внутри файловая система использует три основные таблицы: таблицу дескрипторов файлов, таблицу дескрипторов открытых файлов и таблицу i-узлов. Из этих таблиц таблица i-узлов является наиболее важной. В ней содержится информация, необходимая для управления файлом и позволяющая найти его блоки.
Защита файлов основывается на регулировании доступа для чтения, записи и исполнения, предоставляемого владельцу файла, членам его группы и всем остальным пользователям. Для каталогов бит исполнения интерпретируется как разрешение поиска в каталоге.
Контрольные вопросы и задания
1. Опишите интерфейсы ОС UNIX.
2. Каковы особенности оболочки и утилит системы UNIX?
3. Дайте определение программы, называемой фильтром.
4. Как называются файлы, содержащие команды оболочки?
5. В чем заключается идея стандартизации обслуживающих программ UNIX?
6. Представьте состав нижнего уровня ядра UNIX.
7. Какие функции выполняет уровень системы виртуальной памяти UNIX?
8. Назовите главные функции уровня интерфейсов системы UNIX.
9. Какие функции выполняют в UNIX фоновые процессы, называемые демонами?
10. Опишите механизмы взаимодействия и синхронизации процессов в UNIX.
11. Какие структуры данных, относящиеся к процессам, поддерживает ядро системы UNIX?
12. Перечислите категории информации, хранящейся в таблице процессов.
13. Какие данные составляют структуру пользователя?
14. Опишите этапы создания процесса в системе UNIX.
15. Охарактеризуйте методы планирования в ОС семейства UNIX .
16. Из каких сегментов состоит адресное пространство в UNIX?
17. В чем заключается свойство отображения файлов на адресное пространство памяти?
18. Опишите способы реализации управления памятью в UNIX .
19. Как работает механизм страничной подкачки в UNIX?
20. Поясните структуру карты памяти и реализацию алгоритма замещения страниц.
21. Опишите реализацию ввода-вывода в ОС UNIX .
22. Дайте определение понятию «сокет» и перечислите наиболее распространенные типы сокетов.
23. Охарактеризуйте решения, применяемые в UNIX для структурирования драйверов символьных устройств и придания им свойства модульности.
24. Какие типы файлов поддерживаются в ОС UNIX?
25.Как реализована классическая файловая система UNIX.
26. В чем заключаютсяособенности реализация файловой системы Berkeley Fast?
27. Представьте реализацию файловых систем Linux.
28. Охарактеризуйте файловую систему NFS.
29. Каким образом реализуется свойство автомонтировки файловых систем в UNIX?
30. К каким проблемам приводит использование кэширования данных
в файловой системе NFS?
31. Опишите функционирование системы безопасности в UNIX.
Пример практической реализации
Операционной системы: Windows 2000
Обзор структуры операционной систем Windows 2000
Основные понятия
В операционной системе Windows 2000 поддерживаются традиционные процессы, способные общаться и синхронизироваться друг с другом так же, как это делают процессы в UNIX. Каждый процесс содержит по крайней мере один поток, содержащий, в свою очередь, как минимум одно волокно (облегченный поток). Более того, для управления определенными ресурсами процессы могут объединяться в задания. Все вместе – задания, процессы, потоки и волокна – образует общий набор инструментов для управления ресурсами и реализации параллелизма как на однопроцессорных, так и на многопроцессорных машинах.
Задание в Windows 2000 представляет собой набор, состоящий из одного или нескольких процессов, управляемых как единое целое. В частности, с каждым заданием ассоциированы квоты и лимиты ресурсов, хранящиеся в соответствующем объекте задания. Квоты включают такие пункты, как максимальное количество процессов (не позволяющее процессам задания создавать бесконтрольное количество дочерних процессов), суммарное время центрального процессора, доступное для каждого процесса в отдельности и для всех процессов вместе, а также максимальное количество используемой памяти для процесса и для всего задания. Задания также могут ограничивать свои процессы в вопросах безопасности, например, запрещать им получать права администратора (суперпользователя) даже при наличии правильного пароля.
Как и в системе UNIX, процессы представляют собой контейнеры для ресурсов. У каждого процесса есть 4-гигабайтное адресное пространство, в котором пользователь занимает нижние 2 Гбайт (в версиях Windows 2000 Advanced Server и Datacenter Server этот размер может быть по желанию увеличен до 3 Гбайт), а операционная система занимает остальную его часть. Таким образом, операционная система присутствует в адресном пространстве каждого процесса, хотя она и защищена от изменений с помощью аппаратного блока управления памятью MMU. У процесса есть идентификатор процесса, один или несколько потоков, список дескрипторов (управляемых в режиме ядра) и маркер доступа, хранящий информацию защиты. Процессы создаются с помощью вызова Win32, который принимает на входе имя исполняемого файла, определяющего начальное содержимое адресного пространства, и создает первый поток.
Каждый процесс начинается с одного потока, но новые потоки могут создаваться динамически. Потоки формируют основу планирования центрального процессора, так как операционная система всегда для запуска выбирает поток, а не процесс. Соответственно, у каждого потока есть состояние (готовый, работающий, блокированный и т. д.), тогда как у процессов состояний нет. Потоки могут динамически создаваться вызовом Win32, которому в адресном пространстве процесса задается адрес начала исполнения. У каждого потока есть идентификатор потока, выбираемый из того же пространства, что и идентификаторы процессов, поэтому один и тот же идентификатор никогда не будет использован одновременно для процесса и для потока. Идентификаторы процессов и потоков кратны четырем, поэтому они могут использоваться в роли байтовых индексов в таблицах ядра, как и другие объекты.
Как правило, поток работает в пользовательском режиме, но когда он обращается к системному вызову, то переключается в режим ядра, после чего продолжает выполнять тот же поток, с теми же свойствами и ограничениями, которые были у него в режиме пользователя. У каждого потока есть два стека – один используется в режиме ядра, а другой в режиме пользователя. Помимо состояния, идентификатора и двух стеков, у каждого потока есть контекст (в котором сохраняются его регистры, когда он не работает), приватная область для локальных переменных, а также может быть свой собственный маркер доступа. Если у потока есть свой маркер доступа, то он перекрывает маркер доступа процесса, чтобы клиентские потоки могли передать свои права доступа серверным потокам, выполняющим работу для них. Когда поток завершает свою работу, он может прекратить свое существование. Когда прекращает существование последний активный поток, процесс завершается.
Важно понимать, что потоки представляют собой концепцию планирования, а не концепцию владения ресурсами. Любой поток может получить доступ ко всем объектам его процесса. Все, что ему для этого нужно сделать, – это заполучить дескриптор и обратиться к соответствующему вызову Win32. Для потока нет никаких ограничений доступа к объекту, связанных с тем, что этот объект создан или открыт другим потоком. Система даже не следит за тем, какой объект каким потоком создан. Как только дескриптор объекта помещен в таблицу дескрипторов процесса, любой поток процесса может его использовать.
Помимо нормальных потоков, работающих в процессах пользователя, в операционной системе Windows 2000 есть множество процессов-демонов, не связанных ни с каким пользовательским процессом (они ассоциированы со специальной системой или простаивающими процессами). Некоторые демоны выполняют административные задачи, как, например, запись «грязных» (модифицированных) страниц на диск, тогда как другие формируют пул, и ими могут пользоваться компоненты исполняющей системы или драйверы, которым нужно выполнить какие-либо асинхронные задачи в фоновом режиме. Переключение потоков в операционной системе Windows 2000 занимает довольно много времени, так как для этого необходимо переключение в режим ядра, а затем возврат в режим пользователя. Для предоставления сильно облегченного псевдопараллелизма в Windows 2000 используются волокна, подобные потокам, но планируемые в пространстве пользователя создавшей их программой (или ее системой поддержки исполнения). У каждого потока может быть несколько волокон, так же как у процесса может быть несколько потоков, с той разницей, что когда волокно логически блокируется, оно помещается в очередь блокированных волокон, после чего для работы выбирается другое волокно в контексте того же потока. Операционная система не знает о смене волокон, так как все тот же поток продолжает работу. Так как операционная система ничего не знает о волокнах, то с ними, в отличие от заданий, процессов и потоков, не связаны объекты исполняющей системы. Для управления волокнами нет и настоящих системных вызовов. Однако для этого есть вызовы Win32 API. Они относятся к тем вызовам Win32 API, которые не обращаются к системным вызовам.
Отметим, что операционная система Windows 2000 может работать на симметричных многопроцессорных системах. Это означает, что код операционной системы должен быть полностью реентерабельным, то есть каждая процедура должна быть написана таким образом, чтобы два или более центральных процессора могли поменять свои переменные без особых проблем. Во многих случаях это означает, что программные секции должны быть защищены при помощи спин-блокировки или мьютексов, удерживающих дополнительные центральные процессоры в режиме ожидания, пока первый центральный процессор не выполнит свою работу (при помощи последовательного доступа к критическим областям).
Верхний предел в 32 центральных процессора является жестким пределом, так как во многих местах операционной системы для учета использования центральных процессоров используются битовые массивы размером в 32-разрядное машинное слово. Например, один однословный битовый массив используется для того, чтобы следить, какой из центральных процессоров свободен в данный момент, а другой массив используется в каждом процессе для перечисления центральных процессоров, на которых этому процессу разрешено работать. 64-разрядная версия Windows 2000 должна будет без особых усилий поддерживать до 64 центральных процессоров. Для превышения этого ограничения потребуется существенная переделка программы (с использованием по нескольку слов для битовых массивов).
Основные понятия
В операционной системе Windows 2000 у каждого пользовательского процесса есть собственное виртуальное адресное пространство. Виртуальные адреса 32-разрядные, поэтому у каждого процесса 4 Гбайт виртуального адресного пространства. Нижние 2 Гбайт за вычетом около 256 Мбайт доступны для программы и данных процесса; верхние 2 Гбайт защищенным образом отображаются на память ядра. Страницы виртуального адресного пространства имеют фиксированный размер (4 Кбайт на компьютере с процессором Pentium) и подгружаются по требованию. Нижние и верхние 64 Кбайт каждого виртуального адресного пространства в обычном состоянии не отображаются на физическую память. Это делается преднамеренно, чтобы облегчить перехват программных ошибок. Недействительные указатели часто имеют значение 0 или -1, и попытки их использования в системе Windows 2000 вызовут немедленное прерывание вместо чтения или, что еще хуже, записи слова по неверному адресу. Однако когда запускаются старые программы MS-DOS в режиме эмуляции, нижние 64 Кбайт могут отображаться на физическую память.
Начиная с адреса 64 К, могут располагаться приватные данные и программа пользователя. Они могут занимать почти 2 Гбайт. Последний фрагмент этих 2 Гбайт памяти содержит некоторые системные указатели и таймеры, используемые совместно всеми пользователями в режиме доступа «только чтение». Отображение этих данных в эту область памяти позволяет всем процессам получать к ним доступ без лишних системных вызовов.
Верхние 2 Гбайт виртуального адресного пространства содержат операционную систему, включая код, данные и выгружаемый и невыгружаемый пулы (используемые для объектов и т. д.). Верхние 2 Гбайт используются совместно всеми процессами, кроме таблиц страниц, которые являются индивидуальными для каждого процесса. Верхние 2 Гбайт процессам в режиме пользователя запрещены для записи, а по большей части также запрещены и для чтения. Причина, по которой они размещаются здесь, заключается в том, что когда поток обращается к системному вызову, он переключается в режим ядра, но остается все тем же потоком. Если сделать всю операционную систему и все ее структуры данных (как и весь пользовательский процесс) видимыми в адресном пространстве потока, когда он переключается в режим ядра, то отпадает необходимость в изменении карты памяти или выгрузке кэша при входе в ядро. Все, что нужно сделать, – это переключиться на стек режима ядра. Платой за более быстрые системные вызовы при данном подходе является уменьшение приватного адресного пространства для каждого процесса. Большим базам данных уже сейчас становится тесно в таких рамках, вот почему в версиях Windows 2000 Advanced server и Datacenter Server есть возможность использования 3 Гбайт для адресного пространства пользовательских процессов.
Каждая виртуальная страница может находиться в одном из трех состояний: свободном, зарезервированном и фиксированном. Свободная страница не используется в настоящий момент, и ссылка на нее вызывает страничное прерывание. Когда процесс запускается, все его страницы находятся в свободном состоянии, пока программа и исходные данные не будут отображены на их адресное пространство. Как только данные или программа отображаются на страницу, страница называется фиксированной. Обращение к фиксированной странице преобразуется при помощи аппаратного обеспечения виртуальной памяти и завершается успехом, если эта страница находится в оперативной памяти. В противном случае происходит страничное прерывание, операционная система находит требуемую страницу на диске и считывает ее в оперативную память.
Виртуальная страница может также находиться в зарезервированном состоянии, в таком случае эта страница не может отображаться, пока резервирование не будет явно удалено. Например, когда создается новый поток, в виртуальном адресном пространстве резервируется 1 Мбайт пространства для стека, но фиксируется только одна страница. Такая техника означает, что стек может вырасти до 1 Мбайт без опасения, что какой-либо другой поток захватит часть необходимого непрерывного виртуального адресного пространства. Помимо состояния (свободная, зарезервированная или фиксированная), у страниц есть также и другие атрибуты, например страница может быть доступной для чтения, записи или исполнения.
При выделении фиксированным страницам места резервного хранения используется интересный компромисс. Простая стратегия в данном случае состояла бы в отведении для каждой фиксированной страницы одной страницы в файле подкачки во время фиксации страницы. Это означало бы, что всегда есть место, куда записать каждую фиксированную страницу, если потребуется удалить ее из памяти. Недостаток такой стратегии заключается в том, что при этом может потребоваться файл подкачки размером со всю виртуальную память всех процессов. На большой системе, которой редко требуется выгрузка виртуальной памяти на диск, такой подход приведет к излишнему расходованию дискового пространства. Чтобы не тратить пространство на диске понапрасну, в Windows 2000 фиксированным страницам, у которых нет естественного места хранения на диске (например, страницам стека), не выделяются страницы на диске до тех пор, пока не настанет необходимость их выгрузки на диск. Такая схема усложняет систему, так как во время обработки страничного прерывания может понадобиться обращение к файлам, в которых хранится информация о соответствии страниц, а чтение этих файлов может вызвать дополнительные страничные прерывания. С другой стороны, для страниц, которые никогда не выгружаются, пространства на диске не требуется.
Подобный выбор (усложнение системы или увеличение производительности и дополнительные функции), как правило, разрешается в пользу последнего, так как достоинства лучшей производительности и большего числа функций очевидны, тогда как недостатки усложнения системы (сложность поддержки и увеличение частоты сбоев) бывает сложно учесть.
У свободных и зарезервированных страниц никогда не бывает теневых страниц на диске и обращение к ним всегда приводит к страничным прерываниям. Теневые страницы на диске организованы в один или несколько файлов подкачки. Может быть организовано до 16 файлов подкачки, для повышения производительности операций ввода-вывода они могут быть распределены по отдельным дискам, которых также может быть до 16. У каждого файла есть начальный размер и максимальный размер, до которого он может вырасти при необходимости. Эти файлы могут сразу быть созданы максимального размера во время установки системы, чтобы уменьшить вероятность их сильной фрагментации, но с помощью панели управления позднее можно создать новые файлы. Операционная система следит за тем, какие виртуальные страницы на какую часть файла подкачки отображаются. Страницы, содержащие исполняемый текст программ, не дублируются в файлах подкачки. В файлах подкачки хранятся только изменяемые страницы.
В Windows 2000, как и во многих версиях UNIX, файлы могут отображаться напрямую на области виртуального адресного пространства (то есть занимать множество соседних страниц). После того, как файл отображен на адресное пространство, он может читаться и писаться при помощи обычных команд обращения к памяти. Отображаемые на память файлы реализуются тем же способом, что и фиксированные страницы, но теневые страницы хранятся не в файле подкачки, а в файле пользователя. Поэтому при отображении файла на память версия файла, находящаяся в памяти, может отличаться от дисковой версии (вследствие записи в виртуальное адресное пространство). Однако когда отображение файла прекращается или файл принудительно выгружается на диск, дисковая версия снова приводится в соответствие с последними изменениями файла в памяти.
В Windows 2000 два и более процессов могут одновременно отображать на свои виртуальные адресные пространства, возможно, в различные адреса, одну и ту же часть одного и того же файла. Читая и записывая слова памяти, процессы могут общаться друг с другом и передавать друг другу информацию с очень большой скоростью, так как копирование при этом не требуется. У различных процессов могут быть различные права доступа. Поскольку все процессы, использующие отображаемый на память файл, совместно используют одни и те же страницы, изменения, произведенные одним процессом, немедленно становятся видимыми для всех остальных процессов, даже если файл на диске еще не был обновлен. Также предпринимаются меры, благодаря которым процесс, открывающий файл для нормального чтения, видит текущие страницы в ОЗУ, а не устаревшие страницы с диска.
Следует отметить, что при совместном использовании двумя программами одного файла DLL может возникнуть проблема, если одна из программ изменит статические данные файла. Если не предпринять специальных действий, то другой процесс увидит измененные данные, что, скорее всего, не соответствует намерениям этого процесса. Эта проблема решается таким способом: все отображаемые страницы помечаются как доступные только для чтения, хотя в то же время некоторые из них тайно помечаются как в действительности доступные и для записи. Когда к такой странице происходит обращение операции записи, создается приватная копия этой страницы и отображается на память. Теперь в эту страницу можно писать, не опасаясь задеть других пользователей или оригинальную копию на диске. Такая техника называется копированием при записи.
Основные понятия
Менеджер ввода-вывода родственен менеджеру plug-and-play. Основная идея механизма plug-and-play заключается в настраиваемой шине. За многие годы было разработано множество шин, включая PC Card, PCI, USB, IEEE 1394 и SCSI, поэтому менеджер plug-and-play может послать каждому разъему запрос и попросить устройство назвать себя. Определив, что за устройство подключено к шине, менеджер plug-and-play выделяет для него аппаратные ресурсы, такие как уровни прерываний, находит необходимые драйверы и загружает их в память. При загрузке каждого драйвера для него создается объект драйвера. Для некоторых шин, например SCSI, настройка происходит только во время загрузки операционной системы. Для других шин, таких как USB и IEEE 1394, она может производиться в любой момент, для чего требуется тесный контакт между менеджером plug-and-play, драйвером шины (который и выполняет настройку) и менеджером ввода-вывода.
Менеджер ввода-вывода также тесно связан с менеджером энергопотребления. Менеджер энергопотребления может перевести компьютер в одно из семи состояний, которые можно примерно описать следующим образом:
1.Полностью действующий.
2.Режим сниженного энергопотребления-1: мощность, потребляемая центральным процессором, снижается, ОЗУ и кэш работают, возможен мгновенный переход в режим полного действия.
3.Режим сниженного энергопотребления-2: центральный процессор и ОЗУ работают; кэш центрального процессора отключен; возможно продолжение работы с текущего значения счетчика команд.
4.Режим сниженного энергопотребления-3: центральный процессор и кэш отключены; ОЗУ работает; возможен перезапуск с фиксированного адреса.
5.«Зимняя спячка»: центральный процессор, кэш и ОЗУ отключены; возможен перезапуск из сохраненного на диске файла.
6. Выключен: все выключено; требуется полная перезагрузка.
Устройства ввода-вывода также могут находиться в различных состояниях. Включением и выключением этих устройств занимаются вместе менеджер энергопотребления и менеджер ввода-вывода. Обратите внимание, что состояния со 2 по 6 используются, только если центральный процессор бездействовал в течение определенного времени.
Формально все файловые системы представляют собой драйверы ввода-вывода. Обращения к блокам диска от пользовательских процессов сначала посылаются менеджеру кэша. Если менеджер кэша не может удовлетворить запрос из кэша, он просит менеджер ввода-вывода вызвать драйвер соответствующей файловой системы, чтобы тот получил требуемый блок с диска.
Windows 2000 поддерживает асинхронный ввод-вывод. Поток может начать операцию ввода-вывода, а затем продолжить выполнение параллельно с вводом-выводом. Такая возможность особенно важна для серверов. Существует множество способов, с помощью которых поток может определить, что операция ввода-вывода завершена. Один из способов состоит в создании в момент обращения к вызову ввода-вывода объекта события, а потом ожидания этого события. Другой способ заключается в указании очереди, в которую будет послано сообщение о завершении операции ввода-вывода. Третий способ заключается в предоставлении процедуры обратного вызова, к которой обращается система, когда операция ввода-вывода завершена.
Основные понятия
Операционная система Windows 2000 обладает рядом достаточно совершенных и эффективных свойств безопасности, включая следующие:
1. Безопасная регистрация в системе с мерами предосторожности против попыток применения фальшивой программы регистрации.
2. Дискреционное управление доступом.
3. Управление привилегированным доступом.
4. Защита адресного пространства для каждого процесса.
5. Обнуление страниц перед выделением их процессу.
6. Аудит безопасности.
Безопасная регистрация означает, что системный администратор может потребовать ото всех пользователей наличия пароля для входа в систему. Дискреционное управление доступом позволяет владельцу файла или другого объекта указать, кто может пользоваться объектом и каким образом. Средства управления привилегированным доступом позволяют системному администратору (суперпользователю) получать доступ к объекту, несмотря на установленные его владельцем разрешения доступа. Под защитой адресного пространства имеется в виду лишь то, что у каждого процесса есть собственное защищенное виртуальное адресное пространство, недоступное для любого неавторизованного процесса. Следующий пункт означает, что при увеличении стека выделяемые для него страницы заранее обнуляются, так что процесс не может обнаружить в них информации, помещенной предыдущим владельцем страницы памяти (страницы подаются процессам из списка обнуленных страниц). Наконец, аудит безопасности следует понимать как регистрацию системой в журнале определенных событий, относящихся к безопасности. Впоследствии этот журнал может просматривать системный администратор.
У каждого пользователя (и группы) операционной системы Windows 2000 есть идентификатор безопасности SID (Security IDentifier), по которому операционная система отличает его от других пользователей. Идентификаторы безопасности представляют собой двоичные числа с коротким заголовком, за которым следует длинный случайный компонент. Каждый SID должен быть уникален в пределах всей планеты. Когда пользователь запускает процесс, этот процесс и его потоки работают под идентификатором пользователя. Большая часть системы безопасности спроектирована так, чтобы гарантировать предоставление доступа к каждому объекту только потокам с авторизованными идентификаторами безопасности.
У каждого процесса есть маркер доступа, в котором указывается SID и другие свойства. Как правило, он назначается при регистрации в системе процедурой winlogon. Заголовок маркера содержит некоторую административную информацию. По значению поля срока действия можно определить, когда маркер перестанет быть действительным. Поле Groups (группы) указывает группы, к которым принадлежит процесс. Это поле необходимо для соответствия требованиям стандарта POSIX. Поле Default DACL (Default Discretionary Access Control List – список разграничительного контроля доступа по умолчанию) представляет собой список управления доступом, назначаемый объектам, созданным процессом, если не определены другие списки ACL. Идентификатор безопасности пользователя указывает пользователя, владеющего процессом. Ограниченные идентификаторы SID позволяют ненадежным процессам принимать участие в заданиях вместе с надежными процессами, но с меньшими полномочиями и меньшими возможностями причинения ущерба.
Наконец, перечисленные в маркере привилегии (если они перечислены) дают процессу особые полномочия, такие как право выключать компьютер или получать доступ к файлам, к которым в противном случае в этом доступе процессу было бы отказано. Привилегии позволяют разбить полномочия системного администратора на отдельные права, которые могут предоставляться процессам по отдельности. Таким образом, пользователю может быть предоставлена часть полномочий суперпользователя, но не все его полномочия. Итак, маркер доступа содержит информацию о том, кто владеет процессом и какие умолчания и полномочия ассоциированы с ним.
Когда пользователь регистрируется в системе, процесс winlogon назначает маркер доступа начальному процессу. Последующие процессы, как правило, наследуют этот маркер. Маркер доступа процесса изначально применяется ко всем потокам процесса. Однако поток во время исполнения может получить другой маркер доступа. В этом случае маркер доступа потока перекрывает маркер доступа процесса. В частности, клиентский поток может передать свой маркер доступа серверному потоку, чтобы сервер мог получить доступ к защищенным файлам и другим объектам клиента. Такой механизм называется перевоплощением.
Другим основным понятием является дескриптор защиты. У каждого объекта есть ассоциированный с ним дескриптор защиты, содержащий список пользователей и групп, имеющих доступ к данному объекту. Дескриптор защиты состоит из заголовка, за которым следует список DACL с одним или несколькими элементами АСЕ (Access Control Entry – элемент списка контроля доступа ACL). Два основных типа элементов списка – это разрешение и запрет доступа. Разрешающий элемент содержит SID пользователя или группы и битовый массив, определяющий набор операций, которые процессы с данным идентификатором SID могут выполнять с определенным объектом. Запрещающий элемент работает аналогично, но совпадение идентификаторов означает, что обращающийся процесс не может выполнять перечисленные операции.
Кроме списка DACL у дескриптора защиты есть также список SACL (System Access Control List – системный список контроля доступа), который похож на DACL, только вместо пользователей и групп, имеющих доступ к объекту, в нем перечисляются операции с этим объектом, регистрируемые в специальном журнале. В операционной системе Windows 2000 также предоставляются дополнительные возможности аудита для регистрации доступа к объектам.
Резюме
Структура операционной системы Windows 2000 включает в себя уровень аппаратных абстракций HAL, ядро, исполняющую систему и тонкий уровень системных служб, перехватывающий входящие системные вызовы. Кроме того, операционная система содержит множество драйверов устройств, включая файловую систему и интерфейс графических устройств GDI. Уровень HAL скрывает от верхних уровней определенные различия в аппаратуре. Ядро пытается скрыть от исполняющей системы остальные различия, чтобы сделать ее почти полностью машинно-независимой.
В основе исполняющей системы лежат объекты памяти. Пользовательские процессы создают их и получают дескрипторы, позволяющие управлять этими объектами. Компоненты исполняющей системы также могут создавать объекты. Менеджер объектов управляет пространством имен, в которое могут добавляться объекты для возможности их поиска по имени.
Операционная система Windows 2000 поддерживает процессы, задания, потоки и волокна. У процессов есть виртуальные адресные пространства, кроме того, процессы являются контейнерами ресурсов. Потоки представляют собой единицы исполнения и планируются операционной системой. Волокна являются упрощенными потоками, планируемыми полностью в пространстве пользователя. Задания представляют собой наборы процессов и используются для выделения квот ресурсов. При планировании используется приоритетный алгоритм, в котором управление получает готовый поток с максимальным приоритетом.
Операционной системой Windows 2000 поддерживается виртуальная память с подкачкой по требованию. Алгоритм подкачки основан на понятии рабочего набора. Система управляет несколькими списками свободных страниц, так что когда происходит страничное прерывание, как правило, у системы уже есть доступная страница. Списки свободных страниц получают страницы, отнимаемые у рабочих наборов при помощи сложных алгоритмов, пытающихся изымать в первую очередь давно не использовавшиеся страницы.
Ввод-вывод осуществляется драйверами устройств, согласующимися с моделью Windows Driver Model. При запуске каждого драйвера инициализируется объект драйвера, содержащий адреса процедур, к которым может обращаться операционная система, чтобы добавить новое устройство или выполнить операцию ввода-вывода. Драйверы могут собираться в стеки или действовать как фильтры.
В основе файловой системы NTFS лежит главная файловая таблица MFT, в которой содержится по одной записи для каждого файла или каталога. У каждого файла есть множество атрибутов, которые могут храниться в записи таблицы MFT или вне таблицы – на диске. Среди прочих возможностей файловая система NTFS поддерживает сжатие и шифрование.
Защита основывается на списках управления доступом ACL. У каждого процесса есть маркер управления доступом, идентифицирующий процесс, а также указывающий, какими особыми привилегиями он обладает. С каждым объектом ассоциирован дескриптор защиты. Дескриптор защиты указывает на список разграничительного управления доступом DACL, содержащий записи списка ACL, разрешающие или запрещающие доступ к этому объекту отдельным пользователям или группам.
Контрольные вопросы и задания
1. Опишите структурное построение ОС Windows 2000.
2. Каковы функции так называемого уровня аппаратных абстракций Windows 2000?
3. Охарактеризуйте ядро ОС Windows 2000.
4. Какие объекты носят наименование управляющих объектов?
5. Перечислите объекты, которые относятся к типу объектов диспетчеризации.
6. Представьте состав исполняющей системы Windows 2000.
7. Какие функции выполняет менеджер объектов?
8. Какова роль менеджера процессов?
9. Для выполнения каких функций применяется интерфейс графических устройств GDI?
10. Опишите реализацию объектов в Windows 2000.
11. Какие компоненты системы Windows 2000 работают в режиме пользователя?
12. Перечислите интерфейсы прикладного программирования API, поддерживаемые Windows 2000.
13. Дайте определения понятиям «задание», «процесс», «поток», «волокно» в Windows 2000.
14. Опишите способы межпроцессного взаимодействия в Windows 2000.
15. Как осуществляется реализация процессов и потоков в Windows 2000?
16. Перечислите этапы загрузки ОС Windows 2000.
17. Что понимается под виртуальной страницей памяти и в каких состояниях она может находиться?
18. Как реализуется управление памятью в ОС Windows 2000?
19. Опишите реализацию ввода-вывода в ОС Windows 2000.
20. Какие режимы поддерживает менеджер энергопотребления?
21. Охарактеризуйте файловые системы типа FAT.
22. Представьте особенности организации файловой системы NTFS и ее достоинства по сравнению с файловыми системами типа FAT.
23. Какова структура главной файловой таблицы MFT в NTFS?
24. Каким образом производится сжатие данных файла в NTFS?
25. Перечислите и охарактеризуйте основные понятия системы безопасности Windows 2000.
26. Опишите особенности реализации защиты в ОС Windows 2000.
Заключение
Основными функциями операционных систем являются функции управления процессами и ресурсами вычислительных машин и систем. Процессы и ресурсы – это ключевые понятия операционных систем. За время своего существования процессы могут неоднократно изменять свое состояние, проходя через стадии создания, готовности, выполнения, ожидания и завершения своей работы. Операционная система организует планирование выполнения процессов, обеспечивает процессы необходимыми системными ресурсами, поддерживает взаимодействие процессов и решает проблемы их синхронизации.
При управлении таким важнейшим ресурсом, как память вычислительной машины, операционная система контролирует наличие свободной и занятой памяти, выделяет память для выполнения процессов и освобождает память после завершении процессов, реализует вытеснение процессов из оперативной памяти на дисковую память и возвращение их обратно в оперативную память, обеспечивает настройку адресов программы на конкретную область физической памяти.
Управляя устройствами ввода-вывода, операционная система передает устройствам соответствующие команды, перехватывает прерывания, обрабатывает ошибки, обеспечивает интерфейс между устройствами ввода-вывода и остальной частью машины. Для освобождения процессора от операций последовательного вывода данных из оперативной памяти или последовательного ввода в нее используется механизм прямого доступа внешних устройств к памяти.
Возможность управления файлами со стороны операционной системы на логическом уровне структур данных и операций обеспечивают различные типы файловых систем. Файловая система представляет собой набор спецификаций и соответствующее им программное обеспечение, которые отвечают за создание, уничтожение, организацию, чтение, запись, модификацию и перемещение файловой информации, а также за управление доступом к файлам и за управление ресурсами, которые используются файлами.
В операционных системах для многопроцессорных вычислительных машин сложность планирования процессов существенно возрастает, так как требуется не только решение вопросов очередности запуска процессов на выполнение, но и выбор центрального процессора, на котором должен быть запущен тот или иной процесс.
В многомашинных вычислительных системах механизмы организации межпроцессной взаимосвязи принципиально отличаются от организации такой взаимосвязи в автономных вычислительных машинах. Базой для взаимодействия процессов в автономных машинах служит общая разделяемая память. Многомашинные вычислительные системы по определению не имеют общей разделяемой памяти, и поэтому основой межпроцессной взаимосвязи в них служит обмен физическими сообщениями посредством коммуникационной среды.
Операционные системы многомашинных вычислительных систем распределенного типа – вычислительных сетей – обычно называют сетевыми. Фундаментальным понятием сетевых операционных систем, позволяющим определить и реализовать взаимодействие удаленных процессов, является понятие сетевого протокола.
Наиболее совершенным и перспективным классом операционных систем являются так называемые распределенные операционные системы. Распределенная система создает для пользователя полную иллюзию того, что он работает в обычной автономной системе. Эффективным способом построения распределенных операционных систем является установка специального промежуточного уровня программного обеспечения поверх сетевой операционной системы, который предоставляет приложениям определенную однородность взаимодействия. Среди различных типов промежуточного программного обеспечения следует выделить документное, файловое, объектное и координационное.
Основными принципами построения современных операционных систем являются принципы модульности, генерируемости, функциональной избыточности, виртуализации, совместимости с другими системами, открытости, легкой наращиваемости, мобильности, обеспечения надежной безопасности. Операционные системы прошли длительный путь развития и совершенствования своей архитектуры от монолитных систем до хорошо структурированных модульных систем, способных к развитию, расширению и легкому переносу на новые платформы. При модульном построении в системе выделяется некоторая часть важных программных модулей, которые для более эффективной организации вычислительного процесса должны постоянно находиться в оперативной памяти. Эту группу модулей называют ядром операционной системы. Другие системные программные модули (транзитные или диск-резидентные) загружаются в оперативную память только при необходимости, а в случае отсутствия свободного пространства могут быть замещены другими транзитными модулями. Для использования прикладными программами системных ресурсов операционной системы и реализуемых ею функций предназначен интерфейс прикладного программирования, который может быть реализован как на уровне операционной системы, так и на уровне системы программирования или на уровне внешней библиотеки процедур и функций.
Прообразом современных операционных систем являются разработанные в середине 1950-х годов системы пакетной обработки, которые были первыми системными программами, предназначенными для управления вычислительным процессом. Следующим этапом эволюции операционных систем стала разработка в 1960-х годах универсальных систем, которые были способны работать на разных типах вычислительных машин, имеющих различный набор периферийных устройств и используемых в разных областях человеческой деятельности. Существенным достижением систем этого периода явилась реализация многозадачного режима и спулинга.
Важнейшей вехой в истории и современном состоянии операциионных систем является семейство многопользовательских многозадачных систем UNIX. UNIX получила несколько ветвей развития исходной архитектуры. Двумя главными из таких ветвей стали System V (корпорации AT&T) и BSD (Калифорнийского университета в Беркли). Впоследствии на основе обеих этих ветвей был создан ряд новых версий ОС UNIX. Третья самостоятельная ветвь развития UNIX начиналась с относительно простой «учебной» системы MINIX, за которой в 1991 году последовала значительно более мощная многозадачная многопользовательская ОС LINUX. Операционные системы типа UNIX широко используется на вычислительных машинах различных классов от ноутбуков до суперкомпьютеров.
Для персональных компьютеров клона IBM PC были разработаны однопользовательские однозадачные операционные системы типа MS-DOS корпорации Microsoft и их аналоги других корпораций. Управление компьютером в среде MS-DOS осуществлялось в режиме командной строки. Для того, чтобы сделать общение с компьютером более простым, были предложены так называемые программы-оболочки, представляющие собой программные надстройки операционной системы, позволяющие пользователю осуществлять действия по управлению ресурсами компьютера в рамках более развитого и удобного, чем командная строка, псевдографического интерфейса. Следующим историческим шагом в развитии оболочек операционных систем стало появление в 1986 г. графической многооконной операционной оболочки Windows от корпорации Microsoft, которая работала на базе MS-DOS, а основой пользовательского интерфейса Windows послужил так называемый графический интерфейс пользователя GUI, представляющий собой иерархически организованную систему окон и других графических объектов. Дальнейшим развитием семейства Microsoft Windows стала разработка полноценных операционных систем Windows 95 (Windows 4.0) и Windows NT, положившим начало двух ветвей ОС от Microsoft: Windows 95/98/ME и Windows NT/2000/XP/2003.
Линия систем «новой технологии» Windows NT принципиально отличается от линии Windows 9.х. В качестве фундаментальных компонентов в состав семейства Windows NT входят развитый сетевой сервис, поддержка работы высокопроизводительных многопроцессорных вычислительных комплексов, средства обеспечения эффективной безопасности. На смену версии Windows NT 4.0. в 2000 году пришла существенно усовершенствованная и усиленная ОС Windows 2000 Professional. Серверной версией Windows 2000 Professional является система Windows 2000 Server, включающаяет множество дополнительных специальных функций. В конце 2001 г. корпорация Microsoft выпустила новую версию – Windows XP, продолжившую линию Windows NT. Новая серверная версия Windows Server 2003 обладает рядом преимуществ по сравнению с Windows 2000 Server.
Значительную роль в развитии ОС играет фирма Novell со своим сетевым операционными системами семейства NetWare. Историческое значение имеет система OS/2 корпорации IBM, которая появилась на рынке раньше Windows 95 и была первой 32-х разрядной операционной системой для персональных компьютеров.
Следует отметить также некоторые специализированные системы, например, предназначенные исключительно для выполнения коммуникационных задач или ориентированные на определенную аппаратную платформу компьютеров.
Любая из современных операционных систем имеет свои особенности построения и практической реализации, применяет те или иные способы и механизмы управления процессами и ресурсами, использует различные по степени универсальности и совместимости прикладные интерфейсы, обладает разным уровнем функциональности и может позиционироваться для определенных сфер применения. Для каждой из систем можно указать ее преимущества и недостатки, сильные и слабые стороны. Естественно, что предприятию или отдельному пользователю хотелось бы работать с оптимальной операционной системой, удовлетворяющей комплексу наиболее важных требований. «Идеальная» операционная система скорее всего должна иметь такую же степень интеграции и такую же поддержку, как Microsoft Windows 2000/XP/Server 2003, такую же превосходную отказоустойчивость, как Solaris 8 компании Sun Microsystems, такую же службу справочника, какой снабжена Novell NetWare 5.1, а также универсальность и гибкость, свойственные системе Linux.
Подобно другим программным продуктам информационных технологий, операционные системы постоянно совершенствуются. Основное внимание при разработке новых версий операционных систем уделяется базовым службам (файловые службы, службы печати, защиты, аутентификации, службы справочника), средствам управления, масштабируемости, применимости, надежности, службам Интернет, интрасетей и электронной коммерции. Та компания, которая в своей версии операционной системы лучше других обеспечивает эти качества, становится лидером продаж на рынке. Конкурентная борьба, как хорошо известно, является лучшим двигателем прогресса, в том числе и в области операционных систем.
Каждая из компаний – игроков на рынке операционных систем – имеет собственные планы дальнейшего развития своих продуктов.
Например, в ближайших (на момент подготовки данного учебного пособия) планах корпорации Microsoft выпуск новых версий Windows XP. К ним относятся Windows XP Media Center Edition (MCE) 2004, включающая несколько новых специализированных модулей и призванная превратить персональный компьютер в полнофункциональный развлекательный центр, а также Windows XP 64-bit Edition, являющаяся модификацией XP для компьютеров с 64-разрядными процессорами. Microsoft ведет разработку операционной системы нового поколения, именуемой как Windows Longhorn. По заявлениям Microsoft эта система станет революционной версией, основанной на внедрении новых технологий. Планируется выпуск ее 32- и 64-разрядных модификаций.
Можно надеяться, что не остановятся на достигнутом и другие компании – разработчики операционных систем, поэтому пользователей ждут еще более совершенные, функциональные, производительные и комфортные среды взаимодействия с вычислительной техникой.
Словарь терминов и определений
Виртуальная память
совокупность программно-аппарат-ных средств, позволяющих пользователям писать программы, которые для своей реализации требуют объемы памяти, превосходящие реально существующие объемы оперативной памяти вычислительной машины.
Гонка
ситуация, когда два или более процессов обрабатывают разделяемые данные, и конечный результат зависит от соотношения скоростей выполнения процессов.
Критическая секция (критическая область)
часть программы, в которой осуществляется доступ к разделяемым данным.
Кэширование информации
способ организации совместного функционирования двух типов запоминающих устройств, отличающихся временем доступа и стоимостью хранения данных, который позволяет уменьшить среднее время доступа к данным за счет динамического копирования наиболее часто используемой информации из относительно более «медленного» запоминающего устройства в более «быстрое».
Логическая запись
наименьший элемент данных, которым может оперировать программист при обмене с внешним устройством.
Логическая организация файла
представление файла в виде определенным образом организованных логических записей.
Многозадачность невытесняющая
способ планирования процессов, при котором активный процесс выполняется до тех пор, пока он сам, по собственной инициативе, не отдаст управление планировщику операционной системы для того, чтобы тот выбрал из очереди другой, готовый к выполнению процесс.
Многозадачность вытесняющая
способ планирования процессов, при котором решение о переключении процессора с выполнения одного процесса на выполнение другого процесса принимается планировщиком операционной системы, а не самой активной задачей.
Модуль операционной системы
функционально законченный элемент системы, выполненный в соответствии с принятыми межмодульными интерфейсами.
Операционная оболочка
программа, которая позволяет пользователю осуществлять действия по управлению ресурсами компьютера в рамках более развитого, удобного и интуитивно понятного интерфейса, чем командная строка.
Операционная система
комплекс управляющих и обрабатывающих программ, который, с одной стороны, выступает как интерфейс между пользователем (с его задачами) и аппаратными компонентами вычислительных машин и вычислительных систем, а с другой стороны предназначен для эффективного управления вычислительными процессами, а также наиболее рационального распределения и использования вычислительных ресурсов машин и систем.
Операционная система сетевая
операционная система, позволяющая реализовать обмен сообщениями между отдельными компонентами, которые входят в состав вычислительной сети.
Операционная среда
программная среда, которую образует операционная система и в которой выполняются прикладные программы пользователей.
Планирование процессов
распределение процессов между имеющимися ресурсами.
Планировщик
программа,управляющая миграцией процессов между различными очередями при их прохождении через вычислительную машину.
Подсистема буферизации
буферный пул, располагающийся в оперативной памяти, и комплекс программ, управляющих этим пулом.
Подсистема управления процессами
часть операционной системы, которая планирует выполнение процессов, то есть распределяет процессорное время между несколькими одновременно существующими в системе процессами, а также занимается созданием и уничтожением процессов, обеспечивает процессы необходимыми системными ресурсами, поддерживает взаимодействие между процессами.
Правила синхронизации
определяют порядок взаимосвязи процессов.
Прерывание
принудительная передача управления от выполняемой программы к операционной системе (а через нее – к соответствующей программе обработки прерывания), происходящая при возникновении определенного события, механизм, позволяющий координировать параллельное функционирование отдельных устройств вычислительной машины и реагировать на особые состояния, возникающие при работе процессора.
Приоритет
характеризует степень привилегированности процесса при использовании ресурсов вычислительной машины.
Процесс
последовательность операций при выполнении программы или ее части в совокупности с используемыми данными.
Реентерабельность
свойство программы, позволяющее одновременно выполнять эту программу нескольким процессам.
Ресурс
любой потребляемый (расходуемый) объект вычислительной машины или системы, который может быть выделен его потребителю – процессу – на определенный интервал времени.
Сетевой протокол
набор специализированных правил, описывающих и регламентирующих типы и форматы сообщений, с помощью которых могут взаимодействовать отдельные компоненты вычислительной сети.
Супервизор
программа, обеспечивающая оптимальное использование ресурсов вычислительной машины в режиме многозадачности.
Таблица управления процессом
содержит набор значений и параметров, которые характеризуют текущее состояние процесса и используются операционной системой для управления прохождением процесса через вычислительную машину.
Транзитные программные модули операционной системы
часть программных модулейоперационной системы, которые загружаются в оперативную память только при необходимости, а в случае отсутствия свободного пространства могут быть замещены другими транзитными модулями.
Файл
набор данных, организованных в виде совокупности записей определенной структуры.
Файловая система
набор спецификаций и соответствующее им программное обеспечение, которые отвечают за создание, уничтожение, организацию, чтение, запись, модификацию и перемещение файловой информации, а также за управление доступом к файлам и за управление ресурсами, которые используются файлами.
Физическая организация файла
описывает правила расположения файла на устройстве внешней памяти, в частности, на диске.
Ядро операционной системы
часть наиболее важных программных модулейоперационной системы, которые постоянно находятся в оперативной памяти с целью эффективной организации вычислительного процесса.
Алфавитно-предметный указатель
А
Адрес
виртуальный 34
физический 34
Б
Блок информации 81
Блокирующая переменная 23
Буфер обмена 26
В
Виртуальная память 38
Виртуальное адресное простран-
ство 34
Взаимоблокировка 26
Вызов
блокирующй (синхроннй) 82
неблокирующй (асинхроннй) 82
Вычислительная (компьютерная)
сеть 81
Вычислительная машина
многопроцессорная 65, 80
однопроцессорная 8, 65
Вычислительная система
многомашинная 80
сосредоточенного типа 80
распределенного типа 80
Д
Дескриптор процесса 12
Диспетчеризация 12
Доступ к файлу
избирательный 57
мандатный 57
И
Инкапсуляция 110
Интерфейс-оболочка 7, 121, 137
Интерфейс
графический 7, 111, 123,
командной строки 7, 122
К
Квантование 13
Кластер 55
Контекст процесса 12
Контроллер прямого доступа
к памяти 49
Критическая секция (критическая
область) программы 23
Кэш-память 43
Л
Логическая запись 55
Локальность данных в кэш-памяти
пространственная 44
временная 44
М
Метод очередей ресурсов 12
Механизм прямого доступа к
памяти 49
Многозадачность
вытесняющая 14, 15
невытесняющая 14, 15
Многопоточность 29
Многоуровневая модель 58
Модуль операционной системы 97
Монитор 27
Мультипрограммный режим 119
Мультипроцессор 65
Мьютекс 25
О
Операционная среда 6, 7
Операционная система (ОС) 6, 7
Операционная оболочка 7, 121
Организация файла
логическая 55
физическая 55
П
Пакетная обработка информации 118
Перемещающий загрузчик 34, 35
Планирование процессов 11, 69
Подсистема
буферизации 57
управления процессами 11
Поток 28, 29
Право доступа к файлу 57
Прерывание 16
внешнее (асинхронное) 18
внутреннее (синхронное) 18
программное 19
Прикладной программный
интерфейс 51, 112, 113
Приоритет 1, 13, 19
Процесс 8
взаимодействующий 9
взаимосвязанный 9
внешний 9
внутренний 9
выполняемый 11
готовый 11
завершенный 11
изолированный 9
интерактивный 8
конкурирующий 9
новый 11
ожидающий 11
пакетный 8
пользовательский 9
порождающий 8
порожденный 8
равный 8
реального времени 8
системный 21
тождественный 8
эквивалентный 8
Р
Распределенная операционная
система 89, 90
Распределение памяти
страничное 38
сегментное 41
странично-сегментное 42
Реентерабельность 97
Ресурс 10
активный 10
виртуальный 10
воспроизводимый 10
временный 10
второстепенный 10
жесткий 10
информационный 10
используемый параллельно 10
используемый последовательно 10
основной 10
пассивный 10
постоянный 10
потребляемый 10
программный 10
простой 10
составной 10
физический 10
эластичный 10
С
Свопинг 42
Сетевая операционная система 88
Сетевой протокол 88
Семафор 24, 25
Символьное имя 34
Система управления файлами 50, 51
Сообщение 81
Спин-блокировка 24
Спулинг 48
Стаб
клиентский 86
серверный 87
Супервизор прерываний 21
Т
Транзитный программный модуль
Таблица управления процессом
(ТУП) 11
У
Устройство ввода-вывода 44
байт-ориентированное 45
блок-ориентированное 45
выделенное 46
разделяемое 46
Ф
Фрагментация памяти 36
Файл 10, 50
двоичный 54
каталог 54
обычный 54
специальный 54
текстовый 54
Файловая система 50, 51
Я
Ядро операционной системы 97, 98
Храпский Сергей Филиппович
ОПЕРАЦИОННЫЕ СИСТЕМЫ, СРЕДЫ И ОБОЛОЧКИ
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Редактор Л. Г.Сигитова
Лицензия ЛР № 021278 от 06.04.98 г.
Подписано в печать 01.09.05. Формат 60х84 1/16.
Бумага типогр. Оперативная печать.
Усл. печ. л. 15.05. Уч.-изд. л. 14,35. Тираж 60 экз.
Издат. № 366. Заказ 387. Цена договорная.
Издательско-полиграфический центр ОГИС
644099, Омск, ул. Красногвардейская, 9