Системное программирование в среде Windows

Построение диаграммы состояний (statechart diagram), возможные переходы из одного состояния в другое. Механизмы виртуальной памяти, которые используются в защищенном режиме работы микропроцессоров i80x86. Работа с командным процессором ОС Windows.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 29.01.2012
Размер файла 570,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

4. Уровни привилегий для защиты адресного пространства задач

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

В микропроцессорах i80x86 режим супервизора и режим пользователя непосредственно связаны с так называемыми уровнями привилегий, причем имеется не два, а четыре уровня привилегий. Для указания уровня привилегий используются два бита, поэтому код 0 обозначает самый высший уровень, а код 3 -- самый низший. Самый высший уровень привилегий предназначен для операционной системы (прежде всего для ядра ОС), самый низший -- для прикладных задач пользователя. Промежуточные уровни привилегий введены для большей свободы системных программистов в организации надежных вычислений при создании операционной системы и иного системного программного обеспечения. Предполагалось, что уровень с номером (кодом) 1 может быть использован, например, для системного сервиса -- программ обслуживания аппаратуры, драйверов, работающих с портами ввода-вывода. Уровень привилегий с кодом 2 может быть использован для создания пользовательских интерфейсов, систем управления базами данных и прочими, то есть для реализации специальных системных функций, которые по отношению к супервизору операционной системы ведут себя как обычные приложения. Так, например, в системе OS/2 доступны три уровня привилегий: с нулевым уровнем привилегий исполняется код супервизорной части операционной системы, на втором уровне исполняются системные процедуры подсистемы ввода-вывода, на третьем уровне исполняются прикладные задачи пользователей. Однако на практике чаще всего задействуются только два уровня -- нулевой и третий. Таким образом, упомянутый режим супервизора для микропроцессоров i80x86 соответствует выполнению кода с уровнем привилегий 0, обозначаемый как PLO (Privilege Level 0 -- уровень привилегий 0). Подводя итог, можно констатировать, что именно уровень привилегий задач определяет, какие команды в них можно использовать и какое подмножество сегментов и/или страниц в их адресном пространстве они могут обрабатывать.

Основными системными объектами, которыми манипулирует процессор при работе в защищенном режиме, являются дескрипторы. Именно дескрипторы сегментов содержат информацию об уровне привилегий соответствующего сегмента кода или данных. Уровень привилегий исполняющейся задачи определяется значением поля привилегий, находящегося в дескрипторе ее текущего кодового сегмента. Напомним , что в байте прав доступа каждого дескриптора сегмента имеется полеDPL (Descriptor Privilege Level -- уровень привилегий сегмента, определяемый его дескриптором), которое и определяет уровень привилегий связанного с ним сегмента. Таким образом, поле DPL текущего сегмента кода становится полем текущего уровня привилегий (Current Privilege Level, CPL), или уровня привилегий задачи. При обращении к какому-нибудь сегменту в соответствующем селекторе указывается запрашиваемый уровень привилегий (Requested Privilege Level, RPL).

В пределах одной задачи используются сегменты с различными уровнями привилегий, и в определенные моменты времени выполняются или обрабатываются сегменты с соответствующими им уровнями привилегий. Механизм проверки привилегий работает в ситуациях, которые можно назвать межсегментными переходами (обращениями). К этим ситуациям относятся доступ к сегменту данных или стековому сегменту, межсегментные передачи управления в случае прерываний (и особых ситуаций), использование команд CALL, JMP, INT, IRET, RET. В таких межсегментных обращениях участвуют два сегмента: целевой сегмент (к которому мы обращаемся) и текущий сегмент кода, из которого идет обращение.

Процессор сравнивает упомянутые значения CPL, RPL, DPL и на основе понятия эффективного уровня привилегий (Effective Privilege Level, EPL) ограничивает возможности доступа к сегментам по следующим правилам, в зависимости от того, идет ли речь об обращении к коду или к данным.

При доступе к сегментам данных проверяется условие CPL < EPL. Нарушение этого условия вызывает так называемую особую ситуацию ошибки защиты, ведущую к прерыванию. Уровень привилегий сегмента данных, к которому осуществляется обращение, должен быть таким же, как и текущий уровень, или меньше его. Обращение к сегменту с более высоким уровнем привилегий воспринимается как ошибка, так как существует опасность изменения данных с высоким уровнем привилегий программой с низким уровнем привилегий. Доступ к данным с меньшим уровнем привилегий разрешается.

Если целевой сегмент является сегментом стека, то правило проверки имеет вид:

CPL = DPL = RPL

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

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

Механизм шлюзов для передачи управления на сегменты кода с другими уровнями привилегий

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

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

Для доступа к более привилегированному коду задача должна обратиться к нему не непосредственно (путем указания дескриптора этого кода), а через шлюз этого сегмента.

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

Введены следующие правила использования шлюзов:

· значение DPL шлюза вызова должно быть больше или равно значению текущего уровня привилегий С PL;

· значение DPL шлюза вызова должно быть больше или равно значению поля RPL селектора шлюза;

· значение DPL шлюза вызова должно быть больше или равно значению DPL целевого сегмента кода;

· значение DPL целевого сегмента кода должно быть меньше или равно значению текущего уровня привилегий CPL

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

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

· Шлюзы межсегментных переходов для вызова системных функций делают эти самые системные функции невидимыми для программных модулей, расположенных на внешних (более низких) уровнях привилегий.

· Поскольку вызывающая программа непосредственно адресует только шлюз вызова, реализуемые вызываемым модулем (сегментным кодом) функции можно изменить или переместить в адресном пространстве, не затрагивая интерфейс со шлюзом.

· Легко реализуется вызов программных модулей с более привилегированного уровня.

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

Основной риск связан с передачей управления через шлюз вызова более привилегированной процедуре. Нельзя предоставлять вызывающей программе никаких преимуществ, вытекающих из-за временного повышения привилегий. Это особенно важно для процедур нулевого уровня привилегий (PLO-процедур).

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

· Следует проверять счетчики циклов и повторений на минимальные и максимальные значения.

· Необходимо проверить 8- и 16-разрядные параметры, передаваемые в 32-разрядных регистрах. Когда процедуре передается короткий параметр, его следует расширить знаковым разрядом или нулем для заполнения всего 32-разрядного регистра.

· Следует стремиться свести к минимуму время работы процессора с запрещенными прерываниями. Если процедуре требуется запрещать прерывания, необходимо, чтобы вызывающая программа не могла влиять на время нахождения процессора с запрещенными прерываниями (флаг IF = 0).

· Процедура никогда не должна воспринимать как параметр код или указатель на код.

· В операциях процессора следует явно задавать состояние флага направления DF для цепочечных команд.

· Заключительная команда RET или RET n в процедуре должна точно соответствовать полю WC (Word Counter -- счетчик слов) шлюза вызова; при этом n = 4 х WC, так как счетчик задает число двойных слов, а п соответствует байтам.

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

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

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

Нетрудно представить себе ситуацию, когда PLS-программа передает PLO-процедуре указатель селектор-.смещение и запрашивает считать или записать несколько байтов по этому адресу. Типичным примером может служить процедура дискового ввода-вывода, которая воспринимает как параметр системный номер файла, счетчик байтов и адрес, по которому записываются данные с диска. Хотя PLO-процедура имеет привилегии для производства такой операции, у PLS-программы разрешения на это может не быть.

Система прерываний 32-разрядных микропроцессоров i80x86

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

Работа системы прерываний в реальном режиме

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

Итак, каждый вектор прерывания состоит из четырех байтов, или двух слов: первые два содержат новое значение для регистра IP, а следующие два -- новое значение для регистра CS. Таблица векторов прерывания занимает 1024 байт. Таким образом, в ней может быть задано 256 векторов прерываний. В процессоре i8086 эта таблица располагается на адресах OOOOOH-003FFH. Расположение этой таблицы в процессорах i80286 и в более поздних определяется значением регистра IDTR (Interrupt Descriptor Table Register -- регистр таблицы дескрипторов прерываний). При включении или сбросе процессора i80x86 этот регистр обнуляется. Однако при необходимости можно в регистре IDTR указать смещение и таким образом перейти на новую таблицу векторов прерываний.

Таблица векторов прерываний заполняется (инициализируется) при запуске системы, но, в принципе, может быть изменена или перемещена.

Каждый вектор прерывания имеет свой номер, называемый номером прерывания, который указывает его место в таблице. Этот номер, помноженный на четыре (сдвиг на два разряда влево и заполнение освободившихся битов нулями) и сложенный с содержимым регистра IDTR, дает абсолютный адрес первого байта вектора прерываний в оперативной памяти.

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

В IBM PC, как и в других вычислительных системах, прерывания бывают двух видов: внутренние и внешние.

Внутренние прерывания, как мы уже знаем, возникают в результате работы процессора в ситуациях, которые нуждаются в специальном обслуживании, или при выполнении специальных команд (INT, INTO). Это следующие прерывания:

· прерывание при делении на ноль (номер прерывания 0);

· прерывание по флагу TF (Trap Flag -- флаг трассировки) обычно используется специальными программами отладки типа DEBUG (номер прерывания 1);

· прерывания, возникающие при выполнении команд INT (Interrupt -- прерывание) и INTO (Interrupt if Overflow -- прерывание по переполнению), называются программными.

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

Внешние прерывания возникают по сигналу какого-нибудь внешнего устройства. Существует два специальных внешних сигнала среди входных сигналов процессора, при помощи которых можно прервать выполнение текущей программы и тем самым переключить работу центрального процессора. Это сигналы Л/М/(Мо Mask Interrupt -- немаскируемое прерывание) и INTR (Interrupt Request -- запрос на прерывание). Соответственно, внешние прерывания подразделяются на немаскируемые и маскируемые.

Маскируемые прерывания генерируются контроллером прерываний по заявке определенных периферийных устройств. Контроллер прерываний (его обозначение 18259А) поддерживает восемь уровней (линий) приоритета; к каждому уровню «привязано» одно периферийное устройство. Маскируемые прерывания часто называют аппаратными прерываниями.

Как известно, прерывания могут быть инициированы внешним устройством ПЭВМ или специальной командой прерывания из программы. В любом случае если прерывания разрешены, то выполняется следующая процедура.

1. В стек помещается регистр флагов PSW.

2. Флаг включения-выключения прерываний IF и флаг трассировки TF, находящиеся в регистре PSW, обнуляются для блокировки других маскируемых прерываний и исключения пошагового режима исполнения команд.

3. Значения регистров CS и IP сохраняются в стеке вслед за PSW.

4. Вычисляется адрес вектора прерывания и из вектора, соответствующего номеру прерывания, загружаются новые значения IP и CS.

Когда системная подпрограмма принимает управление, она может разрешить снова маскируемые прерывания командой STI (Set Interrupt Flag -- установить флаг прерываний), которая переводит флаг IF в состояние 1, что разрешает микропроцессору вновь реагировать на прерывания, инициируемые внешними устройствами, поскольку стековая организация допускает вложение прерываний друг в друга.

Закончив работу, подпрограмма обработки прерывания должна выполнить команду IRET (Interrupt Return), которая извлекает из стека три 16-разрядных значения и загружает их в указатель команд IP, регистр сегмента команд CS и регистр PSW соответственно. Таким образом, процессор сможет продолжить работу с того места, где он был прерван.

В случае внешних прерываний процедура перехода на подпрограмму обработки прерывания дополняется следующими шагами.

1. Контроллер прерываний получает заявку от определенного периферийного устройства и, соблюдая схему приоритетов, генерирует сигнал INTR (запрос на прерывание), который является входным для микропроцессора.

