Adorana
5 год назад
Ребят, плиз срочно выручайте)))
Написать программу, моделирующую динамическое распределение памяти в операционной системе. В качестве модели оперативной памяти программа должна использовать байтовый массив размера не менее 1024 байт. Использование других глобальных переменных в программе запрещено (то есть вся информация о свободных/занятых участках должна храниться внутри массива). В программе в обязательном порядке должны присутствовать следующие функции:
а) выделить участок заданного размера. В случае успеха вывести начальный адрес выделенного участка. Если участка подходящего для выделения не найдено, необходимо вывести диагностическое сообщение о нехватке памяти.
б) освободить ранее выделенный участок. В качестве параметра функция должна принимать начальный адрес освобождаемого участка. Ранее выделенный участок может быть освобожден только целиком (освобождение части участка не допускается).
в) получить информацию о свободных/занятых участках в «оперативной памяти» (количество участков каждого типа, начальные адреса, размеры, общее количество занятой и свободной памяти).
ВАРИАНТЫ ЗАДАНИЙ.
Варианты заданий комбинируются из возможных способов хранения информации о свободных занятых блоках и различных алгоритмов, применяемых при выделении участка. Примерное соответствие варианта задания и указанных параметров представлено в следующей таблице:
Вариант задания Алгоритм выделения Способ хранения информации
1 Первый подходящий Битовая карта
2 Наиболее подходящий Битовая карта
3 Наименее подходящий Битовая карта
4 Двоичного разбиения Битовая карта
5 Первый подходящий Список блоков
6 Наиболее подходящий Список блоков
7 Наименее подходящий Список блоков
8 Двоичного разбиения Список блоков
Я 5 вариант)) заранее благодарю
ОТВЕТЫ
Leampogak
Aug 11, 2019
Вот http://pastebin.com/x5kVbW2D
Подредактируй ввод вывод.
или вот
#includelt;bits/stdc++.hgt;
using namespace std;
const int N = 1024+3; //size of "RAM"vectorlt;pairlt;bool, intgt; gt; ram(N); //ram
int get_area(int n){ for (int i = 0; i lt; N-n-1 ; i ++) { if(ram[i].first == false) { int j; for (j = i; j lt; i+n ; j ++ ) if(ram[j].first == true) break; if (ram[j].first == true) { i = j; continue; } for(j = i ; j lt; i+n ; j ++) { ram[j].first = true; ram[j].second = i; } return i; } } return -1;
}
string del_area(int n){ int j = n; for(int i = n ; ram[j].second == ram[i].second amp;amp; i lt; N-1; i ++) { ram[i].first = false; ram[i].second = 0; } return "Success! Area deleted!";}
int get_status(){ cout lt;lt; endl lt;lt; "Byte using of 1024 RAM:" lt;lt; endl; for(int i = 0 ; i lt; N-2 ; i ++) { if(ram[i].first == false) cout lt;lt; "-" lt;lt; ; else cout lt;lt; ram[i].second lt;lt; ; }}
int main(){ ///code by Dmitry Kulazhenko (DmitryCpp) ///ram index begins at 0 ///give area of RAM, size n get_area enter n ///delete area, with start index n del_area enter n ///give status of using RAM get_status ///to quit exit string s; while( s != "exit" ) { cin gt;gt; s; if (s == "get_area") { int n; cin gt;gt; n; cout lt;lt; get_area(n); cout lt;lt; endl; } if (s == "del_area") { int n; cin gt;gt; n; cout lt;lt; del_area(n); cout lt;lt; endl; } if (s == "get_status") { cout lt;lt; get_status(); cout lt;lt; endl; } } return 0;}
Подредактируй ввод вывод.
или вот
#includelt;bits/stdc++.hgt;
using namespace std;
const int N = 1024+3; //size of "RAM"vectorlt;pairlt;bool, intgt; gt; ram(N); //ram
int get_area(int n){ for (int i = 0; i lt; N-n-1 ; i ++) { if(ram[i].first == false) { int j; for (j = i; j lt; i+n ; j ++ ) if(ram[j].first == true) break; if (ram[j].first == true) { i = j; continue; } for(j = i ; j lt; i+n ; j ++) { ram[j].first = true; ram[j].second = i; } return i; } } return -1;
}
string del_area(int n){ int j = n; for(int i = n ; ram[j].second == ram[i].second amp;amp; i lt; N-1; i ++) { ram[i].first = false; ram[i].second = 0; } return "Success! Area deleted!";}
int get_status(){ cout lt;lt; endl lt;lt; "Byte using of 1024 RAM:" lt;lt; endl; for(int i = 0 ; i lt; N-2 ; i ++) { if(ram[i].first == false) cout lt;lt; "-" lt;lt; ; else cout lt;lt; ram[i].second lt;lt; ; }}
int main(){ ///code by Dmitry Kulazhenko (DmitryCpp) ///ram index begins at 0 ///give area of RAM, size n get_area enter n ///delete area, with start index n del_area enter n ///give status of using RAM get_status ///to quit exit string s; while( s != "exit" ) { cin gt;gt; s; if (s == "get_area") { int n; cin gt;gt; n; cout lt;lt; get_area(n); cout lt;lt; endl; } if (s == "del_area") { int n; cin gt;gt; n; cout lt;lt; del_area(n); cout lt;lt; endl; } if (s == "get_status") { cout lt;lt; get_status(); cout lt;lt; endl; } } return 0;}
106
Смежные вопросы: