МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • DOS-extender для компилятора Borland C++ 3.1

    DOS-extender для компилятора Borland C++ 3.1

    Министерство образования Республики Беларусь Белорусский Государственный

    Университет Информатики и Радиоэлектроники

    Кафедра ЭВМ

    Пояснительная записка

    к курсовому проекту по курсу

    "СПO ЭВМ",

    на тему:

    "DOS-extender для компилятора Borland C++ 3.1, защищенный режим

    процессора 80286, организация многозадачной работы процессора”

    Выполнил:

    студент группы 500501

    Балахонов Е.В.

    Минск 2000

    Оглавление.

    1. Введение. 2

    1.1 Уровни программной поддержки защищенного режима. 2

    1.1.1 Интерфейс BIOS. 2

    1.1.2 интерфейс драйвера HIMEM.SYS. 2

    1.1.3 интерфейс EMS/VCPI. 3

    1.1.4 интерфейс DPMI. 3

    1.1.5 расширители DOS (DOS-экстендеры). 3

    1.2 Текущее положение дел в мире DOS-extender-ов. 4

    2. Обоснование выбора средств. 4

    3. Реализация работы программы в защищенном режиме процессора 80286. 5

    3.1 Адресация защищенного режима процессора 80286. 5

    3.2 Переход в защищенный режим процессора 80286 8

    3.3 Возврат в реальный режим процессора. 10

    3.4 Обработка прерываний в защищенном режиме. 11

    3.5 Реализация мультизадачности. 13

    3.5.1 Контекст задачи. 14

    3.5.2 Переключение задач. 15

    3.5.3 Разделение ресурсов. 16

    3.5.4 Задачи. 16

    4. Полные исходные тексты программы. 17

    4.1 Файл TOS.INC. Определение констант и структур для модулей,

    составленных на языке ассемблера. 17

    4.2 Файл TOS.H. Определение констант и структур для модулей, составленных

    на языке Си. 18

    4.3 Файл TOS.H. Основной файл программы. 19

    4.4 Файл TASKS.C. Содержит функции задач. 24

    4.5 Файл SEMAPHOR.C. Содержит процедуры для работы с семафорами. 26

    4.6 Файл TIMER.C. Процедуры для работы с таймером и диспетчер задач. 27

    4.7 Файл EXCEPT.C. Обработка исключений. 28

    4.8 Файл INTPROC.C. Заглушки для аппаратных прерываний. 29

    4.9 Файл KEYB.C. Ввод символа с клавиатуры. 30

    4.10 Файл KEYBOARD.ASM. Процедуры для работы с клавиатурой. 30

    4.11 Файлы SCREEN.H и SCREEN.C – модуль для работы с видеоадаптером. 34

    4.11.1 SCREEN.H 34

    4.11.2 SCREEN.C 34

    4.12 Файл TOSSYST.ASM. Процедуры для инициализации, перехода в защищённый

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

    задач. 36

    5. Выводы. 41

    6. Литература. 41

    1. Введение.

    Операционная система MS DOS, не смотря на свое моральное устаревание,

    все еще довольно часто находит применение на парке старых ПК, а значит, все

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

    К сожалению, написание программ в реальном режиме процессоров

    архитектуры Intel x86 осложнено отсутствием возможности использовать в

    программе оперативную память объемом свыше пресловутых 640 килобайт, а

    реально свыше 500-620 килобайт. Это ограничение к сожалению преследует MS

    DOS и аналогичные ей ОС других производителей, начиная с того момента, как

    горячо любимый в околокомпьютерных кругах Билл Гейтс заявил, что 640

    килобайт достаточно для всех возможных задач ПК. Преодоление барьера 640

    килобайт в новых версиях MS DOS усложнялось необходимостью совместимости с

    старыми программами, которые жизненно необходимо было поддерживать.

    Программирование защищенного режима процессора и расширенной памяти

    требовало от программистов недюжинных знаний архитектуры процессоров Intel

    и достаточно трудоемкого программирования.

    1.1 Уровни программной поддержки защищенного режима.

    Инженерная мысль не стоит на месте, особенно в такой области, как

    программирование. Задача программной поддержки защищённого режима и

    поддержки работы с расширенной памятью получила не одно, а сразу несколько

    решений. Этими решениями стали так называемые уровни программной поддержки

    защищённого режима и поддержки работы с расширенной памятью:

    . интерфейс BIOS;

    . интерфейс драйвера HIMEM.SYS;

    . интерфейс EMS/VCPI;

    . интерфейс DPMI;

    . расширители DOS (DOS-экстендеры).

    1.1.1 Интерфейс BIOS.

    Интерфейсом самого низкого уровня является интерфейс BIOS,

    предоставляемый программам в виде нескольких функций прерывания BIOS

    INT 15h. Интерфейс BIOS позволяет программе перевести процессор из

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

    в расширенную или из расширенной в стандартную. Этим все его возможности и

    ограничиваются. Интерфейс BIOS используется для старта мультизадачных

    операционных систем защищённого режима (таких, как OS/2) или в старых

    программах, работающих с расширенной памятью в защищённом режиме (например,

    СУБД ORACLE версии 5.1).

    1.1.2 интерфейс драйвера HIMEM.SYS.

    С помощью функций, предоставляемых этим драйвером, программа может

    выполнять различные действия с блоками расширенной памяти, а также

    управлять адресной линией A20. Основное различие между способом работы с

    расширенной памятью драйвера HIMEM.SYS и интерфейсом прерывания BIOS

    INT 15h заключается в том, что первый выполняет выделение программе и

    внутренний учёт блоков расширенной памяти, а второй рассматривает всю

    расширенную память как один непрерывный участок. Однако драйвер HIMEM.SYS

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

    работает в реальном режиме, а для обращения к расширенной памяти использует

    либо недокументированную машинную команду LOADALL (если используется

    процессор 80286), либо возможности процессора 80386, который позволяет

    адресовать расширенную память в реальном режиме (при соответствующей

    инициализации системных регистров и таблиц).

    1.1.3 интерфейс EMS/VCPI.

    Используя трансляцию страниц, некоторые драйверы памяти (например,

    EMM386 или QEMM) могут эмулировать присутствие дополнительной памяти,

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

    дополнительной памятью, реализованный в рамках прерывания INT 67h, дополнен

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

    новые функции реализуют интерфейс виртуальной управляющей программы VCPI

    (Virtual Control Programm Interface). Они позволяют устанавливать

    защищённый и виртуальный режимы работы процессора, работать с расширенной

    памятью на уровне страниц и устанавливать специальные отладочные регистры

    процессора i80386. Интерфейс VCPI облегчает использование механизма

    трансляции страниц, освобождая программиста от необходимости работать с

    системными регистрами процессора.

    1.1.4 интерфейс DPMI.

    Интерфейс DPMI (DOS Protected Mode Interface - интерфейс защищённого

    режима для DOS) реализуется модулем, называющимся сервером DPMI. Этот

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

    WINDOWS или OS/2 версии 2.0 (позже мы обсудим некоторые детали, связанные с

    использованием интерфейса DPMI в WINDOWS). Интерфейс DPMI предоставляет

    полный набор функций для создания однозадачных программ, работающих в

    защищённом режиме. В этом интерфейсе имеются функции для переключения из

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

    дескрипторов LDT, для работы с расширенной и стандартной памятью на уровне

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

    реального режима из защищённого режима), для работы с отладочными

    регистрами процессора i80386. Это наиболее развитый интерфейс из всех

    рассмотренных ранее.

    1.1.5 расширители DOS (DOS-экстендеры).

    Последний, самый высокий уровень программной поддержки защищённого

    режима - расширители DOS или DOS-экстендеры (DOS-extender). Они

    поставляются, как правило, вместе со средствами разработки программ

    (трансляторами) в виде библиотек и компонуются вместе с создаваемой

    программой в единый загрузочный модуль. DOS-экстендеры значительно

    облегчают использование защищённого режима и расширенной памяти в

    программах, предназначенных для запуска из среды MS-DOS. Программы,

    составленные с использованием DOS-экстендеров, внешне очень похожи на

    обычные программы MS-DOS, однако они получают управление, когда процессор

    уже находится в защищённом режиме. К формируемому с помощью DOS-экстендера

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

    защищённого режима. Эти процедуры первыми получают управление и выполняют

    начальную инициализацию таблиц GDT, LDT, IDT, содержат обработчики

    прерываний и исключений, систему управления виртуальной памятью и т.д.

    1.2 Текущее положение дел в мире DOS-extender-ов.

    Еще несколько лет назад целые фирмы зарабатывали себе на существование

    созданием различных модификаций DOS extender-ов. Например довольно

    известный externder фирмы Phar Lap. После перехода большинства

    пользователей в среду Win32 необходимость в DOS extender-ах резко

    сократилась и большинство таких фирм, не сумев сориентироваться в

    изменившихся условиях, прекратили свое существование.

    Многие фирмы, разрабатывавшие компиляторы для DOS, включали в поставку

    своих сред программирования DOS-extender-ы собственной разработки. Таким

    примером может служить фирма Borland (ныне подразделение фирмы Corel) с ее

    Borland Pascal, Borland C++ и расширителем DOS RTM.

    В данный момент доступно несколько DOS-extender-ов по свободной

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

    понятно, денег на них сейчас не заработаешь.

    Примеры таких программ:

    - ZRDX by Sergey Belyakov (http://www.zrdx.da.ru)

    Маленький и функциональный DOS-extender для Watcom C++ и 32-х

    битных исполняемых файлов формата OS/2 LE. Используется в

    коммерческих программах, таких как антивирус AVP для DOS32.

    - WDOSX by Michael Tippach (http://www.wuschel.demon.co.uk)

    Самый впечатливший меня DOS-extender. Список поддерживаемых функций

    просто поражает. Поддерживает все распространенные среды

    программирования: Visual C++ 4 и позже, Borland C++ 4 и позже,

    Delphi 2 и позже. При желании никто не запрещает использовать

    Assembler.

    2. Обоснование выбора средств.

    DOS-экстендеры обычно поставляются в комплекте с трансляторами,

    редакторами связей, отладчиками и библиотеками стандартных функций

    (например, библиотеками для транслятора языка Си). Код DOS-extender

    линкуется либо уже к готовому исполняемому файлу специальной программой

    (чаще), либо линковка полностью проходит при помощи программы-линкера,

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

    В настоящий момент науке известны всего один DOS-extender для Borland

    C++ 3.1. Это программа фирмы Phar Lap, не имеющая собственного названия.

    Фирмы, к сожалению, давно уже нет, как и исходных текстов этого DOS-

    extender-а. В него входил собственная программа – линкер и набор

    специальных библиотек функций специально для Borland C++ 3.1, которой и

    проводилась окончательная сборка EXE-файла.

    Написание собственной среды разработки, вроде программ-линкеров и

    собственных трансляторов языка Ассемблера явно выходит за переделы данного

    курсового проекта. Поэтому остановимся на разработке набора функций,

    позволяющих:

    - реализовать защищенный режим процессора 80286,

    - адресовать до 16 Мб памяти,

    - обрабатывать прерывания реального режима DOS

    - реализуем набор средств для создания параллельно выполняющихся

    потоков в среде DOS.

    После разработки необходимых средств, напишем программу–пример с их

    использованием. Собственно это получится не просто программа, а некий

    прототип многозадачной операционной системы.

    Итак, согласно заданию буду пользоваться следующими средствами

    разработки:

    - Borland C++ 3.1

    - Borland Turbo Assembler из поставки Borland C++ 3.1

    3. Реализация работы программы в защищенном режиме процессора 80286.

    3.1 Адресация защищенного режима процессора 80286.

    Логический адрес в защищённом режиме (иногда используется термин

    "виртуальный адрес") состоит из двух 16-разрядных компонент - селектора и

    смещения. Селектор записывается в те же сегментные регистры, что и

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

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

    помощи специальных таблиц преобразования адресов.

    В первом приближении можно считать, что для процессора i80286 селектор

    является индексом в таблице, содержащей базовые 24-разрядные физические

    адреса сегментов. В процессе преобразования логического адреса в физический

    процессор прибавляет к базовому 24-разрядному адресу 16-разрядное смещение,

    т.е. вторую компоненту логического адреса (Рис. 1).

    Такая схема формирования физического адреса позволяет непосредственно

    адресовать 16 мегабайт памяти с помощью 16-разрядных компонент логического

    адреса.

    Таблиц дескрипторов в системе обычно присутствует от одной до

    нескольких десятков. Но всегда существует так называемая таблица GDT

    (Global Descriptor Table), в которой обычно хранится описание сегментов

    самой операционной системы защищенного режима 80286. Таблицы LDT (Local

    Descriptor Table) создаются на каждый новый запускаемый процесс в

    операционной системе, и в них хранится описание сегментов только одной

    отдельной задачи.

    Таблица дескрипторов - это просто таблица преобразования адресов,

    содержащая базовые 24-разрядные физические адреса сегментов и некоторую

    другую информацию. То есть каждый элемент таблицы дескрипторов (дескриптор)

    содержит 24-разрядный базовый адрес сегмента и другую информацию,

    описывающую сегмент.

    Процессор 80286 имеет специальный 5-байтный регистр защищенного режима

    GDTR, в котором старшие 3 байта содержат 24-разрядный физический адрес

    таблицы GDT, младшие два байта - длину таблицы GDT, уменьшенную на 1.

    [pic]

    Рис. 1. Схема преобразования логического адреса в физический в

    защищенном режиме процессора 80286.

    Перед переходом в защищённый режим программа должна создать в

    оперативной памяти таблицу GDT и загрузить регистр GDTR при помощи

    специальной команды LGDT.

    Каждый элемент таблицы дескрипторов имеет следующий формат:

    [pic]

    Общая его длина составляет 8 байт, в которых расположены следующие

    поля:

    . поле базового адреса длиной 24 бита содержит физический адрес

    сегмента, описываемого данным дескриптором;

    . поле предела содержит размер сегмента в байтах, уменьшенный на

    единицу;

    . поле доступа описывает тип сегмента (сегмент кода, сегмент данных и

    др.);

    . зарезервированное поле длиной 16 бит для процессора i80286 должно

    содержать нули, это поле используется процессорами i80386 и i80486

    (там, в частности, хранится старший байт 32-разрядного базового адреса

    сегмента).

    Поле доступа, занимающее в дескрипторе один байт (байт доступа) служит

    для классификации дескрипторов. На рис. 2 приведены форматы поля доступа

    для трёх типов дескрипторов - дескрипторов сегментов кода, сегментов данных

    и системных.

    [pic]

    Рис. 2. Форматы поля доступа дескриптора.

    Поле доступа дескриптора сегментов кода содержит битовое поле R,

    называемое битом разрешения чтения сегмента. Если этот бит установлен в 1,

    программа может считывать содержимое сегмента кода. В противном случае

    процессор может только выполнять этот код.

    Биты P и A предназначены для организации виртуальной памяти. Их

    назначение будет описано в разделе, посвящённом виртуальной памяти. Сейчас

    отметим, что бит P называется битом присутствия сегмента в памяти. Для тех

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

    основном с такими сегментами) этот бит должен быть установлен в 1.

    Любая попытка программы обратиться к сегменту памяти, в дескрипторе

    которого бит P установлен в 0, приведёт к прерыванию.

    Бит A называется битом обращения к сегменту и для всех наших программ

    должен быть установлен в 0.

    Поле доступа дескриптора сегмента данных имеет битовые поля W и D.

    Поле W называется битом разрешения записи в сегмент. Если этот бит

    установлен в 1, наряду с чтением возможна и запись в данный сегмент. В

    противном случае при попытке чтения выполнение программы будет прервано.

    Поле D задаёт направление расширения сегмента. Обычный сегмент данных

    расширяется в область старших адресов (расширение вверх). Если же в

    сегменте расположен стек, расширение происходит в обратном направлении - в

    область младших адресов (расширение вниз). Для сегментов, в которых

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

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

    программирования C. (В дальнейшем где это только возможно будем применять

    язык С, а Ассемблер – только там, где это необходимо.):

    typedef struct descriptor

    Страницы: 1, 2, 3


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.