СРСП 2.


Архитектура операционных систем

Для понимания архитектуры типичной операционной системы полезно пред­ставлять себе полный спектр программного обеспечения, используемого в стан­дартной вычислительной системе. Мы начнем обсуждение с обзора программного обеспечения, включающего общую схему его классификации. В подобных клас­сификациях близкие элементы программного обеспечения зачастую помещаются в различные классы, подобно тому как введение часовых поясов заставляет близких соседей устанавливать свои часы с разницей в час, хотя моменты заката и восхода у них почти совпадают. Более того, в случае с классификацией про­граммного обеспечения динамичность самого предмета и отсутствие признанных авторитетов в этой области часто имеют следствием противоречивость исполь­зуемой терминологии. Например, в операционной системе Windows 98 фирмы Microsoft имеется группа так называемых "вспомогательных программ", содер­жащая по нашей классификации как программы из класса прикладных, так и программы из класса утилит. Поэтому приводимую ниже классификацию следу­ет рассматривать скорее как средство, дающее некоторую точку опоры в слож­ном предмете, а не как констатацию всеми признанного факта.

Обзор программного обеспечения

Первым делом разделим программное обеспечение на две общие категории: прикладное программное обеспечение и системное программное обеспечение (рис.1). Прикладное программное обеспечение включает программы, предна­значенные для решения задач, вытекающих из специфических особенностей использования данной машины. Машина, используемая при инвентаризации в промышленной компании, будет иметь набор прикладных программ, существенно отличающийся от того, который будет иметь машина, используемая в работе инженером-электриком. Примером прикладного программного обеспечения являются электронные таблицы, системы баз данных, настольные издательские системы, системы разработки программ и игры.

Рис. 1. Классификация программного обеспечения

В отличие от прикладного программного обеспечения, системное программное обеспечение выполняет задачи, общие для всех вычислительных систем в целом. Фактически системное программное обеспечение формирует среду, в которой функционирует прикладное программное обеспечение, аналогично тому, как государственная инфраструктура создает фундамент, на котором ее граждане основывают свой индивидуальный стиль жизни.

Внутри класса системного программного обеспечения также есть две категории: одна — собственно операционная система, вторая — элементы программного обеспечения, объединяемые понятием обслуживающие программы, или утилиты. Большую часть установленных в системе обслуживающих программ составляют программы, предназначенные для выполнения действий, необходимых для успешного функционирования компьютера, но еще не включенные в операционную систему. В некотором смысле обслуживающие программы объединяют элементы программного обеспечения, расширяющие возможности операционной системы. Например, обычно операционная система сама по себе не предоставляет средств форматирования диска или копирования файлов, поэтому данные функции обеспечиваются обслуживающими программами. К другим видам обслуживающих программ относятся программы для установки соединений по телефонным линиям с использованием модема, программы сжатия и распаковки данных, программное обеспечение для осуществления сетевых соединений.

Предоставление определенных функциональных возможностей с помощью об­служивающих программ существенно упрощает разработку операционной систе­мы. Более того, выполнение рутинных операций, реализуемых с помощью ути­лит, легче настроить в соответствии с требованиями конкретной установки. Дей­ствительно, вовсе не являются исключением компании или независимые пользователи, модифицирующие или расширяющие возможности утилит, по­ставляемых вместе с операционной системой.

Различие между прикладным и обслуживающим программным обеспечением весьма условно. С нашей точки зрения различие заключается в том, является ли пакет частью инфраструктуры программного обеспечения. Таким образом, новое приложение может превратиться в утилиту, если оно становится одной из основ­ных сервисных программ. Различие между обслуживающими программами и операционной системой также условно. В некоторых системах такая основная функция, как ведение списка файлов в массовой памяти, представлена в виде обслуживающих программ, в то время как другие системы встраивают ее в опе­рационную систему.

Компоненты операционной системы

Часть операционной системы, которая обеспечивает интерфейс операционной системы с пользователями, часто называют оболочкой. Назначение оболочки — организация взаимодействия с пользователем (или пользователями) системы. Современные оболочки выполняют эту задачу с помощью графического интер­фейса пользователя (Graphical User Interface, GUI), в котором объекты манипу­ляции, подобные файлам и программам, представлены на экране монитора в ви­де небольших рисунков — пиктограмм. Подобные системы позволяют пользова­телям вводить команды, указывая на эти пиктограммы и щелкая на них с помощью управляемого рукой приспособления, называемого мышью. Прежние оболочки поддерживали общение с пользователями посредством текстовых со­общений, вводимых с клавиатуры и отображаемых на экране монитора.