2. Микропроцессор проверяет флаг IF в регистре PSW. Если он установлен в 1, то переходим к шагу 3. В противном случае работа процессора не прерывается. Часто говорят, что прерывания замаскированы, хотя правильнее говорить, что они отключены. Маскируются (запрещаются) отдельные линии запроса на прерывания посредством программирования контроллера прерываний.

3. Микропроцессор генерирует сигнал INTA (подтверждение прерывания). В ответ на этот сигнал контроллер прерываний посылает по шипе данных номер прерывания. После этого выполняется описанная ранее процедура передачи управления соответствующей программе обработки прерывания.

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

5. Работа системы прерываний в защищенном режиме

В защищенном режиме работы система прерываний микропроцессора i80x86 работает совершенно иначе. Прежде всего, вместо таблицы векторов, о которой мы говорили выше, она имеет дело с таблицей дескрипторов прерываний (Interrupt Descriptor Table, IDT). Дело здесь не столько в названии таблицы, сколько в том, что таблица IDTпредставляет собой не таблицу с адресами обработчиков прерываний, а таблицу со специальными системными структурами данных (дескрипторами), доступ к которой со стороны пользовательских (прикладных) программ невозможен. Только сам микропроцессор (его система прерываний) и код операционной системы могут получить доступ к этой таблице, представляющей собой специальный сегмент, адрес и длина которого содержатся в регистре IDTR. Этот регистр аналогичен региструGDTR в том отношении, что он инициализируется один раз при загрузке системы. Интересно заметить, что в реальном режиме работы регистр IDTR также указывает на адрес таблицы прерываний, но при этом, как и в процессоре i8086, каждый элемент таблицы прерываний (вектор) занимает всего 4 байт и содержит 32-разрядный адрес в формате селектор-.смещение (CS:IP). Начальное значение этого регистра равно нулю, но в него можно занести и другое значение. В этом случае таблица векторов прерываний будет находиться в другом месте оперативной памяти. Естественно, что перед тем, как занести в регистр IDTR новое значение, необходимо подготовить саму таблицу векторов. В защищенном режиме работы загрузку регистра IDTR может произвести только код с максимальным уровнем привилегий.

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

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

Дескриптор прерываний может относиться к одному из трех типов:

· коммутатор прерывания (interrupt gate);

· коммутатор перехвата (trap gate);

· коммутатор задачи (task gate).

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

Обработка прерываний в контексте текущей задачи

Обработку прерывания в контексте текущей задачи :

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

1. В стек на уровне привилегий текущего сегмента кода помещаются:

2. - значения SS и SP, если уровень привилегий в коммутаторе выше уровня привилегий ранее исполнявшегося кода;

3. - регистр флагов EFLAGS;

4. - регистры CS и IP.

5. Если рассматриваемому прерыванию соответствовал коммутатор прерывания, то запрещаются прерывания (устанавливается флаг IF = 0 в регистре EFLAGS). В случае коммутатора перехвата флаг прерываний не сбрасывается, и обработка новых прерываний на период обработки текущего прерывания тем самым не запрещается.

6. Поле селектора из дескриптора прерывания используется для индексирования таблицы дескрипторов задачи. Дескриптор сегмента заносится в теневой регистр, а смещение относительно начала нового сегмента кода определяется полем смещения из дескриптора прерывания.

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

Обработка прерываний с переключением на новую задачу

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

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

1. Сохраняются все рабочие регистры процессора в текущем сегменте TSS, базовый адрес этого сегмента берется в регистре TR (см. раздел «Адресация в 32-разрядных микропроцессорах i80x86 при работе в защищенном режиме»).

2. Текущая задача отмечается как занятая.

3. По селектору из коммутатора задачи выбирается новый сегмент TSS (поле селектора помещается в регистр TR) и загружается состояние новой задачи. Напомним, что загружаются значения регистров LDTR, EFLAGS, восьми регистров общего назначения, регистра EIP и шести сегментных регистров.

4. Устанавливается бит NT (Next Task).

5. В поле обратной связи TSS помещается селектор прерванной задачи.

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

