Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
-3 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 14
1

Разработать модуль подкачки с визуализацией процесса подкачки страниц или сегментов

18.12.2012, 06:36. Показов 3150. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток! я уже полмесяца не могу разобраться с этой задачей, может кто-нибудь в курсе как реализовать, задание такое:
1. Разработать 2 рабочих процесса, имитирующих обработку некоторой информации с обращением к сегментированному массиву данных.
2. Реализовать диспетчер памяти с сегментным или страничным способом размещения в памяти с имитацией нехватки физического пространства для размещения всего массива.
3. Разработать модуль подкачки с визуализацией процесса подкачки страниц или сегментов.
4. В качестве стратегии размещения и замещения выбрать следующий вариант:
а) стратегия размещения (только для сегментов) - поиск свободного места в ОП для подгрузки нового сегмента
- первый подходящий
- наиболее подходящий
- наименее подходящий
Программу нужно реализовать в Visual Studio 2008 в консольном приложении)))

Добавлено через 1 час 15 минут
помогите кто нить!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.12.2012, 06:36
Ответы с готовыми решениями:

Физическая память или файл подкачки
Вчера столкнулся с такой проблемой. Начнём с характеристик моего компа. Проццесор Intel core 2...

Файл подкачки
настроил ssd диск с отключением файла подкачки ,в игре world of airplanes вылетает окно что...

Файл подкачки
Добрый день имею 16 гб озу, использую максимум 8-12 гб и то крайне редко, комп используется для...

Файл подкачки
как можно оптимально изменить файл подкачки у меня 3Гб озу какой поставить исходный и максимальный...

16
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
18.12.2012, 08:06 2
Цитата Сообщение от eremeeva14 Посмотреть сообщение
1. Разработать 2 рабочих процесса, имитирующих обработку некоторой информации с обращением к сегментированному массиву данных.
непонятно

Цитата Сообщение от eremeeva14 Посмотреть сообщение
2. Реализовать диспетчер памяти с сегментным или страничным способом размещения в памяти с имитацией нехватки физического пространства для размещения всего массива.
Сегментная модель - есть сегмент памяти, размер которого - константа., допустим 64 КБ. Обращение к памяти происходит так
сегмент:смещение. Если смещение превышает размер сегмента - исключение.
Страничная модель - если по минимому, то должна быть хотя бы одна таблица страниц, которая содержит указатели на страницы. Страница - кусока памяти размером, например, 64 КБ. Если не по простому, то каталог стрниц -> таблица страниц -> страница (или каталог каталогов (PML4) -> каталог страниц -> таблица страниц -> страница). При этом адрес делится на 3 (4) части, например адрес перменной 0x12345678 - это 0х12 - адрес + флаги таблицы страниц в каталоге, 0х34 - адрес + флаги страницы в таблице страниц, 0х5678 - смещение на странице. Указатель на каталог верхнего уровня хрянится где-нибудь в отведенной памяти (например для porotected, compatibility и long mode он хранится в регистре CR3, но в случае имитации можно просто создать переменную для этого). Под флаги (которые в адресах каталогов/страниц) отводится несколько бит, они могут означать например доступность чтения/записи/исполнения и т.д. Если происходит нарушение прав доступа или катлог/таблица/станица не мапирована (не отображена) - исключение (процессор кидает исключение #PF (page fault)). Вот, как-то так.

Цитата Сообщение от eremeeva14 Посмотреть сообщение
3. Разработать модуль подкачки с визуализацией процесса подкачки страниц или сегментов.
В адресах каталогов/таблиц есть флаг присутствия страницы в памяти. Если этот флаг не выставлен, то происходит исключение и в обработчике исключения страница подкачивается, если подкачка не возможно, то еще одно исключение. Короче в твоем случае нужно сделать этот флаг, рандомно выставлять его и имитировать подкачку.
Цитата Сообщение от eremeeva14 Посмотреть сообщение
. В качестве стратегии размещения и замещения выбрать следующий вариант:
а) стратегия размещения (только для сегментов) - поиск свободного места в ОП для подгрузки нового сегмента
- первый подходящий
- наиболее подходящий
- наименее подходящий
Не совсем понятно, похоже ОП тоже нужно имитировать. Подходящий, неподходящий думаю зависит от того, выровнен ли кусок памяти, его расположение относительно сегмента и т.д. Думаю у тебя есть методичка в которой описаны эти критерии.
2
-3 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 14
18.12.2012, 09:14  [ТС] 3
мне код нужен на С++
0
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
18.12.2012, 09:39 4
Цитата Сообщение от eremeeva14 Посмотреть сообщение
мне код нужен на С++
так изначально вопрос стоял вот так
Цитата Сообщение от eremeeva14 Посмотреть сообщение
может кто-нибудь в курсе как реализовать,
в курсе, о чем и написал выше.

По поводу кода - тут работы на целый день, если все грамотно делать (ну может на пол дня, если все сразу заработает ). Поэтому думаю есть смысл переместить тему во фриланс.
0
-8 / 3 / 0
Регистрация: 01.06.2012
Сообщений: 108
18.12.2012, 17:56 5
Переместить во ФЛИРАНС, как это сделать??

Добавлено через 3 часа 21 минуту
Есть еще кто-нибудь, кто сможет помочь в написании кода???
0
Почетный модератор
21413 / 9147 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
18.12.2012, 18:38 6
Цитата Сообщение от kirya Посмотреть сообщение
Переместить во ФЛИРАНС
Если Вы не знаете, что такое Фриланс - лучше подумайте еще раз.
Это платный раздел, где Вам решают задачи практически любой сложности, но учтите, что за это Вам придется платить деньги, и, скорее всего, 500 рублями Вы не отделаетесь
0
-8 / 3 / 0
Регистрация: 01.06.2012
Сообщений: 108
20.12.2012, 12:15 7
Кто-нибудь может еще что-то подсказать???
Здесь не нужна суперпрограмма, а небольшой код, всего лишь d консольном приложении Visual Studio 2008. Просто показать как работает механизм виртуальной памяти.

Добавлено через 23 часа 55 минут
Есть ли кто-нибудь знающий данный материал???
0
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
20.12.2012, 13:15 8
Цитата Сообщение от kirya Посмотреть сообщение
Есть ли кто-нибудь знающий данный материал???
Что именно интересует?
0
-8 / 3 / 0
Регистрация: 01.06.2012
Сообщений: 108
20.12.2012, 14:03 9
Интересует конкретно реализация на C++ в Visual Studio 2008 в консольном приложении, не знаю как написать код...
0
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
20.12.2012, 15:28 10
Цитата Сообщение от kirya Посмотреть сообщение
Интересует конкретно реализация на C++ в Visual Studio 2008 в консольном приложении, не знаю как написать код...
Всмысле объяснить как создавать, компилировать и запускать консольные приложения в Visual Studio 2008 ?
0
vxg
20.12.2012, 15:45
  #11

Не по теме:

*ишь, Kastaneda, как тонко измывается :)*

0
-8 / 3 / 0
Регистрация: 01.06.2012
Сообщений: 108
20.12.2012, 16:08 12
в смысле конкретно код программы написать и его объяснить)))
0
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
20.12.2012, 19:01 13

Не по теме:

Если на выходных будет время и желаение - может что-нибудь напишу, но пока ни чего не обещаю.


По подобным вопросам советую сайт, в частности раздел paging.

Добавлено через 11 минут

Не по теме:

Блин, залез на нашу википедию по этому вопросу, пришлось страницу немного подправить :)

1
-8 / 3 / 0
Регистрация: 01.06.2012
Сообщений: 108
21.12.2012, 12:08 14
Kastaneda, будем очень благодарны тебе если ты поможешь нам написать код)))
Там сильно замудренного ничего такого не нужно, просто в консольном приложении VS 2008 на цифрах все это показать как нибудь)))
0
Kastaneda
21.12.2012, 13:08
  #15

Не по теме:

Цитата Сообщение от kirya Посмотреть сообщение
Там сильно замудренного ничего такого не нужно
Там не "замудрено" не получится:)

0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12736 / 7566 / 1764
Регистрация: 25.07.2009
Сообщений: 13,954
21.12.2012, 18:09 16
Цитата Сообщение от kirya Посмотреть сообщение
Здесь не нужна суперпрограмма, а небольшой код, всего лишь d консольном приложении Visual Studio 2008. Просто показать как работает механизм виртуальной памяти.
А "суперпрограмма" - это когда с окошками и красивыми кнопочками?

Цитата Сообщение от Kastaneda Посмотреть сообщение
По поводу кода - тут работы на целый день, если все грамотно делать (ну может на пол дня, если все сразу заработает ).
Круто! Я бы значительно дольше провозился, хотя честно говоря раньше этим и не занимался, просто примерно в курсе, как оно бывает. Но учитывая объём и сложность работы, думаю, однокурсники этим чуть-ли не с 1 сентября озадачивались. Так, что, заказать во фрилансе - видимо лучший выход. Вас же двое, ну скиньтесь - дешевле выйдет. При всём уважении к Kastaneda, убивать просто так на это задание целый выходной (а то и два, если сразу не заработает ) - какое-то сомнительное удовольствие...
0
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
22.12.2012, 13:37 17
Короче вот что-то набросал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#include <iostream>
 
// следующие typedef'ы лучше реализовать через структуры с битовыми полями
// но для простоты сделаем так
typedef unsigned char byte;
typedef unsigned short word; // при условии, что sizeof(short) == 2
typedef unsigned int dword; // при условии, что sizeof(int) == 4
typedef long long unsigned int qword; //при условии, что sizeof(long long int) == 8;
 
class Page
{
public:
    unsigned char& operator[] (int idx)
    {
        return page[idx];
    }
 
private:
    static const int pageSize = 4 * 1024; // размер страницы 4 КБ (бывают и другие, добавить при необходимости)
    unsigned char page[pageSize];
};
 
class PGEntries
{
public:
    static const int tableSize = 1024; // в случае использования PAE или имитации х86_64 размер будет равен 512
 
    virtual ~PGEntries() {}
 
protected:
   // добавить маски флагов для проверки различных вещей, например разрешение на чтение/запись
};
 
class PTE : public PGEntries
{
public:
    PTE()
    {
        table = new Page*[tableSize];
 
        for (int i = 0; i < tableSize; i++)
        {
            table[i] = new Page;
        }
    }
 
    ~PTE() {/* освободить память */}
 
    Page* operator [] (int idx)
    {
        return table[idx];
    }
 
private:
    Page **table;
    // добавить маски флагов для проверки различных вещей, например разрешение на чтение/запись
    // так же добавить маску флага присутствия страницы в памяти, для имитации исключени Page Fault
};
 
class PDE : public PGEntries
{
public:
    PDE()
    {
        table = new PTE*[tableSize];
 
        for (int i = 0; i < tableSize; i++)
        {
            table[i] = new PTE;
        }
    }
 
    ~PDE() { /* освободить память */}
 
    PTE* operator[] (int idx)
    {
        return table[idx];
    }
 
private:
    PTE **table;
 
    // добавить маски флагов для проверки различных вещей, например разрешение на чтение/запись
};
 
// реализовать при необходимости
// class PDPTE : public PGEntries{};// для имитации использования PAE (PDPTE содержит 4 указателя на PDE (в protected mode) или 512 в х86_64
// class PML4 : public PGEntries{}; // Page Map Level 4 - для имитации пэйджинга x86_64
 
 
class Descriptor {}; // реализовать
class GDT {}; // реализвать
// GDT - global description table - главная табилца дескрипторов
 
typedef int Selector;
 
// на самом деле полный адрес определяется путем сложения базы десктриптора (который опеределяется селектором) плюс адрес
// но уже лень это все реализовывать. Там нужно сделать проверку на лимит и т.д. Так же там есть всякие флаги, которые тоже можно имитировать
class VAddress
{
public:
    VAddress(Selector sel, dword addr)  :  _addr(addr), _sel(sel), PDEmask(0xFFC00000), PTEmask(0x3FF000), pageOffsetMask(0xFFF) {}
    // перегрузить конструктор для 64 битных адресов
 
    int getPDEIndex() const
    {
        return _addr & PDEmask;
    }
 
    int getPTEIndex() const
    {
        return _addr & PTEmask;
    }
 
