Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Системное программирование Лекции 1.doc
Скачиваний:
210
Добавлен:
26.05.2015
Размер:
1.19 Mб
Скачать

1.3.8. Системный диск

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

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

Диск, содержащий рабочую версию ОС Windows XP, содержит правильную главную загрузочную запись (сектор) и блок начальной загрузки в начале раздела диска (тома), кроме этого в корне дискового тома файлы ntldr, ntdetect.com, boot.ini, bootfont.bin и каталог с системными файлами ОС, обычно указанный  в boot.ini.

В отсутствие файла boot.ini загрузка будет идти в предположении о наличии каталога \WINDOWS. В самом конце загрузки Windows XP на экране монитора отображается страница приветствия. На этой странице пере­числены все имена зарегистрированных пользователей. Если вы единоличный пользователь ком­пьютера, страница приветствия может быть не нужна, а тре­буется, чтобы система автоматически загружалась под ка­ким-либо пользователем, без появления окна приветствия.

Чтобы  настроить  это,  нужно  в  разделе реестра 

HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\ CurrentVersion \ Winlogon

установить для параметра AutoAdminLogon (типа DWORD) значение 1. В том же разделе в значениях параметров DefaultUserName и BefaultPassword ука­зать имя пользователя и пароль, под которыми должен осуществляться запуск системы, также указать имя домена в параметре DefaultDomainName, если ваш компьютер использует домен. Задать число автоматических входов можно, перейдя в раздел

HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon

и создав пара­метр AutoLogonCount типа DWORD, в качестве значения задав нужное число. Когда установленное число автоматических загрузок будет ис­черпано, ключи AutoLogonCount и DefaultPassword бу­дут удалены, параметру AutoAdininLogon будет присвоено нулевое значение.

1.3.9. Загрузочный сектор

Загрузочный сектор ‒ это особый сектор на жёстком диске, дискете или другом дисковом устройстве хранения информации (для жесткого диска ‒ первый физический сектор для каждого раздела). В процессе загрузки компьютера с дискеты он загружается в память программой POST, ему передается управление командой long jump.

Загрузочный сектор, иногда называемый stage1, то есть первым этапом загрузки операционной системы, загружает программу второго этапа загрузки операционной системы stage 2 (вторичный загрузчик). Иногда в качестве stage 2 загружается boot manager или программа авторизации и защиты доступа. В некоторых ОС роль stage1 выполняет MBR и при загрузке ОС с жесткого диска загрузочный сектор не используется.

1.3.10. Функции таймера - звук и время

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

  • канал 0 используется для системной службы времени. При инициализации системы BIOS записывает в счетчик этого канала максимально возможное число, таким образом, импульсы на выходе делителя выдаются с частотой около 18.2 гц (период этой частоты - около 55 мсек - программисты иногда называют «тиком» таймера). Выход делителя этого канала поступает на контроллер прерываний и вызывает прерывание с номером 8;

  • выход канала 1 используется схемами регенерации памяти, поэтому программисты с этим каналом не работают;

  • выход канала 2 поступает на динамик ПЭВМ, этот канал используется для генерации звука.

Каждый канал может работать в одном из 6 режимов, но программисты, как правило, используют его в режиме 3 (генератор меандра).

Программирование канала таймера представляет собой запись числа в счетчик канала. Имеется один управляющий порт - 0x43 для всех каналов и по одному порту данных для каждого канала - 0x40, 0x41, 0x42. При программировании следует записать в порт 0x43 управляющий байт, который обычно имеет вид:

x x 1 1 0 1 1 0,

где xx - номер канала таймера, а затем послать в порт данных выбранного канала сначала младший, а затем старший байт счетчика.

Системная служба времени. Импульсы, поступающие с выхода канала 0 таймера, вызывают прерывание 8. Обработчик этого прерывания в BIOS подсчитывает количество таких импульсов в 4-байтной области памяти (два 2- байтных слова). Этот счетчик, находящийся в области памяти BIOS по адресу 0040:006C, таким образом, хранит количество тиков таймера, прошедших от полуночи (0 в счетчике соответствует полночи). При запуске системы BIOS запрашивает у оператора время дня, переводит его в количество тиков и записывает по указанному адресу. Затем в процессе работы это число модифицируется обработчиком прерывания 8. То обстоятельство, что обработчик прерывания 8 в BIOS обеспечивает работу службы времени следует учитывать при перехвате прерывания 8 и при перепрограммировании канала 0 таймера.