Таким образом, коммутатор задачи дает указание процессору произвести переключение задачи, и обработка прерывания осуществляется под контролем отдельной внешней задачи. В каждом сегменте TSS имеется селектор локальной таблицы деск- рипторов (LDT), поэтому при переключении задачи процессор загружает в регистрLDTR новое значение. Это позволяет обратиться к сегментам кода, которые абсолютно не пересекаются с сегментами кода любых других задач, поскольку именно локальные таблицы дескрипторов обеспечивают эффективную изоляцию виртуальных адресных пространств. Новая задача начинает свое выполнение на уровне привилегий, определяемом полем RPL нового содержимого регистра CS, которое загружается из сегмента TSS. Достоинством этого коммутатора является то, что он позволяет сохранить все регистры процессора с помощью механизма переключения задач, тогда как коммутаторы перехвата и прерываний сохраняют только содержимое регистров IFLAGS, CS и IP, а сохранение других регистров возлагается на программиста, разрабатывающего соответствующую программу обработки прерывания.

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

Условные обозначения форматирования

Формат

Значение

Курсив

Сведения, вводимые пользователем

Полужирный

Элементы, вводимые без изменений

Многоточие (...)

Параметр может быть введен в командной строке несколько раз

В квадратных скобках ([])

Необязательные элементы

В фигурых скобках ({}); варианты, разделенные вертикальной линией (|), пример: {even|odd}

Набор вариантов, из которых необходимо выбрать один

Шрифт Courier

Выходные данные программы

Assoc

Вывод или изменение связи между расширениями имени и типами файлов. Запущенная без параметров команда assoc выводит список текущих связей между расширениями имени и типами файлов.

Синтаксис

assoc [.рсш[=[тип_файла]]]

Параметры

.рсш

Задание расширения имени файла.

тип_файла

Задание типа файла, с которым сопоставляется указанное расширение имени файла.

/?

Отображение справки в командной строке.

Заметки

· Чтобы удалить связь между расширением имени и типом файла, введите пробел после знака равенства.

· Чтобы просмотреть текущие типы файлов, выполните команду ftype без параметров.

· Чтобы направить вывод команды assoc в текстовый файл, воспользуйтесь оператором перенаправления >.

Примеры

Чтобы вывести текущий тип файла, соответствующий расширению имени файла .txt, введите:

assoc .txt

Чтобы удалить тип файла, соответствующий расширению имени файла .txt, введите:

assoc .txt=

Чтобы просмотреть текущие сопоставления типов файлов, введите:

assoc | more

Чтобы отправить результаты выполнения команды assoc в файл Assoc.cfg, введите:

assoc>assoc.cfg

At

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

Синтаксис

at [\\имя_компьютера] [{[код] [/delete]|/delete [/yes]}]

at [[\\имя_компьютера] часы:минуты [/interactive] [{/every:дата[,...]|/next:дата[,...]}] команда]

Параметры

\\имя_компьютера

Задание удаленного компьютера, на котором могут быть запущены команды и программы. Если этот параметр не задан, предполагается, что они будут запущены на том компьютере, где выполняется команда at.

код

Указание идентификационного номера, присваиваемого команде или программе, которая будет запущена.

/delete

Отмена выполнения команды. Если идентификатор Код не задан, все запланированные команды на компьютере будут отменены.

/yes

Задание утвердительного ответа на все запросы системы при отмене запланированных событий.

часы:минуты

Задание времени запуска команды. Время задается в 24-х часовом формате часы:минуты (от 00:00 [полночь] до 23:59).

/interactive

Обмен данными с помощью команды с теми пользователями, которые работают в системе в момент выполнения запланированнойкоманды.

/every:

Выполнение команды в указанный день или дни в течение недели или месяца (например каждый четверг или каждый третий день месяца).

дата

Задание даты выполнения команды. Имеется возможность указать один или несколько дней недели (т. е. ввести M,T,W,Th,F,S,Su) либо один или несколько дней месяца (т. е. ввести числа в диапазоне от 1 до 31). Несколько дат разделяются запятыми. Если параметр дата не задан, в команде at используется текущий день месяца.

/next:

Выполнение команды при наступлении следующей заданной даты (например в следующий четверг).

команда

Задание команды Windows, программы (т. е. файл .exe или .com) или пакетного файла (т. е. файл .bat или .cmd), которые требуется выполнить. Если для задания команды необходимо указывать ее местоположение, имя файла задается полностью, с указанием пути и диска. Если команда запускается на удаленном компьютере, укажите имя сервера и сетевое имя в стандартном формате записи пути (UNC), а не имя диска этого компьютера.

/?

Отображение справки в командной строке.

Заметки

· Команда Schtasks является более мощным, расширенным средством планирования заданий с помощью командной строки и включает в себя все функциональные возможности команды at. Для планирования заданий с командной строки используйте команду schtasks вместоat.

· Использование at

Для вызова команды at пользователь должен быть членом локальной группы администраторов.

· Загрузка программы Cmd.exe

Команда at не вызывает автоматически командный процессор Cmd.exe перед запуском команды. Если запускается не исполняемый (.exe) файл, перед командой должен быть явно загружен командный процессор Cmd.exe, например:

cmd /c dir > c:\test.out

· Просмотр запланированных команд

Если команда at используется без параметров, запланированные задания выводятся в таблице следующего вида:

Состояние Код День Время Командная строка

OK 1 Каждый F 4:30 PM net send group leads status due

OK 2 Каждый M 12:00 AM chkstor > check.file

OK 3 Каждый F 11:59 PM backup2.bat

· Включение идентификационного номера (код)

Если в командной строке для команды at указан идентификационный номер (код), выводятся сведения об одной записи, имеющие следующий вид:

Код задачи: 1

Состояние: OK

Дата: Каждый F

Время дня: 4:30 PM

Команда: net send group leads status due

После того как запуск команды запланирован с помощью at, особенно если запускаемая команда имеет дополнительные параметры, проверьте правильность ее ввода, вызвав at без параметров. Если сведения в столбце «Командная строка» содержат ошибки, удалите запись о данной команде в списке запланированных команд и повторно введите данные. Если по-прежнему имеют место ошибки, введите команду с меньшим числом параметров.

· Просмотр результатов

Команды, запуск которых задан с помощью at, выполняются как фоновые процессы. Сведения не отображаются на экране компьютера. Для перенаправления вывода в файл используется символ перенаправления (>). Если вывод перенаправляется в файл, необходимо использовать управляющий символ (^) перед символом перенаправления независимо от того, используется ли at в командной строке или в пакетном файле. Например, чтобы перенаправить вывод в файл Output.txt, введите:

at 14:45 c:\test.bat ^>c:\output.txt

Текущим каталогом для выполнения запланированных команд является системный_корневой_каталог.

· Изменение системного времени

Если системное время изменено после планирования вызова команд с помощью at, синхронизируйте планировщик команды at с измененным системным временем, вызвав at без параметров.

· Сохранение запланированных команд

Запланированные команды сохраняются в реестре. Таким образом, запланированные задания не будут потеряны при перезапуске службы расписаний.

· Подключение к сетевым дискам

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

at 13:00 my_backup \\server\share

Запрещается использовать следующий синтаксис, где x: -- подключение, устанавливаемое пользователем:

at 13:00 my_backup x:

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

Примеры

Для вывода списка команд, которые будут выполнены на сервере Marketing, можно использовать следующую команду:

at \\marketing

Для получения дополнительных сведений о команде с идентификатором 3 на сервере Corp требуется ввести следующую команду:

at \\corp 3

Для запуска команды net share на сервере Corp в 8:00 и перенаправления вывода на сервер Maintenance в общий каталог Reports в файл Corp.txt требуется ввести следующую команду:

at \\corp 08:00 cmd /c "net share reports=d:\marketing\reports >> \\maintenance\reports\corp.txt"

