Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

З розвитком обчислювальної техніки та в наслідок науково–технічного прогресу зростає попит на замовлення по створенню необхідного прикладного програмного забезпечення. В сучасних умовах розвитку 4 страница



C# розроблялась як мова програмування прикладного рівня для CLR і тому вона залежить, перш за все, від можливостей самої CLR. Це стосується, перш за все, системи типів C#. Присутність або відсутність тих або інших виразних особливостей мови диктується тим, чи може конкретна мовна особливість бути трансльована у відповідні конструкції CLR. Так, з розвитком CLR від версії 1.1 до 2.0 значно збагатився і сам C#, подібної взаємодії слід чекати і надалі. CLR надає C#, як і всім іншим.NET–орієнтованим мовам, багато можливостей, яких позбавлені “класичні” мови програмування. Наприклад, збірка сміття не реалізована в самому C#, а проводиться CLR для програм, написаних на C# точно так, як і це робиться для програм на VB.NET тощо.

4.2.2Опис розробки програмних компонентів

4.2.2.1 Модуль ядра

Основним об’єктом модуля ядра є клас менеджера пам’яті, що є синглтон–об’єктом, тобто таким, екземпляр якого існує лише одинично. Реалізація шаблону синглтону:

privatestaticMemoryManager _instance;

publicstaticMemoryManager Instance

{

get

{

return _instance?? (_instance = newMemoryManager());

}

}

#endregion

На рівні класу описано приватне статичне поле _instance, яке і є одиничним екземпляром класу. Також існує публічна статична властивість Instance, яке є інтерфейсним представленням і повертає вищезазначений екземпляр якщо він уже створений, інакше створює його і записує результат в _instance. Таким чином, екземпляр класу менеджера віртуальної пам’яті створюється лише один раз.

Ініціалізація класу менеджера віртуальної пам’яті відбувається в конструкторі:

publicvoid InitializeManager(int pageSize, int ramSize)

{

_messageManager = MessageManager.Instance;

 

Page.SetSize(pageSize);

Segments = newList<Segment>();

ActiveSegments = newList<Segment>();

CreatePhysicalMemory(ramSize);

HardDisk = newList<Page>();

 

InitAlgorithms();

}

Спочатку отримується об’єкт класу обміну повідомлень, що являє собою контейнер асинхронних подій та методів їх виклику і необхідний для обміну шару логіки системи та її представлення у вигляді графічного інтерфейсу користувача. Після цього, відбувається ініціалізація розміру сторінки, розмір якої встановлюється при старті системи. Наступним кроком, є створення контейнерів внутрішніх полів класу, а саме списку сегментів, списку активних сегментів, фізичної пам’яті та зовнішньої пам’яті. Останньою операцією є ініціалізація алгоритмів заміщення.

Реалізація завантаження сегменту у фізичну пам’ять:

publicvoid LoadSegmentToRam(Segment segment)

{

if (segment == null || segment.IsLoaded)



return;

 

Array.ForEach(segment.Pages, v => LoadPageToRam(v));

segment.IsLoaded = true;

ActiveSegments.Add(segment);

 

_messageManager.LoadSegmentToRam(segment);

}

При вході в метод, перевіряється, чи екземпляр сегменту не нульовий і чи він ще не завантажений у фізичну пам’ять. Якщо так — відбувається вихід і операція переривається. Якщо ні — метод виконується далі. Наступним кроком є завантаження сторінок сегменту із зовнішньої пам’яті у фізичну. Після цього, сегмент відмічається як завантажений у фізичну пам’ять. Також він додається до списку активних сегментів. Останнім кроком є посилання асинхронного повідомлення про завантаження сегменту. Це потрібно для того, аби підписник цієї події, яким виступає графічний інтерфейс, міг відреагувати на зміну стану системи.

4.2.2.2 Модуль віджетів

Модуль віджетів представлений єдиним класом View, що містить всі необхідні методи для візуалізації роботи віртуальної пам’яті. Це стосується як і полів та методів на рівні екземпляру, так і множини статичних методів, які логічно згруповані та фізично знаходяться у різних файлах, хоча і представляють собою єдину структурну одиницю у вигляді класу.

Ініціалізація класу View:

