Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Алгоритм NRU


Автор: NFL 24.11.2010, 16:08
Собственно, курсовой проект по теме: Алгоритм вытеснения страниц NRU.
Теорию по этому алгоритму я более-менее понимаю, а вот практически его применить.. Пока не представляю как...

Задача звучит так:
Разработать программу моделирования указанного алгоритмавытеснения страниц из оперативной памяти.
Предполагается, что в память, поделенную на определенное количество страничных кадров, последовательно нужно загрузить опеределенное количество страниц.

Количество страничных кадров: 2-20, количество страниц: 2-40

В ходе работы программы необходимо графически отображать:
- Содержимое памяти (какая страница в какой кадр загружена)
- Моменты страничных отказов
- Предусмотреть использование кластеризации
Обращение к страницам - в произвольном порядке, предусмотреть возможность чтения списка обращений из файла.

PS: за меня решать не прошу, прошу подкинуть ссылки на литературу, или показать пример, если  у кого вдруг такое уже было и авалялось, и не жаль поделиться smile 

Заранее спасибо всем отозвавшимся smile  smile  smile 

Автор: xvr 24.11.2010, 18:26
Цитата(NFL @  24.11.2010,  16:08 Найти цитируемый пост)
Теорию по этому алгоритму я более-менее понимаю, 
Тогда в чем проблема 
Цитата(NFL @  24.11.2010,  16:08 Найти цитируемый пост)
практически его применить..
?
Цитата(NFL @  24.11.2010,  16:08 Найти цитируемый пост)
подкинуть ссылки на литературу
От Гугла отключили? 
виртуальная память NRU - 268 результатов
Прямо из первой же ссылки:
Цитата

NRU (Not Recently Used) — Не использовавшаяcя в последнее время страница

С каждой страницей связаны два бита — R (Referenced — обращения), устанавливается всякий раз при обращении и бит M (Modified — изменение), устанавливается, когда страница изменяется. Эти биты могут использоваться для реализации простого алгоритма. Когда процесс запускается, оба страничных бита для всех его страниц установлены в 0.

Когда происходит страничное прерывание, ОС проверяет все страницы и делит их на четыре класса:

    * Класс 0: не было обращений и изменений.
    * Класс 1: не было обращений, страница изменена.
    * Класс 2: было обращение, страница изменена.
    * Класс 3: было обращение и изменение. 

Алгоритм NRU удаляет случайную страницу из непустой группы с наименьшим номером. 


PS. При чем тут Системное програмирование и WinAPI?

Автор: NFL 24.11.2010, 19:01
Цитата(xvr @  24.11.2010,  18:26 Найти цитируемый пост)
При чем тут Системное програмирование и WinAPI?


При том что дисциплина - системное программное обеспечение smile 


Автор: NFL 6.12.2010, 14:35
Вот почитал теорию...

Можно ли представить страницу как 
Код

struct Page
{
bool M;
bool R;
int size;
};


потом в основной программе создавать массив типа Page p[x], выделять под каждый элемент при помощи GlobalAlloc память (4096 байт), где х - число в диапазоне 2-40, случайным способом генерировать список обращений, прерываний и вытеснение? будет ли это все достаточной демонстрацией алгоритма?

Автор: GremlinProg 6.12.2010, 15:04
Код

union Page
{
  struct{
    BYTE M : 1;
    BYTE R : 1;
  };
  BYTE Class : 2;
};

случайно тут будет только 3 параметра
1. диапазон, по которому производится обращение
2. тип операции: чтение, запись 
3. начальные классы этих страниц

для полноценного моделирования, нужно задать еще число физических страниц в наличии,
чтобы знать, когда записывать на диск страницу (сбрасывать флаг M),
т.е. должно быть еще сопоставление вирт к физ страницам,
это можно делать дополнительным флагом в вирт. странице и глобальным счетчиком занятых страниц,
физически ведь не стоит задача моделировать чтение/запись

все остальное вполне закономерно:
1. списки формируются исходя из количества и текущих классов страниц
2. удаление производится в момент обращения к неотображенной странице
3. выгрузка (на диск) - либо в момент когда заканчиваются физические страницы, либо когда их количество достигает какого-то порога

Автор: dffc 1.12.2011, 11:48
ОЧЕНЬ нужен код для этого алгоритма. Никто не поделится?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)