Смекни!
smekni.com

Операционные системы. Управление памятью. Ввод-вывод (стр. 4 из 5)

Компоненты исполнительной системы реализованы как независимые от аппаратной платформы модули. Это обеспечивается наличием уровня абстрагирования от оборудования и делает ОС максимально переносимой.

Уровень абстрагирования от оборудования (Hardware Abstract Level, HAL). Представляет собой программную прослойку между исполнительной системой Windows и аппаратной платформой, на которой работает ОС. HAL скрывает аппаратно-зависимые детали, такие как интерфейсы ввода/вывода, контроллеры прерываний и механизмы межпроцессорных связей. Вместо того чтобы обращаться к аппаратуре непосредственно, исполнительная система Windows вызывает функции HAL.

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

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

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

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

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

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

Большинство современных систем позволяет одновременный запуск нескольких процессов. Наличие нескольких процессов, рабо­тающих в один и тот же момент времени, означает, что когда один процесс приостановлен в ожидании завершения операции ввода-вы­вода, другой может использовать центральный процессор. Таким об­разом, многозадачность увеличивает загрузку процессора. На сетевых серверах всегда одновременно работают несколько процессов (для разных клиентов), но и большинство клиентских машин в наши дни также имеют эту возможность. Самый простой способ достижения многозадачности состоит в разбиении памяти на n, возможно, не равных, разделов. Когда задание поступает в память, оно располага­ется во входной очереди к наименьшему разделу, достаточно боль­шому для того, чтобы вместить это задание. Так как размер разделов неизменен, то все неиспользуемое работающим процессом простран­ство в разделе пропадает. Недостаток этого способа заключается в том, что к большому разделу очереди почти не бывает, а к малень­ким разделам выстраивается довольно много задач. Небольшие за­дания должны ждать своей очереди, чтобы попасть в память, несмот­ря на то, что свободна основная часть памяти. Усовершенствованный способ заключается в организации одной общей очереди для всех разделов. Как только раздел освобождается, задачу, находящуюся ближе к началу очереди и подходящую для выполнения в этом раз­деле, можно загрузить в него и начать ее обработку. С другой сторо­ны, нежелательно тратить большие разделы на маленькие задачи, поэтому существует другая стратегия. Она заключается в том, что каждый раз после освобождения раздела происходит поиск в очере­ди наибольшего для этого раздела задания, и именно оно выбирает­ся для обработки. Однако этот алгоритм отстраняет от обработки небольшие задачи, хотя необходимо предоставить для мелких задач лучшее обслуживание. Выходом из положения служит создание хотя бы одного маленького раздела, который позволит выполнять мелкие задания без долгого ожидания освобождения больших разделов. Дру­гой подход предусматривает следующий алгоритм: задачу, которая имеет право быть выбранной для обработки, можно пропустить не более k раз. Когда задача пропускается, к счетчику добавляется еди­ница. Если значение счетчика стало равным k, игнорировать задачу больше нельзя.

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

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

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

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

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

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

3. Ввод-Вывод

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

Устройства ввода-вывода можно разделить на две категории: блочные устройства и символьные устройства. Блочные устройства хранят информацию в виде блоков фиксированного размера, причем у каждого блока имеется свой адрес. Размеры блоков колеблются от 521 до 32 768 байт. Важное свойство блочного устройства состоит в том, что каждый его блок может быть прочитан независимо от ос­тальных блоков. Наиболее распространенными блочными устрой­ствами являются диски.

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

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