public View(Grid physicalGrid, Grid hardGrid)

{

_physicalParent = physicalGrid;

_hardParent = hardGrid;

 

_physicalCount = 0;

_hddCount = 0;

 

MessageManager.Instance.OnLoadPageToHDD += LoadPageToHdd;

MessageManager.Instance.OnInitializeRam += IntializeRam;

MessageManager.Instance.OnLoadPageToRam += LoadPageToRam;

MessageManager.Instance.OnAccessToPage += AccessToPage;

MessageManager.Instance.OnReplacePage += OnReplacePage;

}

На вхід конструктора класу передаються два параметри, що представляють собою графічні компоненти, а саме батьківські контейнери панелей фізичної та зовнішньої пам’яті. Всі візуальні операції будуть проводитися з цими контейнерами, а саме динамічним створенням дочірніх компонент, зміною їх візуальних властивостей, анімацією, динамічним видаленням і т.д. Спочатку, ми зберігаємо посилання на ці компоненти у внутрішні поля класу, аби можна було їх використовувати в інших операціях. Після цього, відбувається онулення кількості сторінок фізичної та зовнішньої пам’яті. Останнім кроком, є підписування класом на події рівня ядра, для відповідного реагування на зміну внутрішнього стану системи, а саме візуального представлення таких змін.

Реалізація методу анімації завантаження сторінки із зовнішньої пам’яті у фізичну:

privatevoid LoadPageToRam(CoreLibrary.Page page, int ramIndex)

{

var fromNode = page.Data asLabel;

var animNode = CloneNode(fromNode);

var toNode = _ramNodes[ramIndex];

OnAnimationStateChanged(true);

LoadAnimation(fromNode, toNode, animNode, () => OnAnimationStateChanged(false));

}

Першим кроком є отримання візуальних віджетів сторінок джерела та цілі. Після цього, відбувається клонування віджету джерела, для проведення анімації. Потім, встановлюється стан системи, як початок анімації, що забороняє будь–які інші візуальні дії до завершення анімації. Завершується метод викликом статичного методу безпосередньої анімації завантаження сторінки. Зворотньою функцією цього методу, яка буде викликана після завершення анімації, є встановлення стану системи, як такого, що не виконує ніяких анімацій.

4.2.2.3 Модуль алгоритмів заміщення

Даний модуль складається із базового абстрактного класу алгоритму, екземпляр якого створити неможливо і який служить для наслідування конкретних реалізацій алгоритмів. Таким чином, він декларує інтерфейсну частину алгоритмів і дозволяє реалізувати поліморфну поведінку алгоритмів заміщення. Реалізація класу:

publicabstractclassReplacementAlgorithm

{

protectedMemoryManager Manager;

 

protected ReplacementAlgorithm(MemoryManager memoryManager)

{

this.Manager = memoryManager;

}

 

publicvoid OnAccessToPage(Page page)

{

var index = Manager.Ram.GetIndexByPage(page);

AccessToPage(page, index);

}

 

publicabstractvoid LoadPage(Page page, int index);

publicabstractvoid AccessToPage(Page page, int index);

publicabstractint GetRepacementIndex();

}

Як можна побачити, на вході клас отримує об’єкт менеджеру віртуальної пам’яті і записує даний екземпляр у внутрішній стан. Це необхідно для того, аби мати доступ до фізичної та зовнішньої пам’яті при формуванні стратегії заміщення. Також, клас містить загальний метод OnAccessToPage, який викликається при доступі до сторінки пам’яті, і в свою чергу викликає абстрактний метод AccessToPage. В кінці реалізації класу описані сигнатури абстрактних методів завантаження сторінки та доступу до неї, які викликаються в процесі роботи емуляції віртуальної пам’яті та змінюють внутрішній стан дочірніх класів алгоритмів. Основним методом, що повертає безпосередній результат роботи алгоритму, є GetReplacementIndex, що визначає, яку сторінку потрібно замістити у фізичній пам’яті, відповідно до стратегії заміщення конкретної реалізації алгоритму.

Реалізація алгоритму LRU:

publicclassLRUAlgorithm: ReplacementAlgorithm