Чтобы записывать на магнитную ленту резервную копию жесткого диска сервера Marketing в полночь через каждые пять дней, создайте пакетный файл Archive.cmd, содержащий команды резервирования, а затем запланируйте запуск пакетного файла, введя:

at \\marketing 00:00 /every:5,10,15,20,25,30 archive

Чтобы отменить вызов всех команд, запланированных на данном сервере, необходимо очистить расписание команды at следующим образом:

at /delete

Чтобы запустить команду, которая не является исполняемым файлом, введите перед ней cmd /c для загрузки программы Cmd.exe следующим образом:

cmd /c dir > c:\test.out

Литература

диаграмма состояние виртуальная память командный процессор

1. Таненбаум Э., Вудхал А. Операционные системы. Разработка и реализация.

2. Гордеев А.В. Операционные системы.

3. Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение.

4. Харт Д.М. Системное программирование в среде Windows.

Сайты :

1.http://www.4its.ru/

2.http://www.gnu.org/software

3.www.philosof.onu.edu.ua/education

Размещено на Allbest.ru


Подобные документы

  • Изучение учебника и справочной подсистемы Windows 95/NT, получение навыков работы с "мышью", манипулирование окнами и значками программ и документов, запуска программ в системе Windows 95/NT. Разработка простого приложения для Windows при помощи Delphi.

    контрольная работа [1,1 M], добавлен 15.01.2009

  • Основы работы с многооконным графическим пользовательским интерфейсом операционной системы Windows95/NT. Основы работы с прикладными программами Windows и DOS. Разработка простого приложения для Windows при помощи средства разработки приложений DELPHI.

    контрольная работа [281,0 K], добавлен 15.01.2009

  • Программирование для Windows. Возможности нового интерфейса. Окна и их управляющие компоненты. DOS и Windows: разные подходы к программированию. Особенности работы с базами данных. Структура программ в CA-Visual Objects. Генерация и обработка событий.

    курсовая работа [1,3 M], добавлен 02.03.2010

  • Характеристика операционной системы. История развития Windows. Сравнительная характеристика версий Windows. Элементы и инструменты Windows XP. Прикладные программы в Windows XP. Работа настольных и портативных компьютеров под управлением Windows.

    доклад [19,1 K], добавлен 16.10.2011

  • Таймер в Windows как устройство ввода информации, которое извещает приложение о том, что истек заданный интервал времени. Работа с таймером в условиях WinAPI, процесс 32-битного программирования на ассемблере под Windows. Результат выполнения программы.

    курсовая работа [165,6 K], добавлен 18.05.2014

  • Все окна в ОС Windows имеют стандартную структуру. Выполнение лабораторной работы предусматривает приобретение навыков использования мышки как основного способа управления работой компьютера в среде Windows.

    лабораторная работа [191,1 K], добавлен 22.05.2007

  • История развития Windows: покупка лицензии на ОВОS, выпуск версии МS-DOS 1.0, графической оболочки Microsoft Windows 1.0 и поддержка расширенной памяти. Графический пользовательский интерфейс (GUI) и комбинация DOS-Windows. Windows NT и поздние версии.

    реферат [25,1 K], добавлен 13.01.2010

  • История создания. Windows 9x/NT. Операционная система Microsoft Windows. Преимущества и недостатки Windows. Некоторые клавиатурные комбинации Windows 9x и NT. Windows XP Professional. Наиболее совершенная защита.

    реферат [19,3 K], добавлен 18.07.2004

  • Windows Management Instrumentation как инструментарий управления Windows, его общая характеристика и возможности, функциональные особенности. Классы, события и безопасность WMI. Работа с объектами и коллекциями объектов, полученными в результате запросов.

    курсовая работа [428,8 K], добавлен 26.04.2011

  • Vista: понятие, методика проектирования. Зараженность персональных компьютеров с различными версиями операционных систем Windows. Оснастка "Брандмауэр Windows в режиме повышенной безопасности". Режим работы IE 7.0, возможности, безопасные соединения.

    лекция [2,3 M], добавлен 20.12.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.