В.Д. Валединский - Краткий конспект курса лекций «Работа на ЭВМ и программирование» (1119512), страница 17
Текст из файла (страница 17)
Лектор В.Д. Валединский.Группа 208, 3 семестр, 2002 год56сможет прочитать затем ПО; прерывание системного таймера – выполнить какую-топериодическую задачу, скажем, в многозадачных ОС – передать управление другомупотоку). В процессоре хранится специальная таблица векторов прерываний и, получивномер прерывания, он сохраняет свое внутреннее состояние в стеке, в том числе запоминаетпозицию, на которой остановилось выполнение программы и начинает выполнениесоответствующего обработчика прерывания (правда, сохраняет он не все свое состояние,поэтому обработчик должен вначале сохранить состояние регистров процессора в стеке).Обработчик должен как-то обработать прерывание, например, прочитать состояниеустройства, вызвавшего прерывание (после чего это устройство сбросит флаг готовности),восстановить состояние процессора, бывшее до начала обработки прерывания, затемвыполнить специальную команду возврата EOI.
Заметим, что выполнение обработчикапрерывания может быть прервано другим прерыванием, как раз в тот момент, когда этонежелательно – например, до того момента, как состояние регистров процессора будетсохранено в стек. Чтобы избежать такой ситуации используют команды Cli (запретитьобработку прерываний) и Sti (разрешить обработку прерываний).Альтернативой механизму прерываний служит т.н. полинг – когда системапериодически опрашивает устройства и проверяет в них бит готовности, чтобы определить,какие действия предпринимать.
Но полинг – довольно неудобная процедура, как в планеэффективности, так и функциональности. Механизм прерываний тоже страдает рядомнедостатков, главный из которых – сильно ограниченное их число, поэтому обычноиспользуют комбинацию обоих методов – прерывание выделяется одно на несколькоустройств, а при обработке этого прерывания производится полинг, чтобы определить, какоеиз устройств это прерывание вызвало.Стандартное распределение прерываний:IRQ 0 (системное) – Системный таймерIRQ 1 (системное) – КлавиатураIRQ 2 (системное) –каскадруемый контроллер прерываний, управляющийпрерываниями 8-15IRQ 3 (системное) – Последовательный порт (COM 2 и COM 4)IRQ 4 (системное) – Последовательный порт (COM 1 и COM 3)IRQ 5 (свободное) – используется различными адаптерамиIRQ 6 (системное)– Контроллер дисковода гибких дисковIRQ 7 (системное)– принтер 1IRQ 8 (системное) – часы реального времени CMOSIRQ 9 (свободное) – используется различными адаптерамиIRQ 10 (свободное) – используется различными адаптерамиIRQ 11 (свободное) – используется различными адаптерамиIRQ 12 (системное)– порт мышиIRQ 13 (системное) – математический сопроцессор (прерывание используется, дажеесли сопроцессор встроен в центральный процессор)IRQ 14 (системное)– Контроллер жестких дисковIRQ 15 (свободное) – используется различными адаптерами5 прерываний здесь оставлены свободными – их система делит между видеокартой,портами USB и модемом.
Это – до 3х прерываний. Еще 2 прерывания отдаютсяостальным устройствам.Отдельный вопрос – организация многозадачной ОС. Такая операционная системадолжна уметь «одновременно» выполнять несколько программ (точнее – несколькихпотоков команд – одна программа может выполняться в виде нескольких потоков). Если унас несколько физических процессоров и не большее число потоков, то можно доверитьвыполнение каждого потока отдельному процессору.
Но гораздо чаще потоков многобольше, чем число процессоров, поэтому для организации многозадачной ОС приходитсяделить время работы процессора между потоками. Для этого также используютсяпрерывания, а именно – IRQ0, прерывание от системного таймера. Действительно, пусть ОСЛекции по ЭВМ.
Конспект. Лектор В.Д. Валединский.Группа 208, 3 семестр, 2002 год57будет вести специальную таблицу, в которой будут указываться все запущенные процессы.Рассмотрим однопроцессорный случай – в этом случае один из потоков будет активным, всеостальные – неактивными. Время от времени (по IRQ0) ОС будет сохранять состояниетекущего процесса в таблицу, восстанавливать состояние другого процесса и продолжатьуже его выполнение.
При этом каждый из процессов будет видеть «свой» процессор –работа совместно с другими процессами и работа одного процесса ничем для него не будутотличаться. Сколько времени выделить на каждый из процессов ОС будет определять наоснове специальной системы приоритетов, количества процессов, степенью использованияпроцессора процессами (т.н. вытесняющая многозадачность – когда процесс, активноиспользующий процессор «вытесняет» все остальные, которые большую часть времени всеравно простаивают).Начиная с 386 процессора процессор предоставляет аппаратные средства дляобеспечения многозадачности.
Дело в том, что многозадачной системе требуется обеспечитьзащиту одних процессов от воздействия других. Вдруг одному процессу вздумаетсяобратиться к памяти, отведенной другому процессу (segmentation fault ;-))? Для этоговводится специальный т.н. защищенный режим процессора. В нем вводится защита памяти,портов ввода/вывода и аппаратных прерываний. Самая сложная – защита памяти.
Памятьделится на так называемые сегменты. Каждый сегмент – определенный участок в памяти,для него известен тип сегмента (сегмент данных / сегмент кода, например - в сегменте кодахранится код программы, в сегменте кода – данные программы; процессор не даст передатьуправление на сегмент данных – это явная ошибка, так называемый «вылет» - взащищенном режиме ситуация будет отслежена и ОС сможет «убить» заглючившийпроцесс) и процесс, которому сегмент принадлежит, а также права доступа к сегменту.
Всеэто в значительной мере повышает надежность работы системы. Впрочем, все равнорассмотрение защищенного режима выходит за рамки данного конспекта.Следующий момент – управление памятью. Физически память у нас представлена ввиде модулей памяти (возможно, нескольких и сложного строения – состоящих из многихмикросхем памяти и т.д.), но контроллер памяти в любом случае представит ее нам в виделинейного массива от 0 до некоторого максимального числа, означающего границудоступной физической памяти.
Легко понять, что при 32-битной адресной шине адресуемоепространство – 4Gb памяти, а типичный объем памяти системы не превосходит 512Mb –налицо большой кусок, который можно адресовать, но памяти в которой нет. Но мы можемсказать, что у нас есть виртуальная память и при попытке обращения к «несуществующему»адресу памяти загрузить данные еще откуда-нибудь и подменить адрес на реальносуществующий. Для организации такой виртуальной памяти используется специальноеустройство в составе процессора – БПА (Блок Преобразования Адреса).
Суть его вследующем: вся виртуальная память делится на т.н. страницы – куски памятификсированного объема. Процессор при выполнении программы оперирует с виртуальнымиадресами. Первая часть такого адреса – номер страницы памяти, вторая – смещение отначала страницы, вместе это составляет 4 байта (в 32-битной архитектуре).Часть страниц виртуальной памяти соответствует страницам физической памяти – приобращении к ним процессор просто подставит вместо виртуального адреса физический.
Дляопределения, какие страницы загружены в БПА хранится специальная таблица, в которойперечислены все страницы виртуальной памяти, их состояние и физические адреса.Структура таблицы страниц:Номер страницыРазмещение страницы Физический адресПрочие параметры012…Страницы нумеруются 0, 1, 2, …. В графе «размещение страницы» указывается,загружена страница в память, или нет, в графе «физический адрес» - физический адресстраницы в памяти или в другом устройстве, «прочие параметры» используются вЛекции по ЭВМ. Конспект. Лектор В.Д. Валединский.Группа 208, 3 семестр, 2002 год58различных стратегиях загрузки/выгрузки страниц.
Сама таблица физически хранится вспециальной области оперативной памяти, не использующейся в страничном обмене.При обращении к адресу виртуальной памяти БПА прежде всего пытается найтисоответствующую страницу в своей таблице. Если находит – то пересчет адреса происходитавтоматически. Проблема возникает, когда соответствующей записи в таблице нет. В этомслучае БПА осуществляет «откат» - возвращает процессор в состояние, бывшее до попыткиисполнить команду, вызвавшую обращение к «нефизическому» адресу памяти и вызываетспециальное прерывание «страничная ошибка», которое должен обработатьсоответствующий обработчик ОС.
Его задача – самому осуществить трансляциювиртуального адреса памяти в физический. Обработчик прерывания смотрит таблицу,находит в ней запись, соответствующую запрошенной странице памяти, находит по нейместо на жестком диске (а это почти всегда единственная альтернатива оперативнойпамяти), откуда нужно загрузить страницу памяти, после чего решает, куда ее загружать.Для этого может, например, потребоваться выгрузить какую-то страницу из памяти (болееподробно см.
стратегии загрузки и замещения страниц). В любом случае в итоге обработчикзагружает запрошенную страницу в память и соответствующим образом обновляет таблицустраниц, после чего возвращает управление программе, выполнявшейся до прерывания.Выполнение начинается с инструкции, вызвавшей в прошлый раз ошибку (в этот раззапрошенная страница оказывается в памяти и проблем не возникает – вот зачем нужнапроцедура отката).
Процесс загрузки страниц в память называется свопингом (swapping), афайл на диске, в котором хранятся данные страниц виртуальной памяти – своп-файлом(swap file).Стратегии загрузки и замещения страниц:…Теперь остается вспомнить про наличие у нас защищенного режима, в котором это всеработает. Виртуальная память позволяет нам легко организовать для каждого процесса«свою» память – просто для каждого процесса в БПА заводится своя таблица (и ОС ипроцессор «знают», что за процесс в данный момент выполняется).
Это приводит к тому,что у каждого процесса – свое адресное пространство и процесс просто не может обратитьсяк «чужой» памяти – это не даст сделать сама архитектура, процесс будет действительновидеть «свой» процессор со «своей» памятью и своими внешними устройствами, так, какбудто других процессов просто нет. На страницы и сегменты при этом, налагаетсянесложное ограничение – сегмент памяти должен состоять из целого числа страниц.Перечислим все вышеперечисленные режимы адресации процессора:1.Прямая адресация – запрашиваемый программой адрес памяти соответствуетфизическому адресу памяти (в частности, использовалась в MS-DOS)2.Трансляция адресов – запрашиваемый программой адрес памяти транслируетсяБПА, что позволяет организовать виртуальную память3.Режим защищенного адреса – реализуется трансляция адресов, для каждогопроцесса выделяется свое адресное пространствоПослесловиеВот и завешен этот многостраничный конспект.
На его создание у меня ушла массавремени (о чем я совершенно не жалею, поскольку при написании я сам разобрался сбольшим числом разнообразных вопросов, знать которые мне необходимо). Надеюсь, онсможет принести какую-то пользу не только мне, но и Вам, дочитавшему его до этого места.Если где-то в конспект закралась ошибка, опечатка, либо Вы с чем-то несогласны илисчитаете, что можно написать лучше – не сочтите за труд написать письмо наozerovsergey@freemail.ru.
Укажите только помимо самой ошибки / исправления номерстраницы, где она встретилась и соответствующий абзац, чтобы облегчить мне поиск.Спасибо за внимание,Лекции по ЭВМ. Конспект. Лектор В.Д. Валединский.Группа 208, 3 семестр, 2002 год.