Назначение, определение, типы, понятия



Лекция 3.1. Классификация программного обеспечения

Содержание

3.1.1 Уровни и программы системного программного обеспечения. 1

3.1.2. Операционные системы.. 2

Назначение, определение, типы, понятия. 2

Процессы и потоки. 7

Взаимоблокировка. 11

Управление памятью.. 13

3.1.2. Драйверы устройств. 18

3.1.3. Файловые системы.. 21

Файловые системы Microsoft Windows. 23

Уровни и программы системного программного обеспечения

 

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

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

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

   

Рис. 3.1. Уровни и программы системного программного обеспечения

 

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

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

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

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

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

Рассмотрим более подробно программы, входящие в системное программное обеспечение компьютера.

 

Операционные системы

Назначение, определение, типы, понятия

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

Графический редактор Office Web-браузер
Компиляторы Редакторы Интерпретаторы команд

Операционная система

Машинный язык

Микроархитектура

Физические устройства

Рис. 3.2. Общая структура компьютера

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

Обычно машинный язык содержит от 50 до 300 команд, служащих преимущественно для перемещения данных по компьютеру, выполнения арифметических операций и операций сравнения величин. Управление устройствами на этом уровне осуществляется с помощью загрузки определенных данных в специальные регистры устройств. Например, диску можно дать команду чтения, записав в его регистры адрес места на диске, адрес в основной памяти, число байтов для чтения и направление действия (чтение или запись). В действительности нужно передавать большее количество параметров, а структура операции, возвращаемой диском, достаточно сложна. Кроме того, при программировании ввода/вывода очень важную роль играют временные соотношения.

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

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

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

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

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

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

Как уже упоминалось, архитектура (система команд, организация памяти, ввод/вывод данных и структура шин) традиционных компьютеров на уровне машинного языка неудобна для работы с программами, особенно в процессе ввода/вывода данных. Для примера кратко рассмотрим процедуру ввода/вывода данных с гибкого диска через микросхемы контроллера, используемого на большинстве персональных компьютеров с процессором Intel. Контроллер имеет 16 команд, каждая из которых задается передачей от 1 до 9 байт в регистр устройства. Это команды чтения и записи данных, перемещения головки диска, форматирования дорожек, инициализации, распознавания, установки в исходное положение и калибровки контроллера и приводов.

Основными командами являются команды read и write (чтение и запись). Каждая из них требует 13 параметров, упакованных в 9 байт. Эти параметры определяют адрес блока на диске, который нужно прочитать, количество секторов на дорожке, физический режим записи, расстановку промежутков между секторами. Они же определяют, что делать с меткой адреса данных, которые были удалены. После завершения операции контроллер возвращает упакованные в 7 байт 23 параметра, отражающие наличие и типы ошибок. Кроме этого, программист при работе с гибким диском должен также постоянно знать, включен двигатель или нет. Если двигатель выключен, его следует включить (с длительным ожиданием запуска) прежде, чем данные будут прочитаны или записаны. Двигатель не может оставаться включенным слишком долго, так как гибкий диск изнашивается. Программист вынужден выбирать между длинными задержками во время загрузки и изнашивающимися гибкими дисками (с вероятностью потери данных на них).

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

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

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

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

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

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

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

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

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

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

Встроенные операционные системы используются в карманных компьютерах и встроенных системах. Карманный компьютер или PDA (Personal Digital Assistant – персональный цифровой помощник) – это маленький компьютер, помещающийся в кармане и выполняющий небольшой набор функций, – телефонной записной книжки и блокнота. Встроенные системы, управляющие действиями устройств бытовой техники, обычно не считаются компьютерами. Они часто обладают теми же характеристиками, что и системы реального времени, но при этом имеют особые размер, память и ограничения мощности, что выделяет их в отдельный класс. Примерами таких операционных систем являются PalmOS и Windows CE (Consumer Electronics – бытовая техника).

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

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

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

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

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

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

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

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

Каждый файл в иерархии каталогов можно определить, задав его имя пути, называемое также полным именем файла. Путь начинается из вершины структуры каталогов, называемой корневым каталогом. Такое абсолютное имя пути состоит из списка каталогов, которые нужно пройти от корневого каталога к файлу, с разделением отдельных компонентов. Отдельные компоненты в ОС UNIX разделяются косой чертой /, а в MS-DO S и Windows – обратной косой чертой \.

 

Процессы и потоки

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

Процессы

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

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

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

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

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

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

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

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

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

Процессы

0

1

n-2

n-1

            Планировщик

