Функционирование компьютерной системы
Преимущество описанного модульного подхода к аппаратуре в том, что центральный процессор, память и внешние устройства могут функционировать параллельно. Работой каждого устройства управляет специальный контроллер. При необходимости выполнения ввода-вывода центральный процессор генерирует прерывание, в результате которого вызывается операционная система, в свою очередь, в качестве реакции на прерывание запускающая драйвер устройства, соответственно, активизирующий его контроллер. Каждый контроллер устройства имеет локальный буфер – специализированную память для обмена информацией между компьютером и устройством. Для того, чтобы контроллер мог начать вывод на устройство, предварительно центральный процессор (точнее, драйвер устройства, запущенный на нем) должен переслать информацию из заданной области оперативной памяти в буфер устройства. Далее контроллер устройства уже выполняет вывод информации из буфера на само устройство (например, записывает ее в заданную область жесткого диска). По окончании обмена информацией, контроллер генерирует сигнал о прерывании ( interrupt )по системной шине, этим информируя процессор об окончании операции. Для того, чтобы избежать повторных пересылок больших объемов информации, в современных компьютерах применяют DMA ( Direct Memory Access ) – контроллеры– контроллеры с прямым доступом к оперативной памяти. Такие контроллеры используют при обмене с устройством не свою специализированную память, а напрямую область оперативной памяти, в которой и размещается буфер обмена.
Обработка прерываний
Операционную систему можно рассматривать как программу , управляемую прерываниями ( interrupt driven program ).Прерывание центрального процессора передает управление подпрограмме обработки данного вида прерываний, являющейся частью ОС. В большинстве компьютеров этот механизм реализован через вектор прерываний ( interrupt vector )– резидентный массив в оперативной памяти, в котором хранятся доступные по номерам прерываний адреса подпрограмм-обработчиков прерываний (модулей ОС). При обработке прерывания аппаратура и ОС сохраняют адрес прерванной команды .При возобновлении вычислений будет вновь повторено выполнение прерванной команды.
Очевидно, что при обработке прерывания, в свою очередь, может возникнуть другое прерывание. В этом случае новое входящее прерывание задерживается (disabled),и информация о нем запоминается в очереди прерываний– системной структуре ОС, обеспечивающей поочередную обработку всех возникших прерываний.
Кроме прерываний, генерируемых аппаратурой неявно при вычислениях (например, отсутствие страницы в оперативной памяти), возможно также программируемое прерывание (trap ; дословно – ловушка ) с помощью специальной команды процессора, - например, при обнаруженной ошибке в программе. В случае такого прерывания также работает общий механизм запуска обработчика прерывания – части ОС. Таким образом, с упрощенной точки зрения, ОС можно рассматривать как набор обработчиков прерываний.
При прерывании ОС сохраняет состояние процессора –значения регистров и значение счетчика команд (program counter – PC)– адреса прерванной команды .Обработчик прерывания в ОС определяет посодержимому сегмента объектного кода, какого вида прерывание возникло и какие действия по его обработке следует предпринять. Среди возможных видов прерываний, кроме фиксации различных ошибок, имеются также прерывания по таймеру– периодические прерывания через определенный квант времени, предназначенные для опроса устройств (polling)– действий операционной системы по периодической проверке состояния всех портов и внешних устройств, которое может меняться с течением времени: например, к USB-порту была подключена флэшка; принтер закончил печать и освободился, и т.д. ОС выполняетреконфигурацию системы и корректирует системные таблицы, хранящие информацию об устройствах.
Архитектура ввода-вывода
На рис.2 изображена временная диаграмма прерываний процессора, выполняющего ввод-вывод.
Рис. 2.Временная диаграмма прерываний процессора при вводе-выводе
На диаграмме видны моменты смены состояний процессора и устройства ввода-вывода: прерывание по запросу на ввод-вывод, обработка этого прерывания и пересылка информации из памяти в буфер устройства, вызов драйвера и контроллера, окончание обмена и прерывание контроллера, продолжение вычислений.
Имеются две разновидности режима ввода-вывода – синхронныйи асинхронный.
Синхронныйввод-вывод – это ввод-вывод, выполнение которого приводит к переходу программы в состояние ожидания, до тех пор, пока операция ввода-вывода не будет полностью завершена. На аппаратном уровне – команда ввода-вывода переводит процессор в состояние ожидания (idle) до следующего прерывания. При данном режиме в каждый момент выполняется не более одного запроса на ввод-вывод; одновременный ввод-вывод отсутствует. Синхронный вывод выполняют всем программистам привычные операторы вида println(x).При их использовании в программах мы не задумываемся над тем, что используем достаточно неэффективный вариант синхронного ввода-вывода. Однако до сих пор мышление большинства программистов – последовательное, в том смысле, что о своей программе они мыслят как о чисто последовательно выполняемой, и вообще не думают о возможности какого-либо распараллеливания. При отладке программы, либо если размер выводимой информации невелик, это обычно вполне допустимо.
Асинхронный ввод-вывод– ввод-вывод, выполняемый параллельно с выполнением основной программы. После того. как начинается асинхронный ввод-вывод, управление возвращается пользовательской программе, без ожидания завершения ввода-вывода (последнее может быть выполнено специальной явной операцией). Таким образом, операция асинхронного обмена как бы разбивается на две: начать ввод-выводи закончить ввод-вывод. Последняя выполняется для того, чтобы в этом месте программа все же ожидала завершения обмена, когда его результат необходим для дальнейших вычислений. Такой подход к реализации обмена более труден для понимания программистами и может привести к ошибкам (например, использована только операция начала ввода-вывода, а вызов операции его окончания забыт).
Таблица состояния устройств
На системном уровне, при обмене происходит следующее. Выполняется системный вызов ( system call )– запрос к ОС путем вызова системной подпрограммы, в данном случае – чтобы позволить пользователю ожидать завершения ввода-вывода. Операционная система хранит таблицу состояния устройств, в которой каждому устройству соответствует элемент, содержащий тип устройства, его адрес и состояние. ОС индексирует таблицу устройств, с целью определения состояния устройства и модификации элемента таблицы для включения в нее информации о прерывании.
Архитектура синхронного (a) и асинхронного (b) ввода-вывода иллюстрируется на рис. 3.
Рис. 3.Архитектура синхронного и асинхронного ввода-вывода
На схеме видно, что отличительной чертой синхронного обмена является переход процессора в состояние ожидания до окончания операции ввода-вывода.
На рис.4 показан пример состояния таблицы устройств ввода-вывода, хранимой операционной системой. Для каждого устройства хранится информация о его имени, состоянии, а для занятых устройств – адресначала и длина порции информации, подлежащей обмену. Если для некоторого устройства (в примере – диск3 ) имеется несколько запросов на ввод-вывод, все они организуются в очередь и обслуживаются поочереди, по мере освобождения устройства.
Рис. 4.4.Пример состояния таблицы внешних устройств ОС
Прямой доступ к памяти (Direct Memory Access – DMA) –более эффективный метод работы контроллеров устройств ввода-вывода, используемый для работы высокоскоростных устройств, способных передавать информацию со скоростью, близкой к скорости работы памяти
DMA-контроллер передает блок данных из буферной памяти непосредственно в основную память, без участия процессора. Преимущество подобного широко применяемого подхода – не только в том, чтобы избежать лишней пересылки данных из одной области памяти в другую, но также в том, что прерывание в этом случае генерируется на каждый блок пересылаемых данных (хранящийся в буфере), но не на каждый пересылаемый байт, как при более традиционном способе обмена.
Структура памяти
Основная ( оперативная ) память– единственная крупная часть памяти, к которой процессор имеет непосредственный доступ. Как известно, содержимое основной памяти не сохраняется после перезагрузки системы или после выключения компьютера. Внешняя ( вторичная ) память– расширение основной памяти, обеспечивающее функциональность устойчивой (сохраняемой) памяти большого объема.
В качестве вторичной памяти чаще всего используются жесткие диски (hard disks).Физически они состоят из твердых пластин из металла или стекла, покрытых магнитным слоем для записи. Поверхность диска логически делится на дорожки (tracks),которые, в свою очередь, делятся на секторы. Контроллер диска определяет логику взаимодействия между устройством и компьютером.
Устройство жесткого диска показано на рис. 5.
Рис. 5.Устройство жесткого диска
Как видно из рисунка, цилиндр- это группа вертикально расположенных друг под другом секторов различных магнитных дисков с одним и тем же номером дорожки.
Системы памяти организованы в иерархию, исходя из их быстродействия, стоимости и возможности сохранения информации (устойчивости). Для оптимизации работы памяти любого вида используетсяассоциативная память (кэш – cache),размещаемая в более быстродействующих системах памяти и хранящая наиболее часто используемые элементы более медленной памяти. С этой точки зрения, оперативную память можно рассматривать как кэш для внешней памяти. Кэш-память – это, по сути дела, ассоциативный список пар (Адрес, Значение),причем аппаратный поиск в ней происходит по адресу как по ключу. Таким образом, перед обращением к медленной внешней памяти сначала происходит поиск по заданному адресу в кэш-памяти, и только если он не привел к успеху, выполняется стандартное обращение к внешней памяти. Принцип кэширования очень важен и позволяет существенно ускорить работу со внешней памятью. Однако он требует реализации специальной политики управления кэш-памятью, так как кэширование вводит дополнительный уровень в иерархии памяти и требует согласованности данных, хранимых одновременно на разных уровнях памяти. Аппаратура и ОС поддерживают кэш команд, кэш данных, кэш жесткого дискаи т.д. – для всех видов памяти.
Иерархия устройств памяти (в упрощенном виде) показана на рис.6
Рис. 6.Иерархия устройств памяти
Более быстрые виды памяти на схеме расположены выше, более медленные – ниже. Схема особых комментариев не требует. Некоторые часто используемые виды внешней памяти:
· флэш-память (флэшка)– внешняя память компактного размера, модуль которой подключаются через USB-порт. Параметры: объем - до 128 гигабайт и более; скорость обмена через порт USB 2.0: 240 – 260мегабит в секунду;
· внешний жесткий диск (ZIV driveи другие) – объем до 1 терабайта; работает также через порт USB;
· BluRay – диски– новая разновидность компакт-дисков большой емкости (односторонние – 25 гигабайт, двусторонние – 50 гигабайт). Для сравнения, стандартная емкость диска DVD составляет 4.7 гигабайт.