Рис. 2. Оболочка как интерфейс между пользователями и операционной системой

Хотя оболочка операционной системы играет важную роль в определении доступной на данной машине функциональности, она, тем не менее, является всего лишь интерфейсом между пользователем и сердцем самой операционной системы (рис. 2). Различие между оболочкой и внутренними частями операци­онной системы подчеркивается тем фактом, что некоторые операционные систе­мы разрешают пользователю выбрать наиболее удобный для него тип оболочки. Например, пользователи операционной системы UNIX могут выбрать одну из оболочек, включая Borne, С или Коrn. Ранние версии Windows также представ­ляли собой всего лишь оболочки для операционной системы MS-DOS. Во всех этих случаях сама операционная система остается прежней — меняется лишь способ ее общения с пользователями.

Главным компонентом современных графических оболочек является программа управления окнами, которая распределяет отдельные блоки пространства экрана, называемые окнами, и отслеживает, какое приложение ассоциируется с каждым из этих окон. Когда приложение намеревается отобразить что-нибудь на экране, оно сообщает об этом программе управления окнами. В результате программа размещает предоставленный трафарет в окне, соответствующем данному приложению. В свою очередь, когда пользователь нажимает кнопку мыши, именно программа управления окнами определяет положение указателя мыши на экране и уведомляет соответствующее приложение об этом действии пользователя.

Linux

Для энтузиастов, желающих поэкспериментировать с внутренними компонентами операционной системы, существует ОС Linux. Эта операционная система была разработана Линусом Торвальдсом (Linus Torvalds), в то время когда он был еще студентом университета в городе Хельсинки. Это некоммерческий продукт, и потому данную операционную систему можно получить бесплатно вместе с документацией и исходным текстом программ. Благодаря свободе доступа к предоставляемому исходному коду, она стала весьма популярна среди тех, для кого компьютер — хобби, а также среди студентов, изучающих операционные системы, и программистов вообще. Она приобрела большую популярность и в качестве альтернативы коммерческим операционным системам, предлагаемым на рынке. Однако установка Linux обычно требует более высокого уровня профессионализма, чем установка коммерческих продуктов типa Microsoft Windows, которые чаще всего устанавливаются на персональных компьютерах непосредственно в процессе их сборки на заводе-изготовителе. Дополнительные сведения о Linux можно найти на Web-узле по адресу http: //www. Linux. Org.

В отличие от оболочки операционной системы, ее внутренняя часть обычно называется ядром, которое включает компоненты программного обеспечения, выполняющие основные функции в процессе приведения компьютера в рабочее состояние. Одним из этих компонентов является программа управления файла­ми, в задачу которой входит координация использования устройств массовой памяти машины. Точнее говоря, эта программа поддерживает записи обо всех файлах, содержащихся в массовой памяти, включая информацию о том, где ка­ждый из файлов находится, каким пользователям разрешен доступ к различным файлам и какой объем массовой памяти может быть использован для записи но­вых и расширения уже имеющихся файлов.

Для удобства пользователей большинство программ управления файлами раз­решает группировать файлы в группы, называемые каталогами, или папками. Такой подход позволяет пользователям размещать свои файлы так, как им это удобно, помещая связанные друг с другом файлы в один каталог. Более того, ка­талоги могут содержать в себе другие каталоги, называемые подкаталогами, что позволяет создавать из файлов иерархические структуры. Например, пользова­тель может создать каталог Записи, который будет включать подкаталоги Фи­нансы, Медицина и Хозяйство. В каждом подкаталоге будут размещаться фай­лы, относящиеся к соответствующей категории. Цепочка каталогов внутри ката­логов называется путем доступа.

Любой доступ к файлу со стороны других компонентов программного обеспе­чения предоставляется и контролируется программой управления файлами. Процедура получения доступа к файлу начинается с запроса к программе управ­ления файлами(этот запрос выполняется в рамках процедуры открытия файла). Если программа управления файлами разрешает доступ, то она предоставляет информацию, необходимую для поиска файла и работы с ним. Эта информация записывается в область основной памяти, называемую дескриптором файла. Лю­бые действия с файлом осуществляются посредством обращения к информации, содержащейся в дескрипторе файла.

Другой компонент ядра операционной системы представляет собой набор драйверов устройств, т.е. элементов программного обеспечения, взаимодейст­вующих с контроллерами устройств (или же непосредственно с устройствами) в целях выполнения различных операций в периферийных устройствах машины. Каждый драйвер устройства специально разрабатывается для конкретного типа устройства (например, принтера, дисковода, накопителя на магнитных лентах или монитора). Он преобразует поступающие запросы в последовательность ко­манд выполнения отдельных физических операций, которые требуется выпол­нить устройству, связанному с этим драйвером. В результате разработка других элементов программного обеспечения может вестись независимо от специфиче­ских особенностей конкретных устройств. Все это позволяет создать обобщенную операционную систему, которая будет настраиваться на использование опреде­ленных периферийных устройств с помощью простой установки соответствую­щих драйверов.

Еще один компонент ядра операционной системы — программа управления памятью, которая решает задачу координации использования машиной ее основной памяти. В среде, где машина выполняет только одно задание в каждый момент времени, обязанности этой программы минимальны. В этом случае необ­ходимая текущему заданию программа помещается в основную память, выпол­няется, а затем заменяется программой для последующего задания. Однако в многопользовательской среде или в среде со многими задачами, когда машина должна обрабатывать множество запросов, поступающих в одно и то же время, у программы управления памятью обширные обязанности. В этой ситуации в ос­новной памяти одновременно должно находиться множество программ и блоков данных, причем каждая из программ занимает собственную область памяти, от­веденную ей программой управления памятью. По мере того как возникает не­обходимость в выполнении различных действий и после их окончания, програм­ма управления памятью должна находить области памяти для удовлетворения возникающих потребностей в памяти, а также отслеживать информацию о тех участках памяти, которые уже освободились.

Задача программы управления памятью еще больше усложняется, когда тре­буемый объем основной памяти превышает реально существующий объем. В этом случае программа управления памятью может создать иллюзию увеличения объема памяти путем перемещения программ и данных из основной памяти в массовую и обратно. Этот иллюзорный объем памяти называется виртуальной памятью. Предположим, что выполняемым программам требуется 64 Мбайт ос­новной памяти, а в наличии имеется только 32. Чтобы создать иллюзию больше­го объема памяти, программа управления памятью делит требуемый объем на элементы, называемые страницами, и хранит содержимое этих страниц в массо­вой памяти. Типичный объем страницы — не больше 4 Кбайт. Программа управления памятью помещает в основную память те страницы, которые в дан­ный момент должны там находиться, замещая ими те, в которых больше нет по­требности. Таким образом, остальные компоненты программного обеспечения могут работать так, как если бы объем основной памяти машины действительно составлял 64 Мбайт.

Кроме того, в состав ядра операционной системы входят планировщик и дис­петчер, о которых речь пойдет в следующем разделе. Сейчас мы только отметим, что в системах с разделением времени планировщик определяет последователь­ность выполняемых действий, а диспетчер контролирует распределение времен­ных квантов для них.

Запуск операционной системы

Мы уже обсудили, как операционная система взаимодействует с пользователями, и как компоненты операционной системы совместно осуществляют координацию действий внутри машины. Однако еще не было сказано ни слова о том, как же за­пускается сама операционная система. Запуск операционной системы осуществляет­ся с помощью процесса, называемого самозагрузкой (booting), который выполняется при каждом включении машины. Первым шагом к пониманию этого процесса есть осознание того, почему его необходимо выполнять на первом этапе.

Центральный процессор машины (ЦП) разработан таким образом, что при его включении выполняемая им программа каждый раз стартует с определенного, наперед заданного адреса. Следовательно, именно в этом месте основной памяти ЦП ожидает найти первую команду, которую требуется выполнить. Чтобы га­рантировать, что требуемая программа всегда будет присутствовать на указанном месте, этот участок памяти обычно конструируется так, чтобы его содержание было неизменным. Такая память носит название постоянной памяти (постоянное запоминающее устройство, ПЗУ). Последовательность битов, однажды помещен­ная в ПЗУ с помощью специального процесса, аналогичного напылению провод­ников на подложку чипа, находится там постоянно, независимо от того, вклю­чена машина или выключена.

