Управление виртуальной памятью
Разработка программы менеджера памяти для замещения и размещения файлов свыше установленного порога. Определение количества удовлетворенных запросов. Алгоритм записи блоков по логическим адресам. Вывод информации о свободной и занятой памяти, процессах.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 13.11.2019 |
Размер файла | 75,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://allbest.ru
Учреждение образования Республики Беларусь
«Гомельский государственный технический университет
им. П.О.Сухого»
Кафедра «Автоматизированных и информационных систем»
Лабораторная работа
Управление виртуальной памятью
Выполнил: студент Акулич А.П.
Принял: преподаватель Соболев Д.В.
Гомель 2019
Цель работы: изучение алгоритмов управления памятью, разработка программы менеджера памяти.
Индивидуальные задания
Разработать программу, реализующую заданный алгоритм выделения памяти. алгоритм программа память файл
Менеджер памяти должен:
1. По запросу процесса выделять память, согласно заданного алгоритма (таблица 1).
Таблица 1.
Задание |
|
Локальное размещение с динамическим увеличением количества выделенных страниц при количестве запросов к страницам больше установленного порога. Алгоритм замещения - Random. Замещается случайная страница. |
На экран должна выводиться следующая информация о состоянии памяти: объем памяти, объем свободной памяти, размер наибольшего свободного блока, количество запросов на выделение памяти, количество удовлетворённых запросов (%).
2. Для выделения памяти указывается имя процесса и размер блока. После нажатия на кнопку «ДОБАВИТЬ» память выделяется или выдается сообщение о невозможности выделения.
3. Удалять из памяти заданный блок или все блоки заданного процесса (по нажатию кнопки «УДАЛИТЬ»). Указывается номер удаляемого блока и имя процесса.
4. Реализовать возможность последовательной записи/чтения информации в/из выделенную память по логическому адресу. Вывести физического адреса ячейки памяти, в которую была осуществлена запись.
5. Организовывать циклическое выделение и освобождение памяти. При этом случайным образом задается количество выделяемых блоков и их размер.
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Page{
int memory;
int free_memory;
char proc_name[20];
int appeal;
bool active;
};
void FirstFilling(Page *pg,int col,int size){
for(int i = 0; i < col; i++){
(pg+i)->memory = size;
(pg+i)->free_memory = size;
(pg+i)->proc_name[0] = '-';
(pg+i)->proc_name[1] = ' ';
(pg+i)->proc_name[2] = '\0';
(pg+i)->appeal = 0;
(pg+i)->active = false;
}
}
bool CheckForNamb(char *string)
{
for(int i = 0; i < strlen(string); i++)
{
if(string[i] < 48 || string[i] > 57) return false;
}
return true;
}
int ReadValueInt()
{
bool right = true;
char string[255];
while(right)
{
scanf("%s",string);
if(strlen(string)<10 && CheckForNamb(string))
right = false;
else
printf("Enter number < 147483647 !\n");
}
return atoi(string);
}
int SuchFree(Page *p,int col){
int i = -1;
bool such = true;
while(i < col && such){
i++;
if(!((p+i)->active)) such = false;
}
return(i);
}
bool In(int * m,int col,int z){
bool r = true;
for(int i = 0 ; i < col; i++){
if(m[i] == z) r = false;
}
return(r);
}
int Reb(Page *p,int col,int size){
int c=0;
for(int i = 0; i < col; i++){
if((p+i)->free_memory == size){
(p+i)->active = false;
c++;
}
}
return(c);
}
int main(){
Page pag[100];
int max_appeal,r,p,menu =
1,memory,free_memory,max_page,amt_page,free_page,appeal =
0,successful_appeal =
0,pr_size,page[100],amt_mas_page,shud_page,max_appel,pr_appeal;
char pr_name[20];
bool add_page,tmp;
printf("Enter amount for memory : ");
memory = ReadValueInt();
free_memory = memory;
printf("Enter amount for page : ");
amt_page = ReadValueInt();
free_page = amt_page;
FirstFilling(pag,amt_page,memory/amt_page);
printf("Enter max amount of pages for process : ");
max_page = ReadValueInt();
printf("Enter max appeal of pages for process : ");
max_appeal = ReadValueInt();
while(menu != 5){
printf("<========================================>\n");
printf("<==================MENU==================>\n");
printf("<========================================>\n");
printf("<-1-Add process-------------------------->\n");
printf("<-2-Delete process----------------------->\n");
printf("<-3-Info--------------------------------->\n");
printf("<-4-Periodic appeal---------------------->\n");
printf("<-5-Exit--------------------------------->\n");
printf("Enter point menu : ");
menu = ReadValueInt();
switch(menu){
case 1:{
printf("Enter name of process : \n");
scanf("%s",&pr_name);
printf("Enter size of process : \n");
pr_size = ReadValueInt();
if(pr_size > 0){
amt_mas_page = max_page;
free_page = Reb(pag,amt_page,memory/amt_page);
for(int i = 0; i < amt_mas_page; i++){
if(SuchFree(pag,amt_page) < amt_page){
page[i] = SuchFree(pag,amt_page);
pag[SuchFree(pag,amt_page)].active = true ;
}else{
p = rand() % amt_page;
if(In(page,amt_mas_page,p)){page[i] = p;}else{i--;}
}
printf("Form local pages : page[%d] = %d\n",i,page[i]);
}
r = 0;
pr_appeal = 0;
while(pr_size != 0){
appeal++;
printf("Wark with page : page[%d] = %d\n",r,page[r]);
if(pr_size > (memory / amt_page)){
pag[page[r]].memory = (memory / amt_page);
pag[page[r]].free_memory = 0;
pr_size -= (memory / amt_page);
}else{
pag[page[r]].memory = pr_size;
pag[page[r]].free_memory = (memory / amt_page) - pr_size;
pr_size = 0;
}
strcpy(pag[page[r]].proc_name,pr_name);
pag[page[r]].appeal++;
pr_appeal++;
if(pr_appeal >= max_appeal){
printf("Add page\n");
add_page = true;
pr_appeal = 0;
amt_mas_page++;
while(add_page && amt_mas_page <= amt_page){
if(SuchFree(pag,amt_page) < amt_page){p
= SuchFree(pag,amt_page);pag[SuchFree(pag,amt_page)].active
= true;}else{p = rand() % amt_page;};
printf("Form new page = %d, amt page = %d",p,amt_mas_page);
if(In(page,amt_mas_page,p)){page[amt_mas_page-1]
= p; add_page = false;}
printf("\n");
}
}
r++;
if(r >= amt_mas_page) r = 0;
}
}else{
printf("Size > 0\n");
}
break;
}
case 2:{
printf("Enter delete name of process : \n");
scanf("%s",&pr_name);
tmp = false;
for(int i = 0 ; i < amt_page ; i++)
{
if(!strcmp(pag[i].proc_name,pr_name)){
pag[i].memory = memory / amt_page;
pag[i].free_memory = memory / amt_page;
pag[i].proc_name[0] = '-';
pag[i].proc_name[1] = ' ';
pag[i].proc_name[2] = '\0';
pag[i].appeal = 0;
pag[i].active = false;
tmp = true;
}
}
if(tmp){
printf("Process %s delete!\n",pr_name);
}else{
printf("This process not found!\n");
}
break;
}
case 3:{
printf("Memory : %d\n",memory);
printf("Amount page : %d\n",amt_page);
printf("Free page : %d\n",free_page);
printf("Appeal : %d\n",appeal);
printf("|-----|--------------------|----------|----------|\n");
printf("| N | Name of process | Memory/%% | Appeal |\n");
printf("|_____|____________________|__________|__________|\n");
printf("|-----|--------------------|----------|----------|\n");
for(int i = 0; i < amt_page; i++){
printf("| %3d |%20s|%4d/%3.0f%% | %6d |\n",i+1,pag[i].proc_name,pag[i].memory,(pag[i].free_memory/(float)(memory / amt_page))*100,pag[i].appeal);
}
printf("|_____|____________________|__________|__________|\n");
break;
}
case 4:{
printf("Enter amount appeal : ");
p = ReadValueInt();
for(int i = 0; i < p;i++){
r = rand() % amt_page;
pag[r].appeal++;
appeal++;
printf("Appeal to page N = %d\n",r);
}
break;
}
case 5:{
printf("Exit...\n");
break;
}
default:{
printf("Error : Not right argument of menu!\n");
break;
}
}
}
return 0;
}
Порядок выполнения
В ходе выполнения данной лабораторной работы была создана программа, реализующая алгоритм замещения в виртуальной памяти.
На рисунке 1 показано начальное окно программы, в котором необходимо ввести один из вышеперечисленных пунктов.
Рисунок 1 - Запускное окно программы
Рисунок 2 - Вывод информации о свободной и занятой памяти, а также информации о процессах
Вывод
В ходе лабораторной работы были изучены алгоритмы замещения и размещения файлов на страницах виртуальной памяти.
Размещено на Allbest.ru
...Подобные документы
Архитектура компьютеров и возможности операционной системы по управлению памятью. Суть концепции виртуальной памяти. Аппаратно-независимые и аппаратно-зависимые средства управления виртуальной памятью. Сегментно-страничная организации виртуальной памяти.
презентация [355,2 K], добавлен 27.12.2010Стратегии размещения информации в памяти. Алгоритмы распределения адресного пространства оперативной памяти. Описание характеристик модели и ее поведения, классов и элементов. Выгрузка и загрузка блоков из вторичной памяти. Страничная организация памяти.
курсовая работа [708,6 K], добавлен 31.05.2013Сравнительный анализ статической и динамической памяти. Быстродействие и потребление энергии статической памятью. Объем памяти микросхем. Временные диаграммы чтения и записи памяти. Микросхемы синхронной и асинхронной памяти. Режимы модулей памяти.
презентация [114,2 K], добавлен 27.08.2013Виртуальные файловые системы. Интерфейс системных вызовов для различных типов файловых систем. Реализация директорий. Индексируемое размещение. Управление свободной памятью. Список свободной дисковой памяти. Различные методы размещения кэша для диска.
презентация [1,9 M], добавлен 24.01.2014Улучшение параметров модулей памяти. Функционирование и взаимодействие операционной системы с оперативной памятью. Анализ основных типов, параметров оперативной памяти. Программная часть с обработкой выполнения команд и размещением в оперативной памяти.
курсовая работа [99,5 K], добавлен 02.12.2009Распределение виртуальной памяти. Страничная и сегментная организации виртуальной памяти. Сегментно-страничная организация виртуальной памяти. Преобразование виртуального адреса в физический. Упрощение адресации памяти клиентским программным обеспечением.
курсовая работа [440,7 K], добавлен 04.03.2014Распределение оперативной памяти фиксированными, динамическими и перемещаемыми разделами. Распределение с использованием внешней памяти. Принципы рaботы матричного принтера. Проектирование символов и разработка программы, реализующей их вывод на печать.
курсовая работа [241,3 K], добавлен 01.07.2011Методы расчета, схемотехнического проектирования и конструирования элементов и блоков ЦВМ. Разработка регистра, схемы записи и считывания из оперативной памяти. Применение макроопределений при моделировании устройств и построении принципиальных схем.
курсовая работа [1,1 M], добавлен 12.02.2013Твердотельный накопитель SSD, его виды: на основе микросхем памяти и флеш-памяти. Сравнение производительности HDD и SDD в рабочих условиях. Способы записи информации на винчестер. Технология структурированного носителя. Суперпарамагнитный предел.
курсовая работа [53,3 K], добавлен 15.05.2012Разработка способа экономного размещения в памяти заданной разреженной таблицы. Разработка процедуры/функции, обеспечивающей доступ к элементам таблицы по номерам строки и имени столбца. Хронометраж выполнения операций чтения и записи элементов в массивы.
лабораторная работа [678,8 K], добавлен 22.12.2011Структура микропроцессорной системы. Длина объектного кода команды. Входные и выходные данные. Представление чисел в эмуляторе. Команды, работающие со стеком и памятью. Запись данных в адрес памяти. Состояние ячеек памяти. Алгоритм загрузки программы.
курсовая работа [319,1 K], добавлен 07.08.2013Динамическое распределение памяти. Анализ виртуальной памяти, алгоритм ее обращения, общие принципы защиты. Страничная организация. Особенности переключения в мультизадачный режим. Режим системного управления. Расширение размера адресного пространства.
презентация [1,3 M], добавлен 14.12.2013История появления "флешек". Устройство и технические характеристики USB-флеш-памяти, принцип ее действия, дополнительные опции и программное обеспечение, типы разъемов. Карты памяти, их виды и форматы. Способы организации записи информации в ячейку.
реферат [439,2 K], добавлен 21.12.2010Компьютерная память, ее виды и классификации. Составляющие внутренней памяти процессорной системы (постоянное и оперативное запоминающие устройства). Построение пространства памяти заданного объема. Принцип записи и чтения информации, структура памяти.
контрольная работа [609,8 K], добавлен 12.01.2015Анализ работы параллельных вычислений на видеокарте GeForce GT 540M с использованием текстурной памяти. Рассмотрение специфических особенностей по адресации текстурной памяти. Изучение основ чтения и записи данных. Описание примеров данных программ.
лабораторная работа [3,1 M], добавлен 04.12.2014Объем двухпортовой памяти, расположенной на кристалле, для хранения программ и данных в процессорах ADSP-2106x. Метод двойного доступа к памяти. Кэш-команды и конфликты при обращении к данным по шине памяти. Пространство памяти многопроцессорной системы.
реферат [28,1 K], добавлен 13.11.2009- Управление памятью. Страничная организация памяти. Сегментная организация памяти. Виртуальная память
Как осуществляется трансляция адресов при страничной организации. Что такое компактировка и как с ее помощью избавиться от внешней фрагментации. Что такое регистр таблицы страниц, сегментация. Методы распределения памяти в виде отдельных сегментов.
контрольная работа [236,2 K], добавлен 23.12.2016 Изучение понятия архивации, сжатия файлов с целью экономии памяти и размещения сжатых данных в одном архивном файле. Описания программ, выполняющих сжатие и восстановление сжатых файлов в первоначальном виде. Основные преимущества программ-упаковщиков.
контрольная работа [534,7 K], добавлен 11.01.2015Разработка драйвера под Linux, отслеживающего выделение и освобождение процессами виртуальной памяти и выделение физических страниц при страничных отказах. Компиляция драйвера и работа с ним. Экспериментальная проверка работоспособности драйвера.
курсовая работа [43,5 K], добавлен 18.06.2009Особенности разработки программы и выбор методов решения задачи. Составление алгоритма, распределение регистров программы и формирование файлов. Описание процедуры очистки памяти, сложения, вычитания, умножения. Тестирование и листинг программы.
лабораторная работа [51,2 K], добавлен 14.05.2011