13 531
правка
Изменения
→Понятие операционной системы (ОС). Основные концепции современных ОС (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.
При наступлении одного из этих событий планировщик ОС выбирает из процессов, готовых к выполнению, некоторый процесс и передает ему ресурсы ЦП. А выбирает он этот процесс в зависимости от того алгоритма планирования, который реализован в данной конкретной ОС. Первый способ: процесс может выбираться случайно. Второй способ: происходит как бы последовательный обход процессов, то есть сначала начинает работать один из процессов, затем (после наступления одного из указанных трех событий) время ЦП предоставляется следующему по порядку процессу из готовых к выполнению. Третьим критерием, по которому отбирается очередная задача, может быть время, в течение которого данный процесс не обслуживался ЦП. В этом случае система может выбирать процесс, у которого такое время самое большое. Эти алгоритмы должны быть реализованы в ОС, а значит, они должны быть простыми, иначе система будет работать неэффективно. ОС, работающие по описанному принципу, называются '''ОС разделения времени'''.
==== ОС реального времени ====
ОС реального времени используются в вычислительных системах, ориентированных на решения задач, для которых главным, решающим требованием к вычислительной системе является время гарантированной реакции системы на возникновение того или иного события из набора заранее предопределенных событий (например, задачи, связанные с управлением действиями систем самолета в режиме автопилота). Обычно ОС реального времени имеют свое специфическое устройство, и в них используются достаточно простые алгоритмы.
==== Смешанные ОС ====
Реально, большинство современных ОС являются смешанными системами, то есть у них присутствует в элементах планирования использования ЦП как алгоритмы, позволяющие управлять счетными задачами, так и алгоритмы, позволяющие управлять интерактивными задачами либо задачами отладочными, для которых надо немного времени ЦП.
Примером такой организации планирования ЦП может быть следующая схема. Планировщик построен по двухуровневой схеме. Мы считаем, что множество задач может содержать, предположим, счетные задачи и интерактивные задачи. Первый уровень определяет приоритет между двумя классами задач и либо отдает ЦП сначала счетной задаче, либо интерактивной задаче. А второй уровень определяет то, о чем мы говорили перед этим, то есть как выбрать задачу в пределах одного класса и как ее прервать. Такая смешанная система может работать следующим образом. Первый уровень планирования будет работать по такому принципу: если в данный момент нет ни одной интерактивной задачи, готовой к выполнению (а это вполне реальная ситуация, если пользователи занимаются редактированием текста), то ЦП передается счетным задачам, но добавляется одно условие: как только появляется хотя бы одна интерактивная задача, счетная задача прерывается и управление передается блоку интерактивных задач. Это то, что касается первой функции управления процессами.
=== Управление подкачкой и буфером ввода. ===
Пусть большое количество людей сидит за компьютерами, и все одновременно запустили какие-то процессы. Вычислительная система не может принять для работы в мультипрограммном режиме все задачи — это слишком много. В этом случае образуется буфер ввода задач или буфер ввода процессов, то есть буфер, в котором аккумулируются те процессы, которые ожидают начала своей обработки процессором. Возникает проблема очередности выбора процессов из этого буфера для начала обработки. Это задача планирования буфера.
Задача планирования «подкачки» возникает тогда, когда процессор выполняет сразу несколько программ, и все они целиком не помещаются в оперативной памяти. В этом случае для продолжения вычислений время от времени может быть необходимо какие-то из обрабатываемых задач (или их фрагменты) откачивать на внешнее запоминающее устройство, а какие-то подкачивать в оперативную память.
Для решения задач планирования буфера ввода и «подкачки» также нужны алгоритмы планирования, но они не столь принципиальные, как при планировании времени ЦП.
В реальных системах часто совмещается буфер подкачки, то есть то пространство на внешних носителях, куда осуществляется откачка информации из оперативной памяти, и буфер ввода процессов.
Современные ОС часто осуществляют откачку не единицами блоков памяти процессов, а откачивается весь процесс. При этом возникают две проблемы: каков критерий замещения процесса и каков критерий выбора из буфера того процесса, который нам требуется ввести для мультипрограммной обработки. Самый простой вариант заключается в использовании времени нахождения процесса в том или ином состоянии. В первом случае, если решается вопрос об откачке процесса из числа обрабатываемых в область подкачки, то можно взять тот процесс, который дольше всего находится в состоянии обработки по астрономическому времени. Обратные действия могут быть симметричными, то есть можно брать из буфера ввода процессов тот процесс, который дольше всего там находится. Это простые и реальные алгоритмы планирования, и они могут видоизменяться в соответствии с критериями, выбираемыми по тем или иным соображениям. Например, один из критериев: все задачи делятся на две категории — задачи ОС (они рассматриваются в первую очередь, и среди них действует алгоритм оценки времени нахождения их в конкретном месте) и все остальные задачи.
=== Управление разделяемыми ресурсами. ===
Пусть есть два процесса, которые работают на общем пространстве оперативной памяти. При этом должны быть определенные средства, которые бы позволили синхронизовать доступ к разделяемой памяти, то есть создать условия, при которых обмен каждого из работающих процессов с общей оперативной памятью будет Происходить корректно. Это значит, что при каждом чтении информации из разделяемой памяти должно быть гарантировано, что все пользователи, которые начали писать что-то в эту память, уже этот процесс завершили — должна быть синхронизация по обмену с разделяемой памятью.
Кроме того, удобно, чтобы процессы, которые функционируют одновременно, могли взаимодействовать друг с другом. Для реализации этого во многих ОС имеются средства обмена сигналами между процессами, что является некоторой программной эмуляцией прерываний. Один процесс просит подать сигнал другому процессу. В другом процессе происходит прерывание его выполнения и передача управления на некоторую предопределенную функцию, которая должна обработать полученный сигнал. Организация всех этих действий тоже входит в функции ОС.
=== Обработка прерываний. ===
В каждой вычислительной машине имеется предопределенный, заданный при разработке набор некоторых событий и аппаратных реакций на возникновение каждого из этих событий. Ситуация, возникающая при наступлении такого события и сопровождающаяся временным или окончательным прекращением выполнения последовательности команд одной программы и переходом к выполнению команд другой программы, называется прерыванием. Аппарат прерываний используется, например, для управления внешними устройствами и для реализации возможности асинхронной работы с ними. Примером прерывания может служить прерывание по завершению обмена данными.
В момент возникновения прерывания действия аппаратуры вычислительной системы следующие:
* В некоторые специальные регистры аппаратно заносится (сохраняется) информация о выполняемой в данный момент программе. Это минимальная информация, необходимая для начала обработки прерывания. Обычно в этот набор данных входит счетчик команд, регистр результата, указатель стека и несколько регистров общего назначения. Происходит так называемое малое «упрятывание».
* В специальный управляющий регистр, иногда называемым регистром прерываний, помещается код возникшего прерывания.
* Запускается программа обработки прерываний, входящая в состав операционной системы. Эта программа производит анализ причины прерывания. Если прерывание было фатальным (деление на ноль, например), то ОС прекращает выполнение программы, в которой возникло данное прерывание. Если же прерывание не фатальное, производится дополнительный анализ ситуации и делается вывод о том, можно ли оперативно обработать прерывание. Пример прерывания, которое всегда можно обработать оперативно — прерывание по таймеру. А прерывание, связанное, например, с приходом информации по линии связи, нельзя обработать оперативно, так как предварительно надо подкачать программу ОС, которая займется обработкой этого прерывания. При этом сначала происходит полное «упрятывание»: все регистры сохраняются в таблицах системы (а не в аппаратных регистрах, как раньше) и фиксируется то, что некоторые фрагменты программы, находящиеся в оперативной памяти, могут быть перенесены (при необходимости) на внешнее устройство, а затем производится обработка прерывания и возврат из прерывания.
Можно выделить следующие пять основных типов прерываний: внешние прерывания (при нажатии кнопки прерывания на пульте или при завершении интервала времени по сигналу таймера), прерывания при обращении к специальным функциям ОС, прерывания от схем контроля ЭВМ (при каких-либо сбоях аппаратуры), прерывания по вводу-выводу и программные прерывания (например, при делении на ноль, при передаче сигналов между программами).
=== Защита ресурсов и установка ограничений на использование ресурсов. ===
В вычислительной системе, работающей в режиме мультипрограммирования, возникает проблема защиты памяти, то есть необходим реализованный на аппаратном уровне механизм, обеспечивающий защиту адресного пространства каждой из программ от несанкционированного доступа других программ.
Для вычислительных систем со страничной организацией памяти механизм защиты памяти может быть устроен, например, следующим образом: в таблице приписки, в которой отражено соответствие между физической и виртуальной памятью, в строках, относящихся к страницам, не принадлежащим данной программе или еще не загруженным в оперативную память, находится код меньше нуля. При попытке обратиться к такой странице в системе возникает прерывание по защите памяти. Обрабатывая это прерывание, ОС проверяет, действительно ли этой страницы памяти у данной программы нет, и, если эта страница чужая, то ОС прекращает выполнение данного процесса с диагностикой обращения в чужую память. Если же какие то страницы еще не загружены в память, то ОС игнорирует прерывание, так как ошибки нет.
=== Персонификация пользователей ===
Современные многопользовательские ОС также решают задачу персонификации пользователей.
Персонификация — это возможность операционной системы идентифицировать конкретного пользователя и в соответствии с этим принимать те или иные действия, в частности, по защите данных.
Персонификация пользователей может быть организована, например, иерархически (аналогично иерархическим файловым системам). При этом существуют понятия «конкретный пользователь», «группа пользователей» и «все пользователи». Все пользователи делятся на группы, группы состоят из конкретных пользователей. Зная пользователя, группу, к которой он принадлежит, ОС имеет возможность определить и контролировать разные права доступа к ресурсам вычислительной системы для различных пользователей. Такая схема может быть многоуровневой (группы могут делиться на подгруппы и т. д.) с соответственным распределением прав и возможностей.
=== Буферизация ввода/вывода ===
По аналогии со способами борьбы с разницей в скорости доступа к различным компонентам вычислительной системы операционная система вводит в своих пределах программную буферизацию, которая также решает проблемы сглаживания времени доступа и проблемы синхронизации в целом. Сглаживание проблем, связанных с временем доступа, заключается в том, что практически каждая операционная система имеет КЭШ-буфера, которые аккумулируют обращения (образуют их очередь) к внешнему запоминающему устройству (ВЗУ) аналогично аппаратной буферизации при работе с оперативной памятью. Это позволяет существенно оптимизировать операционную систему. Признаком наличия такой буферизации является требование завершить выполнение операционной системы перед выключением машины. Степень этой буферизации определяет реальную эффективность системы.
== Принципы объектно-ориентированного программирования ==