close

Вход

Забыли?

вход по аккаунту

?

230.Современные операционные системы Лукьянов А В

код для вставкиСкачать
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Министерство образования и науки Российской Федерации
Ярославский государственный университет им. П. Г. Демидова
Кафедра компьютерных сетей
А. В. Лукьянов
Современные операционные системы
Методические указания
Рекомендовано
Научно-методическим советом университета
для студентов, обучающихся по направлению
Прикладная математика и информатика
Ярославль 2012
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
УДК 004.451(072)
ББК 3973.2-018.2я73
Л 84
Рекомендовано
Редакционно-издательским советом университета
в качестве учебного издания. План 2012 года
Рецензент — кафедра компьютерных сетей
Ярославского государственного университета им. П. Г. Демидова
Л 84
Лукьянов, А. В. Современные операционные системы: методические указания / А. В. Лукьянов; Яросл.
гос. ун-т. — Ярославль: ЯрГУ, 2012. — 44 с.
В методических указаниях даны необходимые определения, рассмотрена история развития и классификация
операционных систем по различным признакам. Представлена типичная структура ОС и её основные подсистемы. Описаны и классифицированы некоторые алгоритмы, по которым работают подсистемы ОС. Приведены примеры из ОС UNIX, Linux, Windows NT.
Предназначены для студентов, обучающихся по специальности 010501.65 Прикладная математика и информатика (дисциплина «Современные операционные системы», блок ДС), очной формы обучения.
УДК 004.451(072)
ББК 3973.2-018.2я73
© Ярославский государственный
университет им. П. Г. Демидова, 2012
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Введение
При работе с любым современным компьютером пользователь
всегда имеет дело не только с прикладными программами, но и
с операционной системой (ОС). Операционная система — это фундамент, на который опираются все остальные прикладные программы. В то же время не все пользователи представляют, что
такое операционная система и где проходит граница между ОС и
прикладными программами.
В настоящих методических указаниях даются ключевые определения, важные для понимания сущности операционных систем,
описывается структура ОС, приводится классификация ОС по различным признакам. Перечисляются основные подсистемы ОС,
описываются алгоритмы их функционирования и приводится их
классификация.
Знание подсистем ОС и основных алгоритмов позволяет понять, что именно происходит в компьютере, облегчает настройку
и оптимизацию работы компьютера, делает возможным создание
более эффективных, надёжных и безопасных программ.
Начнём с наиболее важных определений.
1. Ключевые определения
Операционная система
— набор программ и библиотек подпрограмм, которые выполняют следующие функции:
ˆ создают среду выполнения других программ;
ˆ управляют ресурсами компьютера (память, процессоры, диски, внешние устройства);
ˆ реализуют базовый интерфейс взаимодействия пользователя
с компьютером.
Часть операционной системы, которая загружается в память
одной из первых, всегда находится в памяти в процессе нормальной
работы и обладает приоритетом по сравнению с другими частями,
называется
.
входят в состав операционной системы
и обеспечивают работу других программ, управляют вычислительной системой и настраивают её на определённый режим функционирования.
не входят в состав операционной системы, но используют её как основу для своей работы. Некоторые
ядром операционной системы
Системные программы
Прикладные программы
3
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
прикладные программы (например: текстовый редактор, калькулятор и другие) могут поставляться вместе с операционной системой в одном «дистрибутиве».
Рис. 1. Многослойная структура компьютера
На рис. 1 показано положение операционной системы и её ядра
в многослойной структуре компьютерной системы. На этой диаграмме видно, что операционная система опирается на аппаратную часть компьютера и на встроенное программное обеспечение
(firmware), при этом системное программное обеспечение использует ядро ОС, а прикладные программы выполняются в среде, создаваемой ядром ОС и системными программами.
При запуске программы ОС создаёт
— исполняемый экземпляр программы. Процесс включает в себя значения всех переменных программы и прочие параметры, определяющие состояние
её исполнения.
Каждому процессу соответствует какая-либо одна программа,
при этом каждая программа в общем случае может иметь несколько соответствующих ей процессов.
процесс
4
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Процессы взаимодействуют с ядром операционной системы и
могут взаимодействовать с другими процессами, передавать им
данные и синхронизировать свою работу.
Процесс включает в себя одну или несколько нитей.
—
это абстрактные объекты операционной системы, между которыми распределяется процессорное время. Нити исполняются параллельно или поочерёдно. Нити одного процесса имеют общий программный код и общие глобальные переменные, каждая нить имеет собственный стэк вызовов процедур, локальные переменные и
отдельное состояние регистров процессора.
(scheduler) — подсистема ядра, планирующая распределение процессорного времени между нитями. Планировщик учитывает статистические данные и административно
заданные параметры нитей и процессов. Существуют различные
алгоритмы, по которым работает планировщик задач. Более подробно классификация этих алгоритмов дана в разделе 5.
Данные определения являются наиболее важными для дальнейшего изучения операционных систем.
Нити
Планировщик задач
2. История развития ОС
Для того чтобы лучше понять назначение операционных систем, рассмотрим историю их возникновения и развития.
Можно выделить несколько периодов в развитии компьютеров
и соответствующих периодов развития ОС. По мере увеличения
производительности компьютеров узкое место (bottleneck) при решении задач изменялось, при этом менялась и стратегия оптимизации работы со стороны ОС. Рассмотрим основные периоды.
1945–1955 годы. В этот период были созданы первые ламповые компьютеры. Программирование этих компьютеров осуществлялось с пульта управления непосредственно на машинном языке.
Операционных систем не существовало, их зачатком служили библиотеки математических и служебных подпрограмм. Препятствием для возникновения ОС был малый объем памяти компьютеров,
отсутствие эффективных внешних запоминающих устройств, низкая надёжность компьютеров.
1955–1965 годы. Появились компьютеры на базе полупроводниковых транзисторов. Надёжность компьютеров и объем их памяти увеличились. Компьютеры стали решать практически важные задачи (в основном математические и физические). Появились
внешние запоминающие устройства (ЗУ), такие как перфорато5
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
ры на перфокартах, перфолентах, ЗУ на магнитной ленте. Произошло разделение персонала на разработчиков и пользователей
(операторов).
Для более эффективного использования процессорного времени, которое было очень дорогим из-за большой стоимости и низкой
производительности компьютеров, были разработаны первые операционные системы пакетной обработки. Их цель — повысить эффективность использования процессорного времени, не заботясь об
удобстве персонала. В таких ОС используется специальный формализованный язык описания заданий, применяемый для составления списка работ, которые необходимо выполнить на компьютере. Программисты составляли задание (например, в виде колоды
перфокарт), отдавали его операторам, которые вводили его в компьютер, а операционная система пакетной обработки решала, как
лучше выполнить имеющиеся в очереди задания. После выполнения задания программисты получали распечатку с результатами.
Такой режим работы был неудобен для программистов, но позволял полностью использовать процессорное время.
Первые операционные системы были очень разнородными.
Каждый новый компьютер снабжался своей операционной системой, отличной от других по функциям, набору команд, средствам
разработки и отладки. Это приводило к необходимости адаптации
существующих программ к каждой новой операционной системе.
1965–1980 годы. Произошёл переход от транзисторов к интегральным схемам, что ещё больше увеличило объем памяти и быстродействие компьютеров. Появились также дисковые ЗУ, позволяющие обращаться к записанным данным без длительного поиска,
необходимого при использовании магнитной ленты.
В этот период появилось понятие программной совместимости
компьютеров. Если до этого каждый компьютер создавался уникальным и для него одного разрабатывалось программное обеспечение (ПО), то в этот период появились серии компьютеров, которые были программно-совместимыми, исполняли одну и ту же
операционную систему и те же прикладные программы. Первой такой серией стали компьютеры IBM/360. За счёт экономии средств
на разработку архитектуры и программное обеспечение эти компьютеры имели более низкий показатель цена/производительность
по сравнению с другими компьютерами, что сделало идею совместимости общепризнанной.
Для работы на программно-совместимых компьютерах потребовались новые операционные системы, которые могли работать
6
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
как на больших, так и на относительно малых компьютерах, с разнообразными периферийными устройствами. Для компьютеров
IBM/360 была разработана операционная система OS/360. Отечественные аналоги этого компьютера и ОС — ЕС1 ЭВМ и ОС ЕС.
Важнейшее достижение в области операционных систем — разработка
(многозадачности). При этом
способе организации вычислений на одном процессоре попеременно выполняется несколько программ. Пока одна программа ждёт
завершения операции ввода-вывода, процессор не простаивает, а
выполняет другую программу. Каждая программа при этом размещается в своём участке оперативной памяти (разделе, сегменте).
Мультипрограммирование позволило более эффективно использовать ресурсы компьютера за счёт параллельного исполнения операций на разных устройствах.
Кроме мультипрограммирования, появилась подсистема спулинга (spooling).
— временное размещение данных с медленного ЗУ на более быстром ЗУ для их последующего использования или, наоборот, временное размещение данных на быстром
ЗУ для последующего переноса на медленное ЗУ. При этом обычно медленным ЗУ являлся перфоратор или принтер, а быстрым —
дисковый накопитель. Например, подсистема спулинга может считывать перфокарты по мере их поступления и сохранять данные
на диске для их последующей обработки. При этом достигается
более эффективное использование компьютера за счёт параллельного считывания перфокарт и исполнения какой-либо другой программы. Другое применение спулинга — организация очереди вывода на принтер. Программа отправляет задание в очередь печати
и продолжает работу, а подсистема спулинга занимается выводом
этого задания на принтер.
Появились операционные системы разделения времени, которые стремятся не только максимально эффективно использовать процессорное время, но и создать удобные условия работы
для пользователей. Это обусловлено ростом производительности
компьютеров и смещением узкого места при решении ряда задач с центрального процессора компьютера на операторов и программистов. В таких системах за счёт квантования процессорного
времени создаётся иллюзия работы с отдельным, не зависящим
от других пользователей компьютером. При этом программист
или оператор может вводить данные самостоятельно и сразу видеть результат их обработки. Операционная система обеспечивает
мультипрограммирования
Спулинг
1
ЕС — единая серия.
7
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
такой режим работы за счёт накладных расходов на переключение задач и не столь эффективного ввода-вывода, как в системах
пакетной обработки.
1980 – наше время. Этот период развития связан с появлением больших и сверхбольших интегральных схем (БИС, СБИС).
Это позволило создать ещё более мощные компьютеры, у которых было больше памяти и более быстрые процессоры. При этом
стоимость компьютеров снизилась настолько, что отдельные люди
смогли позволить себе их приобретать. Появились
(ПК).
Операционные системы персональных компьютеров отличаются от ОС больших компьютеров. Большие компьютеры приобретались организациями, которым необходимо было оправдать средства, потраченные на покупку компьютера (то есть требовалось
наиболее эффективно использовать все имеющееся процессорное
время). В частности, ОС пакетной обработки предназначены именно для этого, а ОС разделения времени стремятся увеличить нагрузку на ЦП за счёт одновременной работы нескольких пользователей. Персональные компьютеры приобретались индивидуальными пользователями, и на первом плане было удобство использования компьютера и эффективность использования личного времени. Операционная система, реализующая базовый интерфейс, играла в этом важную роль. Появилось понятие «дружественности»
программного обеспечения.
Начали развиваться сети компьютеров. Были созданы сетевые
операционные системы, которые могли управлять приёмом и передачей данных в локальной сети, использовать ресурсы других компьютеров через сеть. Сети могут быть одноранговыми и многоранговыми, с выделенными серверами.
в данном контексте —
это компьютер, обрабатывающий запросы, приходящие по сети, и
отправляющий ответы клиентским компьютерам, которые послали
эти запросы. Ясно, что сервер выполняет специфическую задачу,
а следовательно, специальная серверная ОС может быть эффективнее, чем ОС для ПК или универсальная ОС. В этот период появилось деление операционных систем на серверные и клиентские.
Сохраняются также и универсальные ОС.
В результате конкурентной борьбы производителей программного обеспечения, а также устаревания некоторых архитектур компьютеров многие операционные системы прекратили своё существование или используются в настоящее время очень редко. Сохраняется несколько ОС, которые продолжают бороться за место
персональные
компьютеры
Сервер
8
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
на компьютерах. Это Windows производства Microsoft, MacOS производства Apple, варианты UNIX разных производителей, Linux,
различные специализированные системы (IOS, QNX и другие).
Список некоторых операционных систем
Название
Android2
iOS
IOS
Linux
Производитель
MacOS
MS-DOS
NetWare
OS/2
OS/360
PalmOS
Plan 9
QNX
Symbian
UNIX
VMS
Windows 6
Windows NT
Apple
Microsoft
Novell
IBM
IBM
Palm Inc.
Bell Labs
Quantum SS
4
консорциум
Bell Labs5
Digital
Microsoft
Microsoft
Таблица 1
Платформа
Google
Apple
Cisco Systems
Linus Torvalds3
мобильные устройства
мобильные устройства
маршрутизаторы, коммутаторы
ПК, серверы, мобильные
устройства,
маршрутизаторы и др.
ПК
ПК
серверы
ПК, серверы
мейнфреймы
КПК
ПК, серверы
промышленные компьютеры
мобильные устройства
ПК, серверы
серверы
ПК
ПК, серверы
Год
2008
2007
1986
1991
1984
1981
1983
1987
1965
1996
1986
1984
1998
1969
1978
1985
1993
В таблице 1 показаны некоторые наиболее значимые операционные системы, год их появления, производитель, аппаратная платформа, на которой они работают (или работали), год выпуска первой версии.
Контрольные вопросы
1) что явилось предпосылкой создания операционных систем?
2) какую основную задачу решают ОС пакетной обработки?
3) что характерно для ОС персональных компьютеров?
Android основан на ядре Linux.
Разработка и поддержание ядра Linux ведётся в настоящее время большим сообществом разработчиков. Операционные системы на базе ядра Linux
выпускаются
различными производителями.
4 Symbian разрабатывают Psion, Nokia, Ericsson, Motorola, Sony Ericsson,
Siemens,
Panasonic, Fujitsu, Samsung, Sony, Sharp и Sanyo.
5 Варианты UNIX выпускались различными производителями: AT&T, Sun,
IBM,
Digital, Microsoft, SCO и др.
6 Потомки Windows NT — Windows 2000, XP, Vista, 7, 8.
2
3
9
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3. Обзор архитектуры ОС
Несмотря на разнообразие существующих операционных систем, в них можно выделить общую структуру организации.
В структуре ОС можно выделить несколько частей.
Прежде всего это ядро (kernel), та программа, которая всегда
находится в памяти при нормальной работе ОС. Как правило, ядро
выполняет функции распределения ресурсов компьютера (процессора, памяти) между работающими программами, осуществляет
ввод-вывод, реализует работу с файловыми системами. Схема взаимодействия ядра с ресурсами компьютера и работающими программами показана на рис. 2.
Applications
Kernel
CPU
Memory
Devices
Рис. 2. Схема взаимодействия ядра ОС
начальным загрузчиком
Ядро ОС загружается в память
(boot
loader). Начальный загрузчик представляет собой достаточно простую программу, которая способна работать без операционной системы в среде, которую создаёт встроенное ПО (микропрограмма,
firmware, BIOS). На некоторых компьютерах начальный загрузчик
интегрирован во встроенное ПО.
Ядро ОС можно разделить на подсистемы управления процессами, памятью, вводом-выводом, файловыми системами, сетью и др. Эти подсистемы взаимодействуют с помощью обмена
сообщениями (архитектура микроядра) или путём вызова подпрограмм (монолитное ядро).
Кроме ядра, имеются также
. Эти про-
системные программы
10
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
граммы работают в обычном режиме и отличаются от прикладных
только функциями, которые они выполняют. Системные программы можно разделить на те, что настраивают компьютер на нормальную работу или управляют процессами, подсистемами, внешними устройствами (они завершаются, выполнив необходимые действия), и те, что участвуют в создании среды выполнения других программ (в системе UNIX их называют демонами (daemon),
в Windows — сервисами (service)).
Программы и ядро взаимодействуют посредством
(system call) и
(exception, trap), при которых управление передаётся ядру операционной системы. Системный вызов подобен обычному вызову подпрограммы и отличается
лишь увеличением привилегий, так как ядро, как правило, работает в привилегированном режиме процессора. Результат системного
вызова передаётся в программу как результат выполнения обычной подпрограммы (процедуры). Исключения вызываются прозрачно для программы, например когда она обращается к участку
памяти, содержимое которого откачано на диск и доступ к которому временно закрыт. Исключения вызываются также при критических ошибках, таких как деление на ноль.
Для реализации базового интерфейса с пользователем в ОС может применяться и ряд прикладных программ. В некоторых ОС
прикладных программ достаточно много и они выходят за рамки
базового интерфейса. В этом случае они формально не являются
частью операционной системы, а распространяются в комплекте
с ней, в одном «дистрибутиве».
вызовов
исключений
системных
Контрольные вопросы
1) какие основные части можно выделить в ОС?
2) какие функции выполняет ядро ОС?
3) какие есть различия между прикладными и системными программами?
4. Классификация ОС
По различиям в архитектуре и другим признакам ОС можно
классифицировать и выделить ряд категорий.
По степени универсальности
11
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Классификация по степени универсальности
Универсальные
Серверные
Клиентские
Linux
OS/2
Plan 9
UNIX
Windows NT
NetWare
OS/360
VMS
MacOS
MS-DOS
Windows
Таблица 2
Специализированные
Android
iOS
IOS
PalmOS
QNX
Symbian
Универсальные ОС. Операционные системы, стремящие-
ся работать оптимально для всех типов задач.
Серверные ОС. Эти ОС предназначены для работы на вы-
деленных серверах, оптимизированы для работы файлового сервера, СУБД и других подобных приложений.
Клиентские ОС. Предназначены для работы на клиент-
ских компьютерах. Оптимизированы для быстрого отклика на действия пользователя и отображения информации.
Предназначены для специфических задач или для работы на специализированных компьютерах.
Специализированные.
По количеству пользователей
Многопользовательские. Позволяют нескольким пользо-
вателям одновременно использовать компьютер. Защищают процессы и файлы каждого пользователя от нежелательного доступа других пользователей.
Однопользовательские. Не имеют возможности одновре-
менной работы нескольких пользователей.
По алгоритмам планировщика задач. См. раздел 5.
Поддерживают несколько процессов (нитей) в состоянии готовности или исполнения
(Android, iOS, IOS, Linux, MacOS, NetWare, OS/2, OS/360,
Plan 9, QNX, Symbian, UNIX, VMS, Windows).
Многозадачные ОС.
12
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Таблица 3
Многопользовательские
Однопользовательские
Linux
iOS
NetWare
MacOS
OS/360
MS-DOS
Plan 9
OS/2
QNX
PalmOS
UNIX
Symbian
VMS
Windows
Классификация по количеству пользователей
IOS
Android
Windows NT
Однозадачные ОС. Только один процесс может находить-
ся в состоянии исполнения, остальные — в состоянии
ожидания (ждут завершения другого процесса). Сюда
относятся MS-DOS, PalmOS.
С поддержкой нитей. Поддерживают несколько нитей
в рамках одного процесса.
Без поддержки нитей. Поддерживают только одну нить
в каждом процессе. В этих операционных системах термин «нить» обычно не используется.
С поддержкой нескольких ЦП. Используют несколько
центральных процессоров (ЦП). Несколько нитей могут
находиться в состоянии исполнения (Android, iOS начиная с версии 3.0, Linux начиная с версии 2.0, MacOS
X, NetWare начиная с версии 4.1, OS/360, Plan 9, QNX,
UNIX, VMS, Windows NT).
Без поддержки нескольких ЦП. Имеют возможность
использовать только один ЦП (даже если компьютер
имеет несколько). Только одна нить может находиться в состоянии исполнения (IOS, Linux до версии 2.0,
MacOS старых версий, MS-DOS, NetWare до 4.1, OS/2,
PalmOS, Symbian, Windows).
Симметричные многопроцессорные ОС. Все процессоры используются одинаково, ядро ОС может исполняться на всех процессорах. Большинство ОС, поддерживающих несколько процессоров, являются симметричными
(SMP — Symmetric Multiprocessing).
Асимметричные многопроцессорные ОС. Процессоры
используются по-разному. Например, ядро исполняется
13
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
только на одном процессоре, а остальные используются для исполнения прикладных задач. Сюда относятся
VMS, OS/360.
Системы пакетной обработки. Предназначены для наи-
более эффективного неинтерактивного исполнения пакетов заданий (OS/360, ОС ЕС).
Системы разделения времени. Для каждого пользова-
теля или процесса создаётся иллюзия работы на отдельном независимом компьютере (большинство многозадачных ОС).
Гарантируют, что время
отклика на внешние события не будет превышать какуюлибо величину. Применяются для управления устройствами, роботами (QNX).
Системы реального времени.
С универсальным планировщиком. Одновременно в си-
стеме могут быть запущены процессы, работающие в пакетном режиме, в режиме разделения времени и в режиме реального времени. Режим работы процесса задаётся пользователем или программистом административно
(Linux).
По алгоритмам управления памятью. См. разделы 6, 11.
Используют виртуальную память для организации адресного пространства процессов.
С поддержкой виртуальной памяти.
Виртуальная память — механизм
преобразования адресов, с которыми работает процесс (виртуальных адресов), в адреса физической памяти. Это преобразование обычно осуществляется центральным процессором
автоматически по таблицам, за исключением случаев,
когда доступ к каким-либо адресам закрыт. В этих случаях происходит исключение, управление передаётся ядру ОС, которое решает, что делать дальше.
Без поддержки виртуальной памяти. Выделяют место
для процесса в общем пространстве памяти без трансляции адресов. Адреса, с которыми работает процесс,
совпадают с физическими адресами памяти.
14
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Осуществляют постраничный обмен с диском для увеличения оперативной памяти (ОП) за счёт внешней памяти.
— небольшая область памяти фиксированного размера (обычно
4096 байт).
Со страничной подкачкой.
Страница
С сегментной подкачкой. Обмен с диском осуществляет-
ся целыми сегментами. Сегмент может иметь произвольный размер.
Без поддержки подкачки. Не имеют возможности увели-
чивать ОП за счёт внешней памяти.
По возможности работы в сети
Способны передавать и принимать
данные от других компьютеров через сеть, использовать ресурсы других компьютеров, поддерживают различные сетевые протоколы (большинство неспециализированных ОС, выпущенных после 1990 года).
С поддержкой сети.
Без поддержки сети. Не имеют такой возможности.
По архитектуре ядра
Архитектура монолитного ядра. Части ядра взаимодей-
ствуют посредством вызовов процедур и через глобальные переменные.
Архитектура модульного ядра. Ядро может расширять-
ся за счёт динамически загружаемых модулей. Взаимодействие между частями ядра и загружаемыми модулями такое же, как в монолитном ядре. В данной архитектуре достигается экономия памяти за счёт загрузки
только необходимых модулей.
Части ядра взаимодействуют с помощью передачи сообщений. В само
при этом входит механизм передачи сообщений, распределения памяти и процессорного времени. Остальные
функции ядра могут выполняться специальными привилегированными процессами —
. Сбой в работе
одного сервера не обязательно приводит к краху всей
системы, что повышает надёжность. Серверы могут запускаться и завершаться при необходимости, что экономит память и облегчает разработку новых серверов.
Архитектура микроядра.
микроядро
серверами
15
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
В частности, можно относительно легко трассировать и
отлаживать отдельные серверы.
Гибридная архитектура. Микроядерная архитектура об-
ладает надёжностью, гибкостью и модульностью, но она
уступает по производительности архитектуре монолитного ядра, поскольку передача сообщения — более трудоёмкая операция по сравнению с вызовом процедуры.
В гибридной архитектуре некоторые функции, которые
не слишком критичны для производительности системы, вынесены из микроядра в виде серверов, остальные
включены в микроядро. При этом взаимодействие между подсистемами, включёнными в микроядро, происходит с помощью вызова процедур (с низкими затратами),
а между серверами — с помощью передачи сообщений.
Примечание: данный список категорий не является полным.
5. Подсистема управления процессами
В функции ОС входит создание, поддержка и удаление процессов — экземпляров программ в состоянии исполнения. Процесс
создаётся при запуске программы и удаляется при завершении,
при этом освобождаются все занятые процессом ресурсы (память,
открытые файлы, блокировки и так далее). Во время работы процесса ОС выполняет его запросы на выделение памяти, доступа к файлам, внешним устройствам и другие подобные операции. Каждой программе в общем случае может соответствовать
несколько процессов.
Каждый процесс включает в себя одну или несколько нитей
(threads) — объектов ОС, между которыми распределяется процессорное время. Если ОС не поддерживает многонитевость (multithreading), то каждому процессу соответствует ровно одна нить.
Понятие нити при этом не используется, и говорят, что процессорное время распределяется между процессами.
Каждая нить находится в одном из трёх состояний:
(blocked),
(ready) и
(running). Нить в состоянии ожидания не может продолжить свою работу, так как она
ожидает какого-либо внешнего по отношению к ней события, например освобождения памяти, завершения операции ввода-вывода
или снятия блокировки. В состоянии готовности нить готова к исполнению, но ОС ещё не передала ей управление. В состоянии
готовность
исполнение
16
ожидание
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
исполнения нить владеет центральным процессором (ЦП) и исполняется. Примерная схема переключения состояний показана
на рис. 3.
Finish
Running
Start
Blocked
Ready
Рис. 3. Состояния нити
В один момент времени может существовать произвольное количество нитей в состояниях ожидания и готовности, но максимальное количество исполняемых нитей ограничено количеством
ЦП или «ядер» ЦП (в современных процессорах может существовать несколько ядер, по сути это несколько процессоров на одной
микросхеме).
В однозадачных ОС многонитевость не поддерживается и существует только один процесс, находящийся в состоянии исполнения
или готовности, все остальные процессы могут только ожидать завершения этого процесса.
В многозадачных ОС процессорное время распределяется между нитями подсистемой ядра ОС, которая называется планировщиком (scheduler). Планировщик решает, какую следующую нить перевести из состояния готовности в состояние исполнения. При этом
учитываются статистические данные и административно назначенные параметры, в частности
. В некоторых ОС планировщик может также решать, когда запускать на исполнение
новое задание из очереди или временно выгружать исполняемое
задание из памяти.
Для перевода нити из состояния готовности в состояние испол-
приоритет
17
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
переключение контекста
контекст
нения планировщик выполняет
(context
switch). Для этого он сохраняет
(в частности, состояние регистров процессора) текущей нити в состоянии исполнения.
После этого загружается контекст другой нити и управление передаётся на следующую команду процессора в соответствии с этим
контекстом.
Существуют различные алгоритмы работы планировщика, которые можно классифицировать по нескольким признакам.
С вытесняющей многозадачностью. Планировщик может пе-
ревести процесс (нить) из состояния исполнения в состояние
готовности в любой момент. Прикладному программисту не
приходится заботиться о переключении состояний. Большинство многозадачных ОС относятся к этой категории.
С невытесняющей (кооперативной) многозадачностью.
Планировщик может перевести нить из состояния исполнения в состояние готовности только по запросу этой нити.
Этот алгоритм накладывает дополнительную ответственность на разработчиков программ, поскольку зацикливание или неправильная работа одной прикладной программы
может привести к остановке работы всей системы. Однако при правильном планировании переключения состояний
достигается бо́льшая эффективность работы по сравнению
с вытесняющей многозадачностью. Пример этого — специализированная ОС NetWare фирмы Novell, которая выполняет функции файлового сервера. К этой категории также
относятся Windows и MacOS старых версий.
С квантованием времени. Планировщик переводит нить из со-
стояния исполнения в состояние готовности, если закончился
отведённый ей квант времени и есть другие нити в состоянии готовности. Этот алгоритм используется для создания
иллюзии работы с отдельным и независимым от других пользователей компьютером.
С абсолютными приоритетами. Планировщик переводит нить
из состояния исполнения в состояние готовности, как только
в системе появляется нить в состоянии готовности с более
высоким приоритетом по сравнению с нитью в состоянии исполнения. Этот алгоритм применяется в системах реального
времени и обеспечивает низкое время отклика на события.
18
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Например, нить с высоким приоритетом находилась в состоянии ожидания внешнего события. При наступлении этого
события нить перешла в состояние готовности, и, при отсутствии других готовых к исполнению нитей большего приоритета, планировщик сразу же переводит эту нить в состояние
исполнения, позволяя ей отреагировать на событие с маленькой задержкой.
Планировщик переводит
нить из состояния исполнения в состояние готовности только
по запросу этой нити или по истечении кванта времени. В состояние исполнения при этом переводится нить с наивысшим
приоритетом.
С относительными приоритетами.
В ОС с вытесняющей многозадачностью может возникать ряд
проблем, которые операционная система или программист обязаны
предупреждать:
Голодание (starvation). Большая задержка между переходом
нити в состояние готовности и переходом в состояние исполнения. Может быть вызвана слишком большим количеством
нитей в состоянии готовности или наличием нитей с бо́льшим
приоритетом.
Для предотвращения голодания планировщик переводит
в состояние исполнения нить даже с низким приоритетом,
если эта нить находится в состоянии готовности слишком
долго.
Эффект гонок (race condition). При работе двух и более ни-
тей с каким-либо общим ресурсом (памятью, файлами, внешними устройствами) может возникнуть недетерминированный результат, зависящий от времени переключения нитей
и других случайных факторов.
Для предотвращения эффекта гонок необходимо использовать синхронизацию процессов (см. раздел 10).
Инверсия приоритета. Возникает в случае, когда низкоприори-
тетная нить не может освободить блокировку, так как планировщик не переводит её в состояние исполнения из-за наличия более высокоприоритетной нити в состоянии исполнения,
и по этой причине другая высокоприоритетная нить не может
получить указанную блокировку. В результате нить с высоким приоритетом зависит от нити с низким приоритетом.
19
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Для решения данной проблемы планировщик может временно повышать приоритет нитей, удерживающих блокировки.
Тупик возникает при невозможности продолжения одновременного исполнения нескольких нитей или
процессов из-за взаимного ожидания или из-за нехватки ресурсов, например оперативной памяти.
Тупик (deadlock).
Операционная система должна распознавать тупики и выходить из них, например с помощью аварийного завершения
одного из процессов.
Контрольные вопросы
1) в чём различие между процессом и нитью?
2) чем ограничено максимальное количество нитей в состоянии
исполнения?
3) какие есть проблемы в невытесняющей многозадачности?
6. Подсистема управления памятью
Кроме процессорного времени, оперативная память также является важным ресурсом компьютера.
Оперативная память (ОП) — важный и ограниченный ресурс
каждого компьютера. В ОП хранится код ядра ОС, его данные,
код и данные процессов, дисковый кэш.
Существуют различные алгоритмы распределения ОП между
процессами.
С фиксированными разделами. Память разбивается на раз-
делы фиксированного размера при загрузке ОС, при этом
каждый процесс занимает ровно один раздел. Недостатки
этого метода: количество процессов и максимальный размер
процесса ограничены. Достоинства: нет фрагментации памяти, алгоритм распределения памяти максимально прост.
Новый раздел выделяется из
участка свободной памяти при создании нового процесса,
при этом каждый процесс занимает ровно один раздел. Разделы не перемещаются и не меняют размер. Количество процессов и максимальный размер процесса ограничены только
С переменными разделами.
20
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
размером оперативной памяти. Недостатки: имеется фрагментация памяти, размер раздела нельзя изменить после его
создания.
Фрагментация памяти
— образование в процессе работы
множества мелких разрозненных областей свободной памяти,
которые невозможно использовать в качестве одного раздела.
Данный алгоритм применяется, в частности, в системе MSDOS и аналогах, однако там проблема фрагментации не возникает, поскольку эти системы однозадачные и процессы создаются и завершаются по принципу LIFO7 (за исключением
специальных программ типа TSR8 , при использовании которых возможна фрагментация памяти).
Аналогичен алгоритму с переменными разделами, только ОС может перемещать раздел в оперативной памяти и изменять его размер. Таким
образом решается проблема фрагментации памяти за счёт
некоторых накладных расходов на перемещение и перенастройку адресов процесса. ОС приходится также хранить
в памяти таблицу настройки адресов для каждого процесса
или требовать от всех программ использовать позиционнонезависимый код9 . Регистры процессора должны быть специализированы, некоторые регистры должны использоваться
только для адресации, остальные — только для данных, чтобы ОС могла изменить состояние адресных регистров при изменении положения раздела в памяти.
С перемещаемыми разделами.
Сегментное распределение. Этот и последующие алгоритмы
полагаются на поддержку центрального процессора. Сегментное распределение отличается от алгоритма с перемещаемыми разделами тем, что базовый адрес сегмента хранится
в особом регистре процессора и адресация выполняется относительно этого базового адреса. За счёт такой специфической
адресации не требуется перенастраивать абсолютные адреса
процесса при перемещении раздела и хранить соответствующую таблицу настройки адресов, что уменьшает накладные
расходы памяти и процессорного времени. Схема вычисления физического адреса по паре (номер сегмента, смещение)
Last In First Out — принцип стека.
Terminate and Stay Resident — резидентные программы, подобие многозадачности
в DOS.
9 PIC — Position Independent Code.
7
8
21
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
показана на рис. 4. Таблица сегментов может хранить, кроме адреса начала сегмента, его размер и дополнительные
атрибуты, такие как разрешение на запись или исполнение
команд. При записи в сегмент, у которого нет разрешения
на запись, происходит исключение, и управление передаётся
ядру ОС, которое решает, что делать дальше. Процесс, выполнивший недопустимую операцию, может быть аварийно
завершён.
Memory
+
A:
S
D
Segment table
Base
Рис. 4. Сегментная адресация
Страничное распределение. Вся память делится на страницы
фиксированного размера, который является степенью двойки (типичный размер — 4096 байт10 ). При обращении к памяти выполняется преобразование адреса по таблицам трансляции страниц. Адрес, с которым работает процесс, называется
при этом виртуальным. Схема вычисления физического адреса по паре (номер страницы, смещение) показана на рис. 5.
10
Процессор Alpha, например, имеет страницы размера 8192 байта.
22
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Memory
P’
A:
P
D
D
Page table
Page address
Рис. 5. Страничная адресация
Адрес страницы не суммируется со смещением, а совмещается, так как они занимают разные наборы битов физического
адреса.
Полностью решена проблема фрагментации: за счёт таблицы
трансляции страниц разрозненные страницы физической памяти могут составлять непрерывный участок в пространстве
виртуальных адресов.
Таблица трансляции страниц может хранить, кроме адреса
страницы, дополнительные атрибуты, такие как разрешение
на запись, на исполнение команд, признак отсутствия страницы в физической памяти. При записи в страницу, у которой нет разрешения на запись, или при обращении к странице с признаком отсутствия происходит исключение, управление передаётся ядру ОС, которое решает, что делать дальше.
В зависимости от страницы она может быть загружена из
файла подкачки (см. раздел 11), сдублирована при режиме
23
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
COW (см. раздел 9) или процесс может быть аварийно завершён.
Таблица трансляции страниц может быть реализована в виде двух уровней трансляции. При этом виртуальный адрес
делится на три части: номер ячейки в первом уровне, номер ячейки во втором уровне и смещение внутри страницы. Таблица первого уровня содержит адрес таблицы второго
уровня. С помощью двухуровневой трансляции достигается
экономия памяти при создании «разрежённых» виртуальных
адресных пространств, в которых большое количество виртуальных страниц не имеет соответствующих физических страниц памяти.
При создании нового процесса ОС создаёт и отдельную таблицу трансляции страниц. За счёт этого достигается независимость виртуальных адресных пространств разных процессов. Различные страницы виртуального адресного пространства могут ссылаться на одну и ту же физическую страницу
памяти. С помощью этого механизма реализуется разделяемая память и унифицированный дисковый кэш (см. разделы 7, 10).
Комбинация двух
предыдущих алгоритмов; в сегментном регистре процессора
хранится базовый виртуальный адрес сегмента; при адресации к виртуальному адресу сначала прибавляется базовый
адрес, затем происходит преобразование адреса по таблице
трансляции страниц. При использовании этого алгоритма
возможно использование одной таблицы трансляции страниц
несколькими процессами, что приводит к снижению накладных расходов на хранение таблиц трансляции.
Сегментно-страничное распределение.
В современных универсальных ОС используется страничное
или сегментно-страничное распределение памяти.
Контрольные вопросы
1) к какой проблеме приводит фрагментация памяти?
2) как решается задача изоляции процессов в страничном распределении памяти?
3) что происходит при обращении по записи к защищённой
от записи странице?
24
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
7. Кэширование данных
Оперативная память может использоваться для ускорения работы с внешними запоминающими устройствами с помощью кэширования.
(disk cache) — часть ОП, в которой временно хранится содержимое некоторых участков внешней памяти (например, жёсткого диска) для ускорения доступа к ним. Как правило,
внешняя память многократно (в сотни или тысячи раз) превосходит ОП по объёму, поэтому ОС загружает в кэш и выгружает
из кэша различные участки внешней памяти в процессе работы.
Эффективность кэширования определяется коэффициентом попадания в кэш (hit rate), который вычисляют как отношение коли11
чества
к общему числу запросов к внешней памяти:
Дисковый кэш
попаданий в кэш
hit rate =
hit count
access count
Эффективность кэширования зависит от характера обращений
к внешней памяти (например, случайный или последовательный),
размера кэша и алгоритма кэширования, который, в частности,
определяет, какие блоки выгружаются из кэша в первую очередь.
Как правило, чем больше размер кэша, тем выше коэффициент
попаданий в кэш.
Имеются различные алгоритмы организации дискового кэша.
Кэш фиксированного размера. Для кэширования данных вы-
деляется область ОП, размер которой не меняется в процессе
работы. Например, такой алгоритм использовался в MS-DOS
(smartdrv). Это наиболее простой алгоритм, так как не требуется постоянное взаимодействие подсистемы кэширования
с подсистемой распределения памяти.
Кэш динамического размера. Размер кэша может изменяться
в процессе работы. Большинство современных ОС используют этот вариант, так как это позволяет использовать всю
свободную оперативную память для кэширования.
Выгрузка блоков с наибольшим временем отсутствия обращений. При необходимости освободить место в кэше
11 Попадание
шлись в кэше.
в кэш — запрос
к внешней памяти, данные для которого на25
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
для новых данных выгружается блок, к которому дольше всего не было обращений. ОС должна при этом поддерживать
список блоков, упорядоченный по времени обращения.
Выгрузка блоков
с
наименьшей
частотой
обращений.
Для реализации этого метода ОС должна вычислять и хранить частоту обращений для каждого блока в кэше и поддерживать список блоков, упорядоченный по частоте обращений.
Выгрузка случайных блоков. Наиболее простой метод освобо-
дить место в кэше, однако не самый эффективный. Вариант
этого метода — выгрузка случайного блока из тех, к которым
в последнее время (например, 1 секунду) не было обращений.
В этом случае блоки отмечаются как кандидаты на выгрузку, при обращении к этим блокам пометка снимается. Через
некоторое время блоки, сохранившие пометку, выгружаются
из кэша.
Прямая запись (write through). Этот способ кэширования за-
писи предполагает одновременную запись данных во внешнюю память и помещение их в кэш. В случае краха системы
(из-за отключения электричества и по другим причинам) минимизируются потери данных.
Отложенная запись (write back). В этом случае данные, пред-
назначенные для записи, помещаются в кэш со специальным
флажком
, который означает, что данные ещё не были
записаны во внешнюю память. Запись осуществляется через
некоторое время или при переполнении кэша. При крахе системы теряются незаписанные данные из кэша, но производительность по записи существенно выше по сравнению с прямой записью.
dirty
Существуют аппаратные решения с энергонезависимой памятью12 , которые сочетают высокую производительность
и надёжность. Незаписанные на диск данные размещаются в энергонезависимой памяти и не пропадают при крахе
операционной системы или при сбое электропитания.
Отдельный от адресного пространства процессов кэш.
Пространство кэша не пересекается с адресным пространством процессов.
12
Например, SUN Sparc Storage Array или Oracle StorageTek.
26
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Унифицированный с адресным пространством процессов
кэш. Часть данных, находящихся в кэше, может быть непо-
средственно доступна некоторым процессам. Особенно эффективен данный метод при использовании страничного распределения памяти. В этом случае страницы кэша могут
отображаться в адресное пространство процессов. Например,
код программы или библиотеки может храниться в кэше,
при этом быть отображён в адресное пространство сразу
нескольких процессов и исполняться. Этим достигается экономия памяти и исключается лишнее копирование и дублирование данных. Размер кэша также становится больше, поскольку физическая память, которая используется для хранения кода программ и библиотек, является частью кэша.
Контрольные вопросы
1) как зависит производительность операций ввода-вывода от кэширования?
2) какую опасность для данных представляет режим отложенной записи?
3) как унифицированный дисковый кэш увеличивает коэффициент попадания в кэш?
8. Файловые системы
Данные во внешней памяти могут быть организованы с помощью файловой системы.
Понятие
(ФС) может обозначать:
файловой системы
ˆ способ организации данных в виде набора файлов и каталогов;
ˆ совокупность файлов и каталогов, записанных на носителе;
ˆ формат записи файлов и каталогов на носителе;
ˆ подсистему ОС, которая работает с этим форматом данных
(эту подсистему также называют драйвером ФС).
Файл
— именованная совокупность данных, представляемая
в виде упорядоченного множества байтов или записей. Кроме
имени, файлу могут соответствовать другие
(данные
о данных).
метаданные
27
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Каталог
— специальный файл, в котором хранятся ссылки
на файлы. В каталоге могут храниться также имена файлов и
другие метаданные. Всегда существует
, который не имеет имени13 . Каталоги могут образовывать древовидную
структуру, циклические графы ссылок не допускаются. Последовательность имён вложенных друг в друга каталогов, заканчивающаяся именем файла, называется
. Древовидная
система каталогов позволяет тематически группировать файлы и
более эффективно их искать.
В ОС имеется драйвер ФС, который считывает с носителя, интерпретирует и записывает на носитель данные в формате ФС.
Существуют системные программы, которые размечают носитель
(записывают на него пустую ФС, без файлов и с одним корневым каталогом), проверяют корректность структуры данных ФС
на носителе, дефрагментируют данные на носителе, изменяют размер ФС в связи с изменением размера носителя (или раздела носителя), изменяют другие параметры ФС (например,
), отображают ФС какого-либо носителя в каталог другой ФС
(mount, join) и выполняют другие операции.
ОС может поддерживать несколько ФС, однако какая-то одна (иногда несколько) файловая система считается «родной» и
используется по умолчанию. Остальные файловые системы поддерживаются для совместимости с носителями, перенесёнными из
других ОС.
ФС могут быть журналируемыми, что обеспечивает повышенную отказоустойчивость.
— особая область на носителе, в
которую заносится информация об изменениях файловой системы
перед тем, как они действительно записываются на носитель данных. Управляющий блок журнала хранит два указателя — начало
и конец журнала. За счёт маленького размера управляющего блока обеспечивается атомарность изменения этих указателей. В случае сбоя изменения, которые были записаны полностью в журнал,
переносятся в саму ФС при следующей загрузке ОС.
Процессы обращаются к операционной системе для доступа
к файлам. Как правило, для чтения или записи данных файл
необходимо сначала
. При открытии файла ОС проверяет права доступа к файлу и возвращает процессу
— ссылку на информацию об открытом файле, в которую
корневой каталог
путь к файлу
метку то-
ма
Журнал
открыть
файловый де-
скриптор
13 Однако имя может быть у самой файловой системы — так называемая
«метка тома».
28
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
входит текущая позиция чтения-записи, режим доступа, местоположение файла в ФС и прочие сведения.
Список некоторых файловых систем
Название
ext2
ext3
ext4
fat
fat32
hpfs
ntfs
ufs
xfs
zfs
ОС
Linux
Linux
Linux
MS-DOS
Windows
OS/2
Windows NT
UNIX
IRIX
Solaris
Таблица 4
Журнал
нет
есть
есть
нет
нет
нет
есть
нет
есть
есть
Год
1993
2001
2008
1980
1996
1989
1993
1982
1994
2005
В общем случае один и тот же файл может быть одновременно
открыт несколькими процессами. Один процесс может одновременно открыть несколько файлов или один файл несколько раз.
Файловый дескриптор используется при операциях чтения и
записи. Операция чтения копирует данные из файла в адресное
пространство процесса, операция записи, наоборот, копирует данные из адресного пространства процесса в файл.
Контрольные вопросы
1) какая структура данных файловой системы обеспечивает отказоустойчивость?
2) почему файл нужно открывать перед чтением или записью?
3) каковы достоинства древовидной системы каталогов?
9. Отображение файлов в память
Существует метод отображения файла в адресное пространство процесса, при котором устраняется избыточное копирование
данных.
Во многих современных ОС имеется возможность создать отображение файла или его части в область адресного пространства
процесса. При этом программа имеет возможность считывать и
29
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
даже записывать данные файла так, как если бы его содержимое
хранилось не во внешней памяти, а в оперативной.
Этот метод доступа к файлам особенно удобен при программировании произвольного доступа к данным файла.
Если в ОС реализован унифицированный дисковый кэш, то
отображение файлов в память становится не только удобным, но
и эффективным инструментом, повышающим общую производительность системы. Это достигается за счёт отображения страниц памяти дискового кэша в адресное пространство процесса,
при этом экономится физическая оперативная память и исключается лишнее копирование и дубликация данных.
Функция копирования при записи (copy on write — COW) позволяет процессам изменять данные отображённого в память файла
без записи их обратно на диск. При изменении страницы программой ОС создаёт копию этой страницы, которая уже не связана
с файлом на диске. Эта функция ОС позволяет при создании процесса загружать программу и библиотеки с диска в режиме отображения файлов в память с опцией COW. В процессе работы изменяемые одним процессом страницы дублируются, при этом содержимое дискового кэша и соответствующих страниц других процессов
не меняется.
При отображении в память исполняемого файла и динамически
загружаемых библиотек ускоряется запуск программ. Для создания нового процесса уже не нужно загружать в память содержимое исполняемого файла и библиотек целиком, программа может
начать работать после загрузки первой страницы. При этом в оперативную память загружаются только те блоки, которые действительно используются.
Отображение файлов может использоваться для параллельной
работы с файлом нескольких процессов. Если несколько процессов одновременно создали отображение одного файла и модифицируют его, может понадобиться синхронизация процессов (см. раздел 10).
9.1. Отображение файлов в память в UNIX и Linux
Для отображения файла в виртуальное адресное пространство
процесса в UNIX и Linux применяется функция mmap. Эта функция
принимает следующие аргументы:
ˆ addr — желаемый виртуальный адрес отображения, можно
передать значение NULL для автоматического выбора;
30
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
ˆ length — длина участка файла для отображения;
ˆ prot — режимы доступа (чтение, запись, исполнение кода);
ˆ flags — режим отображения, в том числе режим COW;
ˆ fd — файловый дескриптор открытого файла, который будет
отображён;
ˆ offset — смещение отображаемого участка относительно начала файла.
Функция mmap возвращает адрес созданного отображения файла или NULL, если отображение создать не удалось. После создания
отображения файловый дескриптор может быть закрыт, отображение при этом сохраняется.
Отменить отображение файла в память можно функцией
munmap. Все отображения в адресное пространство процесса автоматически отменяются при завершении процесса.
Страницы памяти, отображённые в адресное пространство процесса, входят также в состав дискового кэша, что гарантирует соответствие отображённых данных содержимому файла даже при использовании функций чтения и записи файла read и write.
9.2. Отображение файлов в память в Windows NT
Для создания отображения файла в память в Windows NT используются функции CreateFileMapping и MapViewOfFile.
Функция CreateFileMapping имеет следующие аргументы:
ˆ hFile — задаёт открытый файл;
ˆ flProtect — режим доступа (чтение, запись, исполнение команд, COW);
ˆ dwMaximumSizeHigh и dwMaximumSizeLow — максимальный размер области отображения.
Функция CreateFileMapping возвращает ссылку на объект,
который может быть затем передан в функцию MapViewOfFile
для создания отображения файла в адресное пространство процесса.
Функция MapViewOfFile принимает следующие аргументы:
ˆ hFileMappingObject — объект отображения, полученный с помощью функции CreateFileMapping;
31
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
ˆ dwDesiredAccess — режим доступа (чтение, запись, исполнение команд, COW);
ˆ dwFileOffsetHigh и dwFileOffsetLow — смещение отображаемого участка относительно начала файла;
ˆ dwNumberOfBytesToMap — длина участка файла.
Функция MapViewOfFile возвращает адрес созданного отображения файла или NULL, если отображение создать не удалось.
Для отмены отображения необходимо передать виртуальный
адрес этого отображения в функцию UnmapViewOfFile.
Объект отображения удаляется функцией CloseHandle.
ОС Windows NT не гарантирует соответствия отображённых
данных и содержимого файла при чтении или записи этого файла
с помощью системных функций ReadFile и WriteFile.
Контрольные вопросы
1) для какого режима доступа к данным наиболее удобно использовать режим отображения файла в память?
2) как отображение файлов может сэкономить память?
3) как отображение файлов может ускорить запуск программ?
10. Синхронизация и взаимодействие процессов
Синхронизация процессов необходима при доступе нескольких
процессов к одному и тому же ресурсу, например: к файлу, принтеру, сегменту разделяемой (общей) памяти. Также необходимо синхронизировать нити одного процесса при обращении к глобальным
переменным. С помощью синхронизации устанавливается очерёдность работы процессов с ресурсом и предотвращается одновременный доступ по записи. ОС предоставляет следующие механизмы синхронизации процессов: семафоры, блокировка файлов, спулинг и др.
— объект операционной системы, который может находиться в двух состояниях: открытом (свободном) и закрытом
(заблокированном). ОС реализует по крайней мере две операции
с семафорами: атомарное ожидание с блокированием и освобождение. Атомарное ожидание с блокированием позволяет дождаться
Семафор
32
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
открытия семафора и заблокировать его, причём между ожиданием и блокированием никакой другой процесс не может заблокировать семафор. Семафор может быть заблокирован только одним
процессом.
позволяет исключить одновременную запись одного файла несколькими процессами и одновременное чтение файла одним процессом и запись другим процессом. Блокировки файла могут распространяться на весь файл или его часть. Они
могут быть эксклюзивными (exclusive) и разделяемыми (shared).
Эксклюзивная блокировка не может пересекаться с другими блокировками, разделяемая блокировка может пересекаться с другими разделяемыми блокировками. Эксклюзивная блокировка обычно устанавливается на файл перед изменением данных, разделяемая — перед чтением. Блокировки файлов могут использоваться,
в частности, для организации спулинга.
При
отдельный выделенный процесс (спулер, арбитр)
осуществляет контроль доступа к общему ресурсу. Другие процессы обращаются к нему, чтобы поставить какой-либо запрос к общему ресурсу в очередь или получить результат. Для этого используются механизмы взаимодействия процессов.
— передача данных от одного процесса к другому для решения общей задачи. В ОС предусмотрены
следующие механизмы взаимодействия процессов: сигналы, каналы данных (pipe), очереди сообщений, разделяемая память.
— короткое сообщение, состоящее из одного целого числа, номера сигнала. В некоторых ОС вместе с номером сигнала передаётся дополнительная информация, например номер процесса,
пославшего сигнал. При получении сигнала нормальное исполнение программы прерывается в произвольном месте и вызывается
процедура обработки этого сигнала. Некоторые сигналы являются
системными и посылаются самой ОС.
— механизм обмена данными в виде неструктурированной последовательности байтов. В некоторых ОС (UNIX,
Linux и др.) существуют именованные каналы данных (named
pipe), которые представляются в виде специального файла. Данные, записываемые в канал одним процессом, считываются другим
процессом.
— механизм обмена сообщениями. Сообщения пересылаются атомарно. Посланные сообщения ставятся в очередь одним процессом и считываются из очереди другим процессом
в том же порядке.
Блокировка файлов
спулинге
Взаимодействие процессов
Сигнал
Канал данных
Очередь сообщений
33
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Разделяемая память
— участок физической памяти, отображаемый в адресное пространство сразу нескольких процессов. Изменения этого участка одним процессом сразу могут быть считаны
другим процессом. Использование разделяемой памяти без синхронизации процессов может привести к эффекту гонок.
Эффект гонок
(race condition) — вариация поведения программы в зависимости от моментов изменения состояния нитей и других случайных факторов. Планировщик задач выбирает момент
изменения состояния нити и следующую нить для исполнения, исходя из множества факторов. Предсказать эти моменты весьма
трудно. Если две нити изменяют одну и ту же переменную без синхронизации, то заранее сказать, какое значение останется в переменной, невозможно. Особенно эффект гонок проявляется при изменении сложных структур данных: часть данных может оказаться записанной одной нитью, остальные — другой. Эффект гонок
устраняется правильным использованием синхронизации процессов и нитей или использованием специальных алгоритмов и структур данных.
При неправильном использовании синхронизации возможно
возникновение
(deadlock) — ситуации, при которой дальнейшее исполнение группы процессов невозможно. Например, процесс P1 блокирует семафор S1 , процесс P2 блокирует семафор S2 .
Затем процесс P1 пытается заблокировать семафор S2 с ожиданием освобождения, а процесс P2 пытается заблокировать семафор
S1 и тоже ждёт. Оба процесса переходят в состояние ожидания и
не могут ни получить желаемую блокировку семафоров, ни освободить уже заблокированные семафоры. Возникает цикл в гра́фе
ожидания.
тупика
Операционная система должна распознавать тупики. При обнаружении тупика ОС должна выполнить одно из действий для выхода из тупика: аварийно завершить один из процессов, участвующих в тупике, аварийно завершить все процессы, участвующие
в тупике, вернуть ошибку блокирования всем процессам.
Чтобы тупики не возникали, процессы должны блокировать семафоры в одном и том же порядке S1 , S2 , . . . Sn . Тогда процесс, заблокировавший семафор Si и ожидающий освобождения семафора
Sj (j > i), сможет дождаться, поскольку другой процесс, занявший
Sj , не будет пытаться заблокировать семафор Si и через некоторое
время освободит семафор Sj .
34
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
10.1. Блокировка файлов в UNIX и Linux
Блокировка файлов в UNIX и Linux соответствует стандарту
POSIX. По умолчанию открытые файлы не блокируются. Для блокирования или разблокирования части открытого файла используется функция fcntl с параметрами F_SETLK или F_SETLKW (блокирование с ожиданием).
Блокировка файлов имеет непринудительный характер, то есть
ОС не запрещает чтение или запись заблокированного участка
файла, но запрещает одновременное установление несовместимых
режимов блокировки на пересекающихся частях файла.
Это означает, что для корректной работы процессов с общим
файлом все процессы должны явным образом блокировать файл.
Для совместимости со старыми версиями UNIX существуют
также функции блокировки flock и lockf.
10.2. Блокировка файлов в Windows NT
Windows NT блокирует все открытые файлы по умолчанию
в эксклюзивном режиме. Для открытия файла в разделяемом режиме используются специальные флаги в аргументе dwShareMode
функции CreateFile: FILE_SHARE_READ и FILE_SHARE_WRITE.
Файл, открытый в разделяемом режиме, может быть впоследствии заблокирован целиком или частично в эксклюзивном режиме с помощью функции LockFileEx. Блокировка снимается с помощью функции UnlockFileEx или при закрытии файла.
Контрольные вопросы
1) в каком случае необходимо использовать синхронизацию процессов?
2) какая проблема может возникнуть при отсутствии синхронизации?
3) какая проблема может возникнуть при неправильной синхронизации?
11. Файл подкачки
Файл подкачки
(swap space) — особое место во внешней памяти,
которое используется для расширения оперативной памяти. Файл
подкачки может располагаться как в обычном файле файловой
системы, так и на отдельном диске или разделе диска.
35
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
При нехватке оперативной памяти ОС запускает процедуру откачки части данных из ОП в файл подкачки. Имеется два основных метода откачки — страничный и сегментный. При использовании страничного метода на диск записывается содержимое отдельных страниц, при сегментном — целых сегментов. Сегментный метод не подходит для систем разделения времени, так как выгрузка
и загрузка целого сегмента может занимать значительное время,
но этот метод может успешно применяться в системах пакетной
обработки.
Метод откачки зависит от способа распределения памяти и типа планировщика задач. В большинстве современных универсальных ОС используется страничный метод, называемый также страничным обменом.
Страницы ОП, откачанные на диск, помечаются в виртуальном адресном пространстве как отсутствующие, а соответствующая физическая память освобождается.
При обращении к отсутствующей странице происходит исключение, управление передаётся ОС, которая запускает процедуру
подкачки. При этом необходимо получить свободную страницу памяти, для чего может понадобиться откачать какую-либо другую
страницу.
При использовании динамического дискового кэша имеется возможность освободить ОП без откачки данных за счёт уменьшения
кэша. Страницы кэша, ожидающие записи, должны при этом быть
записаны.
При использовании унифицированного дискового кэша файл
подкачки кэшируется подобно обычным файлам. То есть страница
данных при откачке не сразу записывается на диск, а помещается в кэш с флажком «dirty». Это позволяет увеличить производительность страничного обмена за счёт группировки откачки
нескольких страниц в одной операции записи и за счёт возможности относительно простой отмены запланированной откачки в промежутке времени между помещением страницы в кэш и выгрузкой
её на диск.
Существуют различные стратегии и алгоритмы планирования
откачки. Некоторые ОС начинают откачку задолго до нехватки оперативной памяти, при этом откачанные страницы остаются
в кэше. За счёт этого ОС имеет возможность очень быстро освободить при необходимости ОП, уменьшив кэш. Однако это приводит
к большей нагрузке на жёсткий диск, так как данные приходится повторно записывать, если программа их меняет. Практически
36
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
все ОС стараются поддерживать некоторый минимальный объём
памяти, который можно мгновенно освободить.
11.1. Файл подкачки в
Linux
В ОС Linux файл подкачки может располагаться как на разделе жёсткого диска, так и в файле. Файлов подкачки может быть
несколько. Если файлы подкачки располагаются на разных физических дисках, то ввод-вывод распределяется между этими дисками, что увеличивает производительность страничного обмена.
Файл подкачки необходимо сначала разметить (записать в него
определённую структуру данных), что делается системной программой mkswap:
mkswap /dev/sda2
Файл подкачки необходимо подключить системной программой
swapon:
swapon /dev/sda2
Его можно также отключить системной программой swapoff:
swapoff /dev/sda2
При отключении файла подкачки выгруженные в него блоки
данных загружаются в оперативную память, при её нехватке блоки выгружаются в другой файл подкачки, а если его нет или он
переполнен — выдаётся сообщение об ошибке.
Посмотреть список подключённых файлов подкачки, их размер
и количество данных в них можно с помощью системной программы swapon с опцией -s:
swapon -s
Filename Type
Size
Used Priority
/dev/sda2 partition 3145724 487252 0
Размер и количество данных указывается в килобайтах.
11.2. Файл подкачки в Windows NT
В ОС Windows NT файл подкачки располагается в виде скрытого файла pagefile.sys в корневом каталоге. Его размер увеличивается и уменьшается операционной системой динамически. Если
в компьютере есть несколько жёстких дисков, то можно выбрать,
на каких дисках будут располагаться файлы подкачки (их может
быть несколько, но не более одного на каждом диске). Для настройки щёлкните правой кнопкой мыши Мой компьютер и выберите Свойства; перейдите на вкладку Дополнительно; в разделе Производительность нажмите кнопку Параметры; перей37
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
дите на вкладку Дополнительно. Информация о файле подкачки
находится в разделе Виртуальная память.
Контрольные вопросы
1) что делает ОС при нехватке оперативной памяти?
2) что происходит при обращении процесса к откачанной области памяти?
3) можно ли использовать откачку на диск в системах реального
времени?
12. Подсистема ввода-вывода
Подсистема ввода-вывода
— часть операционной системы, отвечающая за обмен данными между прикладными программами
и внешними устройствами. В эту подсистему входит подсистема
буферизации, драйверы устройств и системные программы, организующие спулинг.
— временное хранение небольшого объёма данных
в период между считыванием их с внешнего устройства и отправкой их в прикладную программу или, наоборот, в период между
запросом прикладной программы на запись данных во внешнее
устройство и отправкой данных в драйвер устройства.
Необходимость буферизации обусловлена несоответствием скорости обработки данных между прикладной программой и внешним устройством, наличием всплесков (bursts). Например, прикладная программа может посылать данные порциями, целыми
строками, а устройство при этом обрабатывает данные побайтово,
один байт за миллисекунду. В этом случае при отсутствии буферизации программе пришлось бы ждать, пока порция данных будет
отправлена в устройство. Буферизация же позволяет программе
работать и формировать новую порцию данных в то время, пока
предыдущая порция отправляется в устройство драйвером этого
устройства.
— модуль операционной системы, отвечающий за непосредственное взаимодействие с внешними устройствами и их программирование. Каждому внешнему устройству
(или классу устройств) соответствует свой драйвер. Драйвер, с одной стороны, взаимодействует с внешним устройством, с другой —
Буферизация
Драйвер устройства
38
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
с ядром ОС и транслирует команды ядра ОС в команды управления внешним устройством. Интерфейс между драйвером и ядром специфицирован, что позволяет ядру ОС работать одинаково
с разными драйверами устройств одного класса.
Внешние устройства и их драйверы делятся на две категории:
с последовательным доступом и с произвольным доступом. Категория устройства определяется возможностью позиционирования
и повторного считывания или перезаписи информации.
— считывание и запись данных осуществляются строго последовательно, без возможности повторного
считывания или перезаписи без специальных действий со стороны
прикладных программ. Примеры устройств с последовательным
доступом: принтер, сканер, модем, звуковой адаптер.
— считывание и запись данных возможны с произвольной позиции (иногда только с границы блока), возможно повторное считывание и перезапись данных без специальных действий со стороны прикладных программ. На устройствах
с произвольным доступом возможно размещение файловых систем. К устройствам с произвольным доступом возможен последовательный доступ, обратное неверно. Примеры устройств с произвольным доступом: накопитель на жёстком (гибком) диске, CDROM, флэш-память.
Во многих других ОС обращение программ к внешним устройствам требует использования специального API (программного интерфейса).
В подсистеме спулинга обращение к внешним устройствам осуществляется специальной системной программой — спулером. Прикладные программы используют механизмы взаимодействия процессов (или системную библиотеку, которая вызывает эти механизмы) для постановки запроса на ввод-вывод в очередь. Это может
быть задание на печать или запрос на чтение перфокарт. Спулер обрабатывает запросы по порядку, взаимодействует с внешним устройством через его драйвер. Результаты обработки запроса сохраняются и возвращаются спулером по запросу прикладных
программ.
Преимущество использования спулинга в том, что прикладная
программа не обязана находиться в памяти, пока выполняется задание на ввод-вывод. При использовании спулинга несколько программ могут одновременно отправить задание в систему спулинга
и завершиться, не ожидая завершения исполнения своего и других
заданий.
Последовательный доступ
Произвольный доступ
39
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
12.1. Ввод-вывод в UNIX и Linux
В системе UNIX (а также Linux) устройства с последовательным доступом представляются в виде специальных псевдофайлов — символьных устройств (character device), а устройства с произвольным доступом — в виде блочных устройств (block device).
Обращения к таким файлам передаются в драйвер соответствующего устройства, который обрабатывает их и возвращает в программу результат. Содержимое блочных устройств кэшируется,
на них могут располагаться файловые системы. Отображение дерева каталогов с блочного устройства в какой-либо каталог другой
ФС называется
(mount).
Примеры для ОС Linux:
монтированием
/dev/tty1
последовательное устройство, представляющее собой
клавиатуру с экраном для последовательного вводавывода. Символы, вводимые с клавиатуры, попадают
сначала в буфер, а затем в программу, читающую из
этого файла. И наоборот, символы, записываемые программой в этот файл, отображаются на экране в режиме телетайпа; распознаются управляющие символы, такие как перевод строки и возврат каретки.
/dev/ttyS0 последовательное устройство, первый последовательный порт на компьютере. К этому порту может быть
подключён, например, модем. Символы, записываемые в этот файл, попадают сначала в буфер, а затем
передаются через последовательный порт. Символы,
принимаемые из последовательного порта, попадают
в буфер и затем считываются программой.
/dev/sda
устройство с произвольным доступом, представляющее первый жёсткий диск. Как правило, это устройство используется только для чтения и записи первого
блока диска для просмотра и изменения таблицы разделов диска. Разделы представляются в виде блочных
устройств /dev/sda1. . . /dev/sdaN.
lpd
системная программа, реализующая спулинг на принтер (сокращение от line printer daemon). Задания
для печати хранятся в каталоге /var/spool/lp.
lp
системная программа для создания задания на печать.
40
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
lpstat
системная программа для просмотра состояния спулинга, очереди заданий.
mount
системная программа для «монтирования» файловой
системы — отображения файлов и каталогов, содержащихся на носителе информации, в какой-либо существующий каталог. Пример:
mount /dev/sdb1 /mnt/flash
umount
системная программа для «размонтирования» файловой системы — отключения носителя информации
от указанного каталога. Пример:
umount /mnt/flash
Контрольные вопросы
1) какие существуют два основных класса внешних устройств,
в чём их отличие с точки зрения ОС?
2) для чего используется буферизация данных?
3) какие преимущества предоставляет подсистема спулинга?
Заключение
Операционная система — достаточно сложный комплекс, состоящий из множества подсистем, системных программ и библиотек.
ОС устанавливается на большинство компьютеров, за исключением некоторых специализированных. Существует множество различных ОС, тем не менее в них можно выделить общую структуру
и принципы организации.
Знание структуры ОС, её подсистем и алгоритмов позволяет
лучше представлять, что происходит в компьютере, настраивать
и оптимизировать работу компьютера, а также создавать более
эффективные и надёжные программы.
41
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Список литературы
Операционные системы: учебник для вузов
[1] Гордеев, А. В.
/ А. В. Гордеев. — СПб.: Питер, 2007. — 416 с.
Операционные системы
[2] Деннинг, П. Дж.
/ П. Дж. Деннинг,
Р. Л. Браун // Современный компьютер. — М., 1986.
Введение в операционные системы / Д. В. Ир-
[3] Иртегов, Д. В.
тегов. — СПб.: БХВ-Петербург, 2012. — 1040 с.
UNIX — универсальная среда программирова-
[4] Керниган, Б. У.
/ Б. У. Керниган, Р. У. Пайк. — М., 1992.
ния
Искусство программирования для UNIX
[5] Рэймонд, Э. С.
/ Э. С. Рэймонд. — М.: Вильямс, 2005. — 544 с.
Сетевые операционные системы
[6] Олифер, Н. А.
/ Н. А. Олифер, В. Г. Олифер. — СПб.: Питер, 2002. — 544 с.
Операционные системы / У. Столлингс. — М.:
[7] Столлингс, У.
Вильямс, 2004. — 848 с.
Многоуровневая
организация
[8] Таненбаум, Э. С.
/ Э. С. Таненбаум. — М.: Мир, 1979. — 547 с.
ЭВМ
Современные операционные системы
[9] Таненбаум, Э. С.
/ Э. С. Таненбаум. — СПб.: Питер, 2005. — 1038 с.
Операционные системы. Разработка и ре-
[10] Таненбаум, Э. С.
/ Э. С. Таненбаум, А. С. Вудхалл. — СПб.: Питер,
2007. — 704 с.
ализация
Логическое проектирование операционных систем
[11] Шоу, А.
/ А. Шоу. — М.: Мир, 1981. — 360 с.
Системное программирование в среде Windows
[12] Харт, Д. М.
/ Джонсон М. Харт. — М.: Вильямс, 2005. — 592 с.
Linux. Администрирование и системное программирование / Марк Г. Собель. — СПб.: Питер, 2011.
[13] Собель, М. Г.
42
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Оглавление
Введение
3
1.
Ключевые определения
3
2.
История развития ОС
5
3.
Обзор архитектуры ОС
10
4.
Классификация ОС
11
5.
Подсистема управления процессами
16
6.
Подсистема управления памятью
20
7.
Кэширование данных
25
8.
Файловые системы
27
Отображение файлов в память
29
9.
9.1.
9.2.
Отображение файлов в память в UNIX и Linux . . . 30
Отображение файлов в память в Windows NT . . . . 31
10. Синхронизация и взаимодействие процессов
32
11. Файл подкачки
35
12. Подсистема ввода-вывода
38
Заключение
41
Список литературы
42
10.1. Блокировка файлов в UNIX и Linux . . . . . . . . . . 35
10.2. Блокировка файлов в Windows NT . . . . . . . . . . 35
11.1. Файл подкачки в Linux . . . . . . . . . . . . . . . . . 37
11.2. Файл подкачки в Windows NT . . . . . . . . . . . . . 37
12.1. Ввод-вывод в UNIX и Linux . . . . . . . . . . . . . . . 40
43
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Учебное издание
Лукьянов Александр Владимирович
Современные операционные системы
Методические указания
Редактор, корректор М. Э. Левакова
Подписано в печать 31.10.12. Формат 60×84 1/16.
Бум. офсетная. Гарнитура «Times New Roman».
Усл. печ. л. 2,56. Уч.-изд. л. 2,25.
Тираж 20 экз. Заказ
Оригинал-макет подготовлен в редакционно-издательском отделе
Ярославского государственного университета им. П. Г. Демидова.
Отпечатано на ризографе.
Ярославский государственный университет им. П. Г. Демидова.
150000, Ярославль, ул. Советская, 14.
44
Документ
Категория
Без категории
Просмотров
10
Размер файла
447 Кб
Теги
современные, лукьянова, система, операционная, 230
1/--страниц
Пожаловаться на содержимое документа