Ребят, плиз срочно выручайте))) Написать программу, моделирующую динамическое распределение памяти в операционной системе. В качестве модели оперативной памяти программа должна использовать байтовый массив размера не менее 102...

Ребят, плиз срочно выручайте))) Написать программу, моделирующую динамическое распределение памяти в операционной системе. В качестве модели оперативной памяти программа должна использовать байтовый массив размера не менее 1024 байт. Использование других глобальных переменных в программе запрещено (то есть вся информация о свободных/занятых участках должна храниться внутри массива). В программе в обязательном порядке должны присутствовать следующие функции: а) выделить участок заданного размера. В случае успеха вывести начальный адрес выделенного участка. Если участка подходящего для выделения не найдено, необходимо вывести диагностическое сообщение о нехватке памяти. б) освободить ранее выделенный участок. В качестве параметра функция должна принимать начальный адрес освобождаемого участка. Ранее выделенный участок может быть освобожден только целиком (освобождение части участка не допускается). в) получить информацию о свободных/занятых участках в «оперативной памяти» (количество участков каждого типа, начальные адреса, размеры, общее количество занятой и свободной памяти). ВАРИАНТЫ ЗАДАНИЙ. Варианты заданий комбинируются из возможных способов хранения информации о свободных занятых блоках и различных алгоритмов, применяемых при выделении участка. Примерное соответствие варианта задания и указанных параметров представлено в следующей таблице: Вариант задания Алгоритм выделения Способ хранения информации 1 Первый подходящий Битовая карта 2 Наиболее подходящий Битовая карта 3 Наименее подходящий Битовая карта 4 Двоичного разбиения Битовая карта 5 Первый подходящий Список блоков 6 Наиболее подходящий Список блоков 7 Наименее подходящий Список блоков 8 Двоичного разбиения Список блоков Я 5 вариант)) заранее благодарю
Гость
Ответ(ы) на вопрос:
Гость
Вот http://pastebin.com/x5kVbW2D Подредактируй ввод вывод. или вот #include using namespace std; const int N = 1024+3; //size of "RAM"vector > ram(N); //ram int get_area(int n){    for (int i = 0; i < N-n-1 ; i ++)    {        if(ram[i].first == false)        {            int j;            for (j = i; j < i+n ; j ++ )                if(ram[j].first == true)                    break;            if (ram[j].first == true)            {                i = j;                continue;            }            for(j = i ; j < 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 && i < N-1; i ++)    {        ram[i].first = false;        ram[i].second = 0;    }    return "Success! Area deleted!";} int get_status(){    cout << endl << "Byte using of 1024 RAM:" << endl;    for(int i = 0 ; i < N-2 ; i ++)    {        if(ram[i].first == false)            cout << "-" << ' ';        else            cout << ram[i].second << ' ';    }} 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 >> s;        if (s == "get_area")        {            int n;            cin >> n;            cout << get_area(n);            cout << endl;        }        if (s == "del_area")        {            int n;            cin >> n;            cout << del_area(n);            cout << endl;        }        if (s == "get_status")        {            cout << get_status();            cout << endl;        }    }    return 0;}
Не нашли ответ?
Ответить на вопрос
Похожие вопросы