Поддержка многозадачности и виртуальной памяти
В компьютерах, построенных на основе 16-разрядных процессоров первого поколения, работавших под управлением DOS, одновременно выполнялась только одна задача. Процессоры второго поколения получили возможность поддержки многозадачного (мультипрограммного) режима. Обычно в памяти ЭВМ находится одновременно несколько программ: прикладная, ОС, библиотечные подпрограммы и др. При запуске прикладной программы выполняются не только ее команды, но и команды ОС и библиотечных прикладных программ. В процессе выполнения работы до ее окончания осуществляется переход от одной программы к другой. Такое выполнение последовательности команд называется процессом, а выполнение команд одной программы – задачей.
В обычном компьютере имеется только один процессор, поэтому в каждый момент времени он может выполнять команды только одной задачи. Поэтому в многозадачном режиме команды различных задач должны выполняться в режиме разделения времени.
Выполнение задачи может быть приостановлено на любой команде, поэтому необходимо обеспечить перезапуск соответствующей программы. Каждой задаче отводится отдельная область памяти, в том числе и стек для хранения всех данных, используемых в задаче. Кроме того, в памяти должны быть предусмотрены ячейки для хранения содержимого программного счетчика, регистра флагов ФР и регистров общего назначения РОН. Когда выполнение задачи приостанавливается, в них помещается начальные значения указанных регистров. При возобновлении задачи содержимое этих ячеек пересылается в ПС, ФР и РОН процессора, после чего начинается выполнение задачи. Совокупность этих ячеек называется блоком управления задачей. В случае приостановки выполнения команды задачи, информация, необходимая для ее перезапуска, должна сохраняться в блоке управления задачей, который размещается в сегменте состояния задачи (ССЗ – TSS). Для этого сегмента также используется свой дескриптор, который хранится в ГТД. Для выполнения N задач соответственно используется N сегментов состояния задачи. Таким образом, в ГТД хранятся N дескрипторов ЛТД и N дескрипторов ССЗ (TSS).
Когда некоторая задача находится в состоянии прогона, в соответствующую часть регистра задачи (TR) помещается селектор, с помощью которого осуществляется считывание дескриптора ССЗ. Автоматически считанный из ГТД дескриптор ССЗ помещается в регистр дескрипторов сегментов TR, в котором содержится базовый адрес ССЗ.
Сегмент состояния задачи состоит из 22-х слов (44 байта). В нем, помимо начальных значений всех регистров, хранятся также начальные значения указателей стеков 0 -, 1 – и 2-го уровней привилегий. В конце сегмента ССЗ располагается селектор ЛТД данной задачи. При запуске задачи восстанавливается содержимое регистров процессора, а содержимое ЛТД автоматически помещается в селекторную часть РгЛТД.
В верхней части (с начала) сегмента состояния задачи располагаются данные (2 байта) о связи с задачей, которая выполнялась непосредственно перед этой задачей.
При переключении на другую задачу осуществляются следующие действия:
1) Состояние выполняемой задачи помещается в ССЗ;
2) Селектор новой задачи – в селекторную часть TR;
3) Дескриптор ССЗ новой задачи в регистр дескрипторов TR;
4) Состояние новой задачи посылается в процессор. Кроме того, в процессор посылается селектор ЛТД, с помощью которого можно обратиться к новой ЛТД.
В 80286 эта процедура выполняется аппаратно, на что затрачивается ~180 тактовых импульсов (при f=10 МГц это составляет 18 мкс).
В ССЗ хранится информация об обратной связи, на основании которой указывается задача, вызвавшая вложенную задачу, Т.е., если переключение происходит в результате прерывания, то автоматически устанавливается связь с задачей, выполняемой в момент возникновения прерывания. Таким образом, в случае возврата автоматически осуществляется возвращение к прежней задаче.
Планирование выполнения задач может быть осуществлено в программе управления задачами в ОС. Для этого при запуске программы управления задачами информацию о связи со следующей задачей следует поместить в поле обратной связи ССЗ. (Имеются команды загрузки LTR и сохранения STR регистра задачи.)
С помощью вентилей задачи системные программы могут ограничивать право переключаться на специфические задачи. Вентиль – логический элемент, пропускающий только определенные процессы.
Для реализации мультипрограммного режима в ОС должны быть предусмотрены программы, выполняющие специальные функции. Одной из них является программа управления задачей, которая управляет переходом задачи из одного состояния в другое. Выбор, какая задача будет выполняться следующей, решается планированием задач. Замена задач в состоянии выполнения называется переключением задач. В этом случае в блок управления задачей необходимо передать содержимое ПС, ФР и РОН, а из блока управления новой задачей считать содержимое этих регистров. Однако для реализации этих действий программно требуется много времени. В целях сокращения времени, основные операции целесообразно выполнять аппаратными средствами.
Выбор, какая задача будет выполняться следующей, решается планированием задач. Замена задач в состоянии выполнения называется переключением задач. В этом случае в блок управления задачей необходимо передать содержимое ПС, ФР и РОН, а из блока управления новой задачей считать содержимое этих регистров. Однако для реализации этих действий программно требуется много времени. В целях сокращения времени, основные операции целесообразно выполнять аппаратными средствами.
В процессорах, начиная со второго поколения и выше, реализована аппаратная поддержка виртуальной памяти. Виртуальная память – это способ организации основной памяти большой емкости с помощью внешней памяти. Она позволяет при составлении программы распоряжаться всем пространством адресов, зарезервированных в процессоре. Такие адреса называются виртуальными.
При выполнении программы устройство управления памятью (УУП) преобразует виртуальные адреса в физические. Обычно в основной памяти размещается небольшое количество сегментов, к которым в данной части программы осуществляется обращение, т.е. размещаются только необходимые в данное время сегменты. Индикатором нахождения данного сегмента в основной памяти является бит Р дескриптора сегмента. При ссылке на несуществующие сегменты выполнение программы приостанавливается и производится замена содержимого основной памяти. При этом сегменты, которые не предполагается использовать, посылают во внешнюю память, а на их место размещают требуемые сегменты. Затем возобновляется выполнение приостановленной программы. Функция замены осуществляется ОС.
Для отбора сегментов, которые используются наименее часто применяется бит А.При обращении к сегменту биту А присваивается значение 1. ОС в фиксированный момент времени проверяет значение А, и если оно равно 1, производит приращение содержимое строки справочной таблицы и сбрасывает А. Таким образом, с помощью справочной таблицы ОС отбирает сегменты, которые реже всего используются и поэтому в первую очередь подлежат замене.