Общие основы операционных систем

 

Назначение и функции ОС

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

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

Идея компьютера была предложена английским математиком Чарльзом Бебиджем (Charles Babage) в середине девятнадцатого века, но вследствие недостаточного развития технологий того времени она не могла быть реализована. Настоящее рождение цифровых вычислительных машин произошло в середине 40-х гг. ХХ в. Именно тогда были созданы первые ламповые вычислительные устройства. Они представляли собой скорее предмет научно-исследовательской работы, непригодный для решения каких-либо практических задач из других прикладных областей. Их проектированием, программированием и эксплуатацией занималась одна и та же группа людей. Программирование осуществлялось исключительно на машинном языке, не было никакого системного программного обеспечения, кроме библиотек математических и служебных подпрограмм, которые программист мог использовать для того, чтобы не писать каждый раз коды, вычисляющие значения какой-либо математической функции или управляющие стандартным устройством ввода-вывода. ОС тогда еще не появились, а все задачи организации вычислительного процесса решались вручную каждым программистом с пульта управления, который представлял собой примитивное устройство ввода-вывода, состоящее из кнопок, переключателей и индикаторов.

В середине 50-х годов начался следующий период в развитии вычислительной техники, связанный с новой технической базой – полупроводниковыми элементами. С их появлением уменьшились размеры компьютеров, выросло быстродействие процессоров, увеличились объемы оперативной и внешней памяти. Компьютеры стали более надежными, теперь они могли непрерывно работать настолько долго, чтобы на них можно было возложить выполнение действительно важных практических задач. Наряду с совершенствованием аппаратуры заметный прогресс наблюдался также в области автоматизации программирования и организации вычислительных работ. В эти годы появились алгоритмические языки, и таким образом к библиотекам математических и служебных программ добавился новый тип системного программного обеспечения – трансляторы. Но как бы быстро и надежно не работали операторы, осуществлявшие управление вычислительным процессом, они уже не могли состязаться в производительности с работой устройств компьютера. Большую часть времени компьютер простаивал в ожидании, пока оператор запустит очередную задачу. А поскольку процессор представлял собой весьма дорогое устройство, то низкая эффективность его использования означала низкую эффективность использования компьютера в целом, при этом затраты на компьютерную обработку данных возрастали. Таким образом, максимальная загрузка аппаратных средств стала одним из главных требований использования компьютеров, а мерой эффективности их использования стала пропускная способность. Для решения этой проблемы были разработаны первые системы пакетной обработки, которые автоматизировали всю последовательность действий оператора по организации вычислительного процесса. Ранние системы пакетной обработки явились прообразом современных ОС, они стали первыми системными программами не для обработки данных пользователя, а для управления вычислительным процессом. В ходе реализации систем пакетной обработки был разработан формализованный язык управления заданиями, с помощью которого программист сообщал системе и оператору, какие действия и в какой последовательности он хочет выполнить на вычислительной машине. Типовой набор директив обычно включал признак начала отдельной работы, вызов транслятора, вызов загрузчика, признаки начала и конца исходных данных. Оператор составлял пакет заданий, которые в дальнейшем без его участия последовательно запускались на выполнение управляющей программой – монитором. Кроме того, монитор был способен самостоятельно обрабатывать наиболее часто встречающиеся при работе пользовательских программ аварийные ситуации, такие как отсутствие исходных данных, переполнение регистров, деление на ноль, обращение к несуществующей области памяти и т.д. Пакет обычно представлял собой набор перфокарт, но для ускорения работы он мог переноситься на более удобный и емкий носитель, например на магнитную ленту или магнитный диск. Сама программа-монитор в первых реализациях также хранилась на перфокартах или перфоленте, а в более поздних – на магнитной ленте и магнитных дисках. Ранние системы пакетной обработки значительно сократили затраты времени на вспомогательные действия по организации вычислительного процесса, а значит, был сделан еще один шаг по повышению эффективности использования компьютеров, однако при этом программисты-пользователи лишились непосредственного доступа к компьютеру.

