<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0" xmlns="http://backend.userland.com/rss2" xmlns:yandex="http://news.yandex.ru">
<channel>
<title>Архитектурные компоненты компьютера - Аппаратные интерфейсы ПК</title>
<link>http://intpc.ru/</link>
<language>ru</language>
<description>Архитектурные компоненты компьютера - Аппаратные интерфейсы ПК</description>
<image>
<url>http://intpc.ru/yandexlogo.gif</url>
<title>Архитектурные компоненты компьютера - Аппаратные интерфейсы ПК</title>
<link>http://intpc.ru/</link>
</image>
<generator>DataLife Engine</generator><item>
<title>Пространство физической памяти</title>
<link>http://intpc.ru/160-prostranstvo-fizicheskojj-pamjati.html</link>
<description>Основную часть физического адресного пространства PC занимает оперативная память (ОЗУ), начинающаяся с нулевого адреса. В нее вклинивается область адресов AOOOOh-FFFFFh - Upper Memory Area (UMA), 384 Кбайт - верхняя память, зарезервированная со времен IBM PC для системных нужд.</description>
<category>Архитектурные компоненты компьютера</category>
<author>jcrush</author>
<pubDate>Tue, 30 Dec 2008 07:01:40 +0300</pubDate>
<yandex:full-text>Основную часть физического адресного пространства PC занимает оперативная память (ОЗУ), начинающаяся с нулевого адреса. В нее вклинивается область адресов AOOOOh-FFFFFh - Upper Memory Area (UMA), 384 Кбайт - верхняя память, зарезервированная со времен IBM PC для системных нужд. В UMA размещаются области буферной памяти адаптеров шины (E)ISA (например, видеопамять) и постоянная память (BIOS с расширениями). ОЗУ продолжается и за областью UMА. Под самой верхней границей физического адресного пространства имеется образ памяти системной ROM BIOS.&lt;br /&gt;Для доступности сервисов BIOS в реальном режиме все ПК имеют образ ROM BIOS в адресах EOOOOh-FFFFFh или FOOOOh-OFFFFFh. Кроме того, образ BIOS должен находиться и под самой верхней границей адресного пространства, поскольку все процессоры х86 по аппаратному сбросу стартуют с адреса начала последнего параграфа памяти (FFFFOh - 8086/88, FFFFFOh - 80286 и 386SX, FFFFFFFOh - 386DX и выше с 32-разрядной шиной адреса, FFFFFFFFOh - Р6 и выше с 36-разрядной шиной адреса).&lt;br /&gt;Для компьютеров класса АТ-286 и 386SX с 24-битной шиной адреса верхняя граница оперативной памяти - FDFFFFh (максимальный размер 15,9 Мбайт). Область FEOOOOh-FFFFFFh содержит образ ROM BIOS, обращение к этой области эквивалентно обращению к ROM BIOS по адресам OEOOOOh-OFFFFFh. Для ПК на процессорах 386DX и выше с 32-битной шиной адреса теоретический предел объема ОЗУ - почти 4 Гбайт, верхний образ BIOS находится в адресах FFFEOOOOh-FFFFFFFFh. Для ПК на процессорах Р6+ с 36-битной шиной адреса предел объема ОЗУ - почти 64 Гбайт и верхний образ BIOS находится в адресах FFFFEOOOOh-FFFFFFFFFh.&lt;br /&gt;Области физических адресов, не занятые ОЗУ и ROM BIOS, могут быть использованы устройствами шин (E)ISA и PCI (AGP).&lt;br /&gt;Для памяти адаптеров, устанавливаемых в шину ISA, безусловно доступна часть области адресов UMA AOOOOh-EFFFFh или AOOOOh-DFFFFh (до начала ROM BIOS). В этой области располагаются и модули расширений BIOS (см. п. 12.7.1). Карты ISA могут иметь память и в области FEOOOOh-FFFFFFh, но она программно доступна лишь в защищенном (и большом^реальном) режимах процессора. Для отображения этой области памяти на шину ISA (а не ОЗУ) в CMOS Setup предусмотрен параметр Memory Hole At 15-16М, но его включение не позволит использовать оперативную память свыше 15 Мбайт.&lt;br /&gt;Поскольку шина ISA имеет 24-разрядную шину адреса, ведущие устройства этих&lt;br /&gt;шин (ISA Bus Master) способны обращаться к памяти (ОЗУ и память адаптеров)&lt;br /&gt;в пределах первых 16 Мбайт (000000-FFFFFFh). To же ограничение касается и&lt;br /&gt;стандартного контроллера DMA, которым могут пользоваться устройства шины&lt;br /&gt;ISA (и иные устройства системной платы).	Л&lt;br /&gt;Шина PCI имеет 32-разрядную шину адреса, так что ее ведущим устройствам доступна вся физическая память1. Для устройств PCI могут выделяться любые области адресов, свободные от ОЗУ, ROM BIOS и устройств ISA. Области адресов памяти, используемые каждым устройством PCI, описаны в заголовках их конфигурационных пространств. Эти данные требуются при распределении ресурсов и настройке мостов PCI в процессе инициализации шины.</yandex:full-text>
</item><item>
<title>Пространство ввода-вывода</title>
<link>http://intpc.ru/161-prostranstvo-vvoda-vyvoda.html</link>
<description>Пространство ввода-вывода в IBM PC, как и в процессорах х86, отделено от пространства памяти.</description>
<category>Архитектурные компоненты компьютера</category>
<author>jcrush</author>
<pubDate>Tue, 30 Dec 2008 07:03:29 +0300</pubDate>
<yandex:full-text>Пространство ввода-вывода в IBM PC, как и в процессорах х86, отделено от пространства памяти. У всех этих процессоров, в том числе и 32-разрядных, в пространстве ввода-вывода используется 16-разрядная адресация (диапазон адресов О-FFFFh). Для дешифрации адресов портов в оригинальном PC из 16 бит использовались только младшие 10 (А0-А9), что обеспечивает обращением портам в диапазоне адресов 0-3FFL Старшие биты адреса, хотя и поступают на шину, устройствами игнорируются. В результате обращения по адресам, к примеру 378h, 778h, B78h и F78h, будут восприниматься устройствами одинаково. Это упрощение, нацеленное на снижение стоимости как системной платы, так и схем плат адаптеров, для шины ISA никто не отменял. Традиционные адаптеры для шины ISA, называемые Legacy Card («наследие тяжелого прошлого»), для старших бит адреса не имеют&lt;br /&gt;1 Для пока еще экзотических вариантов системных плат с памятью более 4 Гбайт и 36-разрядной физической адресацией последних моделей процессоров PCI может использовать двухадресные циклы обращения с 64-битным адресом.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;1 даже печатных ламелей на своем краевом разъеме. Впоследствии перешли к 12-битной адресации устройств шины ISA, но ее приходится применять &amp;#163; оглядкой на возможное присутствие устройств с 10-битной адресацией. В адаптерах для шин МСА и PCI и во всех современных системных платах используются все 16 бит адреса. Карта распределения адресов ввода-вывода стандартных устройств PC приведена в табл. 12.1. Эта карта подразумевает 10-битную дешифрацию адреса. Естественно, что в конкретном компьютере реально присутствуют не все перечисленные устройства, но в то же время там могут оказаться другие, не попавшие в таблицу.&lt;br /&gt;Таблица 12.1. Стандартная карта портов ввода-вывода AT и PS/2    PC/XT        Назначение&lt;br /&gt;&lt;br /&gt;000-OOF	000-OOF	Контроллер DMA #1 8237&lt;br /&gt;010-01F		PS/2 - расширение DMA#1&lt;br /&gt;020-021	020-021	Контроллер прерываний #1 - 8259А&lt;br /&gt;040-05F	040-043	Таймер (PC/XT: 8253, AT: 8254)&lt;br /&gt;060	060	Диагностический регистр POST (только запись)&lt;br /&gt;	060-063	Системный интерфейс 8255&lt;br /&gt;060,064		Контроллер клавиатуры AT 8042&lt;br /&gt;061		Источники NMI и управление звуком&lt;br /&gt;070-07F		Память CMOS и маска NMI&lt;br /&gt;080		Диагностический регистр-&lt;br /&gt;080-08F	080-083	Регистры страниц DMA&lt;br /&gt;090-097		PS/2 микроканал, арбитр&lt;br /&gt;	ОАО	Маска NMI&lt;br /&gt;OAO-OBF		Контроллер прерываний #2 - 8259А&lt;br /&gt;OCO-ODF		Контроллер DMA #2 8237А-5&lt;br /&gt;OFO-OFF		Сопроцессор 80287&lt;br /&gt;100-1EF		PS/2 управление микроканалом&lt;br /&gt;170-177		Контроллер НЖМД #2 (IDE#2)&lt;br /&gt;1FO-1F7		Контроллер НЖМД #1 (IDE#1)&lt;br /&gt;200-207	200-20F	Игровой адаптер&lt;br /&gt;	210-217	Блок расширений&lt;br /&gt;238-23F		COM4&lt;br /&gt;278-27F	278-27F	Параллельный порт LPT2 (LPT3 при наличии MDA)&lt;br /&gt;	2А2-2АЗ	4acbiMSM48321RS&lt;br /&gt;2CO-2DF	2CO-2DF	EGA #2&lt;br /&gt;2ЕО-2Е7		COM4&lt;br /&gt;2E8-2EF		COM4&lt;br /&gt;2F8-2FF	2F8-2FF	COM2&lt;br /&gt;300-31F		ПлатЬ прототипа&lt;br /&gt;	320-32F	Жесткий диск XT&lt;br /&gt;338-33F		COM3               &lt;,&lt;br /&gt;370-377		Контроллер НГМД #2&lt;br /&gt;376-377		Порты комайд IDE#2&lt;br /&gt;378-37F	378-37F	Параллельный порт LPT1 (LPT2 при наличии MDA)&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;AT и PS/2    PC/XT&lt;br /&gt; &lt;br /&gt;Назначение&lt;br /&gt; &lt;br /&gt;380-38F	380-38F	Синхронный адаптер SDLC/BSC #2&lt;br /&gt;3AO-3AF	ЗАО-ЗА9	Синхронный адаптер BSC#1&lt;br /&gt;ЗВО-ЗВВ	ЗВО-ЗВВ	Монохромный адаптер (MDA)&lt;br /&gt;ЗВ4-ЗС9	PS/2 видеосистема&lt;br /&gt;3BC--3BF	3BC-3BF	Параллельный порт LPT1 платы MDA&lt;br /&gt;3CO--3CF	3CO-3CF	EGA#1&lt;br /&gt;3CO-3DF	3CO-3DF	VGA&lt;br /&gt;3DO-3DF	3DO-3DF	CGA/EGA&lt;br /&gt;ЗЕО-ЗЕ7	COM3&lt;br /&gt;3E8-3EF	COM3&lt;br /&gt;3FO-3F7	3FO-3F7	Контроллер НГМД #1&lt;br /&gt;3F6-3F7	Порты команд IDE*1&lt;br /&gt;3F8-3FF	3F8-3FF	СОМ1&lt;br /&gt;Каждой шине назначается своя область адресов ввода, поэтому дешифратор адресов, расположенный на системной плате, при чтении открывает соответствующие буферы данных, так что реально считываться будут данные только с одной шины. При записи в порты данные (и сигнал записи) могут распространяться по всем шинам компьютера. В стандартном распределении адреса Oh-OFFh отведены для устройств системной платы. При наличии (и разрешении работы) периферийных устройств на системной плате чтение по этим адресам не распространяется на шины расширения. Для современных плат со встроенной периферией и несколькими шинами (ISA, PCI) распределением адресов управляет BIOS через регистры конфигурирования чипсета.&lt;br /&gt;</yandex:full-text>
</item><item>
<title>Аппаратные прерывания</title>
<link>http://intpc.ru/162-apparatnye-preryvanija.html</link>
<description>Аппаратные прерывания обеспечивают реакцию процессора на события, происходящие асинхронно по отношению к исполняемому программному коду.</description>
<category>Архитектурные компоненты компьютера</category>
<author>jcrush</author>
<pubDate>Tue, 30 Dec 2008 07:04:50 +0300</pubDate>
<yandex:full-text>Аппаратные прерывания обеспечивают реакцию процессора на события, происходящие асинхронно по отношению к исполняемому программному коду. Прерывания в процессорах х86 подробно рассмотрены в литературе [6,7]. Здесь напомним, что аппаратные прерывания делятся на маскируемые и немаскируемые. На немаскируемое прерывание (NMI) процессор реагирует всегда (если обслуживание предыдущего NMI завершено); этому прерыванию соответствует фиксированный вектор 2. Немаскируемые прерывания в PC используются для сигнализации о фатальных аппаратных ошибках. Сигнал на линию NMI приходит от схем контроля паритета памяти, от линий контроля шины ISA (IOCHK) или шины PCI (SERR#). Сигнал NMI блокируется до входа процессора установкой в 1 бита 7 порта 070h, отдельные источники разрешаются и идентифицируются битами порта 061h:&lt;br /&gt;-	бит 2 R/W - ERP - разрешение контроля ОЗУ и сигнала SERR# шины PCI;&lt;br /&gt;-	бит 3 R/W - EIC - разрешение контроля шины ISA;&lt;br /&gt;-	бит 6 R - IOCHK - ошибка контроля на шине ISA (сигнал ЮСНК#);&lt;br /&gt;-	бит 7 R - РСК - ошибка четности ОЗУ или сигнал SERR* на шине PCI.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Реакция процессора на маскируемые прерывания может быть задержана сбросом его внутреннего флага IF (инструкции СLI - запретить прерывания, STI - разрешить). По возникновении события, требующего реакции, адаптер (контроллер) устройства формирует запрос прерывания, который поступает на вход контроллера прерываний. Контроллер прерываний формирует общий запрос маскируемого прерывания для процессора, а когда процессор подтверждает этот запрос, контроллер сообщает процессору вектор прерывания, по которому выбирается программная процедура обработки прерываний. Процедура должна выполнить действия по обслуживанию данного устройства, включая сброс его запроса для обеспечения возможности реакции на следующие события и посылку команды завершения в контроллер прерываний. Вызывая процедуру обработки, процессор автоматически сохраняет в стеке значение всех флагов и сбрасывает флаг IF, что запрещает маскируемые прерывания. При возврате из процедуры (по инструкции I RET) процессор восстанавливает сохраненные флаги, в том числе и установленный IF, что снова разрешает прерывания. Если во время работы обработчика прерываний требуется реакция на иные прерывания (более приоритетные), то в обработчике должна присутствовать инструкция STI. Особенно это касается длинных обработчиков; здесь инструкция STI должна вводиться как можно раньше, сразу после критической (не допускающей прерываний) секции. Следующие прерывания того же или более низкого уровня приоритета контроллер прерываний будет обслуживать только после получения команды завершения прерывания EOI (End Of Interrupt).&lt;br /&gt;Маскируемые прерывания используются для сигнализации о событиях в устройствах. Обработка сигналов запросов прерывания выполняется контроллером прерываний, программно совместимым с 8259А. Контроллер прерываний позволяет маскировать отдельные входы запросов и организовывать систему приоритетов запросов от различных входов. В машинах класса AT применяется каскадное соединение двух контроллеров. Ведущий контроллер 8259А#1 обслуживает запросы О, 1, 3-7; его выход подключается к входу запроса прерываний процессора. К его входу 2 подключен ведомый контроллер 8259А#2, который обслуживает запросы 8-15. При этом поддерживается вложенность приоритетов - запросы 8-15 со своим рядом убывающих приоритетов вклиниваются между запросами 1 и 3 ведущего контроллера, приоритеты запросов которого также убывают с ростом номера. В XT каскадирование не применялось, и один контроллер 8259А обслуживал все 8 линий запросов.&lt;br /&gt;Контроллер прерываний 18259А подробно описан в литературе [1, 7]; здесь приведем лишь необходимые сведения, в большинстве случаев достаточные для работы. Контроллеры расположены по адресам 20-21h (8259A#1) и AO-Alh (8259A#2), обращаться к ним следует как к однобайтным портам ввода-вывода. После инициализации (процедурой POST и при загрузке ОС) все неиспользуемые входы контроллеров замаскированы (на запросы прерываний реагировать не будут), а их векторы прерываний указывают на «заглушку» - процедуру с единственной инструкцией IRET. Первым делом программа должна загрузить в память свой обработчик и подставить указатель на его начало в соответствующее место таблицы прерываний. Далее следует размаскировать вход, для чего выполняется чтение регистра маски (адрес 21h для 8259А#1, Alh для 8259А#2), обнуление соответствующего бита (см. табл. 12.2) и запись в регистр нового значения маски. При работе с контроллером прерываний от программы требуется лишь управление маской своего запроса (при инициализации программы нужно обнулить маску требуемого запроса) и корректное завершение обработки прерываний. Каждая процедура обработки аппаратного прерывания должна завершаться командой ЕОI (End Of Interruption), посылаемой контроллеру:&lt;br /&gt;-	для 1-го контроллера - посылка байта 20h по адресу 20h;&lt;br /&gt;-	для 2-го контроллера - посылка байта 2Oh по адресу AOh (EOI для ведомого&lt;br /&gt;контроллера), затем посылка байта 20h по адресу 20h (EOI для ведущего кон&lt;br /&gt;троллера).&lt;br /&gt;Некорректно завершенная процедура не позволит повторно использовать данный или другие запросы прерываний. Если обработчик прерывания удаляется из памяти, предварительно должен быть замаскирован соответствующий ему вход контроллера. Все изменения в таблице прерываний должны выполняться при замаскированных прерываниях, чтобы избежать попытки использования вектора в процессе его модификации (это приведет к «вылету» программы).&lt;br /&gt;На входы контроллеров прерываний поступают запросы от системных устройств (клавиатура, системный таймер, CMOS-таймер, сопроцессор), периферийных контроллеров системной платы и от карт расширения. Традиционно все линии запросов, не занятые перечисленными устройствами, присутствуют на всех слотах шины ISA/EISA. Эти линии обозначаются как IRQx и имеют общепринятое назначение (табл. 12.2). Часть этих линий отдается в распоряжение шины PCI. В таблице отражены и приоритеты прерываний - запросы расположены в порядке их убывания. Номера векторов, соответствующих линиям запросов контроллеров, система приоритетов и некоторые другие параметры задаются программно при инициализации контроллеров. Эти основные настройки остаются традиционными для обеспечения совместимости с программным обеспечением.&lt;br /&gt;Таблица 12.2. Аппаратные прерывания (в порядке убывания приоритета)&lt;br /&gt;&lt;br /&gt;Имя (номер1)	Вектор	Контроллер/маска	Описание&lt;br /&gt;NMI	02h		Контроль канала, паритет&lt;br /&gt;			(в XT - сопроцессор)&lt;br /&gt;IRQO	08h	#1/1h	Таймер (канал &amp;#163;8253/8254)&lt;br /&gt;IRQ1	09h	#1/2h	Клавиатура&lt;br /&gt;IRQ2	OAh	#1/4h	XT - резерв, AT - недоступно&lt;br /&gt;			(подключается каскад IRQ8-IRQ15)&lt;br /&gt;IRQ8	70h	#2/1 h	CMOS RTC - часы реального времени&lt;br /&gt;IRQ9	71h	#2/2h	Резерв&lt;br /&gt;IRQ10	72h	#2/4h	Резерв&lt;br /&gt;IRQ11	73h	#2/8h	Резерв&lt;br /&gt;IRQ12	74h	#2/10h	PS/2-Mouse (резерв)&lt;br /&gt;IRQ 13	75h	#2/20h	Математический сопроцессор&lt;br /&gt;продолжение^&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Таблица 12.2 (продолжение)&lt;br /&gt;Имя (номер1)  Вектор   Контроллер/маска   Описание&lt;br /&gt;&lt;br /&gt;IRQ14	76h	#2/40h	HOC - контроллер НЖМД&lt;br /&gt;IRQ15	77h	#2/80h	Резерв&lt;br /&gt;IRQ3	OBh	#1/4h	COM2, COM4&lt;br /&gt;IRQ4	OCh	#1/10h	COM1,COM3&lt;br /&gt;IRQ5	ODh	#1/20h	XT - HOC, AT - LPT2, Sound (резерв)&lt;br /&gt;IRQ6	OEh	#1/40h	FDC - контроллер НГМД&lt;br /&gt;IRQ7	OFh	#1/80h	LPT1 - принтер&lt;br /&gt;1 Запросы прерываний 0,1,8 и 13 на шины расширения не выводятся.&lt;br /&gt;Для запросов прерывания с шины PCI используются 4 линии запросов прерывания, которые обозначают как INTR А, В, С, D. Эти линии работают по низкому уровню, что дает возможность их разделения (совместного использования). Линии циклически сдвигаются в слотах и независимо коммутируются на доступные линии IRQx с помощью конфигурационных регистров чипсета. Линии IRQx, используемые шиной PCI, становятся недоступными для шины ISA. «Дележку» линий между шинами, а также управление чувствительностью отдельных линий обеспечивают параметры CMOS Setup, а также система PnP.В параметрах ISA или Legacy подразумевают использование линий IRQx традиционными адаптерами шины ISA (статическое распределение), a PCI/PnP - использование адаптерами шины PCI или адаптерами PnP для шины ISA (динамическое распределение). Общая схема формирования запросов прерываний изображена на рис. 12.1.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Каждому устройству, для поддержки работы которого требуются прерывания, должен быть назначен свой номер прерывания. Назначения номеров прерываний выполняются с двух сторон: во-первых, адаптер, нуждающийся в прерываниях,&lt;br /&gt;должен быть сконфигурирован на использование конкретной линии шины (джам-перами или программно). Во-вторых, программное обеспечение, поддерживающее данный адаптер, должно быть проинформировано о номере используемого вектора. В процессе назначения прерываний может участвовать система PnP для шин ISA и PCI, для распределения линий запросов между шинами служат специальные параметры CMOS Setup.&lt;br /&gt;Контроллер прерываний позволяет программировать свои входы на чувствительность к уровню или перепаду сигнала.&lt;br /&gt;-	Чувствительность к уровню (level sensitive) означает, что контроллер прерываний вырабатывает запрос прерывания процессора по факту обнаружения определенного уровня (на ISA - высокого) на входе DRQx. Если к моменту завершения обработки этого запроса (после записи команды EOI в регистр контроллера прерываний) контроллер снова обнаруживает активный уровень на том же входе DRQx, то он снова сформирует запрос на прерывание процессора.&lt;br /&gt;-	Чувствительность к перепаду (edge sensitive) означает, что контроллер прерываний вырабатывает запрос прерывания процессора только по факту обнаружения перепада (на ISA - положительного) на входе DRQx. Повторно запрос по этому входу возможен только по следующему такому же перепаду, то есть сигнал предварительно должен вернуться в исходное состояние.&lt;br /&gt;В любом случае сигнал запроса аппаратного прерывания IRQx должен удерживаться генерирующей его схемой, по крайней мере, до цикла подтверждения прерывания процессором. В противном случае источник прерывания корректно идентифицирован не будет, и контроллер сообщит ложный вектор прерывания (spurious interrupt), соответствующий его входу с максимальным номером (IRQ7 для первого контроллера и IRQ 15 для второго). Обычно адаптеры строят так, что сигнал запроса сбрасывается при обращении программы обслуживания прерывания к со-ответствующим регистрам адаптера.&lt;br /&gt;В шине ISA прерывание вырабатывается по положительному перепаду сигнала на линии запроса. Это плохо по двум причинам: такой способ подачи сигнала, во-первых, имеет меньшую помехозащищенность, чем срабатывание по отрицательному перепаду, во-вторых, отрезает путь к нормальному разделению линий запросов (см. ниже), для которого полностью пригоден способ подачи сигнала по низкому уровню. Поскольку традиционный контроллер позволяет задавать чув-ствительность - уровень (Level) или перепад (Edge) - только для всех входов одновременно, в общем случае разделяемые прерывания на шине ISA вместе с корректной работой системных устройств использоваться не могут.&lt;br /&gt;На современных системных платах функции контроллеров прерываний возлагаются на чипсет, который может иметь и более гибкие возможности управления, чем пара контроллеров 8259А. В операционном режиме всегда сохраняется программная совместимость с 8259А. Процедура инициализации контроллеров может и отличаться от традиционной, но ею занимается тест POST, который «знает» особенности системной платы. В симметричных мультипроцессорных системах аппаратные прерывания работают сложнее, поскольку их могут обслуживать различные процессоры. Для реализаций системы прерываний процессоры Pentium и выше имеют встроенный контроллер прерываний APIC (Advanced Programmable&lt;br /&gt;Interruption Controller). Внутренние контроллеры процессоров связаны между собой по шине APIC, к которой подключена и «ответная часть» чипсета, преобразующая запросы аппаратных прерываний в сигналы протокола APIC. В операционном режиме такая связка также совместима с 8259 А.&lt;br /&gt;</yandex:full-text>
</item><item>
<title>Совместное использование прерываний</title>
<link>http://intpc.ru/163-sovmestnoe-ispolzovanie-preryvanijj.html</link>
<description>Линии запросов прерываний в компьютере, насыщенном дополнительными адаптерами, являются самым дефицитным ресурсом, поэтому возникает желание использовать эти линии совместно, то есть применять разделяемые прерывания между несколькими устройствами (shared interrupts).</description>
<category>Архитектурные компоненты компьютера</category>
<author>jcrush</author>
<pubDate>Tue, 30 Dec 2008 07:24:14 +0300</pubDate>
<yandex:full-text>Линии запросов прерываний в компьютере, насыщенном дополнительными адаптерами, являются самым дефицитным ресурсом, поэтому возникает желание использовать эти линии совместно, то есть применять разделяемые прерывания между несколькими устройствами (shared interrupts). Обработчики прерываний (программы) от разных устройств, разделяющих одну линию запроса (и следовательно, общий вектор прерывания), должны быть выстроены в цепочку. В процессе обработки прерывания очередной обработчик в цепочке чтением известного ему регистра своего устройства должен определить, не это ли устройство вызвало прерывание. Если это, то обработчик должен выполнить необходимые действия и сбросить сигнал запроса прерывания от своего устройства, после чего передать управление следующему обработчику в цепочке; в противном случае он просто передает управление следующему обработчику.&lt;br /&gt;Разделяемые прерывания для разнотипных устройств в общем случае работоспособными считать нельзя. Во-первых, у каждого устройства факт прерывания программно обнаруживается по-своему, и этот способ знает только драйвер этого устройства. Так что программно для совместного использования прерываний их обработчики должны уметь выстраиваться в цепочки, что на практике выполняется не всегда корректно. Во-вторых, возможны потери прерываний от устройств, требующих быстрой реакции. Это может происходить, если обработчик такого устройства окажется в конце цепочки, а предшествующие ему обработчики окажутся «нерасторопными» (не самым быстрым способом обнаружат, что прерывание - не их). Поведение системы в такой ситуации может меняться в зависимости от порядка загрузки драйверов. Для нескольких однотипных устройств (например, сетевых адаптеров на одном и том же кристалле), пользующихся одним драйвером, разделяемые прерывания работают вполне успешно.&lt;br /&gt;Чтобы прерывания, одновременно возникающие от нескольких устройств, не терялись, контроллер прерываний должен быть чувствительным к уровню, а не к перепаду на входе запроса. В соответствие со схемотехникой логики ТТЛ и КМОП активным уровнем должен быть низкий; выходной формирователь сигнала запросов у адаптеров - с открытым коллектором (ТТЛ) илиоткрытым стоком (КМОП); вход запроса у контроллера должен быть «подтянут» к высокому уровню резистором. Тогда непосредственное соединение этих выходов со входом контроллера («Монтажное И») даст требуемый результат в аппаратном плане, а в программном плане необходимо корректно выстроить обработчики в цепочку.&lt;br /&gt;Поясним, почему надежное разделение прерываний при чувствительности к перепаду на линии запроса невозможно. Если устройство 1 выработает сигнал запроса после того, как его выработает (но еще не снимет) устройство 2, то контроллер обработает только один запрос. Цепочка программных обработчиков окажется ненадежной: если обработчик устройства 1 в этой цепочке будет проверять свое&lt;br /&gt;устройство до возникновения прерывания, то прерывание будет потеряно. Поскольку прерывания по своей природе обычно асинхронны, работа этих устройств совместно с поддерживающими программами будет загадочно нестабильной.&lt;br /&gt;Как уже говорилось, в шине ISA прерывание вырабатывается по положительному перепаду сигнала на линии запроса. Стандартный контроллер 8259А позволяет задавать чувствительность - уровень или перепад - только для всех входов одновременно, поэтому разделяемые прерывания на шине ISA неработоспособны. Тем не менее некоторые чипсеты, реализующие контроллеры прерываний, допускают индивидуальное управление чувствительностью каждого входа. Тогда при соответствующих возможностях CMOS Setup, адаптеров и их ПО разделяемые прерывания технически реализуемы.&lt;br /&gt;Для шины PCI, казалось бы, проблема разделения прерываний решена - здесь активным уровнем запроса является низкий, так что, запрограммировав входы контроллера на чувствительность к уровню, создается аппаратная база совместного использования. Однако на практике разделяемые прерывания работают не всегда, и иногда приходится подбирать положение карт расширения в слотах PCI, при которых устройства не конфликтуют друг с другом по прерываниям. Виной конфликтов могут быть как сами карты расширения, так и их драйверы, неспособные выстраиваться в корректную цепочку.&lt;br /&gt;Если карта PCI использует одну линию запроса прерываний, то этой линией по умолчанию является INTR А. Если все четыре карты PCI используют по одной линии запроса, то, как это видно на рис. 12.1, каждая линия занимается монопольно. Однако если сложная карта нуждается в большем числе линий запроса, то ей придется разделять линии с соседними картами. На современных системных платах часто устанавливают более четырех слотов PCI, при этом, естественно, «угроза» совместного использования линий запросов «нависает» и над картами с одной линией запроса. Порт AGP в плане прерываний следует рассматривать наравне со слотами PCI.&lt;br /&gt;Проявления конфликтов и ошибок назначения прерываний могут быть разнообразными. Сетевая карта при ошибке в прерываниях не сможет принимать кадры из сети (при этом она может их успешно посылать). У устройств хранения доступ к данным будет поразительно медленным (иногда можно минутами ожидать, например, появления информации о файлах и каталогах) или вообще невозможным. Звуковые карты будут молчать или «заикаться», на видеопроигрывателях изображение будет дергаться и так далее. Конфликты могут приводить и к внезапным перезагрузкам компьютера, например по приходу кадра из сети или сигналу от модема.&lt;br /&gt;</yandex:full-text>
</item><item>
<title>Прямой доступ к памяти — DMA</title>
<link>http://intpc.ru/164-prjamojj-dostup-k-pamjati-dma.html</link>
<description>Прямой доступ к памяти (Direct Memory Access, DMA) позволяет выполнять пересылку данных между регистрами устройств и памятью, минуя центральный процессор. Для устройств, использующих DMA, различают два типа доступа.</description>
<category>Архитектурные компоненты компьютера</category>
<author>jcrush</author>
<pubDate>Tue, 30 Dec 2008 07:25:02 +0300</pubDate>
<yandex:full-text>Прямой доступ к памяти (Direct Memory Access, DMA) позволяет выполнять пересылку данных между регистрами устройств и памятью, минуя центральный процессор. Для устройств, использующих DMA, различают два типа доступа.&lt;br /&gt;- Пассивный доступ, он же Slave DMA, - устройство пользуется общим контроллером DMA, расположенным на системной плате.&lt;br /&gt;- Активный доступ, он же Bus Master DMA, - устройство само является ведущим на своей шине и способно генерировать обращение к памяти (как правило, системной). Реализация активного DMA зависит от типа шины расширения, к которой подключается устройство (см. главу 6). Примером устройств с активным DMA являются контроллеры АТА, расположенные на современных системных платах.&lt;br /&gt;Процессор при обмене по DMA занят только инициализацией контроллера, которая сводится к записи в его регистры нескольких байт, задающих начальный адрес и размер пересылаемого блока памяти, направление и режим обмена. В самом обмене данных занят только контроллер DMA, память, к которой он обращается, и связующие их шины. Во время операций DMA процессор может продолжать работу, если выбранный режим обмена не занимает всей пропускной способности шин, используемых процессором в данный момент (шины памяти, шины PCI, через которые подключается ISA в современных компьютерах). Контроллер DMA можно считать простейшим сопроцессором ввода-вывода, разгружающим центральный процессор от рутинных операций обмена.&lt;br /&gt;Обмен по DMA не всегда дает выигрыш в скорости обмена, в ряде случаев быстрее работает программированный ввод-вывод (РЮ). Однако РЮ занимает процессор полностью, а во время DMA процессор может заниматься полезной работой. Поскольку для инициализации контроллера DMA требуется выполнение ряда инструкций ввода-вывода, передача коротких блоков по каналу DMA нецелесообразна. Пассивный DMA реализуется стандартизованным контроллером, который первоначально был ориентирован на шину ISA. Для интерфейса ПУ каждый канал DMA представляется парой сигналов: запрос обмена - DRQx и подтверждение обмена - DACKx*. В PC/AT доступны 7 каналов DMA - четыре 8-битных (номера 0-3) и три 16-битных (5-7), - подключенные к первичному и вторичному контроллерам соответственно. Канал 4 используется для каскадирования (соединения контроллеров). В PC/XT были только три 8-битных канала, канал 0 использовался для регенерации памяти. Контроллеры DMA программно совместимы с системами i8237, применяемыми в первых моделях PC/XT и AT. Стандартные каналы и адреса регистров приведены в табл. 12.3.&lt;br /&gt;Таблица 12.3. Стандартные каналы прямого доступа к памяти&lt;br /&gt;&lt;br /&gt;Номер канала DMA*	О1      1	2	3	42        5       6	7&lt;br /&gt;Стандартное      XT	MRFR -	FDD	HDD	Отсутствуют	&lt;br /&gt;назначение       дт	-	FDD	-	Каскад -	-&lt;br /&gt;Разрядность, байт	1 •			2 с четного адреса	&lt;br /&gt;Макс, размер блока	64Кбайта			128 Кбайт, четный	&lt;br /&gt;Граница блока	Кратна 10OOh			Кратна 2000h	&lt;br /&gt;Регистр страниц	8битА16-А23			7битА17-А23	&lt;br /&gt;Адреса регистров:					&lt;br /&gt;- страниц	087    083	081	082	08F      08В    089	087&lt;br /&gt;- адреса	000    002	004	006	ОСО     ОС4    ОС8	осе&lt;br /&gt;- счетчика	001    003	005	007	ОС2     ОС6    ОСА	ОСЕ&lt;br /&gt;&#039; Канал 0 в XT использовался для регенерации памяти (MRFR). 2 Канал 4 доступен только в PS/2 МСА.&lt;br /&gt;&lt;br /&gt;16-битные каналы DMA 5-7 могут быть использованы интеллектуальными устройствами для прямого управления шиной ISA (bus mastering), при этом контроллер DMA фактически лишь играет роль арбитра шины.&lt;br /&gt;Устройства, использующие стандартные каналы DMA, могут располагаться лишь в слотах ISA/EISA или на системной плате (контроллер НГМД, LPT-порт в режиме ECP wjm Fast Centonics, аудиокодек). Если эти устройства системной платы используют каналы DMA, то данные каналы становятся недоступными для абонентов шины ISA.&lt;br /&gt;На время переходного периода, связанного с «изживанием» шины ISA, потребовалась возможность эмуляции каналов DMA для устройств шины PCI. Существует два механизма эмуляции каналов DMA: PC/PCI и DDMA. Механизм PC/PCI (см. п. 6.2.7) был разработан фирмой Intel для обеспечения возможности использования слотов ISA блокнотными ПК, подключаемыми к док-станции по шине PCI. Альтернативное решение - механизм DDMA (Distributed DMA - распределенный DMA) позволяет «расчленить» стандартный контроллер и отдельные его каналы эмулировать средствами карт PCI. Оба этих механизма реализуемы толь-ко как часть моста между первичной шиной PCI и шиной ISA, поэтому их поддержка может обеспечиваться (или не обеспечиваться) только на системной плате и разрешаться в CMOS Setup.</yandex:full-text>
</item><item>
<title>Контроллер прямого доступа 8237А</title>
<link>http://intpc.ru/165-kontroller-prjamogo-dostupa-8237a.html</link>
<description>Микросхема 8237А, применявшаяся в PC вплоть до первых моделей AT, представляет собой четырехканальный контроллер прямого доступа к памяти, допускающий каскадирование.</description>
<category>Архитектурные компоненты компьютера</category>
<author>jcrush</author>
<pubDate>Tue, 30 Dec 2008 07:30:50 +0300</pubDate>
<yandex:full-text>Микросхема 8237А, применявшаяся в PC вплоть до первых моделей AT, представляет собой четырехканальный контроллер прямого доступа к памяти, допускающий каскадирование. Вторичный контроллер (8237#2) каскадно соединен с первичным, при этом теряется возможность использования одного канала вторичного контроллера. Контроллер 8237А имеет 16-разрядные регистры адреса и счетчики, что обеспечивает возможность программирования передачи блока данных размером до 64 Кбайт или слов. Назначение регистров контроллеров DMA, при-менительно к их адресам в пространстве ввода-вывода компьютера, приведено в табл. 12.4. Контроллер допускает довольно гибкое конфигурирование. Корректное оперативное управление отдельными каналами не затрагивает общих настроек. Общее конфигурирование контроллеров (запись в регистры 008 и ODO) выполняет BIOS при инициализации во время теста POST; в XT тогда же программируется и канал 0, применяемый для регенерации памяти. Для использования каналов устройствами шины ISA запись в регистры 008 и ODO не рекомендуется. Обмен с регистрами контроллера выполняется только однобайтными операциями ввода-вывода. Для загрузки 16-битных значений задействуется триггер младшего/ старшего байта. По сбросу контроллера или записи любого байта по адресу OOCh (OD8h для второго контроллера) этот триггер сбрасывается, и контроллер готовится к приему младшего байта. После приема этого байта триггер меняет состояние, и контроллер воспринимает старший байт, после которого триггер опять переключается.&lt;br /&gt; &lt;br /&gt;Таблица 12.4. Регистры контроллера DMA 8237A 8237#1    &lt;br /&gt; &lt;br /&gt;Программирование контроллера для каждого канала определяет начальный адрес, направление его модификации (инкремент/декремент), количество пересылаемых байт (слов), режим работы канала. Регистры адреса контроллеров 8237 А - 16-разрядные, и для расширения разрядности адреса для каждого канала имеются специальные регистры страниц (DMA page register), внешние по отношению к контроллерам 8237А. В отличие от адресных регистров контроллера 8237А регистры страниц при выполнении циклов DMA не модифицируются - в них по команде процессора до начала обмена по каналу загружается требуемое значение. В PC/AT регистры страниц хранят биты А[23:16] для 8-битных каналов и А[23:17] - для 16-битных. В PC/XT регистры страниц хранили только 4 бита А[19:16]. Контроллер 16-битных каналов подключен к шине адреса со смещением на 1 бит, так что линией АО он не управляет. При передаче по 16-битным каналам всегда А0=0 (передачи слов по четным адресам). Счетчики циклов каналов - 16-разрядные, что позволяет передавать блоки до 64 К байт (для 8-битных каналов) или слов (для 16-битных каналов). При инициализации в счетчик загружается число, на единицу меньшее требуемого числа циклов, так что FFFF соответствует 65 534 передачам (216). В последнем цикле передачи (когда счетчик отсчитает требуемое количество циклов) контроллер вырабатывает сигнал завершения ТС, общий для всех каналов. Этот сигнал устройство может использовать для выработки сигнала прерывания, а программа может определить, какой канал «отстрелялся», прочитав регистр состояния каналов в контроллере DMA. В зависимости от выбранного режима по окончании счета контроллер либо остановит работу данного канала, либо выполнит автоматическую реинициа-лизацию (автозагрузку) - восстановит прежде записанные значения регистра адреса и счетчика циклов и будет снова готов к пересылке такого же блока данных.&lt;br /&gt;&lt;br /&gt;ВНИМАНИЕ	&lt;br /&gt;При достижении регистром-счетчиком адреса значения FFFFh следующее его значение будет OOOOh, а внешний регистр адреса страницы, естественно, останется неизменным. Таким образом, если блок начинается не с границы 64 Кбайт страницы памяти, возможно его «сво-рачивание» в кольцо. Но если для процессоров 80x86 в реальном режиме сегменты, также «сворачиваемые» в кольца, могут начинаться с адреса любого 16-байтного параграфа (грани-цы кратны 10h), то при прямом доступе эти границы кратны 10OOOh. Этот эффект обязательно необходимо учитывать при программировании прямого доступа -блок, пересекающий данную границу, должен пересылаться за два сеанса циклов DMA, между которыми канал (включая и регистр страниц) должен быть реинициализирован. Эффект «сворачивания» сегментов в 16-битных каналах аналогичен, только для каналов. 5-7 эти «кольца» имеют размер 64 Кбайт слов и границы, кратные 20000h.&lt;br /&gt;Разрядность передаваемых данных по каналу DMA должна соответствовать типу канала - 16-битный канал всегда пересылает данные словами, и расщепление их на одиночные байты невозможно.&lt;br /&gt;Каждый канал может работать в одном из трех логических режимов.&lt;br /&gt;-	Режим одиночной передачи (single transfer mode) - получив подтверждение DACKx#, устройство сразу снимает сигнал запроса DRQx, а контроллер DMA организует один цикл передачи. Счетчик адреса в контроллере модифицируется, счетчик циклов декрементируется.&lt;br /&gt;-	Режим блочной передачи (block transfer mode) - получив подтверждение&lt;br /&gt;DACKx#, устройство сразу снимает сигнал запроса DRQx, а контроллер DMA организует последовательность циклов передачи до обнуления счетчика циклов. Если разрешена автозагрузка канала, то для пересылки следующего блока требуется повторная подача DRQx. На время передачи всего блока контроллер монопольно захватывает шину, при этом не выполняется регенерация памяти.&lt;br /&gt;-	Режим передачи по запросу (demand transfer mode) - получив подтверждение DACKx#, устройство не снимает сигнал запроса DRQx до тех пор, пока у него есть потребность в передаче. При наличии этого сигнала контроллер DMA организует последовательность циклов передачи вплоть до обнуления счетчика циклов. Если сигнал запроса снят до обнуления счетчика, контроллер DMA отдает управление шине, а при последующем появлении этого запроса продолжит обмен с того места, на котором остановился.&lt;br /&gt; &lt;br /&gt;ВНИМАНИЕ&lt;br /&gt;Используя DMA в режимах, отличных от одиночного, следует соблюдать осторожность, чтобы длительность непрерывной передачи не превышала 15 мкс.&lt;br /&gt;Стандартный контроллер DMA на шине ISA с частотой 8 МГц работает на половинной частоте и требует для одиночной передачи не менее пяти своих тактов. Длительность одиночного цикла составляет 1,125 мкс. В блочных передачах пропускная способность DMA достигает 1 Мбайт/с для 8-битных каналов и 2 Мбайт/с для 16-битных (время цикла составляет 1 мкс). На современных компьютерах контроллер DMA реализуется чипсетом системной платы; при сохранении программной совместимости с 8237А он может работать на шине гораздо быстрее. Количество тактов шины на один цикл может программироваться опциями BIOS Setup.&lt;br /&gt;</yandex:full-text>
</item><item>
<title>Процессоры х86</title>
<link>http://intpc.ru/166-processory-kh86.html</link>
<description>Все программы в IBM PC-совместимом компьютере исполняются центральным процессором, принадлежащим к семейству х86. Любое устройство для процессора представляет собой лишь набор регистров (ячеек), отображенных в пространство памяти и (или) ввода-вывода, и необязательно источник аппаратных прерываний. Современные процессоры х86, работающие в защищенном режиме, имеют довольно сложные механизмы виртуализации памяти, ввода-вывода и прерываний, из-за которых приходится различать физические и логические пространства (адреса памяти и ввода-вывода) и события (операции ввода-вывода, прерывания). Физический адрес ячейки памяти или порта ввода-вывода - это адрес, формируемый для обращения к данной ячейке на физических шинах компьютера (системной шине процессора, шине PCI, ISA). Логический адрес - это тот адрес, который формируется исполняемой программой (по замыслу программиста) для доступа к требуемой ячейке. Физическая операция ввода-вывода или обращения к памяти - это процесс (шинный цикл), во время которого генерируются электрические сигналы, обеспечивающие доступ к данной ячейке (порту). Логическая операция - это исполнение программной инструкции (команды) обращения к интересующей ячейке. Логическая операция не всегда порождает ожидаемую физическую операцию: при определенных условиях она может блокироваться средствами защиты процессора, вызывая даже принудительное завершение программы, или же эмулироваться, создавая иллюзию физического исполнения. Безопасность в защищенном режиме базируется на 4-уровневой системе привилегий. В большинстве современных ОС ради упрощения и экономии процессорного времени используются только два крайних уровня - нулевой (supervisor), с неограниченными возможностями, и третий (user), с самыми жесткими ограничениями. Смена уровней привилегий при исполнении программы занимает много тактов процессора, но это вынужденная плата за реализацию защиты, без которой устойчивую ОС не построить. Более подробно механизмы защиты и виртуализации памяти, ввода-вывода и прерываний в процессорах х86 описаны в литературе [6, 7], здесь же изложены лишь некоторые прикладные аспекты их работы.</description>
<category>Архитектурные компоненты компьютера</category>
<author>jcrush</author>
<pubDate>Tue, 30 Dec 2008 07:31:52 +0300</pubDate>
<yandex:full-text>Все программы в IBM PC-совместимом компьютере исполняются центральным процессором, принадлежащим к семейству х86. Любое устройство для процессора представляет собой лишь набор регистров (ячеек), отображенных в пространство памяти и (или) ввода-вывода, и необязательно источник аппаратных прерываний. Современные процессоры х86, работающие в защищенном режиме, имеют довольно сложные механизмы виртуализации памяти, ввода-вывода и прерываний, из-за которых приходится различать физические и логические пространства (адреса памяти и ввода-вывода) и события (операции ввода-вывода, прерывания). Физический адрес ячейки памяти или порта ввода-вывода - это адрес, формируемый для обращения к данной ячейке на физических шинах компьютера (системной шине процессора, шине PCI, ISA). Логический адрес - это тот адрес, который формируется исполняемой программой (по замыслу программиста) для доступа к требуемой ячейке. Физическая операция ввода-вывода или обращения к памяти - это процесс (шинный цикл), во время которого генерируются электрические сигналы, обеспечивающие доступ к данной ячейке (порту). Логическая операция - это исполнение программной инструкции (команды) обращения к интересующей ячейке. Логическая операция не всегда порождает ожидаемую физическую операцию: при определенных условиях она может блокироваться средствами защиты процессора, вызывая даже принудительное завершение программы, или же эмулироваться, создавая иллюзию физического исполнения. Безопасность в защищенном режиме базируется на 4-уровневой системе привилегий. В большинстве современных ОС ради упрощения и экономии процессорного времени используются только два крайних уровня - нулевой (supervisor), с неограниченными возможностями, и третий (user), с самыми жесткими ограничениями. Смена уровней привилегий при исполнении программы занимает много тактов процессора, но это вынужденная плата за реализацию защиты, без которой устойчивую ОС не построить. Более подробно механизмы защиты и виртуализации памяти, ввода-вывода и прерываний в процессорах х86 описаны в литературе [6, 7], здесь же изложены лишь некоторые прикладные аспекты их работы.</yandex:full-text>
</item><item>
<title>Возможности адресации памяти процессорами различных поколений</title>
<link>http://intpc.ru/167-vozmozhnosti-adresacii-pamjati-processorami.html</link>
<description>Сложность обращения к памяти в PC обусловлена свойствами процессоров х86 разных поколений и требованием обратной совместимости новых процессоров и компьютеров со старым ПО.</description>
<category>Архитектурные компоненты компьютера</category>
<author>jcrush</author>
<pubDate>Tue, 30 Dec 2008 07:32:51 +0300</pubDate>
<yandex:full-text>Сложность обращения к памяти в PC обусловлена свойствами процессоров х86 разных поколений и требованием обратной совместимости новых процессоров и компьютеров со старым ПО.&lt;br /&gt;Процессорам 8086/88 было доступно адресное пространство 1 Мбайт с диапазоном адресов О-FFFFFh, причем физический 20-битный адрес вычислялся с помощью двух 16-битных компонентов по формуле Addr = Segxl6 + Offset, где Seg - содержимое сегментного регистра (CS, DS, SS или ES), a Offset - исполнительный адрес, формируемый из одного или нескольких слагаемых в соответствии с выбранным режимом адресации. Эта сегментная модель адресации позволяет программам оперировать с непрерывными блоками памяти (сегментами) размером не более 64 Кбайт. Для манипуляций с памятью большего размера требовалось переключение сегментов с помощью специальных инструкций процессора, что усложняло программирование. Заметим, что при Seg = FFFFh n Offset =• FFFFh данная формула дает адрес lOFFEFh, но ввиду 20-битного ограничения на шину адреса эта комбинация в физической памяти указывает на OFFEFh. Таким образом, адресное пространство как бы сворачивается в кольцо с небольшим «нахлестом».&lt;br /&gt;В процессоре 80286 шина физического адреса была расширена до 24 бит, и введен новый режим работы - защищенный (Protected Mode), в котором программа может обращаться к 16-мегабайтному пространству физической памяти через логическое пространство виртуальной памяти. Здесь виртуальная память строилась на основе той же сегментной модели памяти с 16-разрядными регистрами. Физический адрес формировался суммированием 16-разрядного исполнительного адреса (смещения внутри сегмента) с 24-разрядным базовым адресом сегмента.&lt;br /&gt;Кроме защищенного режима, в процессоре 80286 имеется и реальный режим, в котором процессор ведет себя почти так же, как и 8086 (но более быстрый). Здесь физический адрес вычисляется так же, как и в 8086/88, но из-за ошибки разработчиков та самая единица в бите А20, которая отбрасывалась в процессорах 8086/88, теперь попадает на шину адреса, и в результате максимально доступный физический адрес в реальном режиме достиг 1 OFFEFh. Для обеспечения полной совместимости с процессором 8086/88 в схему PC ввели вентиль линии А20 шины адреса - GateA20, который либо пропускает сигнал от процессора, либо принудительно обнуляет линию А20 системной шины адреса. Этот вентиль должен быть открыт при работе в защищенном режиме, а также когда в реальном режиме нужны дополнительные (64 К-16) байт памяти. Вентиль управляется через контроллер клавиатуры (см. п. 8.1.2) или иным специфическим способом.&lt;br /&gt;J5 32-разрядных процессорах, начиная с 80386, сохранена та же идея обращения к памяти с участием сегментных регистров (16-разрядных), но регистры процессора, участвующие в формировании адреса, позволяют адресовать уже 232= 4 Гбайт памяти в каждом сегменте. Базовый адрес сегмента берется из специальных структур данных - дескрипторов сегментов. Кроме базового адреса в дескрипторе описывается его лимит (длина), назначение (код или данные), возможность записи&lt;br /&gt;и чтения, а также уровень привилегий программы, позволяющий обращаться к данному сегменту. Дескрипторы предварительно программно формируются в памяти, где их наборы хранятся в виде таблиц дескрипторов. Процессор имеет средства защиты памяти, контролирующие использование сегментов. Программа может обращаться лишь к тем сегментам памяти, описание которых имеется в доступных дескрипторах. Виртуальное адресное пространство, доступное программе, имеет объем до (16 К-2) сегментов (число возможных дескрипторов), каждый из которых может иметь размер до 4 Гбайт. Дескриптор выбирается с помощью селектора, загружаемого в сегментный регистр (CS, DS, SS, E5, F5 или GS). Однако это виртуальное адресное пространство отображается блоком сегментации в логическое адресное пространство с опять-таки 32-разрядным линейным адресом, то есть объемом 4 Гбайт. По замыслу разработчиков процессора, это отображение с подкачкой требуемых сегментов с диска и выгрузкой неиспользуемых должно выполняться диспетчером виртуальной памяти операционной системы. Практически такая виртуализация применялась на процессорах 80286 (с 16-разрядными регистрами), поскольку иных механизмов не существовало.&lt;br /&gt;Для виртуализации памяти (и защиты) в 32-разрядных процессорах применяется иной механизм, основанный на блоке страничной переадресации - принципиальной новинке 32-разрядных процессоров х86. В его задачу входит отображение 32-разрядного линейного адреса (продукта блока сегментации) на 32- или 36-разрядный физический адрес, формируемый на системной шине процессора при его обращениях к памяти. В отличие от блока сегментации, оперирующего блоками разного размера (сегментами), блок страничной переадресации оперирует стра-ницами одинакового размера. Переадресация выполняется на основе таблиц страниц, где для каждой страницы логической памяти имеется свой описатель. В этом описателе имеется признак присутствия страницы в физической памяти, и для присутствующих страниц указывается базовый адрес физического отображения. Кроме того, имеются биты, управляющие доступом к странице по чтению и записи с различных уровней привилегий, возможностью ее кэширования, и некоторые служебные биты. При обращении программы к отсутствующей странице процессор вырабатывает исключение, обработчик которого занимается подкачкой нужной страницы из внешней памяти (с диска) в ОЗУ. Этот обработчик и реализует виртуальную память с подкачкой страниц по запросу (Demand-Paged Virtual Memory), которая в настоящее время обычно и подразумевается под виртуальной памятью. При недостатке свободного места в физической памяти обработчик выполняет и замещение страниц, по его мнению, наименее нужных, выгружая их на диск. Создав несколько наборов описателей страниц, можно получить несколько виртуальных адресных пространств, каждое из которых имеет размер до 4 Гбайт, причем страницы разных пространств могут быть полностью изолированы друг от друга, а могут и частично пересекаться. В многозадачной ОС каждая задача (виртуальная машина) имеет собственное (как ей представляется) адресное пространство.&lt;br /&gt;Первоначально блок страничной переадресации работал со страницами размером 4 Кбайт. В дополнение к этому базовому механизму в процессор Pentium ввели возможность работы и со страницами размером 4 Мбайт (режим PSE). В ряде&lt;br /&gt;процессоров Р6 разрядность физического адреса увеличена до 36 бит, и все процессоры Р6 имеют возможность включение режима переадресации РАЕ, позволяющего отображать страницы размером 4 Кбайт и 2 Мбайт с расширением физического адреса. С процессорами Pentium III появился режим преобразования PSE-36, в котором блок оперирует 4-Мбайтными страницами в 36-битном физическом пространстве и сохраняется возможность работы со стандартными 4-Кбайтными страницами базового режима. Это позволяет довольно эффективно управляться с современными объемами физической памяти компьютера.&lt;br /&gt;В стандартном реальном режиме 32-разрядные процессоры работают с памятью так же, как и 80286, с возможностью адресации в диапазоне О-lOFFEFh, причем вентиль Gate A20 ввели уже в сам процессор. Физический адрес вычисляется с участием сегментных регистров, размер непрерывного сегмента - 64 Кбайт. По умолчанию в реальном режиме адреса формируются с использованием только младших 16 бит 32-разрядных регистров, правда, для каждой инструкции можно с помощью префиксов изменить разрядность адресных компонентов на 32 бита. Однако и при этом невозможно пересечь границу 64-Кбайтного сегмента - срабо-&#039; тает исключение защиты.&lt;br /&gt;В стандартном реальном режиме блок страничной переадресации не работает, и физический адрес совпадает с линейным. С помощью временного переключения в защищенный режим можно настроить таблицы страниц, разрешить преобразование и далее в реальном режиме задействовать страничное преобразование. Этот трюк используется менеджерами памяти типа EMM386 для работы со свободными блоками UMA.&lt;br /&gt;Есть и еще один режим, неофициальный, но тоже работающий на всех 32-разрядных процессорах х86, - «нереальный» (unreal), он же «большой реальный» (big real) . Он позволяет процессору в реальном режиме обращаться к данным, расположенным в любом месте 4-Гбайтного пространства линейных (и физических) адресов. Этот режим базируется на логике блока сегментации, которая при вычислении линейного адреса во время обращений к памяти пользуется скрытыми программно-недоступными регистрами дескрипторов сегментов. Из этих регистров берется базовый адрес, из них же берется и лимит, который используется схемой защиты. В этих регистрах кэшируются дескрипторы сегментов, загружаемые из памяти во время исполнения инструкций, переопределяющих значения сегментных регистров (CS, DS, SS, ES, FS и GS) в защищенном режиме. По аппаратному сбросу в эти скрытые регистры заносятся «неинтересные» параметры стандартного реального режима, с лимитом 64 Кбайт. В реальном режиме при переопределении сегментных регистров значение базового адреса берется как 16-кратное значение, загружаемое в соответствующий сегментный регистр, а лимит устанавливается в 64 Кбайт. Тем не менее, если в защищенном режиме в сегментный регистр загрузить селектор дескриптора, в котором описан сегмент размером 4 Гбайт с нулевым базовым адресом и возможностью полного доступа на любом уровне привилегий, переключиться в реальный режим и не трогать этот сегментный регистр, то далее процессор будет иметь доступ ко всему этому сегменту в данной модификации реального режима. Однако такая «благодать» распространяется&lt;br /&gt;только лишь на доступ к данным через сегментные регистры F.S и GS, которые используются в инструкциях обращений к памяти, снабженных префиксами замены сегмента. Эти сегментные регистры появились только с 32-разрядными процессорами, и никакие традиционные сервисы BIOS (и DOS) их не затрагивают. Остальные сегментные регистры настолько часто используются, что «время жизни» описания большого сегмента в их кэширующих регистрах будет слишком коротким. Программный код, увы, исполняется только из сегмента, которым командует CS, поэтому для него остается лишь первый мегабайт с 64-Кбайтными сегментами. Так что большие программные модули приходится подгружать в эту область по мере надобности, но это можно выполнять довольно быстро пересылками данных из любого места «большого сегмента». Большой реальный режим широко используется менеджерами памяти, а также игровыми DOS-программами, всецело захватывающими ресурсы компьютера.&lt;br /&gt;Итак, самые широкие возможности адресации имеются в защищенном 32-разрядном режиме, наиболее естественном для современных процессоров. В этом режиме может использоваться как плоская, так и сегментная модели памяти. Под плоской (flat) понимается модель, в которой все сегментные регистры указывают на один и тот же сегмент памяти (как правило, начинающийся с нулевого адреса), и его лимит может достигать 4 Гбайт, что позволяет адресовать этот немалый (даже по нынешним меркам) объем памяти без манипуляций сегментными регистрами. Однако при этом теряются все возможности виртуализации памяти на основе сегментов, а также отсутствует сегментная защита. В сегментной модели памяти сегментные регистры кода, стека и данных настраиваются на разные, возможно и не пересекающиеся сегменты. Здесь имеются все возможности сегментной защиты и сегментной виртуализации памяти. Поскольку современным приложениям пока достаточно 4 Гбайт памяти (надолго ли?), сегментную модель ради упрощения диспетчера памяти стараются не использовать. Защита памяти имеется и на уровне страниц, правда, не такая развитая и надежная, как сегментная.&lt;br /&gt;</yandex:full-text>
</item><item>
<title>Проблемы страничной переадресации</title>
<link>http://intpc.ru/168-problemy-stranichnojj-pereadresacii.html</link>
<description>В реальном режиме (при отключенной страничной переадресации) логический адрес, формируемый прикладной программой, совпадает с физическим адресом, фигурирующим на шинах расширения. Тут все просто, правда, в стандартном (а не большом) реальном режиме доступен только первый мегабайт адресов (только устройства в области UMA).</description>
<category>Архитектурные компоненты компьютера</category>
<author>jcrush</author>
<pubDate>Tue, 30 Dec 2008 07:33:36 +0300</pubDate>
<yandex:full-text>В реальном режиме (при отключенной страничной переадресации) логический адрес, формируемый прикладной программой, совпадает с физическим адресом, фигурирующим на шинах расширения. Тут все просто, правда, в стандартном (а не большом) реальном режиме доступен только первый мегабайт адресов (только устройства в области UMA).&lt;br /&gt;В защищенном режиме в принципе доступно все физическое адресное простран&lt;br /&gt;ство, но появляются проблемы, связанные с отображением логических адресов на&lt;br /&gt;физические. Отображением (поддержкой таблиц переадресации) ведает ОС, при&lt;br /&gt;ложения могут только узнать карту отображений (получить список физических&lt;br /&gt;адресов страниц для какой-то области своей виртуальной памяти). Какие-то об&lt;br /&gt;ласти могут в данный момент и не присутствовать в ОЗУ (они могут быть выгру^&lt;br /&gt;женными на диск). У драйверов устройств возможностей больше - они могут за&lt;br /&gt;просить блок памяти с последовательными физическими страницами и потребовать&lt;br /&gt;фиксации определенных страниц (запретить их выгрузку из ОЗУ).	 &lt;br /&gt;&lt;br /&gt;При организации прямого доступа к памяти, как по стандартным каналам DMA, так и используя ведущие устройства шин ISA и PCI, возникает проблема пересечения границ страниц. Если приложение хочет выполнить обмен по DMA с областью доступной ей памяти непосредственно, то оно должно запросить у ОС физический адрес, которому соответствует логический адрес предполагаемого буфера обмена. Именно этот физический адрес должен задаваться устройству, выполняющему DMA, при инициализации сеанса обмена (указании начального адреса, длины блока и запуске канала). В каждом сеансе обмена не должна пересекаться граница страницы, которой оперирует блок страничной переадресации, поскольку следующая логическая страница может иметь физическое отображение в произвольном (относительно предыдущей страницы) месте. Чаще всего ОС оперирует страницами по 4 Кбайт, при этом пересылка больших блоков данных ведется «короткими перебежками», между которыми процессор должен выполнять повторную инициализацию DMA. Эта проблема решается усложнением контроллеров DMA - применением «разбросанной записи» в память (scatter write) и «собирающего чтения» памяти (gather read). Контроллеру DMA задается список описателей блоков (начальный адрес и длина). Отработав очередной блок памяти, контроллер переходит к следующему, и так до конца списка. Такие возможности имеет, например, стандартный контроллер PCI IDE (см. п. 9.2.1). Стандартный контроллер DMA имеет и другую «страничную проблему», связанную с реализацией регистров страниц (см. п. 12.4).&lt;br /&gt;Проблема пересечения границ может решаться и иначе, без усложнения контроллера DMA. Для этого в памяти резервируется буфер значительного размера, отображенный на непрерывную область физической памяти, и обмен данными физическое устройство выполняет только с этим буфером. Однако такой буфер рядовое приложение создать не может; он может быть организован лишь драйвером устройства. Приложения могут только получать указатели на этот буфер и об-мениваться с ним данными. Таким образом, по пути от приложения к устройству появляется дополнительная «перевалочная база» (буфер драйвера) и дополнительная пересылка данных, что приводит к дополнительным затратам времени.</yandex:full-text>
</item><item>
<title>Инструкции ввода-вывода</title>
<link>http://intpc.ru/169-instrukcii-vvoda-vyvoda.html</link>
<description>Для обращения программы к пространству ввода-вывода предназначены всего четыре инструкции процессора: IN (ввод из порта в регистр процессора), OUT (вывод в порт из регистра процессора), INS (ввод из порта в элемент строки памяти) и OUTS (вывод элемента из строки памяти в порт).</description>
<category>Архитектурные компоненты компьютера</category>
<author>jcrush</author>
<pubDate>Tue, 30 Dec 2008 07:34:33 +0300</pubDate>
<yandex:full-text>Для обращения программы к пространству ввода-вывода предназначены всего четыре инструкции процессора: IN (ввод из порта в регистр процессора), OUT (вывод в порт из регистра процессора), INS (ввод из порта в элемент строки памяти) и OUTS (вывод элемента из строки памяти в порт). Последние две инструкции, появившиеся с процессором 80286, могут использоваться с префиксом повтора REP, что обеспечивает быструю пересылку блоков данных между портом и памятью. Обмен данными с портами, при котором применяют строковые инструкции ввода-вывода, получил название PIO(Programmed Input/Output - программированный ввод-вывод). Скорость такого обмена превышает скорость стандартного канала прямого доступа (DMA), правда, DMA в отличие от PIO почти не занимает процессорного времени.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Разрядность слова, передаваемого за одну инструкцию ввода-вывода, может составлять 8, 16 или 32 бита. В зависимости от «выровненности» адреса по границе слова и разрядности данных используемой шины это слово может передаваться за один или несколько циклов шины с указанием соответствующего нарастающего адреса в каждом цикле обращения к памяти. Инструкции ввода-вывода порождают шинные циклы обмена, в которых вырабатываются сигналы чтения порта/записи в порт. На шине ISA это сигналы IORD* и IOWR* соответственно; они и отличают пространство ввода-вывода от пространства памяти, где соответствующие операции чтения и записи вырабатывают сигналы MEMRD* и MEMWR*. На шине PCI разделение памяти и пространства ввода-вывода происходит иначе - здесь тип операции кодируется четырехбайтной командой, в зависимости от типа инструкции, выполняемой процессором.&lt;br /&gt;Во избежание недоразумений и для экономии шинных циклов рекомендуется выравнивать адреса 16-битных портов по границе слова, а 32-битных - по границе двойного слова. Обращения по выровненным адресам выполняется за один цикл системной шины. Обращение по невыровненным адресам выполняется за несколько циклов, причем однозначная последовательность адресов обращений (которая зависит от модели процессора) не гарантируется. Так, например, одна инструкция вывода слова по нечетному адресу приведет к генерации двух смежных шинных циклов записи. При программировании обращений следует учитывать специфику устройств ввода-вывода. Если, например, устройство допускает только 16-разрядные обращения, то старший байт его регистров будет доступен лишь при вводе-выводе слова по четному адресу.&lt;br /&gt;Некоторую сумятицу в стройную систему адресации вводят регистры AT А. Здесь регистр 1FO (1 канал) является 16-битным регистром данных, но в то же время есть и совершенно независимый от него 8-битный регистр 1F1. В Serial ATA эта тема развита - здесь имеются еще четыре 16-битных регистра с адресами (относительно базового адреса блока командных регистров) 2, 3, 4 и 5, которые раньше были 8-битными.&lt;br /&gt;В реальном режиме процессора программе доступно все пространство адресов ввода-вывода. В защищенном режиме 32-разрядных процессоров (частным случаем которого является и виртуальный режим V86) имеется возможность программного ограничения доступного пространства ввода-вывода, определяя его максимальный размер (начиная с нулевого адреса и в пределах 64 К), а внутри разрешенной области доступ может быть разрешен или запрещен для каждого конкретного адреса. Размер области и карта разрешенных портов (Ю Permission Bitmap) задается операционной системой в дескрипторе сегмента состояния задачи (TSS). При обращении по неразрешенному адресу вырабатывается исключение процессора, а поведение его обработчика определяется операционной системой. Возможно снятие задачи-нарушителя (знаменитое сообщение «приложение... выполнило недопустимую операцию и будет закрыто»). Возможен и другой вариант, когда по обращению к порту монитор операционной системы выполняет некоторые действия, создавая для программы иллюзию реальной операции ввода-вывода. Таким образом виртуальная машина по операциям ввода-вывода может общаться с виртуальными устройствами. Заметим, что ОС Windows 9x не особо заботится о виртуализации и защите ввода-вывода; здесь, например, из DOS-окна можно обращаться к любым портам, даже к портам устройств, занятых операционной системой.&lt;br /&gt;</yandex:full-text>
</item></channel></rss>
