Изменения

Понятие операционной системы (ОС). Основные концепции современных ОС (Unix, Windows NT)
== Понятие операционной системы (ОС). Основные концепции современных ОС (Unix, Windows NT) ==
 
'''Операционная система (ОС)''' — одна из основных компонент вычислительной системы (аппаратура + специальное программное обеспечение), представляющая собой комплекс программ, обеспечи­вающий функционирование вычислительной системы в целом и рас­пределение ресурсов вычислительной системы между процессами -программами во время их выполнения на ЭВМ.
 
Ресурсы вычислительной системы делятся на физические ресурсы, то есть те ресурсы, которые связаны с аппаратурой (маг­нитные диски, оперативная память, время работы процессора) и ло­гические (иногда их называют виртуальными) ресурсы, то есть ре­сурсы, которые в виде реального оборудования не существуют, но реализуются в виде некоторых программных средств и услуг, пре­доставляемых пользователю.
 
Наиболее известными в настоящее время являются следую­щие ОС: MS DOS, Windows 95, Windows 98, Windows 2000, Windows NT, UNIX, QNX, Linux, Solaris, OS/2, MacOS.
 
ОС состоит из '''ядра''', специальных '''обслуживающих про­грамм''' и '''файловой системы'''.
 
Ядро ОС — программы, непосредственно обеспечивающие разделение вычислительных ресурсов и управление ими. Ядро обыч­но является резидентной частью ОС. Ядро работает в режиме ОС, или в привилегированном режиме.
 
В ядро входят базовые средства управления основными сущностями, характерными для данной ОС, а также может входить набор программ, обеспечивающих управление некоторыми физиче­скими устройствами. В функции ядра, в частности, входит обработка прерываний.
 
Программы, управляющие работой отдельных устройств вычислительной системы, называют драйверами устройств (физи­ческих или логических). Например, в ядро ОС должен входить драй­вер оперативного запоминающего устройства.
 
Специальные обслуживающие программы — программы управления ресурсами вычислительной системы, которые наращи­ваются вокруг ядра. Первый уровень в основном состоит из драйве­ров физических устройств. Следующий уровень — драйверы логиче­ских устройств. Таких уровней может быть достаточно много, и чем дальше от ядра, тем большая абстрактность присуща соответствую­щим программам.
 
'''Файловая система''' — компонент операционной системы, обеспечивающий организацию создания, хранения и доступа к име­нованным наборам данных — файлам.
 
По способам организации размещения файлов во внешнем запоминающем устройстве (ВЗУ) выделяются файловые системы с одноуровневой организацией файлов в виде непрерывных сегмен­тов, файловые системы с блочной организацией файлов и иерархи­ческие файловые системы.
 
При одноуровневой организации файлов в виде непре­рывных сегментов в пределах пространства ВЗУ выделяется неко­торая область для хранения данных, которая называется каталогом. Каталог имеет следующую структуру:
 
<tab sep=bar class=simpletable>
Имя | Начальный блок | Конечный блок
</tab>
 
«Начальный блок» ссылается на некоторый относительный адрес пространства ВЗУ, с которого начинается файл с заданным именем. «Конечный блок» определяет последний блок данного фай­ла. Функция открытия файла сводится к нахождению в каталоге име­ни файла и определении его начала и конца. Это действие очень простое. Если создается новый файл, то он записывается на свобод­ное место. Чтение происходит также достаточно просто. Проблемы возникают, когда в файл нужно записать дополнительную информа­цию, а свободного пространства за этим файлом нет. В этом случае система может запустить некий процесс, который перенесет этот файл в другое место памяти и добавит нужную информацию (а это достаточно сложно), а может просто отказаться произвести запись в файл. Кроме того, при долговременной работе такой файловой сис­темы на диске случается фрагментация (ситуация, когда есть сво­бодные фрагменты памяти, но среди них нет такого, куда можно было бы разместить файл). Борьба с фрагментацией также достаточ­но сложна и опасна для такой организации файловой системы, кото­рая практически пригодна лишь для однопользовательской операци­онной системы.
 