В 1965-1975 гг. произошел переход от отдельных полупроводниковых элементов к интегральным микросхемам, что открыло путь к появлению следующего типа компьютеров. Большие функциональные возможности интегральных схем сделали возможным осуществление на практике сложных компьютерных архитектур, таких, например, как IBM/360. В это период были реализованы практически все основные механизмы, присущие современным ОС: мультипрограммирование, мультипроцессирование, поддержка многотерминального многопользовательского режима, виртуальная память, файловые системы, разграничение доступа и сетевая работа. В эти годы огромное значение приобретает системное программирование, которое из направления прикладной математики превращается в отрасль индустрии, оказывающую практическое влияние на деятельность миллионов людей. Революционным событием данного этапа явилась промышленная реализация мультипрограммирования – способа организации вычислительного процесса, при котором в памяти компьютера находилось одновременно несколько попеременно выполняющихся программ. Такое усовершенствование значительно улучшило эффективность вычислительной системы – компьютер использовался теперь постоянно. К этому времени произошло существенное изменение в распределении функций между аппаратными и программными средствами компьютера. ОС становились неотъемлемыми элементами компьютеров, играя роль “продолжения” аппаратуры. В первых вычислительных машинах программист, напрямую взаимодействуя с аппаратурой, мог осуществить загрузку программных кодов, а затем вручную запустить программу на выполнение. В компьютерах 60-х годов большую часть действий по организации вычислительного процесса взяла на себя уже операционная система. В большинстве же современных компьютеров вообще не предусмотрено даже теоретической возможности выполнения какой-либо вычислительной работы без участия ОС. После включения питания автоматически проводится поиск, загрузка и запуск ОС, а в случае ее отсутствия компьютер просто останавливает свою работу. Реализация мультипрограммирования потребовала внесения очень важных изменений в аппаратуру компьютера, направленных непосредственно на поддержку нового способа организации вычислительного процесса. При разделении ресурсов компьютера между программами выполнялись задачи по обеспечению быстрого переключения процессора с одной программы на другую, а также надежной защиты кодов и данных одной программы от непреднамеренной или преднамеренной порчи другой программой. В процессорах появился привилегированный и пользовательский режимы работы, специальные регистры для быстрого переключения с одной программы на другую, средства защиты областей памяти, а также развитая система прерываний. Аппаратная поддержка ОС стала с тех пор неотъемлемым свойством практически любых компьютерных систем, включая персональные компьютеры.

Еще одной важной тенденцией этого периода является создание семейств программно-совместимых машин и ОС для них. Примерами таких семейств, построенных на интегральных микросхемах, являются серии машин IBM/360 и IBM/370, их советские аналоги – машины серии ЕС, PDP-11 и компьютеры отечественного производства СМ-3, СМ-4 и СМ-1420. Вскоре идея программно-совместимых машин стала общепризнанной. Программная совместимость требовала и совместимости ОС, подразумевающей возможность работы на больших и на малых вычислительных системах с разнообразной периферии в коммерческих и научно-исследователь­ских областях. ОС, построенные с намерением удовлетворить всем этим крайне противоречивым требованиям, оказались чрезвычайно сложными. Они состояли из миллионов ассемблерных строк, написанных тысячами программистов, и содержали сотни тысяч ошибок, вызывавших нескончаемый поток исправлений. ОС этого поколения были очень дорогими – например, разработка OS/360, объем кода которой составлял всего (по современным меркам) 8 Мбайт, стоила компании IBM 80 миллионов долларов. Следует заметить, что, несмотря на множество проблем и замечаний, OS/360 и другие, подобные ей, ОС удовлетворяли большинству требований потребителей. За это десятилетие был сделан огромный шаг вперед и заложен прочный фундамент для создания современных ОС.

В начале 70-х годов появились первые сетевые ОС, которые в отличие от многотерминальных ОС позволяли не только рассредоточить пользователей, но и организовать распределенное хранение и обработку данных между несколькими компьютерами, связанными электрическими сетями. Программные модули, реализующие сетевые функции, появлялись в ОС постепенно, по мере развития сетевых технологий, аппаратной базы компьютеров и возникновения новых задач, требующих сетевой обработки данных. И хотя теоретические работы по созданию концепций сетевого межкомпьютерного взаимодействия велись почти с самого появления вычислительных машин, значимые практические результаты по объединению компьютеров в сеть были получены в конце 60-х, когда с помощью глобальных связей и техники коммутации пакетов удалось реализовать взаимодействие машин класса мэйнфрэймов1 и суперкомпьютеров. Эти дорогостоящие компьютеры зачастую хранили уникальные данные и программы, доступ к которым необходимо было обеспечить широкому кругу пользователей, находившихся в различных городах на значительном удалении от вычислительных центров. В 1969 году Министерство обороны США инициировало работы по объединению суперкомпьютеров оборонных и научно-исследовательских центров в единую сеть ARPANET, в которую вошли компьютеры разных типов, работавшие под управлением различных ОС с добавленными модулями, реализующими коммуникационные протоколы, общие для всех компьютеров в сети. Эта сеть явилась отправной точкой для создания самой известной теперь глобальной сети – Интернет (Internet).

К середине 70-х годов наряду с мэйнфрэймами широкое распространение получили такие мини-компьютеры, как PDP-11, NOVA, HP. Мини-компьютеры первыми использовали преимущества больших интегральных схем, позволившие реализовать достаточно мощные функциональные возможности при сравнительно невысокой стоимости. Архитектура мини-компьютеров была значительно упрощена по сравнению с мэйнфрэймами, что, несомненно, нашло свое отражение и в их ОС. Многие функции мультипрограммных многопользовательских ОС мэйнфрэймов были усечены, учитывая ограниченность ресурсов мини-компьютеров. ОС мини-компьютеров часто стали делать специализированными, например только для управления в реальном времени (ОС RT-11 для мини-компьютеров PDP-11) или только для поддержки режима разделения времени (RSX-11M для тех же компьютеров). Эти ОС не всегда были многопользовательскими, что во многих случаях оправдывалось достаточно низкой стоимостью мини-компьютеров по сравнению с мэйнфрэймами.

Важным событием в истории мини-компьютеров и вообще в истории ОС явилось создание ОС UNIX. Первоначальна она предназначалась для поддержания режима разделения времени в мини-компьютере PDP-11. С середины 70-х годов началось массовое использование ОС UNIX. К этому времени программный код для UNIX был на 90% написан на языке высокого уровня C, а широкое распространение эффективных C-компиляторов со временем сделало UNIX уникальной в своем роде ОС, обладающей возможностью сравнительно легкого переноса на разные типы компьютеров. Поскольку эта ОС поставлялась вместе с исходными текстами, то она стала первой открытой ОС, которую могли совершенствовать или изменять по своему усмотрению обычные пользователи-программисты. Хотя UNIX была первоначально разработана для мини-компьютеров, гибкость, элегантность, мощные функциональные возможности и открытость позволили ей занять достойные позиции во всех классах компьютеров: суперкомпьютерах, мэйнфрэймах, мини-компьютерах, серверах и рабочих станциях, персональных компьютерах.

В 80-е годы был разработан протокол2 TCP/IP, признанный в 1983 Министерством обороны США военным стандартом и реализованный для ОС BSD UNIX. Все это десятилетие отмечалось постоянным появлением новых, все более совершенных версий ОС UNIX. Среди них были и фирменные версии UNIX: SunOS, HP-UX, Irix, AIX и многие другие, к которым производители компьютеров адаптировали код ядра и системных утилит для своей аппаратуры. Разнообразие версий породило проблему их совместимости, периодически решаемую различными организациями. В результате этой работы появились стандарты POSIX и XPG, определяющие интерфейсы ОС для приложений, а специальное подразделение компании AT&T выпустило несколько версий UNIX System III и UNIX System V, предназначенных для консолидации разработчиков на уровне кода ядра.

Начало 80-х годов также ознаменовалось важным событием в истории ОС – появились персональные компьютеры. Они стали широко использоваться неспециалистами, что потребовало разработки так называемого дружественного программного обеспечения. Предоставление этих дружественных функций стало, естественно, прямой обязанностью ОС. Персональные компьютеры вследствие низкой стоимости получили широкое распространение и послужили причиной бурного развития локальных вычислительных сетей. В результате поддержка сетевых функций стала для ОС персональных компьютеров необходимым условием. Однако, несмотря на это, и дружественный интерфейс, и сетевые функции появились у персональных компьютеров далеко не сразу. Первая версия наиболее популярной ОС раннего этапа развития персональных компьютеров – MS-DOS компании Microsoft – была лишена этих функциональных возможностей. Она разрабатывалась как однопрограммная однопользовательская ОС с интерфейсомкомандной строки, способная стартовать с дискеты. Основными задачами для нее были управление файлами, расположенными на гибких и жестких дисках, а также поочередный запуск программ. Однако разработчики первых персональных компьютеров считали, что при индивидуальном пользовании нет смысла в мультипрограммировании, поэтому не были предусмотрены механизмы поддержки мультипрограммных систем, и процессор Intel 8088 не поддерживал привилегированного режима. Сетевые функции также реализовывались в основном сетевыми оболочками, работавшими поверх ОС.

В 1987 году в результате совместных усилий Microsoft и IBM появилась на свет первая многозадачная ОС для персональных компьютеров OS/2 с процессором Intel 80286, в полной мере использующая возможности защищенного режима. Эта система была хорошо продумана и поддерживала вытесняющую многозадачность, виртуальную память, графический пользовательский интерфейс (правда, не с первой версии), а также виртуальную машину для выполнения DOS-приложений. В персональных компьютерах применялись не только специально разработанные ОС, подобные MS-DOS, NetWare и OS/2, но к ним адаптировались и уже существующие ОС. Появление процессоров Intel 80286 и 80386 с поддержкой мультипрограммирования позволило перенести на платформу персональных компьютеров ОС UNIX. Наиболее известной системой этого типа стала версия UNIX компании Santa Cruz Operation (SCO UNIX).

В 90-е годы практически все ОС, занимающие заметное место на рынке, стали сетевыми. Сетевые функции сегодня являются неотъемлемой частью ОС и встраиваются в ее ядро. ОС получили средства для работы со всеми основными технологиями локальных (Ethernet, Fast Ethernet, Gigabit Ethernet, Token Ring, FDDI, ATM) и глобальных (X.25, frame relay, ISDN, ATM) сетей, а также средства для создания составных сетей (IP, IPX, AppleTalk, RIP, OSPF, NLSP). В ОС используется мультиплексирование нескольких стеков протоколов, за счет которого компьютеры могут поддерживать одновременную сетевую работу с различными серверами и клиентами. Появились специализированные ОС, предназначенные исключительно для выполнения коммуникационных задач. Например, сетевая ОС IOS компании Cisco Systems, работающая в маршрутизаторах, организует в мультипрограммном режиме выполнение набора программ, каждая из которых реализует один из коммуникационных протоколов.

Во второй половине 90-х годов все компании-производители ОС резко усилили поддержку своими системами средств работы с Интернетом. Кроме самого стека протоколов TCP/IP, в комплект поставки начали включать утилиты, реализующие такие популярные сервисы, как telnet, ftp, DNS и Web. Влияние Интернета проявилось и в том, что компьютер превратился из чисто вычислительного устройства в средство коммуникации с развитыми вычислительными возможностями.

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

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

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

В последние годы получила дальнейшее развитие тенденция увеличения удобства взаимодействия человека с компьютером. Эффективность работы пользователя становится основным фактором, определяющим результативность вычислительной системы в целом. Усилия человека должны как можно меньше тратиться на настройку параметров вычислительного процесса. Например, в системах пакетной обработки для мэйнфреймов каждый пользователь с помощью языка управления заданиями определял большое количество параметров, относящихся к организации вычислительных процессов в компьютере. Так, для системы OS/360 таких параметров насчитывалось более 40, среди которых были приоритет задания, требования к основной памяти, предельное время выполнения задания, перечень используемых устройств ввода-вывода и режимы их работы.

Современная ОС берет на себя выполнение задачи выбора параметров операционной среды, используя для этой цели различные адаптивные алгоритмы. Например, тайм-ауты в коммуникационных протоколах зачастую определяются в зависимости от условий работы сети. Распределение оперативной памяти между процессами происходит автоматически с помощью механизмов виртуальной памяти в зависимости от активности этих процессов и информации о частоте использования той или иной страницы. Мгновенные приоритеты процессов определяются динамически в зависимости от предыстории, включающей, например, время нахождения процесса в очереди, процент использования выделенного кванта времени, интенсивность ввода-вывода и т.п. Даже в процессе установки большинство ОС предлагают режим выбора параметров по умолчанию, который гарантирует пусть и не оптимальное, но всегда приемлемое качество работы системы.

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

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

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

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

ОС выполняет две группы функций:

1) предоставление пользователю вместо реальной аппаратуры компьютера некой расширенной машины, с которой удобнее работать и которую легче программировать;

2) повышение эффективности использования компьютера путем рационального управления его ресурсами в соответствии с некоторым критерием.

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

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

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

Ресурсы вычислительной системы можно разбить на первичные – аппаратные ресурсы и вторичные – логические, программные и информационные ресурсы.

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

Вторичные ресурсы связаны с техническими устройствами косвенно, так как являются логическими, виртуальными. Однако их введение – это необходимая абстракция, удобная не только для создателей ОС, но и для пользователей.

Управление ресурсами вычислительной системы с целью наиболее эффективного их использования составляет важную часть функций любой ОС. Критерии эффективности, в соответствии с которыми ОС организует управление ресурсами, могут различаться. Например, в одних системах важна пропускная способность вычислительной системы, а в других – время её реакции. Зачастую ОС должны одновременно удовлетворять нескольким противоречащим друг другу критериям, что доставляет разработчикам серьезные трудности.

Управление ресурсами включает решение следующих общих, не зависящих от типа ресурса задач:

1)планирование ресурса – определение, какому процессу, когда и в каком количестве (если ресурс может быть разбит на части) следует выделить данный ресурс;

2) удовлетворение запросов на ресурсы;

3) отслеживание состояния и учет использования ресурса – поддержание оперативной информации о занятости ресурса и распределенной его доли;

4) разрешение конфликтов между процессами, использующими один ресурс.

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

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

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

Подсистема управления процессами генерирует системные информационные структуры, содержащие данные о потребностях в ресурсах вычислительной системы, а также о фактически выделенных ресурсах для каждой задачи. Процесс (задача) – представляет собой базовое понятие современных ОС и часто кратко определяется как программа в стадии выполнения. Программа – это статический объект, представляющий собой файл с кодами и данными, процесс является динамическим объектом, который возникает в операционной системе после того, как пользователь или ОС решает запустить программу на выполнение. Во многих современных ОС для обозначения минимальной единицы работы ОС используют термин “нить”, или “поток”, при этом изменяется суть термина “процесс”. Подробнее об этом будет рассказано в юните 2 “Управление процессами”. Чтобы процесс выполнялся, ОС должна назначить ему область оперативной памяти, в которой будут размещены коды и данные процесса, а также предоставить необходимое количество процессорного времени и доступ к требуемым ресурсам других типов. В информационные структуры процесса часто включается дополнительная информация, характеризующая историю пребывания процесса в системе, его текущее состояние, степень привилегированности процесса.

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

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

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

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

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

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

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

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

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

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

Способность ОС к “экранированию” сложностей реальной аппаратуры ярко проявляется в одной из основных подсистем ОС – файловой системе. ОС виртуализирует отдельный набор данных, хранящихся на внешнем накопителе, в виде файла – простой неструктурированной последовательности байтов, имеющей символьное имя. Для удобства работы с данными файлы группируются в каталоги, которые, в свою очередь, образуют группы – каталоги более высокого уровня. Пользователь, применяя средства ОС, может выполнять над файлами и каталогами такие действия, как поиск по имени, удаление, вывод содержимого на внешнее устройство, изменение и сохранение содержимого. Для того, чтобы большое количество наборов данных, размещенных случайным образом по цилиндрам и поверхностям дисков различных типов, представить в виде хорошо всем знакомой и удобной иерархической структуры файлов и каталогов, ОС должна решить множество задач. Файловая система ОС выполняет преобразование символьных имен файлов, с которыми работает пользователь или прикладной программист, в физические адреса данных на диске, организует совместный доступ к файлам, защищает их от несанкционированного доступа. При выполнении своих функций файловая система тесно взаимодействует с подсистемой управления внешними устройствами, которая по запросам файловой системы осуществляет передачу данных между дисками и оперативной памятью.

