Главная страница

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


Скачать 0.71 Mb.
НазваниеЛекция Структура и основные компоненты вычислительной системы
Дата13.09.2022
Размер0.71 Mb.
Формат файлаdoc
Имя файлаЛекции Системное ПО.doc
ТипЛекция
#675338
страница5 из 15
1   2   3   4   5   6   7   8   9   ...   15

Назначение и основные функции ОС



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

Все это мы будем называть ресурсами вычислительной системы.

Любая ОС оперирует некоторыми сущностями, которые во многом характеризуют свойства ОС. К таким сущностям могут относиться понятия файла, процесса, объекта и т.д. Конкретно, каждая ОС имеет свой набор этих сущностей, к примеру, если мы возьмем ОС WinNT, то к таким сущностям можно отнести понятие объекта ОС, и уже через это понятие, через управление этими ресурсами, предоставляются все возможные сервисные функции ОС. Если мы посмотрим на ОС Unix, то там такой сущностью является в первую очередь понятие файла, во вторую очередь — понятие процесса. И, возвращаясь, к последнему, процесс — это некоторая сущность (мы не говорим “объект” дабы не было путаницы с ООП), которая присутствует практически во всех ОС. Давайте попробуем определить понятие процесса, как одного из фундаментальных.

Итак, процесс — это программа, имеющая права собственности на ресурсы.

Рассмотрим две программы (код-данные) и рассмотрим все те ресурсы, которые принадлежат программе (пространство ОЗУ, данные на ВЗУ, права владения линией связи и т.п.). И если у двух программ множества ресурсов, принадлежащих им, совпадают, то в этом случае мы не можем говорить, что эти две программы образуют два процесса. Это один процесс.

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

Давайте посмотрим, что понимается под “управлением процессами”. Это достаточно просто:

1. Управление использованием времени ЦП. Планирование ЦП.

В какой момент времени, какая из задач будет использовать время ЦП.

Управление подкачкой и буфером ввода процесса.

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

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

3. Управление разделяемыми ресурсами.

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

 

 

Теперь давайте посмотрим на структуру ОС. Практически любая ОС имеет понятие ядра, ядра операционной системы. Ядром обычно является резидентная часть ОС (то есть та часть, которая не участвует в свопинге), работающая специализированном режиме (том самом, о котором говорилось в прошлой лекции). В функции ядра входит базовые средства управления основными сущностями ОС, обработка прерываний, а также может входить набор программ, обеспечивающих управление некоторыми физическими устройствами. (Мы иногда будем называть программы, управляющие физическими устройствами — драйверами устройств). Например, в ядро ОС может и должен входить драйвер ОЗУ. Далее вокруг ядра наращиваются программы управления ресурсами вычислительной системы. Первый уровень в основном состоит из программ управления физическими устройствами или драйверов физических устройств. Следующий уровень — это управление логическими устройствами. И так далее — таких уровней может быть достаточно много. Просто, чем дальше от ядра, тем большая абстрактность имеет место. У нас где-то могут появиться драйверы управления файлами, а на самом деле они связаны с драйверами управления логическими дисками, а те в свою очередь — с драйверами физических дисков.

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

Давайте теперь перейдем к более подробному рассмотрению основных функций ОС.

1. Управление использованием времени ЦП.

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

Первая ситуация: у нас есть большое число задач, требующих большого объема вычислительных мощностей системы. И эти задачи должны выполняться в одной вычислительной системе. Что будет являться критерием эффективности при работе системы для выполнения данных задач. Какой набор параметров можно взять и сказать, что если они маленькие — то хорошо, или если они большие, то хорошо или наоборот. Для такой ситуации критерием эффективности является степень загрузки ЦП. Если ЦП простаивает мало (либо ОС сама загружает процессор), то есть если потерянное время маленькое, то такая система работает хорошо и эффективно. Как добиться такой работы? С помощью хорошего алгоритма планирования. Мы запускаем для обработки тот набор задач, который у нас есть. То есть в системе работает режим мультипрограммирования. Алгоритм передачи ЦП от одного процесса к другому будет следующий — если ЦП выделен одному из процессов, то он будет владеть ЦП до одного из следующих моментов:

обращение к внешнему устройству

завершение процесса

зафиксированный факт зацикливания процесса

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

Теперь рассмотрим следующий пример. Несколько человек сидят за терминалами и работают в текстовых редакторах. ОС — пакетная. Тогда, если один человек не будет нажимать клавиш, то время ЦП будет “висеть” у него (обмен не выполняется, не зациклен и не завершен), а другие пользователи будут обязаны ждать. То есть общая производительность системы несоизмеримо падает. Это означает, что алгоритм, который хорош для пакетной системы, здесь неприменим. Поэтому для задач, связанных с подобными режимами работы нужен другой алгоритм разделения времени. Какой? Что будет являтьсяпризнаком того — хорошо система работает или плохо? В качестве критерия эффективности в данной ситуации может использоваться время ожидания реакции на какое-либо событие (нажатия на клавишу и соответственной реакцией на это текстового процессора, например). Чем эффективнее работает система, тем среднестатистическое время ожидания — меньше.

Рассмотрим прежнюю ситуацию, когда в обработке находится сразу несколько процессов. И наша задача распределить время ЦП таким образом, чтобы время реакции системы на запрос пользователя было минимальным, либо хотя бы гарантированным. И вот следующая схема: в системе используется некоторый параметр (dt), который называется квантом времени. В общем случае квант времени это есть некоторое значение, которое может меняться при настройке системы. Далее, все множество процессов, которое находится в мультипрограммной обработке, делится на два подмножества.

Первое подмножество — это те процессы, которые еще не готовы к продолжению выполнения (ожидающие обмена, подкачки и т.п.).

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