В файловой системе с блочной организацией файлов пространство ВЗУ разделено на блоки. В такой файловой системе распределение информации происходит аналогично распределению информации о процессе в системе со страничной организацией опе­ративной памяти. В общем случае, с каждым именем файла связан набор номеров блоков устройства, в которых размещены данные этого файла. Причем, номера этих блоков имеют произвольный порядок, то есть блоки могут быть разбросаны по всему устройству. При такой организации нет фрагментации, хотя могут быть потери из-за хранения информации порциями, кратными целому блоку.
 
В файловых системах с блочной организацией файлов с ка­ждым файлом связаны имя файла и имя пользователя (по ним про­исходит доступ к файлу). В таких системах требуется уникальность имен лишь среди файлов одного пользователя. При этом файлы объ­единены в каталоги с табличной структурой, где i-тая строка соот­ветствует i-тому блоку файловой системы (занятому или свободно­му). Если блок занят, то в соответствующей строке указывается имя файла (либо ссылка на него) и имя пользователя (а может быть и еще какая-то дополнительная информация).
 
Файловые системы с блочной организацией файлов могут быть многопользовательскими, а в рамках одного пользователя они являются одноуровневыми.
 
В иерархической файловой системе все файлы объедине­ны в структуру, которая называется деревом. В корне дерева нахо­дится корень файловой системы. Если узел дерева является листом, то это отдельный файл (либо файл-каталог в случае пустого катало­га). Узлы дерева, отличные от листа, являются файлами-каталогами. Именование файлов в такой иерархической файловой системе может происходить как относительно ближайшего каталога (на одном уровне имена не могут повторяться), так и с использованием полного имени файла, которое составляется из всех имен каталогов, которые находятся на пути от корня файловой системы к конкретному файлу. Полные имена файлов есть пути, а в дереве от корня до любого узла существует единственный путь, следовательно, нет проблем с уни­фикацией имен, то есть иерархическая структура файловой системы дос­таточно удобна для организации многопользовательской работы. Кроме того, такая система может очень просто наращиваться.
 
Основные функции ОС:
 
* управление использованием времени центрального процессора (или нескольких процессоров в много­процессорных системах),
* управление «подкачкой» и буфером ввода процес­сов,
* управление разделяемыми ресурсами (в частности, сетевым взаимодействием компьютеров),
* обработка прерываний,
* защита ресурсов и установка ограничений на ис­пользование ресурсов,
* вызов специальных обслуживающих программ, буферизация ввода/вывода.
 
=== Управление использованием времени центрального процессора ===
 
От того, какой алгоритм выбора процесса для передачи ему в распоряжение ЦП реализован в ОС, зависят многие реальные экс­плуатационные свойства ОС. Выбор алгоритма почти целиком опре­деляется теми критериями эффективности, которые используются для оценки эффективности работы ОС. Поэтому управление исполь­зованием времени ЦП можно рассмотреть на фоне различных типов ОС.
 
==== Пакетные ОС ====
 
Пусть есть некоторое количество счетных задач, они требуют большого объема вычислений и мало обращаются к внешним устройствам. Эти задачи должны выполняться в одной вычислительной системе. В такой ситуации критерием эффективности работы вычислительной системы является степень загрузки ЦП. Если он мало простаивает, то система работает эффективно. Этого можно добиться с использованием соответствующего алгоритма планирования, который заключается в следующем. Запускается некоторый набор задач в режиме мультипрограммирования. Алгоритм планирования времени ЦП в этом случае будет следующий: если ЦП выделен одному из процессов, то этот процесс будет занимать ЦП до наступления одной из следующих ситуаций:
 
* Обращение к внешнему устройству.
* Завершение процесса.
* Зафиксированный факт зацикливания процесса.
 
Как только наступила одна из этих ситуаций, управление передается другому процессу. Количество передач управления от одного процесса к другому минимизировано. Такой режим работы ОС называется пакетным, а ОС, работающая в этом режиме, называ­ется '''пакетной ОС'''.
 
==== ОС разделения времени ====
 
