Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Архитектура ЭВМ и систем. Лабораторная работа. Учебное пособие
.pdf
disp_next:
push cx
push di
add di,(80-fir_width)/2*2
mov cx,fir_width
rep movsw
pop di
pop cx
add di,80*2
loop disp_next
;освободим выделенную память
pop es
pop ds
mov ah,49H
int 21H
jnc finish
;выведем сообщение об ошибке
mov ah,9
lea dx,err_frm
int 21H
finish:
mov ax,4C00H
int 21H
start endp
cseg ends
sseg segment para stack use16
dw 1024 dup(?)
sseg ends
;последний сегмент программы нужен для определения
;размера программы в памяти
last_seg segment para
last_seg ends
end start
91

*
***
*****
***
*****
*******
*****
*******
*********
*
*
*****
Рис. 3. Полученное изображение ёлочки
Задание № 1. Напишите программу, выполняющую заданный
анализ распределения оперативной памяти в системе. Результатом
ее работы должна быть полная информация, описывающая найденные блоки памяти, включающая для занятых блоков полный путь на
диске их владельцев.
Варианты задания
1. Найти наибольший по размеру свободный блок памяти в сис-
теме.
2. Найти наименьший по размеру свободный блок памяти в сис-
теме.
3. Найти наибольший по размеру занятый блок памяти в системе.
4. Найти наименьший по размеру занятый блок памяти в системе.
5. Найти блоки памяти, занятые системными данными и сис
темным кодом.
6. Определить количество свободных блоков памяти в системе и
их общий объем.
7. Определить количество занятых блоков памяти в системе и
подсчитать их общий объем.
8. Определить имена программ, которым принадлежит более од-
ного блока памяти.
ЗАДАНИЯ ДЛЯ ВЫПОЛНЕНИЯ
-
92

9. Определить имена программ, которым принадлежит только по
одному блоку памяти.
10. Определить имя программы, которой принадлежит макси-
мальный объем памяти в системе (учесть, что одной программе может принадлежать более одного блока памяти).
11. Определить имя программы, которой принадлежит макси-
мальный объем памяти в системе (учесть, что одной программе мо
жет принадлежать более одного блока памяти).
12. Определить объем памяти, принадлежащий командному ин-
терпретатору COMMAND.COM.
13. Найти последний блок памяти в системе.
14. Найти блок памяти, содержащий переменные окружения ко-
мандного интерпретатора COMMAND.COM.
15. Найти блоки, имеющие нулевой размер.
16. Составить список блоков памяти, расположенных до ко-
мандного интерпретатора COMMAND.COM.
17. Составить список
блоков памяти, расположенных после ко-
мандного интерпретатора COMMAND.COM.
18. Составить список блоков памяти, принадлежащих команд-
ному интерпретатору COMMAND.COM.
19. Составить список блоков памяти, содержащих программные
сегменты.
20. Составить список блоков памяти, не содержащих программ-
ные сегменты.
Задание № 2. Написать программу, запрашивающую у операционной системы два блока памяти. Первый используется для размещения
исходных данных, второй – для сохранения результата об-
работки перед выводом на экран.
Варианты задания
1. Пользователь вводит строку, состоящую из нескольких слов,
разделенных пробелами или табуляцией. Преобразовать эту строку
таким образом, чтобы позиция слов в строке осталась прежней, а
символы пробела и табуляции были заменены на соответствующее
число точек '.'. Как результат должна быть выведена сначала исходная строка, а под ней – новая.
-
93

