Программное обеспечение вычислительной системы

Вид материалаПрограмма

Содержание


Распределение статическими и динамическими разделами
Разрывные методы распределения памяти
Управление вводом/выводом в операционных системах
Основные системные таблицы ввода-вывода
Файловая система
Структура магнитного диска
Подобный материал:
1   2   3   4   5

^ Распределение статическими и динамическими разделами


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




Рис.2. Распределение памяти разделами с фиксированными границами


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

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



  1. ^ Разрывные методы распределения памяти


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

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

О первых двух уже мы говорили при рассмотрении особенностей архитектуры микропроцессоров i80x86.

Вспомним:

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

Страничная организация виртуальной памяти состоит в том, что все фрагменты программы, на которые она разбивается произвольным образом, имеют одинаковую длину. Эти одинаковы части называют страницами и говорят, что память разбивается на физические страницы, а программа ─ на виртуальные страницы. Часть виртуальных страниц задачи размещается в оперативной памяти, а часть ─ во внешней. Величина страницы выбирается кратной степени двойки. Таким образом, вместо одномерного адресного пространства можно говорить о двумерном. Первая координата адресного пространства ─ это номер страницы, а вторая ─ номер ячейки внутри выбранной страницы (его называют индексом). Таким образом, физический адрес определяется парой (Pp,i), а виртуальный адрес ─ парой (Pν,i), где Pν ─ номер виртуальной страницы, Pp ─ номер физической страницы, i ─ индекс ячейки внутри страницы. Количество битов, отводимое под индекс, определяет размер страницы, а количество битов, отводимое под номер виртуальной страницы ─ объем возможной виртуальной памяти, которой может воспользоваться программа. При это нет необходимости ограничивать число виртуальных страниц числом физических, то есть не поместившиеся страницы можно размещать во внешней памяти, которая в этом случае служит расширением оперативной. Для отображения виртуального адресного пространства задачи на физическую память для каждой задачи, как и в случае сегментного способа, необходимо иметь таблицу страниц для трансляции адресных пространств. Для описания каждой страницы диспетчер памяти ОС заводит соответствующий дескриптор.

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

  1. Распределение оперативной памяти в современных ОС для ПК



    1. Microsoft Windows 95/98


Это 32-разрядные, многопотоковые ОС с вытесняющей многозадачностью. Основной пользовательский интерфейс – графический.

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

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



Рис. 3. Модель памяти ОС Windows 95/98


Системный код размещается выше границы 2 Гб. Здесь размещаются системные библиотеки DLL (dynamic link library – динамически загружаемый библиотечный модуль), используемые несколькими программами. В микропроцессорах i80x86 имеется четыре уровня защиты (кольца с номерами от 0 до 3). В наиболее привилегированном кольце с номером 0 находится ядро ОС, модули файловой системы, подсистема управления виртуальными машинами, виртуальные драйверы.

    1. Microsoft Windows NT


Здесь тоже используется плоская модель памяти. В отличии от Windows 95/98 в гораздо большей степени используется ряд серьезных аппаратных средств защиты, имеющихся в микропроцессоре, а также применено принципиально другое логическое распределение адресного пространства. Все системные программные модули и остальные программные модули самой ОС, выступающие как серверные процессы по отношению к прикладным программам (клиентам), находятся в своих собственных виртуальных адресных пространствах и доступ к ним со стороны прикладных программ невозможен. Логическое распределение адресных пространств приведено на рис.4.

Прикладным программам выделяется 2 Гб локального (собственного) пространства от 64 Кб до 2 Гб (первые 64 Кб полностью недоступны). Они изолированы друг от друга, хотя могут общаться через буфер обмена c помощью механизмов DDE – Dynamic Data Exchange (динамический обмен данными) и OLE – Object Linking and Embedding (связь и внедрение объектов).

Между отметками 2 и 4 Гб находятся ядро ОС, планировщик потоков и диспетчер виртуальной памяти VMM (Virtual Memory Manager – выделение памяти, резервирование, освобождение, подкачка).

Рис. 4. Модель распределения виртуальной памяти в Windows NT


Вся виртуальная память в Windows NT подразделяется на классы:
  • зарезервированная (reserved) – набор непрерывных адресов, которые диспетчер виртуальных адресов (VMM) выделяет для процесса, но не учитывает в общей квоте памяти процесса, пока она не будет фактически использована;
  • память выделена (committed) – если VMM резервирует для нее место в специальном файле Pagefile.sys на тот случай, когда потребуется выгрузить содержимое памяти на диск. Выделенная память ограничивается файлом подкачки;
  • доступная (available) – вся остальная память.



^ Управление вводом/выводом в операционных системах


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

  1. Получает запросы на в/в от прикладных программ и программных модулей самой ОС. Они проверяются на корректность и обрабатываются дальше, если не содержат ошибки. В противном случае выдается диагностическое сообщение;
  2. Вызывает соответствующее распределение каналов и контроллеров, определяет очередность в/в. Запрос либо выполняется, либо ставится в очередь;
  3. Инициирует операции в/в – передает управление соответствующим драйверам;
  4. При получении сигналов прерываний по в/в идентифицирует их и передает управление соответствующей программе ISR;
  5. Осуществляет передачу сообщений об ошибках, если таковые происходят в процессе управления в/в;
  6. Посылает сообщение о завершении операции в/в запросившему эту операцию процессу и снимает его с состояния ожидания в/в.