Пусть значительное количество пользователей находится в компьютерном классе, и каждый из них редактирует некоторый текст. С каждым из терминалов связана своя копия текстового редактора. В такой ситуации для системы в качестве критерия эффективности подойдет время ожидания пользователя с момента, как он послал заказ на выполнение какого-то действия, до момента выполнения этого заказа. Чем эффективнее работает система, тем это среднестатистическое время ожидания в системе меньше. При этом алгоритм распределения времени центрального процессора может быть следующим.
 
В системе используется некоторый параметр Δt — квант вре­мени. Все множество процессов, которое находится в мультипро­граммной обработке, подразделяется на два подмножества. Первое подмножество составляют те процессы, которые еще не готовы к продолжению выполнения: например, те процессы, которые заказа­ли себе обмен и ждут его результатов. Второе подмножество — про­цессы, которые готовы к выполнению. Работа будет осуществляться следующим образом. Тот процесс, который в данный момент време­ни занимает ЦП, будет владеть им до наступления одного из сле­дующих событий:
 
* обращение с заказом на обмен,
* завершение процесса,
* исчерпание выделенного данному процессу кванта времени Δt.
 
При наступлении одного из этих событий планировщик ОС выбирает из процессов, готовых к выполнению, некоторый процесс и передает ему ресурсы ЦП. А выбирает он этот процесс в зависимо­сти от того алгоритма планирования, который реализован в данной конкретной ОС. Первый способ: процесс может выбираться случай­но. Второй способ: происходит как бы последовательный обход процессов, то есть сначала начинает работать один из процессов, затем (после наступления одного из указанных трех событий) время ЦП предоставляется следующему по порядку процессу из готовых к выполнению. Третьим критерием, по которому отбирается очеред­ная задача, может быть время, в течение которого данный процесс не обслуживался ЦП. В этом случае система может выбирать про­цесс, у которого такое время самое большое. Эти алгоритмы должны быть реализованы в ОС, а значит, они должны быть простыми, ина­че система будет работать неэффективно. ОС, работающие по опи­санному принципу, называются '''ОС разделения времени'''.
 
==== ОС реального времени ====
 
ОС реального времени используются в вычислитель­ных системах, ориентированных на решения задач, для которых главным, решающим требованием к вычислительной системе явля­ется время гарантированной реакции системы на возникновение того или иного события из набора заранее предопределенных событий (например, задачи, связанные с управлением действиями систем са­молета в режиме автопилота). Обычно ОС реального времени имеют свое специфическое устройство, и в них используются достаточно простые алгоритмы.
 
==== Смешанные ОС ====
 
Реально, большинство современных ОС являются сме­шанными системами, то есть у них присутствует в элементах планиро­вания использования ЦП как алгоритмы, позволяющие управлять счетными задачами, так и алгоритмы, позволяющие управлять инте­рактивными задачами либо задачами отладочными, для которых надо немного времени ЦП.
 
Примером такой организации планирования ЦП может быть следующая схема. Планировщик построен по двухуровневой схеме. Мы считаем, что множество задач может содержать, предпо­ложим, счетные задачи и интерактивные задачи. Первый уровень определяет приоритет между двумя классами задач и либо отдает ЦП сначала счетной задаче, либо интерактивной задаче. А второй уровень определяет то, о чем мы говорили перед этим, то есть как вы­брать задачу в пределах одного класса и как ее прервать. Такая сме­шанная система может работать следующим образом. Первый уро­вень планирования будет работать по такому принципу: если в дан­ный момент нет ни одной интерактивной задачи, готовой к выпол­нению (а это вполне реальная ситуация, если пользователи занима­ются редактированием текста), то ЦП передается счетным задачам, но добавляется одно условие: как только появляется хотя бы одна интерактивная задача, счетная задача прерывается и управление пе­редается блоку интерактивных задач. Это то, что касается первой функции управления процессами.
 
=== Управление подкачкой и буфером ввода. ===
 
Пусть большое количество людей сидит за компьютерами, и все одновременно запустили какие-то процессы. Вычислительная система не может принять для работы в мультипрограммном режиме все задачи — это слишком много. В этом случае образуется буфер ввода задач или буфер ввода процессов, то есть буфер, в котором аккумулируются те процессы, которые ожидают начала своей обра­ботки процессором. Возникает проблема очередности выбора про­цессов из этого буфера для начала обработки. Это задача планирова­ния буфера.
 