Подсистема управления внешними устройствами, называемая также подсистемой ввода-вывода, является интерфейсом ко всем устройствам, подключенным к компьютеру. Множество этих устройств очень велико. Номенклатура выпускаемых накопителей на жестких, гибких и оптических дисках принтеров, сканеров, мониторов, плоттеров, модемов, сетевых адаптеров и специализированных устройств ввода-вывода (например, аналого-цифровых преобразователей, устройств считывания шрих-кода и т.д.) насчитывает тысячи моделей. Эти модели отличаются набором и последовательностью команд, используемых для обмена информацией с процессором и памятью компьютера, скоростью работы, кодировкой передаваемых данных, возможностью совместного использования, поддерживаемыми функциональными возможностями и множеством других деталей. Программа, управляющая конкретной моделью внешнего устройства и учитывающая все его особенности, называется драйвером этого устройства (от англ. drive – управлять). Драйвер может управлять единственной моделью устройства или же группой устройств определенного типа. Для конечного пользователя важное значение имеет наличие в ОС как можно большего количества разнообразных драйверов (для широкого спектра устройств), поскольку это гарантирует возможность подключения к компьютеру большого числа внешних устройств различных производителей. От наличия подходящих драйверов во многом зависит успех ОС на рынке. Так, отсутствие многих необходимых драйверов внешних устройств было одной из причин низкой популярности ОС OS/2 и ранних версий Windows NT. Поэтому, прежде чем выпускать на рынок новую ОС, разработчики стараются включить в ее состав драйверы для поддержки самого разного имеющегося в продаже оборудования. Созданием драйверов занимаются как разработчики конкретной ОС, так и специалисты компаний, выпускающих внешние устройства. ОС должна поддерживать четко определенный интерфейс между драйверами и остальными частями ОС, чтобы разработчики из компаний-производителей устройств ввода-вывода могли поставлять вместе со своими устройствами драйверы для данной ОС. Прикладные программисты также могут пользоваться интерфейсом драйверов при разработке своих программ, однако это очень неудобно, поскольку такой интерфейс обычно представляет собой низкоуровневые операции, наделенные большим количеством деталей.

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

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

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

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

 

Классификация ОС

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

1) По количеству одновременно существующих программных процессов ОС делятся на однопрограммные и мультипрограммные. В мультипрограммных ОС, в отличие от однопрограммных, вычислительный процесс организуется таким образом, что в памяти компьютера находится одновременно несколько программ, попеременно выполняющихся на одном процессоре. Такая организация позволяет значительно повысить эффективность вычислительной системы. Иногда говорят также о мультизадачном режиме, однако, мультизадачный и мультипрограммный режимы отличаются. Мультипрограммный режим обеспечивает параллельное выполнение нескольких приложений и при этом программисты, их создающие, не должны заботиться о механизмах организации их параллельной работы. Эти функции берет на себя сама ОС, именно она распределяет между выполняющимися приложениями ресурсы вычислительной системы, осуществляет необходимую синхронизацию и взаимодействие. Мультизадачный режим, напротив, предполагает, что забота о параллельном выполнении и взаимодействии приложений ложится как раз на прикладных программистов.

2) По числу пользователей, осуществляющих доступ к вычислительной системе, различают однопользовательские и многопользовательские ОС. Многопользовательские системы предоставляют возможность одновременного доступа к вычислительной системе нескольким пользователям. При этом каждый из них работает за собственным терминалом, однако все вычисления производятся на одном компьютере. Это приводит к более эффективному использованию вычислительной техники и уменьшению стоимости обработки данных.

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

4) По способу загрузки можно выделить загружаемые ОС и системы, постоянно находящиеся в памяти вычислительной системы. Последние, как правило, используются для управления работой специализированных устройств.

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

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

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

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

 

Требования к ОС

 

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

1) Производительность. ОС должна обладать настолько хорошим быстродействием и временем реакции, насколько это позволяет аппаратная платформа. На производительность ОС оказывает влияние множество факторов, среди которых основными являются архитектура ОС, многообразие реализуемых ею функций, количество ресурсов, потребляемых самой ОС для выполнения поставленных перед ней задач, качество программного кода.

2) Надежность. Это требование ОС определяется архитектурными решениями, положенными в ее основу, а также качеством реализации, обратно пропорциональным количеству ошибок в комплексе программ, составляющих ОС.

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

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

5) Переносимость. В идеальном случае ОС должна легко переноситься с одного типа аппаратной платформы на другой. Реально это далеко не всегда быстро и легко выполнимая задача. Как правило, ОС разрабатывается для определенного типа аппаратных платформ и перенос ее на платформу с принципиально иным строением может стать трудной задачей.

6) Совместимость. ОС всегда изменяются со временем, и эти изменения более значимы, чем изменения аппаратных средств. Изменения ОС обычно заключаются в приобретении ими новых свойств, добавлении новых и модификации имеющихся функций. Под требованием совместимости понимается сохранение возможности использования прикладных программ, написанных для “старой” или вообще другой ОС, в новой ОС.

7) Удобство. Средства ОС должны быть простыми и гибкими, а логика ее работы ясна пользователю. Современные ОС ориентированы на обеспечение пользователю максимально возможного удобства при работе с ними. Необходимым условием этого стало наличие у ОС графического пользовательского интерфейса и всевозможных мастеров – программ, автоматизирующих установку, настройку и эксплуатацию системы.

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