2. Пользователь вводит вещественное число в «компьютерном»
формате, например, "12345678.95". Привести его к привычному виду
таким образом, чтобы дробная часть отделялась запятой, и каждые
три десятка целой были разделены пробелом. При этом вышеприведенное число должно было бы выглядеть как "12 345 678.95".
3. Пользователь вводит строку. Преобразовать ее таким образом,
чтобы все слова в
ней были напечатаны попеременно то большими,
то маленькими буквами.
4. Пользователь вводит строку. Поменять в ней порядок слов на
обратный.
5. Пользователь вводит строку, состоящую из нескольких слов,
разделенных пробелами. Удалить из каждого слова четные по порядку буквы, оставив нечетные.
6. Пользователь вводит строку, состоящую из нескольких слов,
разделенных
пробелами. Сформировать из нее новую, преобразовав
все символы в нижний регистр. Большие и малые английские буквы
отличаются только битом 5. Код буквы 'a' равен 61H, а буквы 'A' –
41H.
7. Пользователь вводит строку, состоящую из нескольких слов,
разделенных пробелами. Отсортировать слова в алфавитном порядке.
8. Пользователь вводит строку десятичных чисел, разделенных
пробелами. Числа надо пронумеровать,
поместив перед каждым но-
мер: "1.", "2.",... Наибольшему числу присваивается первый номер.
9. Пользователь вводит строку десятичных чисел, разделенных
пробелами. Удалить из нее те числа, которые меньше среднего значения всей совокупности.
10. Пользователь вводит отрывок текста, посвященного про-
граммированию на Паскале. Изменить ее таким образом, чтобы все
ключевые слова этого языка
были напечатаны большими буквами.
11. Пользователь вводит строку. Изменить ее таким образом,
чтобы все гласные буквы стали маленькими, а согласные – большими.
12. Пользователь вводит отрывок текста, состоящего из не-
скольких предложений. Проверить его и исправить таким образом,
чтобы каждое предложение начиналось с большой буквы.
13. Пользователь вводит отрывок текста,
состоящего из не-
скольких предложений. Найти самое длинное из них.
14. Пользователь вводит отрывок текста. Проверить его и ис-
править допущенные опечатки. Считать при этом, что в каждом сло-
94

ве только одна буква может быть неправильная. Программа должна
располагать орфографическим словарем объемом не менее десяти слов.
15. Пользователь вводит строку. Прижать ее к левому краю эк-
рана, удалив лишние пробелы между словами.
16. Пользователь вводит строку. Выровнять ее по ширине экра-
на (80 символов), равномерно добавив между словами пробелы.
17.
Пользователь вводит строку символов. Найти в ней самую
длинную последовательность идущих подряд одинаковых символов.
18. Пользователь вводит строку. Выровнять ее по центру экра-
на, удалив лишние пробелы между словами.
19. Пользователь вводит строку. Прижать ее к правому краю
экрана, удалив лишние пробелы между словами.
20. Пользователь вводит строку.
Найти в ней самое длинное и
самое короткое слово.
Контрольные вопросы
1. Каким образом MS-DOS распределяет оперативную память ме-
жду программами?
2. Какую организацию имеет блок памяти?
3. Каково назначение управляющего блока памяти?
4. Какие существуют типы управляющих блоков памяти?
5. Каким образом можно получить доступ к первому блоку памяти
в системе?
6. Опишите структуру управляющего блока памяти.
7. Какие функции предоставляет интерфейс
программирования
MS-DOS для работы с оперативной памятью?
8. Напишите пример процедуры, выделяющей блок памяти задан-
ного размера.
9. В каких единицах измеряется память в системе MS-DOS?
10. Каким образом можно определить общий размер доступной па-
мяти в системе?
11. Напишите пример процедуры, осуществляющей изменение раз-
мера заданного блока памяти на указанный.
12.
Напишите пример процедуры, возвращающей адрес первого
блока памяти в системе.
13. Всегда ли программа может получить блок памяти, равный об-
щему объему свободной памяти в системе?
14. Сколько памяти принадлежит программе сразу после загрузки?
95