Задача планирования «подкачки» возникает тогда, когда процессор выполняет сразу несколько программ, и все они целиком не помещаются в оперативной памяти. В этом случае для продолже­ния вычислений время от времени может быть необходимо какие-то из обрабатываемых задач (или их фрагменты) откачивать на внеш­нее запоминающее устройство, а какие-то подкачивать в оператив­ную память.
 
Для решения задач планирования буфера ввода и «подкач­ки» также нужны алгоритмы планирования, но они не столь принци­пиальные, как при планировании времени ЦП.
 
В реальных системах часто совмещается буфер подкачки, то есть то пространство на внешних носителях, куда осуществляется откачка информации из оперативной памяти, и буфер ввода процес­сов.
 
Современные ОС часто осуществляют откачку не едини­цами блоков памяти процессов, а откачивается весь процесс. При этом возникают две проблемы: каков критерий замещения процесса и каков критерий выбора из буфера того процесса, который нам тре­буется ввести для мультипрограммной обработки. Самый простой вариант заключается в использовании времени нахождения процесса в том или ином состоянии. В первом случае, если решается вопрос об откачке процесса из числа обрабатываемых в область подкачки, то можно взять тот процесс, который дольше всего находится в со­стоянии обработки по астрономическому времени. Обратные дейст­вия могут быть симметричными, то есть можно брать из буфера ввода процессов тот процесс, который дольше всего там находится. Это простые и реальные алгоритмы планирования, и они могут видоиз­меняться в соответствии с критериями, выбираемыми по тем или иным соображениям. Например, один из критериев: все задачи де­лятся на две категории — задачи ОС (они рассматриваются в первую очередь, и среди них действует алгоритм оценки времени нахожде­ния их в конкретном месте) и все остальные задачи.
 
=== Управление разделяемыми ресурсами. ===
 
Пусть есть два процесса, которые работают на общем про­странстве оперативной памяти. При этом должны быть определен­ные средства, которые бы позволили синхронизовать доступ к раз­деляемой памяти, то есть создать условия, при которых обмен каж­дого из работающих процессов с общей оперативной памятью будет Происходить корректно. Это значит, что при каждом чтении инфор­мации из разделяемой памяти должно быть гарантировано, что все пользователи, которые начали писать что-то в эту память, уже этот процесс завершили — должна быть синхронизация по обмену с разде­ляемой памятью.
 
Кроме того, удобно, чтобы процессы, которые функциони­руют одновременно, могли взаимодействовать друг с другом. Для реализации этого во многих ОС имеются средства обмена сигналами между процессами, что является некоторой программной эмуляцией прерываний. Один процесс просит подать сигнал другому процессу. В другом процессе происходит прерывание его выполнения и пере­дача управления на некоторую предопределенную функцию, которая должна обработать полученный сигнал. Организация всех этих дей­ствий тоже входит в функции ОС.
 
=== Обработка прерываний. ===
 
В каждой вычислительной машине имеется предопределен­ный, заданный при разработке набор некоторых событий и аппарат­ных реакций на возникновение каждого из этих событий. Ситуация, возникающая при наступлении такого события и сопровождающаяся временным или окончательным прекращением выполнения последо­вательности команд одной программы и переходом к выполнению команд другой программы, называется прерыванием. Аппарат пре­рываний используется, например, для управления внешними устрой­ствами и для реализации возможности асинхронной работы с ними. Примером прерывания может служить прерывание по завершению обмена данными.
 
В момент возникновения прерывания действия аппаратуры вычислительной системы следующие:
 
