|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Распределение памяти. Алгоритм
Написать программу, моделирующую динамическое распределение памяти в операционной системе. В качестве модели оперативной памяти программа должна использовать байтовый массив размера не менее 1024 байт. Использование других глобальных переменных в программе запрещено (то есть вся информация о свободных/занятых участках должна храниться внутри массива). В программе в обязательном порядке должны присутствовать следующие функции:
а) выделить участок заданного размера. В случае успеха вывести начальный адрес выделенного участка. Если участка подходящего для выделения не найдено, необходимо вывести диагностическое сообщение о нехватке памяти. б) освободить ранее выделенный участок. В качестве параметра функция должна принимать начальный адрес освобождаемого участка. Ранее выделенный участок может быть освобожден только целиком (освобождение части участка не допускается). в) получить информацию о свободных/занятых участках в «оперативной памяти» (количество участков каждого типа, начальные адреса, размеры, общее количество занятой и свободной памяти). Условие!!! Алгоритм выделения - наиболее подходящий; способ хранения информации - список блоков !!! Устно это я понимаю так: потребуется объявить массив типа Byte и размерностью [0..1023] Потом сделать еще один массив, в котором будут храниться начальные координаты занятых участков памяти и их длина. Потом сделать функцию, в которую задают необходимый размер памяти, и которая пробегает по массиву в поисках незанятого участка. Потом сделать процедуру, которая будет высвобождать память. Потом сделать функцию, которая выводит информацию об участке памяти по его начальному значению Потом сделать функцию, которая выводит информацию по всем участкам памяти. Итого, два массива (один из них динамический), три функции и одна процедура. Необходимо сделать это в среде Delphi 7. Алгоритм,сказали, должен быть создан через консольное приложения. Помогите с кодом, пожалуйста. Заранее спасибо! |
#2
|
||||
|
||||
Массив должен быть только один!!!
Цитата:
Пишу программы за еду. __________________ |
#3
|
|||
|
|||
Распределение памяти. Алгоритм
Хорошо, уже что-то. А можно пример процедуры/функции, которая выводит информацию об участке памяти по его начальному значению?
|
#4
|
|||
|
|||
Тут в задании несоответствие.
с одной стороны - массив байт. С другой - "способ хранения информации - список блоков" Т.е. либо у нас список, либо массив. Хотя тут может быть такое: физическая память представляется массивом (одним), а вот информация менеджера памяти хранится в виде списка блоков. Т.е. на самом деле 2 массива. |
#5
|
||||
|
||||
Ну вот физическая память в ПК как-то уже несколько десятилетий обходится одним массивом байт и ведь все работает Никто в этом задании не запрещает хранить таблицу менеджера памяти в том же массиве. А еще есть дисковые устройства...
Пишу программы за еду. __________________ |
#6
|
||||
|
||||
Ну самое простое — зацапать первые (1 + block_size/total_size байт)/8, где каждый бит будет определять признак занятости блока памяти.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию Последний раз редактировалось M.A.D.M.A.N., 06.11.2016 в 09:20. |
#7
|
||||
|
||||
Чтобы при освобождении памяти не заморачиваться с выделенным объемом придется хранить таблицу: начальный адрес, размер.
Код:
procedure GetMem(var P: Pointer; Size: Integer); procedure FreeMem(var P: Pointer); Пишу программы за еду. __________________ |
#8
|
|||
|
|||
Да, в условии небольшое несоответствие: информация должна храниться в виде списка блоков.
|
#9
|
|||
|
|||
То есть, у нас должен быть массив блока памяти 1..1024 и структурная запись в которой хранится начальный адрес памяти и его длина ? Ну а дальше я должен буду создать глобальные функции/процедуры для работы с памятью, так ли?
|
#10
|
|||
|
|||
ну, получается, что так.
А у препода разъяснения спросить? |
#11
|
|||
|
|||
Не, у препода никак не спросить: он ничего не говорит. Можно пример кода, как создать этот массив вместе с записью?
|
#12
|
||||
|
||||
Код:
var LHeap: array [0..1023] of Byte; Пишу программы за еду. __________________ |
#13
|
|||
|
|||
Ну а структурная запись в которой хранится начальный адрес памяти и его длина? Это же уже в разделе type?
|
#14
|
||||
|
||||
Код:
type TStruct = record — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#15
|
|||
|
|||
NumLock, ты же пишешь проги за еду) Я могу покормить тебя в приложение в ВК, если сделаешь эту прогу) Это задание мне, пока что, не по уровню. Теоретически я понял что нужно сделать, но реализовать сам код я точно не смогу. Хотя бы в самом коротком виде
|