Рис. 3.3. Нижний уровень ОС, отвечающий за прерывание и планирование

 

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

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

Потоки

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

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

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

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

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

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

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

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

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

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

Концепция потоков полезна также в системах с несколькими процессорами, где возможен настоящий параллелизм.

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

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

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

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

 

Взаимоблокировка

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

Часто при выполнения прикладных задач процесс нуждается в исключительном доступе не к одному, а к нескольким ресурсам. Предположим, что каждый из двух процессов хочет записать отсканированный документ на CD. Процесс A запрашивает разрешение на использование сканера и получает его. Процесс B построен по-другому, поэтому он сначала запрашивает устройство для записи CD и также получает его. Затем процесс A обращается к устройству для записи компакт-дисков, но запрос отклоняется до тех пор, пока это устройство занято процессом B. Но вместо того, чтобы освободить устройство для записи CD, B запрашивает сканер. В этот момент процессы заблокированы и будут вечно оставаться в таком состоянии. Такая ситуация называется тупиковой или взаимоблокировкой.

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

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

Взаимоблокировки могут произойти в системах баз данных. Программа может заблокировать несколько записей, чтобы избежать ситуации конкуренции. Если процесс A блокирует запись R1, процесс B блокирует запись R2, а затем каждый процесс из них попытается заблокировать чужую запись, то система также окажется в тупике. Таким образом, взаимоблокировки появляются при работе, как с аппаратными, так и с программными ресурсами.

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

Ресурсы бывают двух типов: выгружаемые и невыгружаемые. Выгружаемый ресурсможно беспрепятственно забирать у владеющего им процесса. Таким ресурсом является память. Рассмотрим систему с пользовательской памятью 32 Мбайт, одним принтером и двумя процессами по 32 Мбайт, каждому из которых нужна печать. Процесс Aзапрашивает и получает принтер, готовит данные для печати. Еще не закончив подготовку, он превышает выделенное ему время и выгружается на диск в область подкачки. Начинает работать процесс Bи пытается обратиться к принтеру. Но принтер занят процессом A. Возникает потенциальная тупиковая ситуация, потому что процесс A использует принтер, а процесс Взанимает память, и ни один из них не может продолжать работу без ресурса, удерживаемого другим. Однако можно забрать память у процесса В, переместив его на диск в область подкачки, и скачать с диска в память процесс А. Теперь процесс Аможет закончить подготовку, выполнить печать и освободить принтер. Взаимоблокировки не происходит.

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

Последовательность событий, необходимых для использования ресурса, имеет следующий вид:

Запрос ресурса.

Использование ресурса.

Возврат ресурса.

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

Установлено, что для возникновения взаимоблокировки должны выполняться 4 условия:

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

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

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

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

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

Для исключения взаимоблокировок используются четыре стратегии.

Пренебрежение проблемой в целом. При использовании этой стратегии могут произойти неприятности.

Обнаружение и восстановление. При возникновении взаимоблокировки предпринимают какие-либо действия.

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

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

Управление памятью

Память представляет собой важный ресурс, требующий тщательного управления. Несмотря на то, что сегодня память среднего домашнего ПК в тысячи раз превышает ресурсы IBM 7094 — машины, бывшей в начале 60-х годов самой мощной в мире, – программы все равно увеличиваются в размере быстрее, чем память.

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

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

Системы управления памятью делят на два класса. К первому классу относятся системы, перемещающие процессы между оперативной памятью и диском во время их выполнение, то есть осуществляющие подкачку процессов целиком (swapping) или постранично (paging). Ко второму – те, которые этого не делают. Второй класс систем проще. При этом следует помнить, что обычный и постраничный варианты подкачки являются искусственными процессами, вызванными отсутствием достаточного количества оперативной памяти для одновременного хранения всех программ. Если когда-нибудь ОЗУ настолько увеличится в размерах, что ее будет достаточно, принцип подкачки может стать устаревшим. С другой стороны, поскольку ПО растет еще быстрее, чем память, то вполне возможно, что потребность в эффективном управлении памятью будет существовать всегда. В 80-е годы использовали системы разделения времени для работы десятков пользователей на машинах VAX с объемом памяти 4 Мбайт. Сейчас рекомендуется для индивидуальной работы в системе Windows 2000 устанавливать на компьютер не менее 64 Мбайт оперативной памяти. Дальнейшее развитие в сторону мультимедийных систем накладывает еще большие требования на размер оперативной памяти.

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


Дата добавления: 2021-01-20; просмотров: 168; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!