Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Определение операционной системыСтр 1 из 5Следующая ⇒
Введение Выполнение программы Содержимое регистров С S и IP, в которых хранится базовый адрес сегмента кодов и смещение очередной команды относительно начала сегмента, определяет физический адрес команды, которая должна быть выполнена на следующем шаге. По указанному адресу из основной памяти считывается команда и пересылается в микропроцессор. Команда длиной от 1 до 8 байт помещается в очередь команд, откуда поступает в устройство управления, где дешифрируется. Если при выполнении команды требуются данные, расположенные в основной памяти, то специальные полем кода команды определяется способ адресации и вычисляется исполнительный, и затем и физический адрес данных. Данные, считанные из основной памяти по указанному адресу, пересылаются в регистр данных или в арифметико-логическое устройство и обрабатываются в соответствии с кодом команды. Результат помещается либо в регистры, либо (в соответствии с командой) в какую-либо область основной памяти. Если выполненная команда не являлась командой передачи управления, то содержимое регистра IP увеличивается на длину выполненной команды, в противном случае в регистр IP заносится исполнительный адрес команды, которая должна выполняться следующей. Затем процесс повторяется. Флажковый регистр Флажковый регистр микропроцессора i8086, в котором в виде однобитовых признаков по принципу ДА - НЕТ (ВКЛЮЧЕНО - ВЫКЛЮЧЕНО) фиксирует информацию о результатах выполнения некоторых команд, например арифметических. О - признак переполнения; D - признак направления; I - признак прерывания; Т - признак трассировки; S - признак знака: 1 - число < 0, 0 - число > 0 Z - признак нуля: 1 - число = 0 А - признак переноса из тетрады; P - признак четности; С - признак переноса. В последующем эта информация может использоваться, например, командами условной передачи управления. Система прерываний 32-разрядных микропроцессоров 180x86 В микропроцессорах семейства i80x86 система прерываний построена таким образом, чтобы, с одной стороны, обеспечить возможность создавать эффективные и надежные мультипрограммные операционные системы, которые должны функционировать в защищенном режиме, а с другой стороны — обеспечить возможность выполнять программы, разработанные для реального режима. Рассмотрим коротко оба режима.
В реальном режиме работы система прерываний использует понятие вектора прерывания. Термин «вектор прерываний» используется потому, что для указания адреса используется не одно значение, а два, то есть мы имеем дело не со скалярной величиной, а с «векторной». Итак, каждый вектор прерываний состоит из 4 байтов или 2 слов: первые два содержат новое значение для регистра IP, а следующие два — новое значение регистра CS. Таблица векторов прерываний занимает 1024 байта. Таким образом, в ней может быть задано 256 векторов прерываний. В процессоре 18086 эта таблица располагается на адресах OQOOGH-003FFH. Расположение этой таблицы в процессорах i80286 и старше определяется значением регистра IDTR — Interrupt Descriptor Table Register. При включении или сбросе процессора i80x86 этот регистр обнуляется. Однако при необходимости можно в регистре IDTR указать смещение и, таким образом, перейти на новую таблицу векторов прерываний. Таблица векторов прерываний заполняется (инициализируется) при запуске системы, но в принципе может быть изменена или перемещена. Каждый вектор прерывания имеет свой номер, называемый номером прерывания, который указывает его место в таблице. Этот номер, помноженный на четыре (сдвиг на два разряда влево и заполнение освободившихся битов нулями), и сложенный с содержимым регистра IDTR, дает абсолютный адрес первого байта вектора в оперативной памяти. Подобно вызову процедуры, прерывание заставляет микропроцессор сохранить в стеке информацию для последующего возврата, а затем перейти к группе команд, адрес которых определяется вектором прерывания. Таким образом, прерывание вызывает косвенный переход к своей подпрограмме обработки за счет получения ее адреса из вектора прерывания. В IBM PC, как и в других вычислительных системах, прерывания бывают двух видов: внутренние и внешние. Внутренние прерывания, как мы уже знаем, возникают в результате работы процессора. Они возникают в ситуациях, которые нуждаются в специальном обслуживании, или при выполнении специальных инструкций — INT или INTO. Это следующие прерывания:
¾ U прерывание при делении на ноль; номер прерывания — 0; ¾ G прерывание по флагу TF (trap flag). В этом случае прерывание обычно используется специальными программами отладки типа DEBUG, номер прерывания — 1; ¾ Q инструкции INT (interrupt — выполнить прерывание с соответствующим номером) и INTO (interrupt if overflow — прерывание по переполнению). Эти прерывания называются программными. В качестве операнда команды INT указывается номер прерывания, которое нужно выполнить, например INT 10H. Программные прерывания как средство перехода на соответствующую процедуру были введены для того, чтобы выполнение этой процедуры осуществлялось в привилегированном режиме, а не в обычном пользовательском. Как известно, прерывания могут быть инициированы внешним устройством ПК или специальной командой прерывания из программы. В любом случае, если прерывания разрешены, то выполняется следующая процедура: 1. В стек помещается регистр флагов. 2. Флаг включения/выключения прерываний IF и флаг трассировки TF, находящиеся в регистре, обнуляются для блокировки других прерываний и исключения пошагового режима исполнения команд. 3. Значения регистров CS и IP сохраняются в стеке. 4. Вычисляется адрес вектора прерывания, и из вектора, соответствующего номеру прерывания, загружаются новые значения IP и CS. Когда системная подпрограмма принимает управление, она может снова разрешить прерывания командой STI (set interrupt flag, установить флаг прерываний), которая переводит флаг IF в состояние 1, что разрешает микропроцессору вновь реагировать на прерывания, инициируемые внешними устройствами, поскольку стековая организация позволяет вложение прерываний друг в друга. Закончив работу, подпрограмма обработки прерывания должна выполнить инструкцию IRET (interrupt return), которая извлекает из стека три 16-битовых значения и загружает их в указатель команд IP, регистр сегмента команд CS и регистр PSW соответственно. Таким образом, процессор сможет продолжить работу с того места, где он был прерван. ACCЕМБЛЕР ПЭВМ Формат операторов ассемблера Операторы языка ассемблера ПЭВМ имеют следующий формат: [<метка>:] <код операции > [<спиcок операндов >1 [<комментарии>]. Запись программы выполняется по свободному формату, т. е. специально не оговариваются правила заполнения каких бы то ни было позиций строки. Точка с запятой в начале строки означает, что данная строка является строкой комментария. Программа может записываться как заглавными, так и строчными буквами. Метку произвольной длины следует записывать с начала строки и отдалять от кода операции двоеточием, за которым может следовать произвольное количество пробелов (вплоть до конца строки). Код операции должен отделяться от списка операндов хотя бы одним пробелом. Операнды отделяются один от другого запятой. Inc OPND Здесь OPN D - символическое имя поля памяти, определенного оператором ассемблера OPN D dw? При трансляции программы ассемблер заменит символическое имя на исполнительный адрес указанного поля памяти (смещение относительно начала сегмента) и занесет этот адрес на место индексного смещения. Адресация а этом случае выполняется по схеме: B Р + <индексное смещение>, но содержимое регистра ВР при вычислении исполнительного адреса не используется (частный случай).
В отличие от прямого косвенный адрес определяет не местоположение данных в основной памяти, а местоположение компонентов адреса этих данных. В этом случае в команде указываются один или два регистра в соответствии с допустимыми схемами адресации и индексное смещение, которое может задаваться числом или символическим именем. Косвенный адрес заключается в квадратные скобки весь или частично, например: [OPND +SI] OPND [SI] OPND + [SI] [ OPND ] +[ SI ] Приведенные выше формы записи косвенного адреса интерпретируются одинаково. При трансляции программы ассемблер определяет используемую схему адресации и соответствующим образом формирует машинную команду, при этом символическое имя заменяется смещением относительно начала сегмента так же, как в случае прямой адресации. Примечание. При использовании косвенной адресации по схеме ВР + <индексное смещение> индексное смещение не может быть опущено, так как частный случай адресации по данной схеме с нулевой длиной индексного смещения используется для организации прямой адресации. Следовательно, при отсутствии индексного смещения в команде следует указывать нулевое индексное смещение, т.е. [ ВР + 0 ]. Приведем два примера: [ a + bx ] и [ b р ]+[ si ] + 6. В первом случае исполнительный адрес операнда определяется суммой содержимого регистра b х и индексного смещения, заданного символическим именем " а ", а во втором - суммой содержимого регистров bp, si и индексного смещения, равного 6. Длина операнда может определяться: а) кодом команды - в том случае, если используемая команда обрабатывает данные определенной длины, что специально оговаривается; б) объемом регистров, используемых для хранения операндов (1 или 2 байта); в) специальными указателями byte ptr (1 байт) и word ptr (2 байта), которые используются в тех случаях, когда длину операнда нельзя установить другим способом. Например, mov byte ptr x, 255 т. е. операнд пересылается в поле с именем " х " и имеет длину I байт. Команды пересылки / преобразования данных Команда пересылки данных. MOV <адрес приемника>,< адрес источника> используется для пересылки данных длиной I или 2 байта из регистра в регистр, из регистра в основную память, из основной памяти в регистр, а также для записи в регистр или основную память данных, непосредственно записанных в команде.
Приведем примеры: а) mov ax, bx - пересылка содержимого регистра bx в регистр ax; б) mov cx, exword - пересылка 2 байт, расположенных в поле exword, из основной памяти в регистр cx; в) mov si, 1000 - запись числа 1000 в регистр si; г) mov word ptr [ di +515], 4 - запись числа 4 длиной 2 байта в основную память по адресу [ di +515]. Для загрузки "прямого" адреса в сегментный регистр используются две команды пересылки: Mov ax, code Mov ds, ax Команда обмена данных. ХCHG <операнд 1>, <операнд 2> организует обмен содержимого двух регистров (кроме сегментных) или регистра и поля основной памяти. Например: xchg bx, cx - обмен содержимого регистров bx и сх. Команды загрузки указателя. L DS < регистр >,<операнд 2> LЕS < регистр >,< операнд 2> Команда LDS загружает в регистры D S:< регистр> указатель (< адрес сегмента >: < исполнительный адрес >), расположенный по адресу, указанному во втором операнде. Команда LЕS загружает указатель по адресу, расположенному во втором операнде, в регистры ЕS:< регистр>. Например: lds si, exword т.e. слово (2 байта) по адресу exword загружается в si, а по адресу exword + 2 - в ds. Команда записи в стек. PUSH < операнд> организует запись в стек слова, адрес которого указан в операнде. Например; p ush dx - запомнить содержимое регистра dx в стеке. Команды сложения. ADD <операнд 1>, <операнд 2> ADC <операнд 1>, <операнд 2> устанавливают флаги четности, знака результата, наличия переноса, наличия переполнения. Ilo команде A D D выполняется сложение двух операндов. Результат записывается по адресу первого операнда. По команде А DC также выполнятся сложение двух операндов, но к ним добавляется еще значение, записанное в бите переноса, установленном предыдущей командой сложения. Приведем пример сложения двух 32-разрядных чисел: Mov ax,value1 Add value2,ax mov ax,value1+2 adc value2+2,ax Исходные числа находится в основной памяти по адресам value 1 и value 2, а результат записывается по адресу value 1. Команды вычитания. SUB <уменьшаемое-результат>, <вычитаемое> SBB <уменьшаемое-результат>, <вычитаемое> устанавливают флаги четности, знака результата, наличия заема, наличия переполнения. При выполнении операции по команде SUB заем не учитывается, а по команде SBB - учитывается. Ограничения на местоположение операндов такие же, как и у команды сложения. Команда изменения знака. NEG <операнд> знак операнда изменяется на противоположный. Команда добавления единицы. INC <операнд> значение операнда увеличивается на единицу. Команда вычитания единицы. D E C <операнд> значение операнда уменьшается на единицу. Команда сравнения. СМ P <операнд 1>, < операнд 2> выполняется операция вычитания без записи результата и устанавливаются признаки во флажковом регистре. Команды умножения. MU L <операнд> I М UL <операнд> устанавливают флаги наличия переноса или переполнения. По команде MU L числа перемножаются без учета, и по команде - I М UL с учетом знака (в дополнительном коде).
Рассмотрим пример: Imul word ptr c Здесь содержимое основной памяти по адресу " с" длиной слово умножается на содержимое регистра ax. Младшая часть результата операции записывается в регистр a х, а старшая часть - и регистр dx. Команда деления. DI V <операнд-делитель> I DIV <операнд-делитель> По команде DI V операция деления выполняется без учета, а по команде I DIV - с учетом знака (в дополнительном коде). 15. Команда преобразования байта в слово, а слова - в двойное слово. CBW CWD По команде CBW число из al переписывается в ax (дополнение выполняется знаковыми разрядами). Аналогично по команде CW D число из ax переписывается в два регистра dx и ax. Команды условного перехода. <мнемоническая команда> <адрес перехода> Мнемоника команд условного перехода: JZ - переход по "ноль"; J E - переход по "равно"; JN Z - переход по "не нуль"; J NE - переход по "не равно"; JL - переход по "меньше"; JNG, J LE - переход по "меньше или равно "; JG - переход по "больше"; JNL, J GE - переход по "больше или равно "; JA - переход по "выше" (беззнаковое больше); JNA, JBE - переход по "не выше"(беззнаковое не больше); JB - переход по "ниже" (беззнаковое меньше); JNB, JAE - переход по"не ниже" (беззнаковое не меньше). Все команды имеют однобайтовое поле адреса, следовательно, смешение не должно превышать -128...127 байт. Если смещение выходит за указанные пределы, то используется специальный прием: вместо программируется Команды вызова подпрограмм. 1) Команда вызова процедуры. C A L L <адрес процедуры> осуществляет передачу управления по указанному адресу, предварительно записав в стек адрес возврата. При указании адреса процедуры так же как и при указании адреса перехода в командах безусловного перехода, возникает необходимость определить удаленности процедуры от места вызова: а) если процедура удалена не более чем на -128...127 байт, то специальных указаний не требуется; б) если процедура удалена в пределах 32 к6ант, то перед адресом по процедуры необходимо указать near ptr, в) если процедура подпрограмма удалена более, чем на 32 кбайта, то перед адресом процедуры необходимо записать far ptr. Например: call near ptr p - вызов подпрограммы " р ". Текст процедуры должен быть оформлен в виде: < имя процедуры> ргос < указатель удаленности> ... тело процедуры... <имя процедуры> end Здесь указатель удаленности также служит дли определения длины адресов, используемых при обращении к процедуре: near - при использовании двухбайтовых адресов, far - при использовании четырехбайтовых адресов. 2) Команда возврата управления. RET [<число>] извлекает из стека адрес возврата и передает управление по указанному адресу. Если в команде указано значение счетчика, то после восстановления адреса возврата указанное число добавляется к содержимому регистра-указателя стека. Последний вариант команды позволяет удалить из стека параметры, передаваемые в процедуру через стек. Команды обработки строк. Команды обработки строк используются для организации циклической обработки последовательностей элементов длиной I или 2 байта. Адресация операндов при этом выполняется с помощью пар регистров: DS: SI - источник, ES: DI - приемник. Команды имеют встроенную корректировку адреса операндов согласно флагу направления D: 1 - уменьшение адреса на длину элемента, 0 - увеличение адреса на длину элемента. Корректировка выполняется после выполнения операции. Установка требуемого значения флага направления выполняется специальными командами: ST D - установка флага направления в единицу, CLD - сброс флага направления в ноль. 1) Команда загрузки строки LO DS. LO DSB (загрузка байта), LO DSW (загрузка слова). Команда загружает байт в А L или слово в AX. Для адресации операнда используются регистры DS: S I 2) Команда записи строки STOS. STOSB (запись байта), ST OSW (запись слова) записывает в основную память содержимое A L или АX соответственно. Для адресации операнда используются регистры ES:DI. 3) Команда пересылки MOVS. MOVSB (пересылка байта), МО VSW (пересылки слова) пересылает элемент строки из области, адресуемой регистрами DS: SI, в область, адресуемую регистрами Е S: DI. 4) Команда сканирования строки SCAS. SCASB (поиск байта), SCAS W (поиск слова). По команде содержимое регистра AL или АХ сравниваются с элементом строки, адресуемым регистрами DS: SI и устанавливается значение флажков в соответствии с результатом [ DI ] - AL или [ DI ]- AX. 5) Команда сравнения строк CMPS. СMPSB (сравнение байт), С MPS W (сравнение слов) элементы строк, адресуемых парами регистров DS: SI и ES: DI, сравниваются и устанавливаются значения флажков в соответствии с результатом [DI]-[ SI ]. 6) Префиксная команда повторения. REP <команда> позволяет организовать повторение указанной команды CX раз. Например: Rep stosb Здесь поле, адресуемое парой регистров ES: DI длиной CX заполняется содержимым AL. 7) Префиксные команды "повторять, пока равно" и "повторять, пока не равно". REPE < команда > RE PNE < команда ^ Префиксные команды используются совместно с командами С MPS и SCAS. Префикс REPE означает повторять, пока содержимое регистра СХ не равно нулю и значение флажка нуля равно единице, a RE PNE - повторять, пока содержимое регистра CX не равно нулю и значение флажка нуля равно нулю. Логические команды. NOT < операнд > - логическое НЕ; AND <операнд 1>, <операнд 2> - лигическое И; OR <операнд 1>, <операнд 2> - логическое ИЛИ; XOR <операнд 1>, <операнд 2> - исключающее ИЛИ; TEST <операнд 1>, <операнд 2> - И без записи результата. Операнды байты или слова. Пример. Выделить из числа в AL первый бит: And al, 10000000 B Команды сдвига. < код операции > <операнд>, <счетчик> Счетчик записывается в регистр СL. Если счетчик равен 1, то его можно записать в команду. Коды команд сдвига: SAL - сдвиг влево арифметический; SHL - сдвиг влево логический; SAR - сдвиг вправо арифметический; SHR - сдвиг вправо логический; ROL - сдвиг влево циклический; ROR - сдвиг вправо циклический; RCL - сдвиг циклический влево с флагом переноса; RCR - сдвиг циклический вправо с флагом переноса. Пример. Умножить число в AX на 10: Mov bx, ax Shl ax, 1 Shl ax, 1 Add ax, bx shl ax, 1 Команды ввода - вывода. Обмен данными с внешней средой осуществляемся с помощью следующих команд: IN <регистр>, <порт> (ввод из порта в регистр), IN <регистр >, D X (ввод из порта, номер которого указан в регистре D X в регистр); OUT <порт>, <регистр> (вывод содержимого регистра в порт), OUT D X, <регистр> (вывод содержимого регистра в порт, номер которого указан в регистре DX). В качестве регистра можно указать AL или AX (соответственно будет обрабатываться байт или два байта). Порт отождествляется с некоторым внешним устройством (0...255). Однако при организации ввода - вывода помимо самой операции необходимо осуществить ряд дополнительных действий, например, проверить готовность устройства. В связи с этим для типовых устройств разработаны стандартные программы организации ввода - вывода, которые вызываются по команде прерывания int 21 h. В таблице 1 приведен перечень основные функции, реализуемые подпрограммами ввода - вывода, и их коды. Код функции должен передаваться в подпрограмму в регистре AH. Таблица 1
Управление вводом/выводом и файловые системы Необходимость обеспечить программам возможность осуществлять обмен данными с внешними устройствами и при этом не включать в каждую двоичную программу соответствующий двоичный код, осуществляющий собственно управление устройствами ввода/вывода, привела разработчиков к созданию системного программного обеспечения и, в частности, самих операционных систем. Программирование задач управления вводом/выводом является наиболее сложным и трудоемким, требующим очень высокой квалификации. Поэтому код, позволяющий осуществлять операции ввода/вывода, стали оформлять в виде системных библиотечных процедур; потом его стали включать не в системы программирования, а в операционную систему с тем, чтобы в каждую отдельно взятую программу его не вставлять, а только позволить обращаться к такому коду. Системы программирования стали генерировать обращения к этому системному коду ввода/вывода и осуществлять только подготовку к собственно операциям ввода/вывода, то есть автоматизировать преобразование данных к соответствующему формату, понятному устройствам, избавляя прикладных программистов от этой сложной и трудоемкой работы. Другими словами, системы программирования вставляют в машинный код необходимые библиотечные подпрограммы ввода/вывода и обращения к тем системным программным модулям, которые, собственно, и управляют операциями обмена между оперативной памятью и внешними устройствами. Таким образом, управление вводом/выводом — это одна из основных функций любой ОС. Основные понятия и концепции организации ввода/вывода в ОС Ввод/вывод считается одной из самых сложных областей проектирования операционных систем, в которой сложно применить общий подход из-за изобилия частных методов. Сложность возникает из-за огромного числа устройств ввода/вывода разнообразной природы, которые должна поддерживать ОС. При этом перед создателями ОС встает очень непростая задача — не только обеспечить эффективное управление устройствами ввода/вывода, но и создать удобный и эффективный виртуальный интерфейс устройств ввода/вывода, позволяющий прикладным программистам просто считывать или сохранять данные, не обращая внимание на специфику устройств и проблемы распределения устройств между выполняющимися задачами. Система ввода/вывода, способная объединить в одной модели широкий набор устройств, должна быть универсальной. Она должна учитывать потребности существующих устройств, от простой мыши до клавиатур, принтеров, графических дисплеев, дисковых накопителей, компакт-дисков и даже сетей. С другой стороны, необходимо обеспечить доступ к устройствам ввода/вывода для множества параллельно выполняющихся задач, причем так, чтобы они как можно меньше мешали друг другу. Поэтому самым главным является следующий принцип: любые операции по управлению вводом/выводом объявляются привилегированными и могут выполняться только кодом самой ОС. Для обеспечения этого принципа в большинстве процессоров даже вводятся режимы пользователя и супервизора. Как правило, в режиме супервизора выполнение команд ввода/вывода разрешено, а в пользовательском режиме — запрещено. Использование команд ввода/вывода в пользовательском режиме вызывает исключение и управление через механизм прерываний передается коду ОС. Хотя возможны и более сложные системы, в которых в ряде случаев пользовательским программам разрешено непосредственное выполнение команд ввода/вывода. Помимо разделяемых устройств ввода/вывода существуют неразделяемые устройства. Примерами разделяемых устройств могут служить накопитель на магнитных дисках, устройство чтения компакт-дисков. Это устройства с прямым доступом. Примеры неразделяемых устройств — принтер. Операционные системы должны управлять и теми и другими устройствами, предоставляя возможность параллельно решающимся задачам использовать различные устройства ввода/вывода. Прикладные программы (а в общем случае — все обрабатывающие программы) не могут непосредственно связываться с устройствами ввода/ вывода независимо от использования устройств (монопольно или совместно). Установив соответствующие значения параметров в запросе на ввод/вывод, определяющих требуемую операцию и количество потребляемых ресурсов, они могут передать управление супервизору ввода/вывода, который и запускает необходимые логические и физические операции. Для организации использования многими параллельно выполняющимися задачами устройств ввода/вывода, которые не могут быть разделяемыми, вводится понятие виртуальных устройств. Использование принципа виртуализации позволяет повысить эффективность вычислительной системы. Вообще говоря, понятие виртуального устройства шире, нежели использование этого термина для обозначения спулинга (SPOOLing — simultaneous peripheral operation on-line, то есть имитация работы с устройством в режиме «он-лайн»). Главная задача спулинга — создать видимость параллельного разделения устройства ввода/вывода с последовательным доступом, которое фактически должно использоваться только монопольно и быть закрепленным. Например, мы уже говорили, что в случае, когда несколько приложений должны выводить на печать результаты своей работы, если разрешить каждому такому приложению печатать строку по первому же требованию, то это приведет к потоку строк, не представляющих никакой ценности. Однако можно каждому вычислительному процессу предоставлять не реальный, а виртуальный принтер и поток выводимых символов (или управляющих кодов для их печати) сначала направлять в специальный файл на магнитном диске. Затем, по окончании виртуальной печати, в соответствии с принятой дисциплиной обслуживания и приоритетами приложений выводить содержимое спул-файла на принтер. Системный процесс, который управляет спул-файлом, называется спулером (spool-reader или spool-writer).
Основные системные таблицы ввода/вывода Каждая ОС имеет свои таблицы ввода/вывода, их состав (количество и назначение каждой таблицы) может сильно отличаться. В некоторых ОС вместо таблиц создаются списки, хотя использование статических структур данных для организации ввода/вывода, как правило, приводит к большему быстродействию. Исходя из принципа управления вводом/выводом через супервизор ОС и учитывая, что драйверы устройств ввода/вывода используют механизм прерываний для установления обратной связи центральной части с внешними устройствами, можно сделать вывод о необходимости создания по крайней мере трех системных таблиц. Первая таблица (или список) содержит информацию обо всех устройствах ввода/вывода, подключенных к вычислительной системе. Назовем ее условно таб лицей оборудования (equipment table), а каждый элемент этой таблицы пусть называется UCB (unit control block, блок управления устройством ввода/вывода). Каждый элемент UCB таблицы оборудования, как правило, содержит следующую информацию об устройстве: · тип устройства, его конкретная модель, символическое имя и характеристики устройства; · как это устройство подключено (через какой интерфейс, к какому разъему, какие порты и линия запроса прерывания используются и т. д.); · номер и адрес канала (и подканала), если такие используются для управления устройством; · указание на драйвер, который должен управлять этим устройством, адрес секции запуска и секции продолжения драйвера; · информация о том, используется или нет буферирование при обмене данными с этим устройством, «имя» (или просто адрес) буфера, если такой выделяется из системной области памяти; · установка тайм-аута и ячейки для счетчика тайм-аута; а состояние устройства; · поле указателя для связи задач, ожидающих устройство, и, возможно, много еще каких сведений. Вторая таблица предназначена для реализации еще одного принципа виртуализации устройств ввода/вывода — независимости от устройства. Желательно, чтобы программист не был озабочен учетом конкретных параметров (и/или возможностей) того или иного устройства ввода/вывода, которое установлено (или не установлено) в компьютер. Для него должны быть важны только самые общие возможности, характерные для данного класса устройств ввода/вывода, которыми он желает воспользоваться. Например, принтер должен уметь выводить (печатать) символы или графическое изображение. А накопитель на магнитных дисках — считывать или записывать по указанному адресу порцию данных. Хотя чаще всего программист и не использует прямую адресацию при работе с магнитными дисками, а работает на уровне файловой системы. Однако в таком случае уже разработчики файловой системы не должны зависеть от того, накопитель какого конкретного типа и модели, а также какого производителя используется в данном конкретном компьютере. Важным должен быть только сам факт существования накопителя, имеющего некоторое количество цилиндров, головок чтения/записи и секторов на дорожке магнитного дискa. Упомянутые значения количества цилиндров, головок и секторов должны быть взяты из элемента таблицы оборудования. При этом для программиста также не должно иметь значения, каким образом то или иное устройство подключено к вычислительной системе, а не только какая конкретная модель устройства используется. Поэтому в запросе на ввод/вывод программист указывает именно логическое имя устройства. Действительное устройство, которое сопоставляется виртуальному (логическому), выбирается супервизором с помощью таблицы, о которой мы сейчас говорим. Итак, способ подключения устройства, его конкретная модель и соответствующий ей драйвер содержатся в уже рассмотренной таблице оборудования. Но для того, чтобы связать некоторое виртуальное устройство, использованное программистом при создании приложения с системной таблицей, отображающей информацию о том, какое конкретно устройство и каким образом подключено к компьютеру, используется вторая системная таблица. Назовем ее условно таблицей описания виртуальных логических устройств. Наконец, третья таблица необходима для организации обратной связи между центральной частью и устройствами ввода/вывода. Это таблица прерываний, которая указывает для каждого сигнала запроса на прерывание тот элемент UCB, который сопоставлен данному устройству, подключенному так, что оно использует настоящую линию (сигнал) прерывания. Как системная таблица ввода/вывода, таблица прерываний может в явном виде и не присутствовать. В современных сложных ОС имеется гораздо больше системных таблиц или списков, используемых для организации процессами управления операциями ввода/вывода. Например, одной из возможных и часто реализуемых информационных структур, сопровождающих практически каждый запрос на ввод/вывод, является блок управления данными (data control block, DCB). Назначение этого DCB — подключение препроцессоров к процессу подготовки данных на ввод/вывод, то есть учет конкретных технических характеристик и используемых преобразований. Это необходимо для того, чтобы имеющееся устройство получало не какие-то непонятные ему коды либо форматы данных, которые не соответствуют режиму его работы, а коды, созданные специально под данное устройство и используемый в настоящий момент формат представления данных.
Файловые системы
|
|||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-12-15; просмотров: 26; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.146.105.137 (0.147 с.) |