Особенности методов построения ОС

  • docx
  • 14.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л2-01326.docx

 Особенности методов построения ОС

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

К таким базовым концепциям относятся:

1.       Способы построения ядра системы

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


 

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

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

Наличие нескольких прикладных сред дает возможность в рамках одной ОС одновременно выполнять приложения, разработанные для нескольких ОС. Многие современные операционные системы поддержи- вают одновременно прикладные среды MS-DOS, Windows, UNIX (POSIX), OS/2 или хотя бы некоторого подмножества из этого популяр- ного набора. Концепция множественных прикладных сред наиболее просто реализуется в ОС на базе микроядра, над которым работают различные серверы, часть которых реализуют прикладную среду той или иной операционной системы.

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


 

2.       Подсистема управления процессами

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

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

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

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

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


 

В настоящее время в большинстве операционных систем определе- ны два типа единиц работы. Более крупная единица работы, обычно но- сящая название процесса, или задачи, требует для своего выполнения нескольких более мелких работ, для обозначения которых используют термины «поток» или «нить».

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

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

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

Существует 3 основных состояния процесса:

·      готов;

·      выполняется;

·      блокирован.

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

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


 

виртуальным адресным пространством, так что ни один процесс не мо- жет получить прямого доступа к командам и данным другого процесса.

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

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

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

Потоки возникли в операционных системах как средство распарал- леливания вычислений. Конечно, задача распараллеливания вычисле- ний в рамках одного приложения может быть решена и традиционными способами.

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

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


 

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

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

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

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

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


 

Использование потоков связано не только со стремлением повысить производительность системы за счет параллельных вычислений, но и с целью создания более читабельных, логичных программ. Введение не- скольких потоков выполнения упрощает программирование. Например, в задачах типа «писатель-читатель» один поток выполняет запись в бу- фер, а другой считывает записи из него. Поскольку они разделяют об- щий буфер, не стоит их делать отдельными процессами. Другой пример использования потоков управление сигналами, такими как прерывание с клавиатуры (del или break). Вместо обработки сигнала прерывания один поток назначается для постоянного ожидания поступления сигна- лов. Таким образом, использование потоков может сократить необходи- мость в прерываниях пользовательского уровня. В этих примерах не столь важно параллельное выполнение, сколь важна ясность программы. Наибольший эффект от введения многопоточной обработки дости- гается в мультипроцессорных системах, в которых потоки, в том числе и принадлежащие одному процессу, могут выполняться на разных про-

цессорах действительно параллельно не псевдопараллельно).

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

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

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

В системах с виртуальной памятью в начальный момент может за-

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


 

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

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


 

Скачано с www.znanio.ru