Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
54
Добавлен:
25.03.2021
Размер:
122.22 Кб
Скачать

Глава 1. Операционные системы и среды.

§1. Системное программное обеспечение ЭВМ.

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

В состав системного программного обеспечения входят:

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

2.Системы управления файлами.

3.Интерфейсные оболочки для взаимодействия пользователя с ОС и операционные среды.

4.Системы программирования.

5.Утилиты.

6.Системы управления базами данных.

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

обеспечение работы пользовательских приложений и систем программирования; прием и обработка пользовательских команд;

прием и исполнение запросов на запуск, приостановку и остановку других программ; загрузка программ, подлежащих исполнению, в оперативную память; передача управления программе и выполнение программы процессором; идентификация всех программ и данных;

обеспечение работы системы управления файлами и систем управления базами данных; управление операциями ввода-вывода; распределение памяти; диспетчеризация задач;

поддержка механизмов обмена данными между исполняемыми программами; защита памяти, в том числе для защиты системы от пользователя, одного

пользовательского приложения от другого.

2.Система управления файлами или файловая система — это система организации, хранения

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

3.Интерфейсные оболочки для взаимодействия пользователя с ОС и операционные среды. Операционная среда – это интерфейс, необходимый прикладным программам для

обращения к системным ресурсам ОС с целью получения определенного сервиса, например, выполнения операции ввода/вывода, получения или освобождения участка памяти и т. д. Работа операционной среды определяется прикладными программными интерфейсами API (Application Program Interface).

Классическими примерами интерфейсных оболочек с соответствующими операционными средами являются:

различные варианты графического интерфейса X Window в системах семейства UNIX (например K Desktop Environment и Linux);

PM Shell или Object Desktop в OS/2 с графическим интерфейсом Presentation Manager;

графический интерфейс Explorer в системах семейства Windows.

Отметим, что в семействе ОС компании Microsoft с интерфейсом Explorer заменяемой является только интерфейсная оболочка, тогда как сама операционная среда, интегрированная в ОС, является неизменной.

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

4. Система программирования (IDE [Integrated Development Environment]) типа Borland C++, Borland Delphi включает в себя:

трансляторы;

библиотеки подпрограмм;

редакторы:

1

компоновщики;

отладчики.

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

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

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

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

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

§2. Определение ядра операционной системы. Все модули ОС делятся на две группы:

модули ядра, которые выполняют основные функции ОС и включают в себя планировщик (диспетчер), драйверы устройств ввода-вывода, файловую систему, сетевую систему;

модули, выполняющие вспомогательные функции ОС, то есть утилиты.

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

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

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

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

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

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

2

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

Так как ядро выполняет все основные функции ОС, то чаще всего именно ядро становится той частью ОС, которая работает в привилегированном режиме (рис. 3.3). Именно это свойство (то есть работа в привилегированном режиме) является основным определением понятия «ядро».

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

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

§3. Определение задачи.

Задача – это набор операций, предназначенный для выполнения логически законченной функции системы. Принято различать две разновидности задачи: процессы и потоки.

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

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

У потоков есть определенные недостатки и преимущества перед процессами.

Преимущества потоков:

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

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

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

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

Недостатки потоков:

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

3

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

Узадач есть следующие свойства:

1.Приоритет.

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

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

2. Дескриптор.

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

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

3. Контекст.

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

4. Состояние.

Задача может находиться в одном из трех состояний:

1)активная задача (исполнение): задача выполняется системой в текущей момент времени;

2)готовая задача (готовность): задача готова к выполнению и ожидает свой очереди;

3)блокированная задача (ожидание): выполнение задачи приостановлено до возникновения определенного события, например, освобождения необходимого ресурса, поступления ожидаемого сообщения, завершения интервала ожидания и т.п.

5. Возможность многократного запуска.

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

6. Реентерабельность.

Возможность без негативных последствий временно прервать выполнение задачи, а затем возобновить ее выполнение.

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

4

§4. Диспетчеризация (планирование) задач.

Диспетчер (планировщик) задач выполняет следующие функции:

1)определение момента времени для смены выполняемой задачи;

2)выбор задачи для выполнения из очереди готовых задач;

3)переключение контекстов задач.

Первые две задачи решаются на программном уровне, а последняя – на аппаратном.

FIFO (First In, First Out)

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

Круговая (циклическая) многозадачность «round robin»

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

Приоритетная многозадачность

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

Приоритетная многозадачность

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

Адаптивная (равнодоступная) многозадачность

1.Приоритет задачи, которая слишком долго не запускается на выполнение,

повышается.

2.Приоритет задачи, которая слишком долго выполняется, уменьшается.

Например, в системе QNX используется следующая адаптивная схема:

по истечении кванта времени (при условии, что задача не блокировалась), ее приоритет уменьшается на 1, если другая задача с таким же приоритетом находится в готовом состоянии;

если задача с пониженным приоритетом не выполняется в течение одной секунды, ее приоритет повышается на 1 (приоритет задачи никогда не может превысить начальный приоритет);

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

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

5

Соседние файлы в папке АОПИ. Лекции