    int getOffset() const
    {
        return _addr & pageOffsetMask;
    }
 
private:
    Selector _sel;
    dword _addr; // _addr можно сделать как union{qword, dword} для хранения 64 битных адресов
    dword PDEmask;
    dword PTEmask;
    dword pageOffsetMask;
 
    // добавить при необходимости
    // unsigned int PDPTEmask;
    // unsigned int PML4mask;
};
 
class VMemmory
{
public:
    VMemmory(PGEntries *mainTbl) : CR3(mainTbl) {}
 
    // для всех слещующих методов сделать разную реализацию в зависимости от модели paging'а
    // например можно добавить в класс члены bool _paeIsUsed и _pml4IsUsed и инициализировать их в конструкторе
    void setByte (const VAddress &addr, byte val)
    {
        PTE *pte = (*(dynamic_cast<PDE*> (CR3))) [addr.getPDEIndex()];
        Page *page = (*pte)[addr.getPTEIndex()];
        (*page)[addr.getOffset()] = val;
    }
 
    void setWord (const VAddress &addr, word val) { /*реализвать*/}
    void setDword (const VAddress &addr, dword val) { /*реализвать*/}
    void setQword (const VAddress &addr, qword val) { /*реализвать*/}
 
    byte getByte (const VAddress &addr)
    {
        PTE *pte = (*(dynamic_cast<PDE*> (CR3))) [addr.getPDEIndex()];
        Page *page = (*pte)[addr.getPTEIndex()];
 
        return (*page)[addr.getOffset()];
    }
 
    word getWord (const VAddress&) { return 0;/*реализвать*/}
    dword getDword (const VAddress&) { return 0;/*реализвать*/}
    qword getQword (const VAddress&) { return 0;/*реализвать*/}
private:
    PGEntries *CR3; // в процессоре регистр CR3 содержит адрес таблицы верхнего уровня
};
 
int main ()
{
    PDE *pde = new PDE;
    VMemmory mem (pde);
 
    VAddress addr (123 /*это типа селктор, но нужно сделать по другому*/, 0x12345678); // просто для примера
 
    mem.setByte(addr, 0xAB);
 
    std::cout << "Our byte = " << mem.getByte(addr) << std::endl;
 
    return 0;
}
небольшое пояснение - здесь реализовано процентов 10 от того, что реально нужно сделать. Это только самая общая модель (и то не полная без дескрипторов) paging'a. То, что написано в коментариях - это далеко не полный список того, что нужно добавить. Если нужно я могу написать все, что нужно сделать, просто это не пару строк текста, поэтому без надобности писать неохото.

Цитата Сообщение от easybudda Посмотреть сообщение
Я бы значительно дольше провозился
Ага, я что-то про день/полдня неподумав сказал. Реально если делать все как следует, с реализацие всего всего, то пару дней надо (с учетом понимания paging'a). И это только на реализацию модели paging'a, а плюс еще сами задания.

Цитата Сообщение от easybudda Посмотреть сообщение
убивать просто так на это задание целый выходной (а то и два, если сразу не заработает ) - какое-то сомнительное удовольствие...
Да, просидел часа полтора, потом плюнул, даже дескрипторы не стал делать, просто в коментариях отметил

Короче совет - во фриланс! Только вот стоить это будет (как уже писали выше) далеко не 500 рублей.

P.S. не пытайтесь запускать этот код, я там не подумав мапировал все 4 ГБ памяти (как это на самом деле бывает), только вот я эти 4 ГБ из кучи беру, поэтому программа (и ОС) просто зависнут Поэтому нужно подумать - либо обрезать размер памяти, либо мапировать только используемую таблицу -> страницу по запросу.
1
22.12.2012, 13:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2012, 13:37
Помогаю со студенческими работами здесь

Файл подкачки
Привет:) У меня 2 вопроса: 1. Что такое Файл подкачки? С чем его едят? (простыми словами) 2. Вот...

файлы подкачки
Решил разобрать свой старый комп, который был куплен в далеком 2009, решил оттуда поставить жесткий...

Файл подкачки
Конфигурация компьютера слабоватый Оперативка:512 МБ Проблема: В общем год назад играл Half Life...

Файл подкачки
помогите я захожу в сталкер он пишет:у вас отключен фаил подкачки или нет памяти


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru