Динамическое выделение оперативной памяти - Программирование, компьютеры и кибернетика курсовая работа

Главная
Программирование, компьютеры и кибернетика
Динамическое выделение оперативной памяти
Применение программы-имитатора динамического распределения оперативной памяти, выполнение ее на ОС Windows 7 в интегрированной среде. Разработка приложений с графическим интерфейсом Delphi XE3. Автоматическая загрузка, исполнение и добавление процессов.
посмотреть текст работы
скачать работу можно здесь
полная информация о работе
весь список подобных работ
Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ТРАНСПОРТА РОСИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА
ГОСУДАРСТВЕННОЕОБРАЗОВАТЕЛЬНОЕ УЧЕРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГООБРАЗОВАНИЯ
СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПУТЕЙ СООБЩЕНИЯ
Кафедра «Информационные технологии транспорта»
По дисциплине «Операционные системы»
Тема: «Динамическое выделение в оперативной памяти»
1. Динамическое выделение в оперативной памяти
2. Имитатор динамического выделения оперативной памяти
Программа-имитатор динамического распределения оперативной памяти выполнена на ОС Windows 7 в интегрированной среде разработки приложений с графическим интерфейсом Delphi XE3. В работе применены знания, полученные при изучении курса «Операционные системы, среды и оболочки». Данная программа наглядно показывает процесс динамического распределения процессов в оперативной памяти, фрагментацию оперативной памяти, работу программного объекта «сжатие» и пошаговое представление распределения процессов с заданными параметрами.
1. Динамическое выделение в оперативной памяти
В этом случае память машины не делится заранее на разделы. Сначала вся память свободна. Каждой вновь поступающей задаче выделяется необходимая ей память. Если достаточный объем памяти отсутствует, то задача не принимается на выполнение и стоит в очереди. После завершения задачи память освобождается, и на это место может быть загружена другая задача. Таким образом, в произвольный момент времени оперативная память представляет собой случайную последовательность занятых и свободных участков (разделов) произвольного размера. На рисунке 1 показано состояние памяти в различные моменты времени при использовании динамического распределения. Так в момент t0 в памяти находится только ОС, а к моменту t1 память разделена между 5 задачами, причем задача П4, завершаясь, покидает память. На освободившееся после задачи П4 место загружается задача П6, поступившая в момент t3.
Рис. 1. Распределение памяти динамическими разделами
Задачами операционной системы при реализации данного метода управления памятью является:
· ведение таблиц свободных и занятых областей, в которых указываются начальные адреса и размеры участков памяти,
· при поступлении новой задачи - анализ запроса, просмотр таблицы свободных областей и выбор раздела, размер которого достаточен для размещения поступившей задачи,
· загрузка задачи в выделенный ей раздел и корректировка таблиц свободных и занятых областей,
· после завершения задачи корректировка таблиц свободных и занятых областей.
Программный код не перемещается во время выполнения, то есть может быть проведена единовременная настройка адресов посредством использования перемещающего загрузчика.
Выбор раздела для вновь поступившей задачи может осуществляться по разным правилам, таким, например, как "первый попавшийся раздел достаточного размера", или "раздел, имеющий наименьший достаточный размер", или "раздел, имеющий наибольший достаточный размер". Все эти правила имеют свои преимущества и недостатки.
По сравнению с методом распределения памяти фиксированными разделами данный метод обладает гораздо большей гибкостью, но ему присущ очень серьезный недостаток - фрагментация памяти. Фрагментация - это наличие большого числа несмежных участков свободной памяти очень маленького размера (фрагментов). Настолько маленького, что ни одна из вновь поступающих программ не может поместиться ни в одном из участков, хотя суммарный объем фрагментов может составить значительную величину, намного превышающую требуемый объем памяти.
Одним из методов борьбы с фрагментацией является перемещение всех занятых участков в сторону старших либо в сторону младших адресов, так, чтобы вся свободная память образовывала единую свободную область (рисунок 2). В дополнение к функциям, которые выполняет ОС при распределении памяти переменными разделами, в данном случае она должна еще время от времени копировать содержимое разделов из одного места памяти в другое, корректируя таблицы свободных и занятых областей. Эта процедура называется "сжатием". Сжатие может выполняться либо при каждом завершении задачи, либо только тогда, когда для вновь поступившей задачи нет свободного раздела достаточного размера. В первом случае требуется меньше вычислительной работы при корректировке таблиц, а во втором - реже выполняется процедура сжатия. Так как программы перемещаются по оперативной памяти в ходе своего выполнения, то преобразование адресов из виртуальной формы в физическую должно выполняться динамическим способом.
Рис. 2. Распределение памяти перемещаемыми разделами
Хотя процедура сжатия и приводит к более эффективному использованию памяти, она может потребовать значительного времени, что часто перевешивает преимущества данного метода.
2. Имитатор динамического выделения оперативной памяти
Данная программа позволяет имитировать процесс динамического выделения оперативной памяти и визуально показывает процесс заполнения оперативной памяти, сжатия и освобождения.
Используется динамический массив. При нажатии кнопки старт создается запись. В записи присутствуют переменные Imya - имя процесса, PID -номер процесса, Razmer - размер процесса, prohoj - переменная, показывающая количество перемещений процесса при дефрагментации, cr, sin, zel - случайные переменные для задания цвета процесса. Затем в визуальном представлении рисуется прямоугольник с цветом процесса, и подписью, размерность которого рассчитывается относительно всего свободного пространства, размерность которого взята за 100%. Далее идет процесс дефрагментации. Если новый процесс, добавляемый после предыдущего, не помещается в остаток оперативной памяти, то происходит дефрагментация, при которой все процессы заново ставятся в начало один за другим. Далее идет запись нового процесса в таблицу процессов. Далее идет цикл, который содержит перезапись таблицы процессов, удаление процессов и таймер процессов.
Процесс перезаписи таблицы существует для того чтобы при завершении процесса и удалении его из таблицы, его место занималось еще не выполненным процессом. Осуществляется это путем проверки таблицы на наличие пустых ячеек и, при их наличии, записи в них процессов, располагающихся ниже. После, идет удаление процессов. При переменной stat принадлежащей «процессу», равной “end” процесс считается завершенным и удаляется из таблицы процессов, путем заполнения ячеек «». Если же переменная stat не равна end и процесс выполняется ИЛИ возможность выполнения процесса меньше, чем случайное число, генерируемое перед циклом, то переменная vremya убавляется на 1(с) и соответствующая строка в таблице переписывается. Дальше идет удаление процесса из визуальной области. Удаление происходит при тех же условиях, что и удаление из таблицы. Прямоугольник удаленного процесса закрашивается таким же прямоугольником белого цвета. Далее идет расчет параметров для statusbar который показывает количество свободной и занятой оперативной памяти.
В ручном режиме используются те же процедуры, что и в автоматическом, с той лишь разницей, что они не зациклены.
Автоматическая загрузка и исполнение процессов
StringGrid1.cells[1,0]:='Название процесса';
StringGrid1.cells[2,0]:='Pазмер процесса(Байт)';
StringGrid1.cells[3,0]:='Bремя выполнения';
StringGrid1.cells[4,0]:='Адрес в ОП';
process[i].Adress:=inttostr(round(poz));
opraz:=opraz+strtoint(process[i].Razmer);
brush.Color:=RGB(process[i].cr, process[i].sin, process[i].zel);
Rectangle( Bounds(0, poz1, 400,prcent1 ));
TextOut(10, poz1+1, process[i].Imya);
if process[h].stat <> 'end' then begin
opraz:=opraz+strtoint(process[h].Razmer);
prcent:=(strtoint(process[h].Razmer)/(razmerpam/100))*5;
process[h].Adress:=inttostr(round(poz));
razm:= ((strtoint(process[h].Razmer))/(razmerpam/100))*5 ;
brush.Color:=RGB( process[h].cr, process[h].sin, process[h].zel);
Rectangle( Bounds(0, strtoint(process[h].adress), 400,razm1));
TextOut(10, strtoint(process[h].adress)+1, process[h].Imya);
StringGrid1.cells[4,process[h].pid]:=process[h].adress ;
end else begin MessageDlg('Память переполнена.', mtWarning, [mbOk],0);
StringGrid1.RowCount:= stringgrid1.rowcount+1;
StringGrid1.cells[1,i]:=process[i].imya;
StringGrid1.cells[2,i]:=process[i].razmer;
StringGrid1.cells[3,i]:=process[i].vremya;
StringGrid1.cells[4,i]:=process[i].adress;
if (StringGrid1.cells[1,process[h].pid-1]='') and (process[h].stat<>'end') then begin
StringGrid1.cells[1,process[h].pid-1]:= process[h].Imya ;
StringGrid1.cells[2,process[h].pid-1]:=process[h].Razmer ;
StringGrid1.cells[3,process[h].pid-1]:=process[h].vremya ;
StringGrid1.cells[4,process[h].pid-1]:=process[h].adress ;
StringGrid1.cells[1,process[h].pid]:='';
StringGrid1.cells[2,process[h].pid]:='';
StringGrid1.cells[3,process[h].pid]:='';
StringGrid1.cells[4,process[h].pid]:='';
if (process[h].stat<>'end') and (strtoint(process[h].vremya)=0) then begin
StringGrid1.cells[1,process[h].pid]:='';
StringGrid1.cells[2,process[h].pid]:='';
StringGrid1.cells[3,process[h].pid]:='';
StringGrid1.cells[4,process[h].pid]:='';
if (process[h].stat<>'end') and (strtoint(process[h].vremya)>0) then begin
if (process[h].ran > rand) or (process[h].ran_1=1) {or (kran>0)} then begin
process[h].Vremya:=inttostr(strtoint(process[h].vremya)-1);
StringGrid1.cells[3,process[h].pid]:=process[h].vremya
if (process[h].stat = 'end') and (process[h].prohoj = proh) then
razm:= (strtoint(process[h].Razmer)/(razmerpam/100))*5 ;
Rectangle( Bounds(0, strtoint(process[h].adress), 400,razm1));
sump:=strtoint(process[j3].Razmer)+sump;
statusbar1.Panels.items[0].text:='Свободно памяти: '+inttostr(strtoint(edit1.Text)-sump)+' Mb';
statusbar1.Panels.items[1].text:='Занято памяти: '+inttostr(sump)+' Mb'
программа оперативный память интерфейс
StringGrid1.cells[1,0]:='Название процесса';
StringGrid1.cells[2,0]:='Pазмер процесса (Байт)';
StringGrid1.cells[3,0]:='Bремя выполнения';
StringGrid1.cells[4,0]:='Адрес в ОП';
if edit3.text ''then process[i].Razmer:=edit3.text else process[i].Razmer:=inttostr(j);
if edit2.text then process[i].Vremya:=edit2.text else process[i].Vremya:=str_2;
if edit4.text then process[i].ran:=strtoint(edit4.text) else process[i].ran:=random(99)+1;
prcent:=(strtoint(process[i].Razmer)/(razmerpam/100))*5;
process[i].Adress:=inttostr(round(poz));
opraz:=opraz+strtoint(process[i].Razmer);
brush.Color:=RGB(process[i].cr, process[i].sin, process[i].zel);
Rectangle( Bounds(0, poz1, 400,prcent1 ));
TextOut(10, poz1+1, process[i].Imya);
if process[h].stat <> 'end' then begin
opraz:=opraz+strtoint(process[h].Razmer);
prcent:=(strtoint(process[h].Razmer)/(razmerpam/100))*5;
process[h].Adress:=inttostr(round(poz));
razm:= ((strtoint(process[h].Razmer))/(razmerpam/100))*5 ;
brush.Color:=RGB( process[h].cr, process[h].sin, process[h].zel);
Rectangle( Bounds(0, strtoint(process[h].adress), 400,razm1));
end else begin MessageDlg('Память переполнена.', mtWarning, [mbOk],0);
StringGrid1.RowCount:= stringgrid1.rowcount+1;
StringGrid1.cells[1,i]:=process[i].imya;
StringGrid1.cells[2,i]:=process[i].razmer;
StringGrid1.cells[3,i]:=process[i].vremya;
StringGrid1.cells[4,i]:=process[i].adress;
sump:=strtoint(process[j3].Razmer)+sump;
statusbar1.Panels.items[0].text:='Свободно памяти: '+inttostr(strtoint(edit1.Text)-sump)+' Mb';
statusbar1.Panels.items[1].text:='Занято памяти: '+inttostr(sump)+' Mb'
StringGrid1.cells[1,0]:='Название процесса';
StringGrid1.cells[2,0]:='Pазмер процесса(Байт)';
StringGrid1.cells[3,0]:='Bремя выполнения';
StringGrid1.cells[4,0]:='Адрес в ОП';
if process[i1].PID =StringGrid1.Row then h:=i1;
for i1:=1 to strtoint(process[h].Vremya)+1 do begin
if (process[h].stat<>'end') and (strtoint(process[h].vremya)=0) then begin
StringGrid1.cells[1,process[h].pid]:='';
StringGrid1.cells[2,process[h].pid]:='';
StringGrid1.cells[3,process[h].pid]:='';
StringGrid1.cells[4,process[h].pid]:='';
if process[j2].ran_1 <> 0 then kran:= kran+1;
if (process[h].stat<>'end') and (strtoint(process[h].vremya)>0) then begin
if (process[h].ran < rand) or (process[h].ran_1=1) then begin
process[h].Vremya:=inttostr(strtoint(process[h].vremya)-1);
StringGrid1.cells[3,process[h].pid]:=process[h].vremya
if (process[h].stat = 'end') and (process[h].prohoj = proh) then
razm:= (strtoint(process[h].Razmer)/(razmerpam/100))*5 ;
Rectangle( Bounds(0, strtoint(process[h].adress), 400,razm1));
sump:=strtoint(process[j3].Razmer)+sump;
statusbar1.Panels.items[0].text:='Свободнопамяти: '+inttostr(strtoint(edit1.Text)-sump)+' Mb';
statusbar1.Panels.items[1].text:='Занято памяти: '+inttostr(sump)+' Mb'
randomize; with StringGrid1 do begin
2) Внештатный режим работы программы. Возникает при переполнении оперативной памяти и отсутствии места для поступающих процессов.
Динамическое распределение оперативной памяти хотя и являлось прогрессивной находкой для своего времени, но полностью не удовлетворяло пользователей ПК, как из-за фрагментации памяти, вызывающей потерю пространства оперативной памяти, так и из-за невозможности использования дискового пространства. Пусть данная система и не применяется в настоящее время, она достойно заняла свое место в истории развития вычислительной техники и дала множество идей разработчикам следующих систем работы с памятью.
Стратегии размещения информации в памяти. Алгоритмы распределения адресного пространства оперативной памяти. Описание характеристик модели и ее поведения, классов и элементов. Выгрузка и загрузка блоков из вторичной памяти. Страничная организация памяти. курсовая работа [708,6 K], добавлен 31.05.2013
Улучшение параметров модулей памяти. Функционирование и взаимодействие операционной системы с оперативной памятью. Анализ основных типов, параметров оперативной памяти. Программная часть с обработкой выполнения команд и размещением в оперативной памяти. курсовая работа [99,5 K], добавлен 02.12.2009
Классификация компьютерной памяти. Использование оперативной, статической и динамической оперативной памяти. Принцип работы DDR SDRAM. Форматирование магнитных дисков. Основная проблема синхронизации. Теория вычислительных процессов. Адресация памяти. курсовая работа [1,5 M], добавлен 28.05.2016
Обобщение основных видов и назначения оперативной памяти компьютера. Энергозависимая и энергонезависимая память. SRAM и DRAM. Триггеры, динамическое ОЗУ и его модификации. Кэш-память. Постоянное запоминающее устройство. Флэш-память. Виды внешней памяти. курсовая работа [1,7 M], добавлен 17.06.2013
История появления и развития оперативной памяти. Общая характеристика наиболее популярных современных видов оперативной памяти - SRAM и DRAM. Память с изменением фазового состояния (PRAM). Тиристорная память с произвольным доступом, ее специфика. курсовая работа [548,9 K], добавлен 21.11.2014
Распределение оперативной памяти фиксированными, динамическими и перемещаемыми разделами. Распределение с использованием внешней памяти. Принципы рaботы матричного принтера. Проектирование символов и разработка программы, реализующей их вывод на печать. курсовая работа [241,3 K], добавлен 01.07.2011
Простейшая схема взаимодействия оперативной памяти с ЦП. Устройство и принципы функционирования оперативной памяти. Эволюция динамической памяти. Модуль памяти EDO-DRAM BEDO (Burst EDO) - пакетная EDO RAM. Модуль памяти SDRAM, DDR SDRAM, SDRAM II. реферат [16,1 K], добавлен 13.12.2009
Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д. PPT, PPTX и PDF-файлы представлены только в архивах. Рекомендуем скачать работу .
© 2000 — 2021
Динамическое выделение оперативной памяти курсовая работа. Программирование, компьютеры и кибернетика.
Сочинение по теме Жанровое своеобразие Чеховских пьес
Курсовая работа по теме Земельно-хозяйственное устройство территории населенных пунктов
Курсовая работа по теме Создание модели 'Ёжик Соник'
Автореферат На Тему Лімфоцитопосередковані Механізми За Умов Хронічної Гіперімунокомплексемії Та Вплив На Них Корвітину В Експерименті
Реферат: Анализ конкурентных преимуществ на мировом рынке пассажирского самолетостроения
Курсовая работа по теме Родительское собрание в дошкольном образовательном учреждении
Реферат: Сущность неоконсерватизма
Контрольная Работа По Русскому По Падежам
Курсовая Работа На Тему Феминизм В России: Культурные Аспекты
Искусство Средних Веков 10 Класс Реферат
Дипломная работа по теме Виктимность несовершеннолетних и ее профилактика
Курсовая работа по теме Расчет ходкости судна и подбор пропульсивного комплекса
Курсовая работа по теме Розрахунок трьохфазного мостового випрямляча
Кто Же Иуда Победитель Или Побежденный Сочинение
Курсовая работа по теме Международные и региональные компании по стандартизации
Дипломная работа: Инструментарий маркетинга в деятельности фирмы. Скачать бесплатно и без регистрации
Реферат: Solar Energy Essay Research Paper Solar EnergyThis
Конфликт На Северном Кавказе Реферат
Дипломная работа по теме Продуктивность сортов подсолнечника в зависимости от способов и норм посева в условиях Новоузенского района Саратовской области
Реферат На Тему Парогазовые Теплофикационные Установки
Совершенствование организации системы сбыта на примере ООО "ПКО "Челси" - Маркетинг, реклама и торговля дипломная работа
Псевдонауки - Биология и естествознание реферат
Автоматизированные системы защиты информации - Программирование, компьютеры и кибернетика курс лекций