15. Какие действия необходимо выполнить программе после загруз-
ки, прежде чем получить у ДОС некоторый блок памяти?
16. Напишите пример процедуры, освобождающей заданный блок
памяти.
17. Каким образом узнать размер данного блока памяти, имея его
сегментный адрес?
18. Как определить, содержит ли данный блок памяти программный
сегмент?
19. Что называется программным
сегментом?
20. Как узнать имя программы, владеющей данным блоком памяти?
ЛАБОРАТОРНАЯ РАБОТА № 9
МЕХАНИЗМЫ РАСПРЕДЕЛЕНИЯ ОСНОВНОЙ ПАМЯТИ
В ОПЕРАЦИОННОЙ СИСТЕМЕ MS-DOS
Цель: познакомить учащихся с принципами организации и
управления оперативной памятью, используемыми в однозадачных
операционных системах.
Назначение: на практике познакомиться с существующим специализированным системным программным обеспечением. Изучить
методы,
применяемые в однозадачной ОС для учета и распределения оперативной памяти под системные модули и прикладные программы.
Оперативная память является одним из самых дорогих ресурсов
персонального компьютера, который разделяют между собой все
программы. От ее эффективного использования во многом зависит
быстродействие всей системы.
Т
ИПЫ ОПЕРАТИВНОЙ ПАМЯТИ
В ПЭВМ, как и в любой современной ЭВМ или ВС, память
имеет иерархическую структуру. В этой структуре наиболее крупными (и важными для понимания ее общей организации) являются
два вида памяти:
− оперативная память (32- и 8/16- разрядная);
− постоянная память (блок системных ПЗУ).
В MS-DOS принято различать четыре вида оперативной памяти
Это обычная, верхняя, расширенная и дополнительная память. Адреса обычной памяти расположены начиная с 0000Н (0 Кб) и кончая
96
.

А000Н (640 Кб); верхняя память расположена между границами
А000Н и 10000Н (1 Мб); расширенная память – это вся память, которая находится выше границы 1 Мб; дополнительная память расположена на специальной плате, которая вставляется в слот расширения материнской платы. В отличие от трех первых видов дополнительная память не входит в
адресное пространство процессоров
Intel и доступ к ней осуществляется посредством специального
драйвера.
Обычная память
Обычная память – это память, которая расположена, начиная от
границы 0000Н. Ее размер может достигать максимум 640 Кб. Это
основной вид памяти, который использует операционная система
MS-DOS. В нее обычно грузится сама система, драйверы устройств,
резидентные программы. Только
обычная память доступна напрямую программам, написанным для реального режима. Существует
несколько возможностей минимизировать ее затраты на нужды операционной системы, но об этом речь пойдет далее.
MS-DOS выделяет память блоками минимум по 16 байт. Для
связи блоков между собой она использует так называемые структуры MCB (блоки управления памятью), которые располагаются перед
началом каждого выделенного блока памяти. Блоки резервируются и
освобождаются программами в течение работы системы. В результате этого память оказывается фрагментированной (разбитой на небольшие кусочки). Таким образом, хотя общий объем свободной
оперативной памяти может быть достаточным для нужд программы,
но размера наибольшего свободного блока может не хватить.
В таблице ниже
приведена структура памяти во время работы
IBM PC/AT.
Адрес Наименование и описание
0000:0000 Таблица векторов прерываний
0040:0000 Область данных ПЗУ-BIOS (переменные
ПЗУ-BIOS).
0050:0000 Область данных DOS
xххх:0000 Код BIOS, считанный с диска из
IBMIO.COM при загрузке
97

xххх:0000 Обработчики прерываний DOS, включая int
21H (IBMDOS.COM)
xххх:0000 DOS: буфера, области данных и устанавли-
ваемые драйверы устройств
xххх:0000 Резидентная часть COMMAND.COM
включает обработчики int 22H, int 23H, int
24H
xххх:0000 Резидентные программы и данные
xххх:0000 Текущая исполняемая программа (.COM
или .EXE)
xххх:0000 Транзитная часть COMMAND.COM переза-
гружается, если происходит ее перекрытие
A000:0000 EGA-память для некоторых режимов
B000:0000 Видеопамять монохромных адаптеров (и
совместимых с Hercules)
B800:0000 Видеопамять CGA, также страница 2 для
Hercules
C800:0000
↓
E000:0000
Внешний код ПЗУ. ПЗУ-BIOS ищет здесь (в
блоках по 2 Кб) код, выполняемый при загрузке. В такие блоки ПЗУ-памяти обычно
устанавливают обработчик устройства
(твердый диск или EGA-BIOS)
E000:0000
↓
AT-модули ПЗУ материнской платы в блоках по 64 Кб.
E000:FFFF
F000:0600 ПЗУ-резидентный интерпретатор BASIC
(может отсутствовать)
FE00:0000 ПЗУ-BIOS: POST и код загрузки, обработ-
чики прерываний и все прочее
FE00:FFF0 Инструкция FAR JMP на программу, вы-
полняемую при включении или сбросе
(POST)
F000:FFF5 Дата издания BIOS (в ASCII)
F000:FFFE Идентификационный код IBM PC (0FCh для
AT)
98

Во время «холодного старта», после POST и установки всех векторов для обработчиков прерываний, хранящихся в BIOS, BIOS выполняет проверку на наличие дополнительных модулей ПЗУ, подключенных через платы оборудования. Эта проверка известна как
ROM-Scan. Дополнительные ПЗУ могут быть установлены между
адресами C800:0000 и E000:0000 и должны иметь следующий формат:
ROM-Scan
Сме-
щение
+0 1 55h
+1 1 AAh
Дли-
на
Содержимое
Подпись доступного для BIOS модуля
ПЗУ (первое слово в сегменте = AA55h).
+2 1 Len Длина модуля ПЗУ в 512-байтовых еди-
ницах.
+3 ? Выполняемый код, часто команда NEAR JMP на
код инициализации.
Каждый блок размером 2 Кб в этом интервале проверяется на
наличие подписи. Когда BIOS находит подпись ПЗУ, она выполняет
контрольное суммирование модуля. Все байты складываются по модулю 100h, и сумма должна быть равна нулю. Если модуль корректен, тогда BIOS выполняет команду FAR CALL на смещение 0003h
сегмента. Ожидается, что ПЗУ вернет управление командой FAR
RET.
Обычно ПЗУ-
модуль выполняет все необходимые операции по
инициализации оборудования и вставляет свой собственный адрес в
один или несколько векторов прерываний.
Гнезда ROM U17 и U37 на системной плате PC/AT адресуются,
начиная с адреса E000:0000. Поиск модуля осуществляется по 64 Кб
блокам. Если модуль существует, он будет иметь подпись AA55h,
неиспользуемый байт длины по смещению 0003h и контрольную
сумму 0 по модулю
100h по смещению FFFFh.
Расширенная память
Расширенная память – это память, расположенная выше границы 1 Мб. Доступ к ней можно получить только в защищенном режиме на процессорах типа Intel 80286 и выше, либо используя неко-
99

торые дополнительные возможности этих процессоров. Исключение
составляют только первые 64 Кб минус 16 байт, к которым программы могут обращаться в реальном режиме при условии, что
включен режим использования старших линий адресной шины. В
эту область памяти MS-DOS может загружать часть себя. Хотя программы MS-DOS не могут напрямую обращаться к расширенной
памяти, с этой
системой поставляются несколько драйверов, кото-
рые позволяют использовать ее для хранения данных.
Дополнительная память
Спецификация дополнительной памяти была разработана совместно фирмами Lotus, Microsoft и Intel и носит название LIM EMS.
Версия 3.2 поддерживала до 8 Мб, а версия 4.0 поддерживает до 32 Мб.
Дополнительная память поставляется на специальной плате, для использования которой нужен драйвер EMM (expanded memory manager, диспетчер дополнительной памяти). Все пространство дополнительной памяти делится на блоки размером 16 Кб – логические
страницы. Они проецируются
на неиспользуемую область размером
64 Кб (обычно между 640 Кб и 1 Мб) – четыре физические страницы
по 16 Кб. Обращаясь к этой области, называемой страничным блоком, программы получают доступ дополнительной памяти, используя для переключения страниц вызов соответствующих функций
драйвера EMM.
Дополнительная память может также проецироваться в область
расширенной. Такая возможность существует на машинах
с процессорами типа Intel 80386 и выше при использовании соответствующего драйвера, например EMM386.EXE.
Верхняя память
Область между 640 Кб и 1 Мб называется областью верхней
памяти. Она была отведена фирмой IBM для ПЗУ BIOS, видеопамяти и ПЗУ различных устройств других поставщиков оборудования.
Обычно в ней остаются незанятые области. Драйверы памяти, такие
как EMM386.EXE, имеют возможность проецировать участки расширенной памяти на адреса верхней памяти за счет механизма страничного преобразования
адресов процессоров Intel 80386 и выше.
Таким образом, в области первого мегабайта появляется еще допол-
100
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