В маленьких компьютерах, используемых в качестве управляющих приборов в микроволновых печах, автомобильных системах зажигания и стереоприемниках, представляется удобным выделить значительный объем основной памяти под ПЗУ, так как гибкость в таких системах не нужна. При каждом включении выполняется одна и та же программа. Но в случае с универсальными компьюте­рами ситуация другая и в них не практикуется отведение большого объема ос­новной памяти под постоянные программы. Содержимое памяти таких машин должно быть изменяемым. Фактически большая часть памяти универсальных компьютеров в настоящее время сконструирована так, что ее содержимое может не только изменяться, но и теряться при выключении машины. Такая память называется энергозависимой.

Поэтому для начальной загрузки в компьютерах общего назначения лишь малая часть основной памяти строится из микросхем ПЗУ. Эта область содержит ячейки памяти, в которых ЦП ожидает найти команды, выполняемые при включении машины. Небольшая программа, которая постоянно находится в этой области памяти, называется программой первоначальной загрузки (bootstrap). Эта программа выполняется автоматически при каждом включении компьютера. Она предписывает ЦП считать данные из заранее определенного участка массо­вой памяти в энергозависимую основную память (рис.3).

Этап 1. Машина начинает выполнять программу начальной загрузки, находящуюся в памяти. Операционная система находится в массовой (внешней) памяти

Этап 2. Программа начальной загрузки выдает указание поместить операционную систему в оперативную память, а затем передает ей управление

Рис. 3. Процесс первоначальной загрузки

В большинстве слу­чаев этими данными является программный код операционной системы. Как только программы операционной системы будут помещены в основную память, программа первоначальной загрузки потребует от ЦП выполнить команду пере­хода в данную область памяти. В результате стартуют программы ядра, и опера­ционная система начинает контролировать дальнейшую деятельность машины.

В большинстве современных персональных компьютеров программа первона­чальной загрузки разработана так, что прежде всего она пытается отыскать опе­рационную систему на гибком диске (дискете). Если дискета в машину не встав­лена, программа загрузки автоматически приступает к считыванию операцион­ной системы с жесткого диска. Однако если дискета вставлена в устройство, но не содержит копии операционной системы, программа загрузки приостановится и выдаст сообщение об ошибке оператору. Вы, вероятно, сталкивались с этим, когда включали персональный компьютер, забыв предварительно вынуть несис­темную дискету из дисковода.

Задания на СРСП

1.    Перечислите компоненты типичной операционной системы и охарактеризуйте роль каждого из них одной фразой.

2.    В чем заключаются различия между прикладным программным обеспечением и обслуживающими программами?

3.    Что такое виртуальная память?

4.    Опишите  процедуру начальной загрузки.

Ответы.

1.  Оболочка. Осуществляет взаимодействие с внешней средой, окружающей компьютер.

Менеджер файлов. Координирует использование внешних запоминающих устройств.

Драйверы устройств. Обеспечивают взаимодействие системы с периферий­ными устройствами.

Менеджер памяти. Координирует использование основной памяти компьютера.

Планировщик. Координирует выполнение в системе различных процессов.

Диспетчер. Контролирует распределение времени центрального процессора между различными процессами.

2.    Граница между этими понятиями неясна и различие часто проводится лишь умозрительно. Грубо говоря, утилиты выполняют основные, универсальные задачи, тогда как прикладное программное обеспечение выполняет задачи, специфические для данного пользователя.

3.    Виртуальная память — это воображаемое пространство памяти, которое обеспечивается процессом  перемещения (подкачки) данных и программ из памяти на жесткий диск и обратно.

При включении машины центральный процессор начинает выполнять программу начальной загрузки, текст которой хранится в ROM. В процессе за­грузки центральный процессор копирует программы операционной  системы из внешнего запоминающего устройства в некоторую область основной па­мяти. После завершения копирования он передает управление соответст­вующей программе операционной системы.