Изучение организации памяти и функций управления памятью: Методические рекомендации по выполнению лабораторной работы

Страницы работы

Содержание работы

УПРАВЛЕНИЕ   ПАМЯТЬЮ

Лабораторная    работа   №  3

1.   ЦЕЛЬ    РАБОТЫ

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

2.  ОСНОВНЫЕ     СВЕДЕНИЯ

2.1.  Функции управления  памятью  операционной системы

Память – важнейший ресурс вычислительной системы. Память распределяется между модулями  прикладных программ и модулями самой операционной системы. Основные функции ОС по управлению памятью:

§  контроль свободной и занятой памяти;

§  выделение памяти процессам и освобождение памяти при завершении процесса;

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

§  динамическое распределение памяти во время исполнения программы;

§  вытеснение кодов программы и данных из оперативной памяти (ОП) на диск, когда размера ОП недостаточно для выполнения процессов и возвращение их в память, когда в ней освобождается место;

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

Возможны также дополнительные функции, например, дефрагментация памяти и др. Организация и стратегии управления памятью различны для однопользовательских, многопользовательских, многозадачных ОС и ОС реального времени.

2.2.   Динамическое   распределение   памятью  в  языках   С  и  С++

Каждой переменной (объекту) память может выделяться статически в момент загрузки программы или динамически – в процессе исполнения программы. Статические переменные хранятся в области данных программы или в стековой  памяти. Динамическое распределение используется для экономии памяти как ресурса. Переменные, массивы или объекты, которые по ходу исполнения программы становятся ненужными, уничтожаются, а освобожденная память может быть использована для новых переменных или объектов.

Для динамического распределения выделяется специальная область свободной памяти – heap (куча). В программах на языках С и С++ динамическое выделение памяти производится с помощью библиотечных функций malloccalloc, realloc или оператора  new. Освобождение выделенной памяти осуществляется функцией free  или операцией delete. Примеры, демонстрирующие использование вышеприведенных функций для динамического выделения и освобождения памяти, приведены в Приложении 1 и Приложении 2.

2.3.  Управление   памятью  в  операционной  системе  MS-DOS

MS-DOS – наиболее распространенная однозадачная ОС. Верхняя граница доступной памяти для приложений MS-DOS – 640 Кбайт, из которых примерно 60 Кбайт занято ОС. Такое ограничение предела доступной памяти – один из основных недостатков MS-DOS.

MS-DOS поддерживает несвязное распределение ОП. При этом программа может размещаться в основной памяти в нескольких блоках, необязательно соседних. Размер блока задается в параграфах (16 байт).  Для контроля распределения памяти MS-DOS использует блоки управления памятью (Memory Conrol Block, MCB). В этой структуре размером 16 байт, располагаемой перед выделенным блоком, хранится размер блока, сегментный адрес программы-владельца  и тип блока (последний или промежуточный блок). Распределение памяти в конкретном сеансе работы можно проследить по связанному списку блоков MCB.

Для управления памятью MS-DOS использует функции 48h,  49h  и 4Ah прерывания INT 21h. Функция 48h предназначена для выделения блока памяти, например,  при загрузке программы в память. При обращении функция требует указания в регистре AH номера функции (AH = 48h), в регистре BX – количества затребованных параграфов памяти. Если функция выполнена успешно, то в регистре флагов процессора флаг CF = 0 и в регистре АХ возвращается адрес сегмента выделенной памяти. Если при выполнении  функции произошла ошибка, то CF = 1 в регистре AX устанавливается код ошибки, а в регистре  BX– размер наибольшего доступного блока памяти.

Функция 49h служит для освобождения специфицированного блока памяти. Её интерфейс:  при вызове AH = 49h, ES – адрес сегмента освобождаемой памяти.  Возврат функции при успешном выполнении:  CF = 0, при ошибке CF =1,  AX =  код ошибки.

Функция  4Ah INT 21h позволяет произвести изменение размера выделенного функцией  48h блока памяти. Её входные параметры:  AH = 4Ah, BX = требуемый размер блока памяти в параграфах,  ES = сегментный адрес модифицируемого блока памяти. При ошибке функция возвращает CF = 1, в регистрах AX = код ошибки, BX = размер наибольшего доступного блока памяти.

В Приложении 3 приведена программа, демонстрирующая использование функций   MS-DOS для управления динамической памятью. В программе для обращения к функциям MS-DOS использован встроенный ассемблерный код;  возможно также обращение к системным вызовам на языке С с помощью специальных функций компилятора, например, с помощью библиотечной функции intdos (заголовочный файл dos.h) компилятора Borland C++.

2.4.  Управление  памятью в операционной  системе Windows

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

Адреса, на которые делает ссылки выполняющийся процесс, являются виртуальными адресами. Диапазон виртуальных адресов процесса называется виртуальным адресным пространством. Каждый процесс имеет собственное независимое виртуальное адресное пространство. Для Windows, как 32-разрядной системы, этот диапазон имеет границы от 0000000016  до FFFFFFFF16. Диапазон реальных адресов, существующих в конкретной вычислительной системе, составляет пространство реальных (физических) адресов. Процессы при исполнении обращаются только к виртуальным адресам. Виртуальные адреса преобразовываются в реальные адреса физической памяти.

Работа виртуальной памяти происходит медленнее, поскольку коды и данные программ хранятся на диске и при необходимости загружаются в реальную оперативную память. Преобразование виртуальных адресов в реальные осуществляется аппаратно с использованием так называемого механизма MMU (Memory Management Unit – устройство управления памятью). MMU  использует страничную виртуальную память, при которой перемещение данных между памятью и дисками выполнятся страницами – небольшими блоками размером 4 Кбайт.

Виртуальная и оперативная память делятся на страницы равного размера. Виртуальный адрес представляется в виде пары (p, si), где p – порядковый номер виртуальной страницы, si – смещение на странице. Аналогично в виде пары (n, sk) адресуется физический адрес.  При каждом обращении к памяти выполняется поиск виртуальной страницы, содержащей требуемый адрес. Если нужной виртуальной страницы в оперативной памяти нет, то происходит страничное прерывание и нужная страница загружается с диска в физическую память. Предварительно, если в памяти нет свободной физической страницы, то с помощью специальной стратегии (алгоритма) замещения одна или несколько из невостребованных в данный момент физических страниц выгружается на диск.

Похожие материалы

Информация о работе