Доступ к счетчику времени поддерживается прерыванием 0x1A. При обращении к этому прерыванию со значением 0 в регистре AH мы получаем в CX старшую, а в DX - младшую части счетчика. При обращении со значением 1 в AH мы задаем счетчик в регистрах CX, DX, и это значение записывается в память BIOS.

DOS поддерживает службу времени функциями 0x2C (чтение времени) и 0x2D (установка времени). Для представления времени в этих функциях используются регистры: CH (часы), CL (минуты), DH (секунды), DL (сотые доли секунды).

При загрузке система запрашивает у оператора также текущую дату, которая сохраняется где-то в DOS. Доступ к дате обеспечивается функциями DOS 0x2A - чтение и 0x2B - установка (регистры: CX - год, DH - месяц, DL - число). Всякий раз, когда счетчик времени суток в области данных BIOS достигает значения, соответствующего 24 часам, он сбрасывается в 0, и устанавливает в 1 флаг наращивания даты - 1 байт по адресу 0040:0070. При запросе даты DOS анализирует этот флаг и, если он установлен, наращивает дату и сбрасывает флаг.

В AT имеются независимые часы реального времени, показания которых содержатся в CMOS-памяти. Регистры CMOS-памяти, связанные со временем и датой следующие: 0 - секунды, 2 - минуты, 4 - часы, 6 - день недели (0 - воскресенье), 7 - день месяца, 8 - месяц, 9 - год. Доступ к этим данным - либо через порты 0x70, 0x71, либо через прерывание 0x1A. Функция 2 этого прерывания (AH=2) - чтение часов реального времени, функция 3 - установка часов, функции 4, 5 - чтение и установка даты соответственно. Используются те же регистры, что и в функциях DOS 0x2C, 0x2A, но все данные представляются в двоично-десятичном коде. При загрузке системы на AT время дня и дата выбираются из этих часов, далее эти часы и системная служба времени работают независимо друг от друга.

Кроме того, в AT имеется также возможность запрограммировать прерывание на заданное время, в описаниях это часто называют сигналом тревоги (alarm). Время поступления этого сигнала заносится в регистры CMOS-памяти: 1 - секунды, 3 - минуты, 5 - часы, а прерывание по достижению заданного времени разрешается единицей в разряде 5 регистра 0x0B. При достижении заданного времени происходит прерывание 0x4A. Сигнал тревоги может быть задан при помощи функции 6 прерывания 0x1A, а отменен - функцией 7.

Работа в реальном времени. В целом ряде приложений необходима привязка действий программы к определенным моментам времени или к временным интервалам. Наиболее простой подход заключается в циклическом опросе системного счетчика времени. Если же требуется заполнить паузы ожидания какой-либо полезной работой, приходится прибегать к расширению прерывания таймера. Для этого случая создается дополнение к прерыванию таймера, которое подсчитывает тики таймера параллельно с BIOS и по истечении заданного интервала либо сама выполняет требуемые действия, либо устанавливает какой-то флаг, по которому эти действия выполнит программа переднего плана.

Характерным примером такой задачи является создание фонового музыкального сопровождения - музыка играет в то время, как программа производит вычисления. При инициировании музыки переменные N и NM устанавливаются в начальные значения и подменяется вектор прерывания 8. «Полезная» работа программы переднего плана заключается в чтении кода нажатой клавиши, получении и выводе на экран текущего времени (это дает нам возможность убедиться в том, что работа системной службы времени не нарушена). При нажатии клавиши Esc программа и музыка завершаются. При поступлении очередного прерывания 8 управление получает функция newtime. Она, прежде всего, вызывает системный обработчик прерывания 8, а затем уменьшает счетчик тиков NM. Если счетчик тиков исчерпан, то отключается звук, программный цикл обеспечивает короткую паузу между нотами, а затем выбирается коэффициент деления для очередной ноты, который используется для программирования канала 2 таймера, а ее длительность устанавливается в счетчик NM.