Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архитектура ЭВМ и систем. Лабораторная работа. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать
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 man­ager, диспетчер дополнительной памяти). Все пространство допол­нительной памяти делится на блоки размером 16 Кб – логические страницы. Они проецируются
на неиспользуемую область размером 64 Кб (обычно между 640 Кб и 1 Мб) – четыре физические страницы по 16 Кб. Обращаясь к этой области, называемой страничным бло­ком, программы получают доступ дополнительной памяти, исполь­зуя для переключения страниц вызов соответствующих функций драйвера EMM.
Дополнительная память может также проецироваться в область
расширенной. Такая возможность существует на машинах
с процес­сорами типа Intel 80386 и выше при использовании соответствую­щего драйвера, например EMM386.EXE.
Верхняя память
Область между 640 Кб и 1 Мб называется областью верхней памяти. Она была отведена фирмой IBM для ПЗУ BIOS, видеопамя­ти и ПЗУ различных устройств других поставщиков оборудования. Обычно в ней остаются незанятые области. Драйверы памяти, такие как EMM386.EXE, имеют возможность проецировать участки рас­ширенной памяти на адреса верхней памяти за счет механизма стра­ничного преобразования
адресов процессоров Intel 80386 и выше.
Таким образом, в области первого мегабайта появляется еще допол-
100
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]