Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

берчун

.pdf
Скачиваний:
240
Добавлен:
10.02.2015
Размер:
3.24 Mб
Скачать

base – начальный адрес сегмента в оперативной (физической) памяти;

limit – длину сегмента.

Базовый регистр таблицы сегментов - segment-table base register (STBR) содержит адрес таблицы сегментов в памяти.

Регистр длины таблицы сегментов - segment-table length register (STLR) содержит число сегментов, используемое программой.

Номер сегмента s корректен, если s < STLR.

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

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

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

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

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

validation-бит (аналогично страничной организации): значение бита, равное 0, означает, что сегмент неверный, т.е. не принадлежит логической памяти процесса;

полномочия чтения (read) / записи (write) / исполнения (execute) – каждое кодируется одним битом;

значение бита, равное 0, означает, что процесс не имеет данных полномочий.

Например, если сегмент является сегментом данных, то система устанавливает в таблице сегментов бит защиты от исполнения равным 0. Если это сегмент кода, то целесообразна установка в 0 битов защиты от чтения и от записи.

Биты защиты связываются с сегментами. Совместный доступ к коду осуществляется на уровне сегментов.

В системе "Эльбрус" к стандартному набору признаков защиты был добавлен еще один: защита от записи в сегмент адресной информации (данный признак целесообразен, если, например, сегмент предназначен для записи в файл).

Поскольку сегменты различаются по длине, распределение памяти в виде сегментов – это общая задача динамического распределения памяти (см."Страничная организация памяти").

На рис. 17.2 приведена схема адресации при сегментном распределении памяти. Логический адрес (s, d),где s – номер сегмента, d – смещение внутри сегмента, обрабатывается следующим образом. По номеру сегмента s происходит обращение в таблицу сегментов, и определяется базасегмента – его начальный адрес в основной памяти.

Смещение d сравнивается с длиной (границей) сегмента. Если оно меньше, то оно складывается с базой, и в результате получается физический адрес, по которому и происходит обращение в память. Если смещение больше или равно базе, происходит прерывание – ошибка адресации. На схеме не показана еще одна проверка – для номера

сегмента s проверяется, что он не превосходит значения регистра длины таблицы сегментов, иначе – прерывание.

41. Страничная память — способ организации виртуальной памяти, при котором единицей отображения виртуальных адресов на физические является регион постоянного размера (т. н. страница). Типичный размер 4096 байт, для некоторых архитектур до 128 КБ.

Поддержка такого режима присутствует в большинстве 32битных и 64битных процессоров. Такой режим является классическим для почти всех современных ОС, в том числе Windows и семейства UNIX. Широкое использование такого режима началось с процессора VAX и ОС VMS с конца 70х годов (по некоторым сведениям, первая реализация). В семействе x86 поддержка появилась с поколения 386, оно же первое 32битное поколение.

Решаемые задачи

поддержка изоляции процессов и защиты памяти путём создания своего собственного виртуального адресного пространства для каждого процесса

поддержка изоляции области ядра от кода пользовательского режима

поддержка памяти «только для чтения» и неисполняемой памяти

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

поддержка отображённых в память файлов, в том числе загрузочных модулей

поддержка разделяемой между процессами памяти, в том числе с копированием-по-записи для экономии физических страниц

поддержка системного вызова fork() в ОС семейства UNIX

[править]Концепции

Адрес, используемый в машинном коде, то есть значение указателя, называется «виртуальный адрес».

Адрес, выставляемый процессором на шину, называется «линейный адрес» (который позже преобразовывается в физический).

Процессор содержит в себе небольшой объём сверхбыстрой ассоциативной памяти, т. н. TLB (Translation Lookaside Buffer), в котором содержится преобразование нескольких (часто 64) виртуальных адресов страниц в физические. Все обращения процессора к памяти подлежат трансляции адресов через TLB.

Так как 64 строк таблицы явно недостаточно для реальных задач, в архитектуре используются таблицы страниц, размещённые в основной памяти. Каждая таблица страниц сама является страницей с теми же требованиями по выравниваю и тем же размером, и состоит из записей таблицы страниц (page table entries — PTE). Широко используется и отображение самой таблицы страниц как одной из страниц данных для внесения изменений в записи.

Запись таблицы страниц обычно содержит в себе следующую информацию:

флаг «страница отображена»

физический адрес

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

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

флаг «страница недоступна на исполнение».

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

Так как число записей в одной таблице ограничено и зависит от размера записи и размера страницы, используется многоуровневая организация таблиц, часто 2 или 3 уровня, иногда 4 уровня (для 64-х разрядных архитектур). В случае 2 уровней используется «директория» страниц, имеющая в себе записи, указывающие на физические адреса таблиц страниц. Таблицы содержат в себе записи, указывающие уже на страницы данных. В случае 3 уровней возникает ещё и супер-директория, содержащая в себе записи, указывающие на несколько директорий.

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

Формат записей таблиц, их размер, размер страницы и организация таблиц зависит от типа процессора, а иногда и от режима его работы.

Исторически, x86 использует 32битные PTE, 32битные виртуальные адреса, 4KB страницы, 1024 записи в таблице, двухуровневые таблицы, старшие 10 бит виртуального адреса — номер записи в директории, следующие 10 — номер записи в таблице, младшие 12 — адрес внутри страницы. Начиная с Pentium Pro процессор поддерживает страницы размером 4Мб.

Процессор x86 в режиме PAE (Physical Address Extension) и в режиме x86_64 (long mode), использует 64битные PTE (из них реально задействованы не все биты физического адреса, от 36 в PAE до 48 в некоторых x86_64), 32битные виртуальные адреса, 4KB страницы, 512 записей в таблице, трехуровневые таблицы с 4 директориями и 4 записями в супер-директории, старшие 2 бита виртуального адреса — номер записи в супер-директории, следующие 9 — в директории, следующие 9 — в таблице. Физический адрес директории или же супер-директории загружен в один из управляющих регистров процессора.

При использовании PAE вместо 4Мб страниц используются двухмегабайтные. См. также PSE.

В архитектуре x86_64 возможно использовать страницы размером 4 килобайта (4096 байт), 2 мегабайта, и (в некоторых

AMD64) 1 гигабайт.

Если обращение к памяти не может быть оттранслировано через TLB, то микрокод процессора обращается к таблицам страниц и пытается загрузить PTE оттуда в TLB. Если и после такой попытки сохранились проблемы, то процессор исполняет специальное прерывание, называемое «отказ страницы» (page fault). Обработчик этого прерывания находится в подсистеме виртуальной памяти ядра ОС.

Некоторые процессоры (MIPS) не имеют обращающегося к таблице микрокода, и генерируют отказ страницы сразу после неудачи поиска в TLB, обращение к таблице и её интерпретация возлагаются уже на обработчик отказа страницы. Это лишает таблицы страниц требования соответствовать жёстко заданному на уровне аппаратуры формату.

Причины отказа страницы (page fault):

не существует таблицы, отображающей данный регион

PTE не имеет взведённого флага «страница отображена».

попытка обратиться из пользовательского режима к странице «только для ядра».

попытка записи в страницу «только для чтения».

попытка исполнения кода из страницы «исполнение запрещено».

Обработчик отказов в ядре может загрузить нужную страницу из файла или же из области подкачки (см. свопинг), может создать доступную на запись копию страницы «только для чтения», а может и возбудить исключительную ситуацию (в терминах UNIX — сигнал SIGSEGV) в данном процессе.

Каждый процесс имеет свой собственный набор таблиц страниц. Регистр «директория страниц» перегружается при каждом переключении контекста процесса. Также необходимо сбросить ту часть TLB, которая относится к данному процессу.

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

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

Так как память ядра одинакова у всех процессов, соответствующие ей TLB не нужно перегружать после переключения процесса. Для этой оптимизации x86 поддерживает флаг «глобальный» у PTE.

