Файл: А. В. Гордеев А. Ю. Молчанов системное программное обеспечение электронный вариант книги издательства Питер СанктПетербург Челябинск юургу каф. Автоматика и управление 2002 2 Предисловие Настоящий учебник.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 997
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
11
dows 3.x. Правда, в своём последнем семействе ОС Windows 2000 разработчики решили отказаться от поддержки возможности выполнения DOS–программ.
Наконец, к этому классу системного программного обеспечения следует отне- сти и эмуляторы, позволяющие смоделировать в одной операционной системе ка- кую-либо другую машину или операционную систему. Так, известна система эму- ляции WMWARE, которая позволяет запустить в среде Linux любую другую ОС,
например, Windows. Можно, наоборот, создать эмулятор, работающий в среде
Windows, который позволит смоделировать компьютер, работающий под управле- нием любой ОС, в том числе и под Linux.
Таким образом, термин операционная среда означает соответствующий ин- терфейс, необходимый программам для обращения к ОС с целью получить опреде- лённый сервис
1
– выполнить операцию ввода/вывода, получить или освободить участок памяти и т. д.
3 Система программирования на рис.1 представлена такими компонентами,
как транслятор с соответствующего языка, библиотеки подпрограмм, редакторы,
компоновщики и отладчики. Не бывает самостоятельных (оторванных от ОС) сис- тем программирования. Любая система программирования может работать только в соответствующей ОС, под которую она и создана, однако при этом она может позволять разрабатывать программное обеспечение и под другие ОС. Например,
одна из популярных систем программирования на языке C/C++ фирмы Watcom для OS/2 позволяет создавать программы и для самой OS/2, и для DOS, и для Win- dows.
В том случае, когда создаваемые программы должны работать совсем на дру- гой аппаратной базе, говорят о кросс-системах. Так, для ПК на базе микропроцес- соров семейства i80x86 имеется большое количество кросс-систем, позволяющих создавать программное обеспечение для различных микропроцессоров и микро- контроллеров.
4 Наконец, под утилитами понимают специальные системные программы, с помощью которых можно как обслуживать саму операционную систему, так и под-
1
Сервис (service)–обслуживание, выполнение соответствующего запроса
12
готавливать для работы носители данных, выполнять перекодирование данных,
осуществлять оптимизацию размещения данных на носителе и производить неко- торые другие работы, связанные с обслуживанием вычислительной системы. К
утилитам следует отнести и программу разбиения накопителя на магнитных дисках на разделы, и программу форматирования, и программу переноса основных сис- темных файлов самой ОС. К утилитам относятся также и известные комплексы программ фирмы Symantec, носящие имя Питера Нортона (создателя этой фирмы и соавтора популярного набора утилит для первых IBM PC). Естественно, что утили- ты могут работать только в соответствующей операционной среде.
ГЛАВА 1 Основные понятия
Понятие операционной среды
Операционная система выполняет функции управления вычислительными процессами в вычислительной системе, распределяет ресурсы вычислительной сис- темы между различными вычислительными процессами и образует программную среду, в которой выполняются прикладные программы пользователей. Такая среда называется операционной.
Любая программа имеет дело с некоторыми исходными данными, которые она обрабатывает, и порождает в конечном итоге некоторые выходные данные, резуль- таты вычислений. Очевидно, что в абсолютном большинстве случаев исходные данные попадают в оперативную память (с которой непосредственно работает про- цессор, выполняя вычисления по программе) с внешних (периферийных) уст- ройств. Аналогично и результаты вычислений, в конце концов, должны быть выве- дены на внешние устройства. Следует заметить, что программирование операций ввода/вывода относится, пожалуй, к наиболее сложным и трудоёмким задачам. Де- ло в том, что при создании таких программ без использования современных систем программирования, как говорится, «по старинке», нужно знать не только архитек- туру процессора (его состав, назначение основных регистров, систему команд про- цессора, форматы данных и т. п.), но и архитектуру подсистемы ввода/вывода (со- ответствующие интерфейсы, протоколы обмена данными, алгоритм работы кон-
13
троллера устройства ввода/вывода и т. д.). Именно поэтому развитие системного программирования и самого системного программного обеспечения пошло по пути выделения наиболее часто встречающихся операций и создания для них соответст- вующих программных модулей, которые можно в дальнейшем использовать в большинстве вновь создаваемых программ.
Например, в далекие пятидесятые годы, на заре развития вычислительных сис- тем, при разработке первых систем программирования прежде всего создавали программные модули для подсистемы ввода/вывода, а уже затем – вычисления часто встречающихся математических операций и функций. Благодаря этому при создании прикладных программ программисты могли просто обращаться к соот- ветствующим функциям ввода/вывода и иным функциям и процедурам, что из- бавляло их от необходимости каждый раз создавать все программные компоненты
«с нуля» и от необходимости знать во всех подробностях особенности работы кон- троллеров ввода/вывода и соответствующих интерфейсов.
Следующий шаг в автоматизации создания готовых к выполнению машинных двоичных программ заключался в том, что транслятор с алгоритмического языка более высокого уровня, нежели первые ассемблеры, уже сам мог подставить вме- сто высокоуровневого оператора типа READ или WRITE все необходимые вызовы к готовым библиотечным программным модулям. Состав и количество библиотек систем программирования постоянно увеличивались. В конечном итоге возникла ситуация, когда при создании двоичных машинных программ программисты могут вообще не знать многих деталей управления конкретными ресурсами вычисли- тельной системы, а должны только обращаться к некоторой программной подсис- теме с соответствующими вызовами и получать от неё необходимые функции и сервисы. Эта программная подсистема и есть операционная система (ОС), а набор её функций, сервисов и правила обращения к ним как раз и образуют то базовое понятие, которое мы называем операционной средой. Таким образом, можно ска- зать, что термин операционная среда означает, прежде всего, соответствующие ин- терфейсы, необходимые программам и пользователям для обращения к ОС с целью получить определенные сервисы.
14
Можно спросить: а чем отличаются системные программные модули, реали- зующие основные системные функции, от тех программных модулей, что пишутся прикладными программистами? Ответ простой: тем, что эти модули, как правило,
используются всеми прикладными программами. Поэтому нет особого смысла на этапе создания машинной двоичной программы (которую и исполняет процессор)
присоединять соответствующие системные программные модули к телу програм- мы. Выгоднее просто обращаться к этим программным модулям, указывая их адре- са и передавая им необходимые параметры, поскольку они уже и так находятся в основной памяти, ибо нужны всем. Другими словами, эти основные системные программные модули входят в состав самой ОС.
Параллельное существование терминов «операционная система» и «операци- онная среда» вызвано тем, что ОС в общем случае может поддерживать несколько операционных сред. Например, операционная система OS/2 Warp может выполнять следующие программы:
♦ так называемые «нативные
1
» программы, созданные с учётом соответст- вующего «родного» 32-битового программного интерфейса этой ОС;
♦ 16-битовые программы, созданные для систем OS/2 первого поколения;
♦ 16-битовые приложения, разработанные для выполнения в операционной среде MS-DOS или PC DOS;
♦ 16-битовые приложения, созданные для операционной среды Windows 3.х;
♦ саму операционную оболочку Windows 3.х и уже в ней – созданные для неё
программы.
Операционная среда может включать несколько интерфейсов: пользователь- ские и программные. Если говорить о пользовательских, то, например, система Li- nux имеет для пользователя как интерфейсы командной строки (можно использо- вать различные «оболочки» – shell), интерфейс наподобие Norton Commander –
Midnight Commander, так и графические интерфейсы – X-Window с различными менеджерами окон – KDE, Gnome и т. д. Если же говорить о программных интер- фейсах, то в той же ОС Linux программы могут обращаться как к операционной
1
Native – родной.
15
системе за соответствующими сервисами и функциями, так и к графической под- системе (если она используется). С точки зрения архитектуры процессора (и всего
ПК в целом) двоичная программа, созданная для работы в среде Linux, использует те же команды и форматы данных, что и программа, созданная для работы в среде
Windows NT. Однако в первом случае мы имеем обращение к одной операционной среде, а во втором – к другой. И программа, созданная для Windows непосредст- венно, не будет выполняться в Linux; однако если в ОС Linux организовать полно- ценную операционную среду Windows, то наша Windows-программа сможет быть выполнена. Можно сказать, что операционная среда – это то системное программ- ное окружение, в котором могут выполняться программы, созданные по правилам работы этой среды.
Понятия вычислительного процесса и
ресурса
Понятие «вычислительный процесс» (или просто – «процесс») является одним из основных при рассмотрении операционных систем. Как понятие процесс яв- ляется определенным видом абстракции, и мы будем придерживаться следующего неформального определения, приведенного в работе [37]. Последовательный про- цесс (иногда называемый «задачей»
1
) – это выполнение отдельной программы с её
данными на последовательном процессоре. Концептуально процессор рас- сматривается в двух аспектах: во-первых, он является носителем данных и, во- вторых, он (одновременно) выполняет операции, связанные с их обработкой.
В качестве примеров можно назвать следующие процессы (задачи): приклад- ные программы пользователей, утилиты и другие системные обрабатывающие про- граммы. Процессами могут быть редактирование какого-либо текста, трансляция исходной программы, её компоновка, исполнение. Причем трансляция какой-ни- будь исходной программы является одним процессом, а трансляция следующей ис- ходной программы – другим процессом, поскольку, хотя транслятор как объ-
1
В концепции, которая получила наибольшее распространение в 70-е годы, задача (task) – это совокупность связан- ных между собой и образующих единое целое программных модулей и данных, требующая ресурсов вычислитель- ной системы для своей реализации. В последующие годы задачей стали называть единицу работы, для выполнения которой предоставляется центральный процессор. Вычислительный процесс может включать в себя несколько задач.
16
единение программных модулей здесь выступает как одна и та же программа, но данные, которые он обрабатывает, являются разными.
Определение концепции процесса преследует цель выработать механизмы распределения и управления ресурсами. Понятие ресурса, так же как и понятие процесса, является, пожалуй, основным при рассмотрении операционных систем.
Термин ресурс обычно применяется по отношению к повторно используемым, от- носительно стабильным и часто недостающим объектам, которые запрашиваются,
используются и освобождаются процессами в период их активности. Другими сло- вами, ресурсом называется всякий объект, который может распределяться внутри системы.
Ресурсы могут быть разделяемыми, когда несколько процессов могут их ис- пользовать одновременно (в один и тот же момент времени) или параллельно (в те- чение некоторого интервала времени процессы используют ресурс попеременно), а могут быть и неделимыми (рис. 1.1).
Рис. 1.1. Классификация ресурсов
При разработке первых систем ресурсами считались процессорное время, па- мять, каналы ввода/вывода и периферийные устройства [49, 89]. Однако очень ско- ро понятие ресурса стало гораздо более универсальным и общим. Различного рода программные и информационные ресурсы также могут быть определены для сис- темы как объекты, которые могут разделяться и распределяться и доступ к кото-
Ресурсы
Делимые
Неделимые
Используемые одновременно
Используемые параллельно
17
рым необходимо соответствующим образом контролировать. В настоящее время понятие ресурса превратилось в абстрактную структуру с целым рядом атрибутов,
характеризующих способы доступа к этой структуре и её физическое пред- ставление в системе. Более того, помимо системных ресурсов, о которых мы сейчас говорили, как ресурс стали толковать и такие объекты, как сообщения и синхро- сигналы, которыми обмениваются задачи.
В первых вычислительных системах любая программа могла выполняться только после полного завершения предыдущей. Поскольку эти первые вычисли- тельные системы были построены в соответствии с принципами, изложенными в известной работе Яноша Джон фон Неймана, все подсистемы и устройства компь- ютера управлялись исключительно центральным процессором. Центральный про- цессор осуществлял и выполнение вычислений, и управление операциями вво- да/вывода данных. Соответственно, пока осуществлялся обмен данными между оперативной памятью и внешними устройствами, процессор не мог выполнять вы- числения. Введение в состав вычислительной машины специальных контроллеров позволило совместить во времени (распараллелить) операции вывода полученных данных и последующие вычисления на центральном процессоре. Однако все равно процессор продолжал часто и долго простаивать, дожидаясь завершения очеред- нойоперации ввода/вывода. Поэтому было предложено организовать так называе- мый мультипрограммный (мультизадачный) режим работы вычислительной сис- темы. Суть его заключается в том, что пока одна программа (один вычислительный процесс или задача, как мы теперь говорим) ожидает завершения очереднойопера- ции ввода/вывода, другая программа (а точнее, другая задача) может быть постав- лена на решение (рис. 1.2).
Из рис. 1.2, на котором в качестве примера изображена такая гипотетическая ситуация, видно, что благодаря совмещению во времени выполнения двух про- грамм общее время выполнения двух задач получается меньше, чем если бы мы выполняли их по очерёди (запуск одной только после полного завершения другой).
Из этого же рисунка видно, что время выполнения каждой задачи в общем случае становится больше, чем если бы мы выполняли каждую из них как единственную.
18
При мультипрограммировании повышается пропускная способность системы,
но отдельный процесс никогда не может быть выполнен быстрее, чем если бы он выполнялся в однопрограммном режиме (всякое разделение ресурсов замедляет работу одного из участников за счёт дополнительных затрат времени на ожидание освобождения ресурса).
Рис. 1.2. Пример выполнения двух программ: а – однопрограммный режим;
б – мультипрограммный режим
Как мы уже отмечали, операционная система поддерживает мультипрограм-
мирование (многопроцессность) и старается эффективно использовать ресурсы пу- тём организации к ним очерёдей запросов, составляемых тем или иным способом.
Вв
CPU
Задача А
Задача В
а)
Вв
CPU
Задача А
Задача В
б)
Вв
CPU
19
Это требование достигается поддерживанием в памяти более одного процесса,
ожидающего процессор, и более одного процесса, готового использовать другие ресурсы, как только последние станут доступными. Общая схема выделения ре- сурсов такова. При необходимости использовать какой-либо ресурс (оперативную память, устройство ввода/вывода, массив данных и т. п.) задача обращается к су- первизору операционной системы – её центральному управляющему модулю, ко- торый может состоять из нескольких модулей, например: супервизор ввода/вывода,
супервизор прерываний, супервизор программ, диспетчер задач и т. д. – посредст- вом специальных вызовов (команд, директив) и сообщает о своём требовании. При этом указывается вид ресурса и, если надо, его объём (например, количество адре- суемых ячеек оперативной памяти, количество дорожек или секторов на системном диске, устройство печати и объём выводимых данных и т. п.).
Директива обращения к операционной системе передаёт ей управление, пере- водя процессор в привилегированный режим работы (см. раздел «Прерывания»,
глава 1), если такой существует. Не все вычислительные комплексы имеют два (и более) режима работы: привилегированный (режим супервизора), пользова- тельский, режим эмуляции какого-нибудь другого компьютера и т. д.
Ресурс может быть выделен задаче, обратившейся к супервизору с соответст- вующим запросом, если:
♦ он свободен и в системе нет запросов от задач более высокого приоритета к этому же ресурсу;
♦ текущий запрос и ранее выданные запросы допускают совместное использо- вание ресурсов;
♦ ресурс используется задачей низшего приоритета и может быть временно отобран (разделяемый ресурс).
Получив запрос, операционная система либо удовлетворяет его и возвращает управление задаче, выдавшей данный запрос, либо, если ресурс занят, ставит за- дачу в очередь к ресурсу, переводя её в состояние ожидания (блокируя). очередь к ресурсу может быть организована несколькими способами, но чаще всего это осу- ществляется с помощью списковой структуры.