* В некоторые специальные регистры аппаратно заносит­ся (сохраняется) информация о выполняемой в данный момент программе. Это минимальная информация, не­обходимая для начала обработки прерывания. Обычно в этот набор данных входит счетчик команд, регистр результата, указатель стека и несколько регистров об­щего назначения. Происходит так называемое малое «упрятывание».
* В специальный управляющий регистр, иногда называе­мым регистром прерываний, помещается код возник­шего прерывания.
* Запускается программа обработки прерываний, входя­щая в состав операционной системы. Эта программа производит анализ причины прерывания. Если преры­вание было фатальным (деление на ноль, например), то ОС прекращает выполнение программы, в которой воз­никло данное прерывание. Если же прерывание не фа­тальное, производится дополнительный анализ ситуа­ции и делается вывод о том, можно ли оперативно об­работать прерывание. Пример прерывания, которое всегда можно обработать оперативно — прерывание по таймеру. А прерывание, связанное, например, с прихо­дом информации по линии связи, нельзя обработать оперативно, так как предварительно надо подкачать про­грамму ОС, которая займется обработкой этого преры­вания. При этом сначала происходит полное «упряты­вание»: все регистры сохраняются в таблицах системы (а не в аппаратных регистрах, как раньше) и фиксиру­ется то, что некоторые фрагменты программы, находя­щиеся в оперативной памяти, могут быть перенесены (при необходимости) на внешнее устройство, а затем производится обработка прерывания и возврат из пре­рывания.
 
Можно выделить следующие пять основных типов прерыва­ний: внешние прерывания (при нажатии кнопки прерывания на пуль­те или при завершении интервала времени по сигналу таймера), прерывания при обращении к специальным функциям ОС, прерыва­ния от схем контроля ЭВМ (при каких-либо сбоях аппаратуры), пре­рывания по вводу-выводу и программные прерывания (например, при делении на ноль, при передаче сигналов между программами).
 
=== Защита ресурсов и установка ограничений на использо­вание ресурсов. ===
 
В вычислительной системе, работающей в режиме мульти­программирования, возникает проблема защиты памяти, то есть необхо­дим реализованный на аппаратном уровне механизм, обеспечиваю­щий защиту адресного пространства каждой из программ от несанк­ционированного доступа других программ.
 
Для вычислительных систем со страничной организацией памяти механизм защиты памяти может быть устроен, например, следующим образом: в таблице приписки, в которой отражено соот­ветствие между физической и виртуальной памятью, в строках, от­носящихся к страницам, не принадлежащим данной программе или еще не загруженным в оперативную память, находится код меньше нуля. При попытке обратиться к такой странице в системе возникает прерывание по защите памяти. Обрабатывая это прерывание, ОС про­веряет, действительно ли этой страницы памяти у данной програм­мы нет, и, если эта страница чужая, то ОС прекращает выполнение данного процесса с диагностикой обращения в чужую память. Если же какие то страницы еще не загружены в память, то ОС игнорирует прерывание, так как ошибки нет.
 
=== Персонификация пользователей ===
 
Современные многопользовательские ОС также решают за­дачу персонификации пользователей.
 
Персонификация — это возможность операционной системы идентифицировать конкретного пользователя и в соответствии с этим принимать те или иные действия, в частности, по защите дан­ных.
 
Персонификация пользователей может быть организована, например, иерархически (аналогично иерархическим файловым сис­темам). При этом существуют понятия «конкретный пользователь», «группа пользователей» и «все пользователи». Все пользователи де­лятся на группы, группы состоят из конкретных пользователей. Зная пользователя, группу, к которой он принадлежит, ОС имеет возмож­ность определить и контролировать разные права доступа к ресур­сам вычислительной системы для различных пользователей. Такая схема может быть многоуровневой (группы могут делиться на под­группы и т. д.) с соответственным распределением прав и возможно­стей.
 
=== Буферизация ввода/вывода ===
 
По аналогии со способами борьбы с разницей в скорости доступа к различным компонентам вычислительной системы опера­ционная система вводит в своих пределах программную буфериза­цию, которая также решает проблемы сглаживания времени доступа и проблемы синхронизации в целом. Сглаживание проблем, связан­ных с временем доступа, заключается в том, что практически каждая операционная система имеет КЭШ-буфера, которые аккумулируют обращения (образуют их очередь) к внешнему запоминающему уст­ройству (ВЗУ) аналогично аппаратной буферизации при работе с оперативной памятью. Это позволяет существенно оптимизировать операционную систему. Признаком наличия такой буферизации яв­ляется требование завершить выполнение операционной системы перед выключением машины. Степень этой буферизации определяет реальную эффективность системы.
== Принципы объектно-ориентированного программирования ==