[править]Отображаемые в память файлы

Основная статья: Отображение файла на память

Обработчик отказа страницы в ядре способен прочитать данную страницу из файла.

Это приводит к возможности легкой реализации отображенных в память файлов. Концептуально это то же, что выделение памяти и чтение в неё отрезка файла, с той разницей, что чтение осуществляется неявно «по требованию», выраженному отказом страницы при попытке обращения к ней.

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

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

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

Отображаемые в память файлы используется в ОС Windows, а также ОС семейства UNIX, для загрузки исполняемых модулей и динамических библиотек. Они же используются утилитой GNU grep для чтения входящего файла, а также для загрузки шрифтов в ряде графических подсистем.

[править]Страничная и сегментная виртуальная память

Основная статья: Сегментная адресация памяти

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

Наличие таких концепций в программировании уменьшает применимость арифметики указателей, и приводит к огромным проблемам с переносимостью кода с/на такие архитектуры. Так, например, значительная часть ПО с открытым кодом изначально разрабатывалась для бессегментных 32битных платформ со страничной памятью и не может быть перенесена на сегментные архитектуры без серьёзной переработки.

Кроме того, сегментные архитектуры имеют тяжелейшую проблему SS != DS, широко известную в начале 90х годов в программировании под 16битные версии Windows. Эта проблема приводит к затруднениям в реализации динамических библиотек, ибо они имеют свой собственный DS, и SS текущего процесса, что приводит к невозможности использования «ближних» указателей в них. Также наличие своего собственного DS в библиотеках требует устанавливающих правильное значение DS заплаток (MakeProcInstance) для обратных вызовов из библиотеки в вызвавшее приложение.

[править]Виртуальная память и дисковый кэш

Основная статья: Страничный кэш (англ.)

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

Совершенно очевидно, что данная структура является уже готовым дисковым кэшем. Использование её в качестве кэша также решает проблему когерентности файла, доступного через read/write, и его же, отображенного в память.

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

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

[править]Соображения безопасности

Первоначально архитектура x86 не имела флага «страница недоступна на исполнение» (NX).

Поддержка данного флага появилась в архитектуре x86 как часть режима PAE (Physical Address Extension) в поколении Pentium 4, под большим давлением со стороны специалистов по безопасности (см. архивы NTBugTraq). Установка данного флага на страницах стека и кучи (heap) позволяет реализовать аппаратно защиту от исполнения

данных, что делает невозможной работу многих разновидностей вредоносного ПО, в том числе, например, злонамеренную эксплуатацию многих брешей в Internet Explorer (брешь декабря 2008 года, см. MS knowledge base, не может быть задействована в случае включенной DEP).

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

[править]Поддержка памяти свыше 4Гб в Windows

Устройства PCI, в том числе память видеокарты, обычно поддерживают только 32битные адреса. Следовательно, им должны быть выданы физические адреса ниже отметки 4Гб. Эта «апертура» уменьшает объем видимой физической памяти ниже отметки 4Гб до примерно 3.2Гб. Остальная часть физической памяти переотображается контроллером выше отметки 4Гб.

Для любого обращения к памяти свыше отметки 4Гб (то есть более, чем примерно 3.2Гб) требуется поддержка контроллером (то есть северным мостом чипсета) такой конфигурации. Современные чипсеты (например Intel G33) такую поддержку имеют.

Также требуется настройка BIOS под названием memory remapping, отображающая регион [3.2…4] на [4..4.8].

Процессор x86 вне режима PAE использует 32битные PTE и физические адреса, то есть ему недоступно ничто, находящееся выше отметки 4Гб (см. также PSE-36 об одном из вариантов обхода данного ограничения). Таким образом, для использования памяти более, чем примерно 3.2Гб в ОС она должна поддерживать PAE. Для Windows это опция загрузки, для Linux — опция построения ядра.

Кроме того, Microsoft принудительно отключила поддержку физических адресов выше 4Гб по политико-маркетинговым соображениям в следующих ОС:

32битная Windows XP

32битный Windows Server 2003 Web Edition

32битная Windows Vista (подключение поддержки требует набора команд в командной строке: «BCDEdit /set PAE forceenable», «BCDEdit /set nolowmem on»)

Поддержка физических адресов выше 4Гб имеется в следующих версиях:

всe 64битные версии

32битная Windows Vista SP1 (поддержка включена по умолчанию, но её подключение нередко может требовать набора команд в командной строке)

32битный Windows Server 2003, отличный от Web Edition

32битный Windows Server 2008

Таким образом, для того, чтобы использовать память выше 3.2Гб в Windows, нужны а) поддержка чипсетом б) правильные настройки BIOS в) правильная версия Windows г) правильная опция загрузки (с поддержкой PAE) д) поддержка 36-битного адресного пространства драйверами устройств.

Тем не менее даже в «урезанной» версии Windows, не поддерживающей адреса выше 4Гб, имеет смысл всегда использовать PAE, ибо (см. выше) защита от исполнения данных (DEP) тоже требует PAE. При включении PAE может перестать работать небольшая часть ПО, например, эмулятор windows mobile. Согласно официальной версии Microsoft, введение 4 ГБ ограничения адресного пространства связано с отсутствующей или плохой поддержкой 36битного адресного пространства некоторыми драйверами устройств, это следует иметь в виду, по причине аппаратных ограничений или неподходящих драйверов невозможно подключить PAE, на версиях имеющих поддержку физических адресов выше 4Гб. Возможность включения или выключения PAE не зависит от драйверов, но, если драйвер какого-то старого PCI оборудования не поддерживает правильно физические адреса, не умещающиеся в 32 бита, то данное устройство будет работать неверно и может привести к зависанию всего компьютера.

43. Прерывания (interrupt) и исключения (exception), обобщенно называемые событиями (event), нарушают нормальный ход выполнения программы для обработки внешних событий или сигнализации о возникновении особых условий или ошибок. По возникновении события процессор сохраняет в стеке регистр (E)FLAGS и указатель CS:(E)IP на ту инструкцию, которую он должен будет выполнить после обработки события. Этой инструкцией будет следующая за той, во время исполнения которой произошло событие, или та же самая. В защищенном режиме при возникновении ряда исключений в стеке сохраняется еще и код ошибки. После сохранения этих значений процессор переходит к исполнению кода обработчика данного события, определяя точку входа в него через номер (0-255) по таблице прерываний. Номер элемента в таблице прерываний называется вектором прерывания, он определяется источником события. Обработчик события должен заканчиваться специальной инструкцией возврата IRET, по которой из стека восстанавливаются указатель CS:(E)IP и прежнее значение флагов. Для исключений, в которых сохраняется и код ошибки, обработчик до выполнения инструкции

IRET

должен

извлечь

из

стека

код

ошибки.

Различают

 

четыре

 

типа

 

событий:¦

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

¦

Немаскируемые

внешние

прерывания

по

входу

NMI,

вектор

фиксирован

(01).

¦ Маскируемые внешние прерывания по входу INT (или по шине APIC), вектор передается контроллером прерываний.

Реакция процессора может быть запрещена (точнее, отложена) сбросом флага IF (процессор отреагирует на ожидающее

прерывание,

когда

флаг

 

IF

 

будет

установлен).

¦

Программно

вызываемые

прерывания,

вектор

 

определяется

в

команде.

Последние события из этого списка в прямом смысле прерываниями не являются, поскольку представляют собой лишь специфический механизм вызова процедур — не по адресу, а по его номеру в таблице, причем независимо от состояния флага IF. Программные прерывания широко используются для вызовов сервисов BIOS и ОС — это компактно и удобно.Программное прерывание INT 3 (однобайтная инструкция, в отличие от остальных — двухбайтных) применяется для расстановки точек останова в отладчиках (встроенные средства отладки вырабатывают исключение с вектором 01). Исключения (внутренние прерывания) процессора генерируются при возникновении особых условий выполнения текущей инструкции. В большинстве своем они не столько асинхронны, сколько неожиданны для программного кода. Номер вектора определяется процессором в зависимости от происхождения исключения. Исключения подразделяются на три типа. ¦ Отказ (fault) — исключение, возникающее до исполнения инструкции, когда процессор обнаруживает невозможность ее исполнения; состояние машины при этом не меняется. К отказам относится, например, попытка обращения к отсутствующей страницы памяти (используется для организации виртуальной памяти). ¦ Ловушка (trap) — исключение, возникшее в результате исполнения инструкции (например, деления на ноль), при этом состояние машины под действием инструкции оказывается изменившимся. ¦ Авария (abort) — исключение, для которого невозможно точно определить породившую его инструкцию (и невозможны

корректные

действия

для продолжения работы). К этим

исключениям относятся

двойной

отказ (исключе

ние при

обработке

исключения) и исключения от

средств машинного

контроля

(machine-check).

Маскируемые внешние прерывания обрабатываются процессором по сигналу на входе INT только при установленном

флаге

 

разрешения

прерываний

 

IF.

Немаскируемые прерывания обрабатываются процессором независимо от состояния флага разрешения прерывания IF. К ним относятся прерывания, приходящие по линии NMI (Non-Maskable Interrupt), а для процессоров, поддерживающих режим системного управления, еще и по линии SMI# (System Management Interrupt). Каждому номеру (0-255) прерывания или исключения соответствует элемент в таблице дескрипторов прерываний (Interrupt

Descriptor

Table,

IDT),

который

трактуется

в

зависимости

от

режима

процессора.

В реальномуежиме таблица IDT содержит дальние адреса (двойные слова) обслуживающих процедур и после сброса

располагается

 

 

начиная

 

с

 

нулевых

 

адресов.

В защищенном режиме таблица IDT содержит 8-байтные дескрипторы прерываний, может хранить от 32 до 256 дескрипторов и располагаться в любом месте физической памяти. Дескрипторы могут быть шлюзами, или вентилями (gates), прерываний, ловушек или задач. Шлюзы прерываний и ловушек служат для вызова процедур обработки, расположенных в сегментах, описанных их дескрипторами. Эти шлюзы обеспечивают защиту при передаче управления: процессор передает управление обработчику только при определенных соотношениях привилегий прерываемого кода, кода обработчика и привилегии дескриптора. Код обработчика прерываний должен быть не менее привилегированным, чем код прерываемой задачи (иначе сработает исключение защиты). Если прерывающая процедура выполняется на более высоком уровне привилегий, то процессор автоматически переключает стек (это дополнительный расход времени на обращение к памяти). По прерыванию (в том числе и аппаратному) возможно и переключение задач, для этого дескриптор прерывания должен быть шлюзом задачи. В 64-битном режиме (long mode) дескрипторы имеют новую 16-байтную структуру, и здесь иные правила переключения стека. Кроме того, в этом режиме не выполняется аппаратное переключение задач. Под исключения (внутреннйе прерывания) в процессорах Intel резервируются векторы 0-31 в таблице IDT, однако в PC часть из них перекрывается системными прерываниями — сервисами BIOS и DOS, а также аппаратными прерываниями. Эти перекрытия особенно актуальны для защищенного режима; они усложняют процедуры обработки прерываний.

В начале обработки любого (в том числе и программного) прерывания процессор автоматически сбрасывает флаг разрешения прерываний IF. Процедура обработки завершается инструкцией IRET, по которой из стека восстанавливаются автоматически сохраненные регистры (в восстановленном регистре флагов прерывания разрешены), и процессор начинает выполнение инструкции, следующей за той, после которой исполнялось прерывание. Конечно, программно во время обслуживания прерывания возможно умышленное или случайное изме нение указателя или содержимого стека, и тогда инструкция IRET «отправляет» процессор по другому адресу, в результате чего компьютер может зависнуть. Если на время обработки требуется реакция и на другие прерывания, обработчик должен установить флаг IF. Прерывания, обслуживаемые до завершения обработки предыдущего, называются вложенными. Вложенные прерывания чреваты опасностью переполнения стека, поскольку каждое «вложение» будет задействовать его для своих целей. Переполнение стека может также являться причиной зависаний. Длинные процедуры обработки со сброшенным флагом IF могут привести к потере системного времени, поскольку «часы» операционной системы используют аппаратные прерывания от таймера. Процедура обслуживания для каждого источника аппаратных прерываний должна быть написана весьма осмотрительно и учитывать нюансы работы остальных подсистем. Общее правило — процедура должна выполнять минимальные действия, а если требуется программно сложная реакция, то процедура должна послать сообщение о событии, которое будет обрабатываться позже (не в обработчике прерывания). Для обработки аппаратных прерываний в многопроцессорных системах традиционные аппаратные средства становятся непригрдными, поскольку прежняя схема подачи запроса INTR и передачи вектора в цикле INTA# явно ориентирована на единственность процессора. Для решения этой задачи в процессоры, начиная со второго поколения Pentium, введен усовершенствованный программируемый контроллер прерываний (Advanced Programmable Interruption Controller, APIC). Этот контроллер имеет внешние сигналы локальных прерываний LINT[1:0] и интерфейсную шину, по трем проводам которой (PICD[1:0] и PICCLK) процессоры связываются с контроллером APIC системной платы. Для локальных запросов прерываний процессоры имеют линии UNTO, LINT1. Локальные прерывания обслуживаются только тем процессором, на выводы которого поступают сигналы их запросов. Общие (разделяемые) прерывания (в том числе и SMI) приходят к процессорам в виде сообщений по интерфейсу APIC. При этом контроллеры предварительно программируются — тем самым определяются функции каждого из процессоров в случае возникновения того или иного аппаратного прерывания. Контроллеры APIC каждого из процессоров и контроллер системной платы, связанные интерфейсом APIC, выполняют маршрутизацию прерываний (interrupt routing), причем как статическую, так и динамическую. Внешне программный интерфейс обработки прерываний остается совместимым с управлением контроллером 8259А, что обеспечивает прозрачность присутствия APIC для прикладного программного обеспечения. Режим обработки прерываний посредством APIC разрешается сигналом APICEN по аппаратному сбросу, впоследствии он может быть запрещен программно.

44. Компоненты операционной системы