запрос на обмен

завершение процесса

исчерпание выделенного процессу кванта времени

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

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

ОС с перечисленными выше свойствами называются ОС разделения времени.

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

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

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

Реально для ОС этого класса используются достаточно простые алгоритмы планирования.

Подводя некоторую черту под этой первой функцией управления временем ЦП, следует обратить внимание на два факта:

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

мы с вами рассмотрели три типовых системы (пакетные, разделения времени, реального времени). На сегодняшний день можно говорить о том, что система реального времени — это отдельный класс ОС. Например, Win95, семейство Unix и многие другие не являются системами реального времени. Система реального времени — отдельная ОС. Первые две ОС можно с эмулировать. Часто же общеупотребимые ОС являются смежными, то есть в них есть как пакетные средства, так и средства разделения времени. Примером такой схемы организации планирования может быть следующее — планировщик является двухуровневым (в системе могут быть счетные и интерактивные задачи), он определяет сначала — какому классу задач отдать приоритет, а на втором уровне он в пределах одного класса выбирает задачу на выполнение. Если в данный момент нет ни одной готовой к выполнению интерактивной задачи, то ЦП передается счетным задачам, но с условием — как только появляется хотя бы одна интерактивная задача — счетная задача прерывается и управление передается интерактивной задаче.

Это все, что касается первой функции.

 

2. Управление подкачкой и буфером ввода.

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

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

 

3. Управление разделяемыми ресурсами.

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

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

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

Лекция 6

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

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

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

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

Мы рассмотрели, что есть пакетная ОС и какие алгоритмы отдачи времени ЦП приемлемы для пакетной ОС, было сказано про ОС разделения времени.

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

Предварительно мы говорили, что любая ОС реализует в себе буферизацию ввода/вывода. Буферизация в ОС — есть одна из основных функций. И по аналогии борьбы с разными скоростями доступа к различным компонентам вычислительной системы, ОС вводит в своих пределах программную буферизацию запросов на ввод/вывод, которая также решает проблемы сглаживания времени доступа, а также проблемы синхронизации в целом. Синхронизацию в целом можно пояснить примером с разделением устройства печати. А сглаживание доступа заключается в том, что практически каждая современная ОС имеет кэш-буфера, которые аккумулируют обращения к ВЗУ. То есть суть такова, что также как и при работе ОЗУ, реальные обмены могут не происходить, этот механизм организован похоже, за тем исключением, что реализован он программно, в отличие от аппаратной реализации буферизации ОЗУ. Это позволяет существенно оптимизировать ОС. Признаком наличия такой буферизации является требование прекратить выполнение ОС перед завершением работы вычислительной системы (например, MS DOS такого требования не предъявляет — компьютер под его управлением можно включать и выключать в любое время без потерь, а в таких системах, как Unix, Win95 и других, подобное выключение машины может привести к потере информации, так как в момент выключения часть данных может находиться еще в буфере.) Степень этой буферизации определяет реальную эффективность системы.

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

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

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

 

Свойства файлов

 

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

    2. Файл независим от расположения. Для работы с файлом не требуется информация о месторасположении данных на ВЗУ.

    1. Защита файлов. На самом деле многие стратегические решения повторяются как на аппаратном уровне, так и на уровне ОС. Если мы вспомним мультипрограммный режим, то одной из проблем была возможность защиты памяти. Файловая система может также, как и ОС быть однопользовательской, либо многопользовательской. Во втором случае мы имеем ситуацию, когда возможно обеспечить корректную работу нескольких пользователей (аналогично мультипрограммному режиму). Примером некорректной работы могут служить MS DOS, MS Windows — при ошибке в одном процессе могут быть испорчены и сама ОС и соседние процессы. Корректная работа означает, что при организации многопользовательской системы никто не может испортить чужой процесс или файл. Многопользовательская файловая система означает защиту от несанкционированного доступа к информации файлов. Одним из атрибутов файловых систем является атрибут защиты. Вообще, реальная ОС должна обеспечивать защиту не только файлов, но и всех ресурсов, принадлежащих процессам, запущенным от имени одного пользователя.

Практически каждая ОС обеспечивает набор функций ввода/вывода для работы с файлами.

Обычно этот набор состоит из следующих функций:

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

    • чтение/запись. Обычно обмен с файлами организуется некоторыми блоками данных. Причем этот блок данных, которым происходит обмен, несет двоякую функцию. С одной стороны — для любой вычислительной системы известен размер блока, наиболее эффективного для обмена (некоторые программно-аппаратные размеры, зависящие от конкретных устройств). С другой стороны эти блоки данных при реальном обмене могут варьироваться достаточно произвольно программистом. И в функции чтения/записи обычно фигурирует размер блока данных для обмена и количество блоков, которые следует прочесть или записать. От выбранного размера блока может зависеть эффективность программы. Например, эффективный размер — 256kb, а программы выполняет обмены по 128kb, имеет место неэффективность (количество обращений будет больше), этот процесс может быть сглажен ОС, если у нее хорошо организована буферизация. Плюс к этому с каждым открытым файлом связывается понятие файлового указателя. Этот указатель по аналогии с регистром счетчика команд в процессе в каждый момент времени показывает на точку внутри файла:

Указатель: Файл:

 

Блок 0

->

Блок 1

 

...

 

Блок N-1

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

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

Указатель, это некоторая переменная, доступная для программы. Она создается в момент открытия файла.

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

 

Структура файловой системы

Давайте рассмотрим некоторое пространство ВЗУ и рассмотрим, как мы можем организовать файлов в пределах этого пространств.
1   2   3   4   5   6   7   8   9   ...   15


написать администратору сайта