{

 

privateint[] _used;

 

public LRUAlgorithm(MemoryManager memoryManager)

: base(memoryManager)

{

_used = Enumerable.Repeat(0, memoryManager.Ram.PagesCount).ToArray();

}

 

publicoverridevoid LoadPage(Page page, int index)

{

_used[index] = _used.Max();

}

 

publicoverridevoid AccessToPage(Page page, int index)

{

_used[index]++;

}

 

publicoverrideint GetRepacementIndex()

{

returnArray.IndexOf(_used, _used.Min());

}

 

publicoverridestring ToString()

{

return"LRU";

}

}

З даної реалізації видно, що клас цього алгоритму унаслідується від базовго класу ReplacemenAlgorithm. В ньому додано внутрішнє поле _used, що являє собою масив, індекс якого вказує на індекс сторінки у фізичній пам’яті, а значення вказує на кількість звертань до даної сторінки. Далі описані перегрузки абстрактних методів. При доступі до сторінки, кількість звертань збільшується на одиницю. При пошуку сторінки для заміщення, обирається сторінка, кількість доступу до якої, була найменшою.

4.2.2.4 Модуль графічного інтерфейсу

Модуль графічного інтерфейсу являє собою набір візуальних форм, що свою чергу представляють собою класи, що наслідуються від базових класів графічних форм та перевизначають поведінку. В основі функціонування даного модуля лежить механізм “підписник–видавець”, що являє собою архітектуру асинхронних подій.

Ініціалізація головної форми:

_view = newView(physicalMemory, hardMemory);

_view.OnAnimationStateChanged += OnChangeAnimationState;

 

_manager = MemoryManager.Instance;

_manager.InitializeManager(pageSize, ramSize);

selectAlgorithmBox.ItemsSource = _manager.Algorithms;

selectAlgorithmBox.SelectedIndex = 0;

 

selectSegmentBox.ItemsSource = _manager.ActiveSegments;

MessageManager.Instance.OnLoadSegmentToRam += OnLoadSegmentToRam;

Спочатку, створюється екземпляр класу віджетів, в який передаються візуальні компоненти, а саме контейнери фізичної та зовнішньої пам’яті. Далі створюється екземпляр класу менеджера віртуальної пам’яті, що приймає на вході розміри сторінки та фізичної пам’яті. Після цього, відбувається прив’язка контролу вибору алгоритмів до списку алгоритмів менеджера. В кінці, реалізована підписка на подію завантаження сторінки у фізичну пам’ять.

Додавання нового сегмену:

privatevoid addSegmentBtn_Click(object sender, RoutedEventArgs e)

{

var fm = newAddSegmentForm();

var res = fm.ShowDialog();

if (res == System.Windows.Forms.DialogResult.OK)

{

var clr = fm.CurrentColor;

var color = Color.FromArgb(clr.A, clr.R, clr.G, clr.B);

 

SegmentItem.colors[fm.CurrentSegment] = color;

_manager.AddSegment(fm.CurrentSegment);

 

SegmentItem.Update();

segmentsListBox.ItemsSource = SegmentItem.items;

 

}

}

Початковим кроком, є створення екземпляру діалогового вікна, де користувач вказує необхідні параметри нового сегменту. Після його завершення, йде перевірка, чи користувач натиснув ОК, і якщо так, то з діалогово вікна читаються необхідні параметри і відбувається додавання нового сегменту.

4.3. Детальне тестування програмного засобу

Досить важливим етапом проектування будь–якої програми є її тестування. Даний крок необхідний як на етапі проектування так і на етапі розробки, адже він дозволяє оцінити ступінь коректності роботи програми і в разі виникнення помилок прийняття необхідних міри по їх усуненню.

Методи тестування розрізняються підходами до проектування тестів. Традиційно методи динамічного тестування розділяють на дві категорії – «чорний ящик» (без доступу до початкового коду) і “білий ящик” (з доступом до початкового коду). Загальна класифікація методів тестування зображена на рис. 4.4.

Рис. 4.4 – Класифікація методів тестування

 

Отже, проаналізувавши існуючі методи тестування программного забезпечення, було обрано метод функціонального тестування для створеної системи. Цей метод застосовується для тестування зовнішніх та внутрішніх функцій системи.

Після запуску програми на екрані зʼявиться вікно програми під назвою “Ініціалізація”, зображено на рис. 4.5.

 

4.5 – Вікно “Ініціалізація”

 

За допомогою цього вікна користувач задає кількість сторінок фізичної пам’яті та розмір сторінки пам’яті. Після натиску кнопки “ОК” з’явиться головне вікно програми, з параметрами які задав користувач або вихідними параметрами які вже задані за змовчанням. Після натиску на кнопку “Відміна” користувач побачить головне вікно, а програма завантажиться з параметрами встановленими за змовчанням. Також є змога закрити програму натиснувши на кнопку “Закрити”, вона знаходиться у правому верхньому куті вікна.

Після входу до головного вікна програми, рис 4.6, в якому будуть відображатися всі операції, користувачем, користувач на екрані побачить чотири форми:

– Сегменти;

– Фізична пам’ять;

– Емуляція роботи;

– Зовнішня пам’ять.

Рис. 4.6 – Головне вікно програми

 

Форма “Сегменти”, зображена на рис. 4.7, призначена для додавання та завантаження сегментів. На цій формі розміщено дві кнопки, “Додати” – для додавання сегментів та “Завантажити” – для завантаження сегмента, вона є неактивною поки користувач не додасть сегмент.

Рис 4.7 – Форма “Сегменти”

Після натиску на кнопку “Додати” перед користувачем з’являється вікно “Додати сегмент”, воно зображене на рис. 4.8.

Рис. 4.8 – Вікно “Додати сегмент”

Дане вікно включає в себе:

– Поле для введення імені сегменту;

– Поле для вибору кольору, для візуального відображення;

– Поле для введення розміру сторінки;

– Кнопка “ОК;

– Кнопка “Відміна”.

Після появи цього вікна користувач повинен ввести, бажане, ім’я, сегменту, вибрати його колір та розмір сторінки, якщо цього не робити то всі параметри будуть встановлені за змовчанням, потім натиснути кнопку “ОК”. Після цього вікно програми набуває вигляду – Рис. 4.9.

Рис. 4.9 – Головне вікно програми після додавання сегментів

 

Тепер сегменти завантажені в зовнішню пам’ять і користувач має можливість маніпулювати сторінками пам’яті.

Щоб почати процес емуляції роботи пам’яті потрібно вибрати потрібний сегмент і завантажити його за допомогою кнопки “Завантажити”, що знаходиться на формі “Сегменти”. Після завантаження сторінок в фізичну пам’ять головне вікно приймає наступний вигляд – рис 4.10.

Рис. 4.10 – Головне вікно після завантаження сегментів в фізичну пам’ять

 

Маніпуляція зі сторінками проводиться за допомогою форми – “Емуляція роботи” (рис. 4.11). Ця форма включає в себе наступні поля:

– Сегмент;

– Сторінка пам’яті;

– Тип доступу;

– Вибір алгоритму заміщення;

Також на формі розміщені дві клавіші:

– Запит;

– Рандомний запит;

 

Рис. 4.11 – Форма “Емуляція роботи”

Для початку роботи треба спочатку вибрати алгоритм заміщення сторінок. В полі “Сегмент” треба вибрати сегмент з яким користувач збирається працювати. В полі “Сторінка” обрати сторінку цього сегмента. Та обрати тип доступу (читання або запис). Після цього натиснути кнопку “Запит”. Програма робить запит до вибраної сторінки, під час запиту колір сторінки змінюється на зелений (якщо це читання), або червоний (якщо це запис). Кнопка “Рандомнй запит” робить запит до певної, рандомної, сторінки вибраного сегмента.

4.4. Висновки

В даному розділі було проведено детальне тестування даного програмного продукту. Під час тестування несправностей в роботі програми не виявлено. Програмний продукт працює коректно.

Тестування проводилося з різними наборами сегментів та кількістю сторінок. Також під час тестування програмного засобу використовувалися різні типи доступу (читання та запис).

Під час тестування роботи алгоритмів заміщення помилок не виявлено, всі представлені алгоритми працюють коректно. Заміщення сторінок відбувається відповідно до вимог алгоритмів.

Дані які відображаються під час перевірки відповідають дійсності.


ВИСНОВКИ

Віртуальна пам’ять — схема адресації пам’яті комп’ютера, при якій пам’ять для запущеної програми реалізується однорідним масивом, в той час як насправді операційна система виділяє пам’ять блоками в різних видах пам’яті, включаючи короткочасну (оперативну) і довгочасну (тверді диски, твердотілі накопичувачі).

Також під віртуальною пам'яттю часто розуміють файл підкачки. Ця пам’ять використовується для того, щоб дати можливість системі або користувачу одночасно виконувати більшу кількість програм, ніж це дозволяє фізична оперативна пам’ять.

Тема даної роботи актуальна тому, що і по сьогоднішній день проблема нестачі фізичної пам’яті є актуальною, навіть не зважаючи на те, що сучасні ПК володіють великими об’ємами пам’яті.

В результаті виконання було здійснено:

1. Огляд і аналіз методів та способів реалізації синтаксичних аналізаторів які в даний момент використовуються.

2. Проведжено дослідження програм аналогів.

3. Розроблено програмний продукт, який може допомогти програмістам під час роботи.

Отже, у ході виконання цієї дипломної роботи було розроблено програмний продукт який надає змогу емулювати роботу віртуальної пам’яті. Були реалізовані алгоритми заміщення сторінок, такі як, FIFO, LNU та NFU. Всі поставлені задачі біли виконані. Під час тестування програмного засобу ніяких несправностей програми не виявлено.


СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

1. Організація пам’яті комп’ютера. Найпростіші схеми управління пам’яттю [Електронний ресурс]. – Режим доступу: http://www.intuit.ru/studies/courses/2192/31/lecture/982 перевірено: 9.06.2015

2. Віртуальна пам’ять. Архітектурні засоби підтримки віртуальної пам’яті [Електронний ресурс]. – Режим доступу: http://www.intuit.ru/studies/courses/2192/31/lecture/984 перевірено: 9.06.2015

3. Апаратно–незалежний рівень управління віртуальною пам’яттю [Електронний ресурс]. – Режим доступу: http://www.intuit.ru/studies/courses/2192/31/lecture/986 перевірено: 9.06.2015

4. Віртуальна пам’ять [Електронний ресурс]. – Режим доступу: https://uk.wikipedia.org/wiki/Віртуальна_пам%27ять перевірено: 9.06.2015

5. Дескриптор сегмента [Електронний ресурс]. – Режим доступу: https://ru.wikipedia.org/wiki/Дескриптор_сегмента перевірено: 9.06.2015

6. Сегментація пам’яті в захищеному режимі [Електронний ресурс]. – Режим доступу: http://citforum.ck.ua/hardware/memory/mem_0502.shtml перевірено: 9.06.2015

7. Організація віртуальної пам’яті [Електронний ресурс]. – Режим доступу: http://habrahabr.ru/company/embox/blog/256191/ перевірено: 9.06.2015

8. SoftPerfect RAM Disk [Електронний ресурс]. – Режим доступу: https://www.softperfect.com/products/ramdisk/ перевірено: 9.06.2015

9. UML [Електронний ресурс]. – Режим доступу: https://ru.wikipedia.org/wiki/UML перевірено: 9.06.2015

10. Архітектура програмного забезпечення [Електронний ресурс]. – Режим доступу: http://uk.wikipedia.org/wiki/Архітектура_програмного_забезпечення перевірено: 9.06.2015

11. Тестування програмного забезпечення [Електронний ресурс]. – Режим доступу: http://uk.wikipedia.org/wiki/Тестування_програмного_забезпечення перевірено: 9.06.2015

12. Сторінково–сегментна організація пам’яті [Електронний ресурс]. – Режим доступу: http://wiki.kspu.kr.ua/index.php/Сторінково-сегментна_організація_пам%27яті перевірено: 9.06.2015


ДОДАТОК А

Текст програми

Текст програми для побудови автоматної моделі програми згідно її опису знаходиться на оптичному диску УКР.ЧНУ.*******.

 


Дата добавления: 2015-09-30; просмотров: 25 | Нарушение авторских прав







mybiblioteka.su - 2015-2024 год. (0.036 сек.)







<== предыдущая лекция | следующая лекция ==>