Часть операционной системы, которая обеспечивает интерфейс ОС с пользователями, называют оболочкой. Современные оболочки выполняют это задание посредством графического интерфейса пользователя (Graphical User Interface, GUI), в котором объекты (файлы, программы) представлены в виде пиктограмм. Ранние оболочки поддерживали общение с пользователями посредством текстовых сообщений, что вводятся из клавиатуры. Некоторые ОС позволяют пользователю выбрать наиболее удобный для него тип оболочки. Главным компонентом современных графических оболочек является программа управления окнами, которая распределяет отдельные блоки пространства экрана, окна, и отслеживает, какое применение ассоциируется с каждым из этих окон. Когда пользователь нажимает кнопку мыши, эта программа определяет положение указателя мыши на экране и сообщает соответствующее применение о действии пользователя. Внутренняя часть ОС называется ядром, которое включает компоненты программного обеспечения, что выполняют основные функции в процессе приведения компьютера в рабочее состояние. Одним из компонентов является программа управления файлами. Программа поддерживает записи обо всех файлах, где каждый файл находится, каким пользователям разрешен доступ к разным файлам. Для удобства пользователей она позволяет группировать файлы в группы, каталоги или папки, создавать из файлов иерархические структуры. Любой доступ к файлу предоставляется и контролируется программой управления файлами. Во время процедуры открытия файла происходит запрос к программе управления файлами. Если доступ позволяется, то она предоставляет информацию, необходимую для поиска файла и работы с ним. Информация записывается в область памяти - дескриптор файла. Другой компонент ядра ОС - набор драйверов устройств, что взаимодействуют с контролерами устройств. Каждый драйвер устройства разрабатывается для конкретного его типа (определенного типа дисководу и т. д.) Драйвер превратит запросы, что поступают, в последовательность команд выполнения отдельных физических операций, которые нужны выполнить устройству, связанному с этим драйвером. Разработка других элементов программного обеспечения может вестись независимо от специфических особенностей конкретных устройств. Операционная система настраивается на использование определенных периферийных устройств посредством простой установки соответствующих драйверов. Компонент ядра ОС - программа управления памятью решает задачу координации использования машиной ее основной памяти. В однозадачной среде программа, что выполняется, размещается в основной памяти, выполняется, а затем заменяется программой следующего задания. В многозадачной среде в основной памяти находится одновременно много программ и блоков данных, причем каждая программа занимает собственную область памяти, отведенную ей программой управления памятью. В ситуации, когда необходимый объем памяти превышает реально существующий объем, программа управления памятью создает иллюзию увеличения объема памяти путем перемещения программ и данных из основной памяти на жесткий диск и назад. Использует виртуальную память. Например для всех программ, что выполняются, требуется 64М основной памяти, а есть только 32. Программа управления памятью делит необходимый объем на элементы - страницы и сохраняет содержание страниц на ЖД. Типичный объем страницы 4 К. Програма управления памятью помещает в основную память те страницы, которые в данный момент должны там находиться, замещая ими те, в которых больше нет необходимости. Кроме того в состав ядра ОС входит планировщик, что определяет последовательность выполнения действий в системах с разделением времени и диспетчер, что контролирует распределение временных квантов для них. Запуск операционной системы Запуск операционной системы осуществляется посредством процесса, что зовется самозавантаженням (booting), который выполняется при каждом включении машины. Первым шагом к пониманию этого процесса является осознание того, зачем его необходимо выполнять на первом этапе. Центральный процессор машины (ЦП) разработан таким образом, что при его включении программа, что выполняется, каждый раз стартует из определенного, заранее заданного адреса. Следовательно, именно в этом месте основной памяти ЦП ожидает найти первую команду, которая нужна выполнить. Чтобы гарантировать, что необходимая программа всегда будет присутствовать на указанном месте, этот участок памяти обычно конструируется так, чтобы ее содержание было неизменным. Такая память носит название постоянной памяти (постоянное запоминающий устройство, ПЗУ). Последовательность битов, однажды помещенная в ПЗУ посредством специального процесса, аналогичного напиливанию проводников на подкладку чипа, находится там постоянно, независимо от того, включенная машина или выключенная. В маленьких компьютерах, которые используют в микроволновых печах, автомобильных системах воспаления, представляется удобным выделить значительный объем основной памяти под ПЗУ, поскольку гибкость в таких системах не нужна. При каждом включении выполняется одна и та же программа. Но в случае с универсальными компьютерами ситуация другая и в них не практикуется отведение большого объема основной памяти под постоянные программы. Содержание памяти таких машин

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

45.пиздец

46.К числу основных ресурсов современных вычислительных систем могут быть отнесены такие ресурсы, как процессоры, основная память, таймеры, наборы данных, диски, накопители на магнитных лентах, принтеры, сетевые устройства и некоторые другие. Ресурсы распределяются между процессами. Процесс (задача) представляет собой базовое понятие большинства современных ОС и часто кратко определяется как программа в стадии выполнения. Программа — это статический объект, представляющий собой файл с кодами и данными. Процесс — это динамический объект, который возникает в операционной системе после того, как пользователь или сама операционная система решает «запустить программу на выполнение», то есть создать новую единицу вычислительной работы. Например, ОС может создать процесс в ответ на команду пользователя run prgl. exe, где prgl. exe — это имя файла, в котором хранится код

программы.

47. тоже хуйня какая-то

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]