Воробьёвы

(-:

№3. Первое погружение. Виды памяти. Загрузка машины. Область данных BIOS

ЧИТАТЕЛЯМ...

Нас абсолютно не устраивает та последовательность изложения материала, которая встречается в большинстве учебных пособий/курсов, как отечественного (о, господи!), так и зарубежного "копирайта". А посему мы будем придерживаться собственного Порядка. Если он кого-то не устраивает - на том же Городском Коте вы можете найти как минимум две рассылки подобного содержания, правда, с менее претенциозным названием...

2. ОСНОВНОЙ КУРС

2.1. Первое погружение. Виды памяти. Загрузка машины. Область данных BIOS

1. "Девушки бываю разные - черные, белые, красные..."

2. "Что-то с памятью моей стало..."

[1] Человек может запоминать информацию различными "частями тела". "Мозгами" - это только один из многочисленных способов. Есть еще куча других. Например - "задним умом своей головы". Всех, наверное, в детстве секли ремнем. Не секли? Ну и зря... Есть некоторая информация "фундаментального" характера, которую если и запомнишь "нормальным" способом, то не надолго. А если и надолго, то руководствоваться ей по каким-либо объективным и/или субъективным причинам не станешь. А вот если "память", например, о том, что нельзя папу посылать на три веселых буквы, до конца дней твоих будет напоминать узкими шрамами на мягком месте - это уже совсем другое дело!

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

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

[2] Видов памяти в умных книгах расписано до черта и еще больше. Некоторые "завернутые" авторы к ней относят даже регистры (так называемая "сверхбыстродействующая" память). Не станем им уподобляться и выделим _пока_ только три ее вида:

1. Постоянная (Read Only Memory). Это некоторая информация, "намертво" вшитая "в компьютер". Это _самые стандартные_ процедуры для работы с "голым железом", а также минимальные сведения о том, что же собой представляет ваша навороченная тачка.

2. Оперативная (Random Access Memory). Это как бы рабочая область, в которой _временно_ "хранятся" программы и многочисленные промежуточные данные. После выключения компьютера вся находящаяся в ней информация имеет досадное свойство пропадать.

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

И вот, значит, что у нас с памятью "происходит" при включении компьютера:

[3] Сначала выполняется проверка оборудования.

Не пропало ли чего? Не появилось ли чего нового? А что это за процессор установлен? И исправен ли он? А что у нас за винчестер и на каком "языке" с ним разговаривать? Кто я? Где я? Когда я?

Короче - глобальное "АУ" на весь "лес" из проводов и "фигнюшек". Кто откликнется, с тем и дружить будем, а остальных - нехай волки съедят, если еще не съели... (чур Видюху, Клаву, Шину и т. д. не есть!).

Проверка оборудования выполняется хитрой низкоуровневой программой, которая запускается из ROMа. Если с каким-либо устройством можно общаться на "нескольких языках" (или если вы вообще с этой редиской разговаривать не хотите), то вам будет предложено сделать выбор. Правда, в большинстве случаев об этом нужно просить - например нажатием кнопки DEL перед загрузкой.

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

алее эта хитрая программулька передает управление системному загрузчику.

[4] Системный загрузчик - тож программа хитрющая. Ее 512 байт располагаются на диске, но не в виде файла, а в "специальной" области - загрузочном секторе. (MBR - Master Boot Record).

Наверное, вам уже известно, что для создания системной дискеты недостаточно просто скопировать на нее необходимые системные файлы, а нужно предварительно отформатировать ее "как системную" или воспользоваться утилитой sys.com (c:/windows/command/). Все, что "делают" данная опция форматирования и утилита sys.com - это как раз и есть запись системного загрузчика в MBR вашего жесткого или гибкого диска.

[5] Как уже говорилось, в ROM помимо всего прочего, зашита базовая система ввода-вывода. Однако этой "базовой системы" для работы компьютера маловато будет. А посему на жестком диске раполагается ее "расширение" - в файле io.sys.

Очевидно, что это расширение можно с легкостью изменять, модернизировать, патчить, фиксить - диск он все выдержит. А вот то, что в ROM зашито (повторимся) - своего рода незыблемый закон, пачка "компьютерных" аксиом, на основе которых построено множество завернутых теорем (все они как-раз таки и зашиты в io.sys).

Так вот, первое, что делает "системный загрузчик" в MBR - это вытягивает за хвост расширение BIOS, то есть "комплект теорем", на основе которых впоследствии можно, собственно, и работать.

[6] После загрузки "расширения" системный загрузчик передает управление "командному интерпретатору" command.com. Однако перед этим запрашиваются многочисленные настройки из файла msdos.sys. Например, какой интерпретатор использовать, где он находится (ведь не обязательно в корневом каталоге диска "цэ") и прочие, которые мы еще будем рассматривать.

Первое, что делает "командный интерпретатор command.com" - загружает программы-посредники (они же - драйвера), указанные в файле config.sys. Это своего рода переводчики между языком, который понимает интерпретотор и "родным" языком многочисленных устройств вашего компьютера (как-то: звуковая плата, мышь и пр.).

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

Правда, перед тем, как дать это сделать юзверу, command.com выполняет "простыню" команд из "плэйлиста" по имени autoexec.bat. А вот потом уже - пожалуйста:

С:\ (приглашение такое)

[7] Итак, вкратце, компьютер "включается" следующим образом: после тестирования "железа" загружается базовая система ввода-вывода, которая передает управление программе в MBR загрузочного диска. Эта программа в свою очередь подгружает расширение базовой таблицы из файла io.sys. Далее MBR читает установки msdos.sys и загружает командный интерпретатор command.com с той или иной конфигурацией. Командный интерпретатор подключает драйвера различных устройств (config.sys) и выполняет пакет команд из autoexec.bat.

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

[8] Read Only Memory пока что оставим в покое. Позже мы к ней еще вернемся. Что касается остальных двух видов памяти (дисковая и оперативная), то прежде чем мы "потрогаем их руками", необходимо сначала познакомиться с такой вещью, как адресация.

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

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

[9] Посмотрите на вашу оперативную память прямо сейчас! Для этого запустите программу debug.exe из c:\windows\command и в ответ на появившееся приглашение "-" введите команду "d" (от английского dump).

Вот что вы по идее должны увидеть:

{картинка поскипана}

Эта картинка и называется дампом оперативной памяти.

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

[10] Ну и что из этого следует? Толку, что мы можем полюбоваться на дамп памяти? (Надеюсь, вопрос о "толке" у вас возникает постоянно...) Зачем это нужно?

А вот зачем:

Как уже говорилось, после тестирования железа программулькой из ROMа, результаты тестирования и некоторые установки переносятся в RAM - это чтобы потом эти "секретные материалы" могла использовать операционная система и прикладные программы.

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

Кстати, команда "d" безо всяких параметров выводит просто текущий сегмент памяти, начиная со смещения 100. Чтобы вывести дамп какой-либо конкретной области, нужно всего-то ничего - после команды "d" указать еще и адрес :-) например, "d 10A0:0100". Можно также указать и желаемую длину выводимой строки при помощи ключа "L" ("d 10A0:0100 L 5").

[11] А теперь мы устроим небольшую экскурсию по данной области памяти :-)))).

Первое, на что мы посмотрим, это доступный для программы объем памяти. Это информация расположена по адресу 40:14. Вводим команду (после "минусика"): d 0:413 L2.

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

32770 K получилось??? А вот и не правильно! На самом деле будет правильно, если их поменять местами сначала :(. Вы потом поймете почему - когда мы разберемся с регистрами. А пока что помедитируйте над следующей табличкой (мы ее у Абеля скатали... хе-хе...):

Шестнадцатеричное нормальноеШестнадцатеричное обратноеДесятичное (К)
80 0000 80128
00 0101 00256
80 0101 80384
00 0202 00512
80 0202 80640

То бишь две пары цифирь, которые у вас получились, поменяйте местами и это будет объем доступной памяти в HEX :-) Во как!

Что? У вас 128 мег ОЗУ, а этот хренов debug показал только жалких 640 килобайт???

Э-э-э, ребята... Оперативная память тоже разная бывает :). Ту, которую мы колумаем - это типа только основная - ее даже на самых навороченных тачках 640 k. А то, что выше - это уже совсем другая история. (Но мы и с ней вскоре познакомимся!)

[12] Теперь посмотрим, какие еще "секретные сведения" нам можно из этой области памяти выколупать:

Например, по адресу ffff:5 - системная дата. Только она в "правом блоке" дампа отображается, там где "буковки" и "точечки" какие-то нездоровые.

Это только первое "погружение", поэтому мы не будем вам объяснять чем "правый блок" от левого отличается :))

[13] Короче, искателям приключений на свое мягко место выдаем "простыню" самых интересных адресов (большинство слов в описании вам пока должны быть непонятны, но вы не пугайтесь!):

417 - два байта разрядов состояния клавиатуры. Они активно используются ROM-BIOS для управления интерпретаций действий клавиатуры. Изменение этих байтов изменяет значение нажатых клавиш :). Прикол, не правда ли?

41A - cлово по этому адресу указывает на начало буфера BIOS для ввода с клавиатуры, расположенного начиная с адреса 41E; в этом буфере храняться и ждут обработки результаты нажатия на клавиши. Конец буфера - слово по адресу 41C.

43E - байт указывает, необходима ли проверка дискеты перед подводом головки на дорожку. Разряды с 0 по 3 соответствуют дисководам с 0 по 3. Если разряд установлен в 0, то необходима проверка дискеты. Как правило, вы можете обнаружить, что разряд установлен в 0, если при предыдущем обращении к дисководу имели место какие-либо проблемы.

Например, разряд проверки будет равен 0, если вы попытаетесь запросить каталог на дисководе, на котором нет дискеты, и затем на запрос, появившийся на экране дисплея: "Not ready reading eroor B; Abort, Retry, Ignore?" вы ответите: A.

44C - 2 байта - длина регенерации экрана. Это число байтов, используемых для страницы экрана. Зависит от режима.

44E - 2 байта - смещение для адреса начала текущей страницы в памяти дисплея. Этот адрес указывает, какая страница в данный момент используется.

460 - 2 байта - размер курсора, представленный в виде диапазона строк развертки. Первый байт дает конечную, а второй - начальную строку развертки.

Честно говоря, эту простыню можно растянуть еще выпусков на пять рассылки :))). Естественно, мы это делать не собираемся.

[14] Ну... еще один и хватит, пожалуй, адресов :).

449 - значение этого байта от 0 до 10 или от 13 до 15 определяют текщий режим выдачи изображения. Расшифровка в табличке:

КодЗначение
040-колонный текст, нет цвета
140-колонный текст, 16 цветов
280-колонный текст, нет цвета
380-колонный текст, 16 цветов
4Графика со средним разрешением, нет цвета
5Графика со средним разрешением, нет цвета (4 уровня серого)
6Графика высокого разрешения, 2 цвета
7Режим монохромного адаптера
8Графика низкого разрешения, 16 цветов (в CGA нет)
9Графика среднего разрешения, 16 цветов (в CGA нет)
10Графика высокого разрешения, 4 цвета (в CGA нет)
13Графика среднего разрешения, 16 цветов (в CGA нет)
14Графика высокого разрешения, 16 цветов (в CGA нет)
15Специальная графика высокого разрешения, 4 цвета (в CGA нет)

[15] На самом деле все намного сложнее, чем мы вам тут расписали. Из каждого правила существует куча исключений. Помните, что это только первое погружение в данную тему - совсем не глубокое. На каждом из этих пунктов мы еще будем останавливаться подробнее, но имейте терпение - не все сразу.

И еще один нюанс :). Сначала мы будем изучать моменты, которые являются ОБЩИМИ для всех моделей процессоров и только потом перейдем к "частностям". А так как "наиболее общей" частью современных компьютеров является архитектура процессора 8086 - с него и начинаем.

Ну а далее, естественно: 86(88) -> 286 -> 386 -> 486 -> P -> P2.

Дожить бы до последнего, правда? (уф... устал я от жизни, ясно!)

АНОНС!

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