Имеется два основных режима ввода-вывода:
    • режим обмена с опросом готовности устройства в/в;
    • режим обмена с прерываниями – драйверы в этом режиме имеют секцию запуска, одну или несколько секций продолжения и секцию завершения.

Рассмотрим рис.1.




Рис. 1. Управление вводом/выводом

Центральный процессор посылает устройству управления команду выполнить некоторое действие устройству в/в. УУ исполняет команду, транслируя полученный сигналы в сигналы, понятные устройству в/в. Но быстродействие устройства в/в намного меньше быстродействия ЦП. Поэтому сигнал готовности от УУ устройства в/в центральному процессору о том, что операция в/в выполнена и можно подавать новую, приходится ожидать долго. До тех пор, пока сигнал готовности не появится, драйвер внешних устройств ничего не делает, при этом нерационально используется время ЦП. Гораздо более выгодно, подав команду на в/в, на время забыть об устройстве в/в и перейти на выполнение другой команды, а сигнал готовности рассматривать как запрос на прерывание от устройства в/в.

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


^ Основные системные таблицы ввода-вывода


Каждая ОС имеет, по-крайней мере, три системных таблицы:


  1. Содержит информацию обо всех устройствах в/в, подключенных к вычислительной системе – таблица оборудования, а каждый ее элемент – блок управления устройством в/в (UСB –unit control block) содержит следующую информацию:
    1. тип устройства, конкретная модель, символическое имя, характеристика устройства;
    2. как это устройство подключено (тип интерфейса, через какой порт, линия запроса прерывания и т.д.):
    3. номер и адрес канала в/в:
    4. указание на драйвер, указание секции запуска и секции продолжения драйвера:
    5. и т.д.
      1. Предназначена для реализации еще одного принципа виртуализации устройств в/в – независимости от устройства. Это таблица описания виртуальных логических устройств (DRT – device reference table). Она предназначена для установления связи между виртуальными (логическими) устройствами и реальными устройствами, описанными в таблице оборудования.
      2. Необходима для организации обратной связи между ЦП и устройствами в/в – таблица прерываний, указывает для каждого сигнала запроса на прерывание тот элемент UCB, который сопоставлен данному устройству, подключенному к этой линии запроса на прерывание.


Теперь еще раз, с учетом изложенных принципов и таблиц, рассмотрим процесс управления вводом/выводом (см. рис. 2).




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


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


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


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

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


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


^ Файловая система


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

Все современные ОС имеют соответствующие системы управления файлами. Система управления файлами является основной (самой видимой) подсистемой в современных ОС, с ее помощью:
  1. Связываются по данным все системные обрабатывающие программы;
  2. Решаются проблемы централизованного распределения дискового пространства и управления данными:
  3. Пользователям предоставляются следующие возможности:
    1. создание, удаление, переименование и т.д. именованных наборов данных из своих программ или посредством специальных управляющих программ;
    2. работа с не дисковыми периферийными устройствами как с файлами;
    3. обмен данными между файлами, между устройствами, между файлом и устройством (и наоборот);
    4. работа с файлами с помощью обращений к программным модулям системы управления файлами;
    5. защита файлов от несанкционированного доступа.

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

  1. ^ Структура магнитного диска


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

Информация на дисках размещается и передается блоками. Каждый такой блок называется сектором, сектора расположены на концентрических дорожках поверхности диска. Каждая дорожка (track) образуется при вращении диска под зафиксированной в определенном положении головкой чтения/записи. Накопитель на жестких дисках (винчестер – 1973 г.) содержит несколько дисков (часто два или три).

Группы дорожек (треков) одного радиуса, расположенных на поверхностях дисков, образуют цилиндры. Современные диски имеют по несколько десятков тысяч таких цилиндров. 3.5” дискета имеет 80 цилиндров (две рабочие поверхности, 18 секторов на каждой дорожке, каждый сектор 512 байт – 2х80х18х512 = 1 474 560 байт = 1.44 Мбайт).

Каждый сектор состоит из поля данных и поля служебной информации. Размер сектора устанавливается контроллером или драйвером. В большинстве

современных ОС сектор имеет размер 512 байт. Физически адрес сектора на диске определяется триадой [c-h-s], где c – номер цилиндра (дорожки на поверхности диска, cylinder), h – номер рабочей поверхности диска (магнитной головки, head), а s – номер сектора на дорожке (sector).

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

Жесткий диск может быть разбит на несколько разделов (partition). На каждом разделе может быть организована своя файловая система. Разделы диска могут быть двух типов – primary (первичный) и extended (расширенный). На диске должен быть, по крайней мере, один primary-раздел (максимум – 4). Загрузчик располагается в активном разделе и ему передается управление при включении компьютера и загрузке ОС.

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

По физическому адресу [0-0-1] на винчестере располагается главная загрузочная запись (master boot record – MBR), содержащая внесистемный загрузчик (non-system bootstrap – NSB), а также таблицу разделов (partition table – PT). Эта запись занимает один сектор и размещается в оперативной памяти, начиная с адреса 0:7С00h. Затем управление передается коду, содержащемуся в этом самом первом секторе диска. MBR является основным средством загрузки с жесткого диска.

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


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


Одной из самых известных и до сих пор используемых утилит, с помощью которой можно посмотреть и отредактировать PT, а также выполнить и другие действия, связанные с изучением и исправлением данных на диске, является программа Disk editor, работающая в среде DOS. На сегодняшний день ее главный недостаток, что она ограничена размером диска 8 Гбайт. В настоящее время оной из известных и мощных программ для работы с разделами жесткого диска является программа Partition Magic (работает в среде Win32API).