Студопедия — Кодування системи
Студопедия Главная Случайная страница Обратная связь

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

Кодування системи






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

4.2.1 Вибір мови програмування

У якості середовища програмування було вибрано Microsoft Visual Studio 2013 та мова програмування C#.

Microsoft Visual Studio— серія продуктів фірмиМайкрософт, які включаютьінтегроване середовище розробкипрограмного забезпечення та ряд інших інструментальних засобів. Ці продукти дозволяють розробляти якконсольні програми, так і програми зграфічним інтерфейсом, в тому числі з підтримкою технологіїWindows Forms, а такожвеб-сайти,веб-застосунки,веб-службияк врідному, так і вкерованому кодах для всіх платформ, що підтримуються Microsoft Windows,Windows Mobile,Windows CE,.NET Framework,.NET Compact Framework та Microsoft Silverlight.

Visual Studio включає один або декілька з наступних компонентів:

Visual Basic.NET, а до його появи — Visual Basic;

Visual C++;

Visual C#;

Visual F# (входить до складу Visual Studio 2010);

Visual Studio Debugger;

Багато варіантів постачання також включають:

Microsoft SQL Serverабо MSDE Visual Source Safe — файл-серверна система управління версіями.

У минулому, до складу Visual Studio також входили продукти:

Visual InterDev;

Visual J++;

Visual J#;

Visual FoxPro;

Visual Source Safe – файл-серверна система управління версіями.

Microsoft.NET — програмна технологія, запропонована фірмоюMicrosoft як платформа для створення як звичайних програм, так івеб-застосунків. Багато в чому є продовженням ідей та принципів, покладених в технологіюJava. Одною з ідей.NET є сумісність служб, написаних різнимимовами. Хоча ця можливість рекламується Microsoft як перевага.NET, платформа Java має таку саму можливість.

Кожнабібліотека в.NET має свідчення про свою версію, що дозволяє усунути можливі конфлікти між різними версіями збірок.

.NET —крос-платформоватехнологія, в цей час існує реалізація для платформиMicrosoft Windows,FreeBSD(від Microsoft) і варіант технології дляОС Linux в проекті Mono(в рамках угоди між Microsoft з Novell), DotGNU.

Захист авторських прав відноситься до створення середовищ виконання (CLR —Common Language Runtime) для програм.NET. Компілятори для.NET випускаються багатьма фірмами для різних мов вільно.

Розробка Microsoft технології.NET Framework почалась у 1999 році. Офіційно про розробку нової технології було оголошено 13 січня 2000 року. В цей день керівництвом компанії була озвучена нова стратегія, яка отримала назву Next Generation Windows Services. Нова стратегія повинна була обʼєднати у єдине вже існуючі і майбутні розробки Microsoft для надання можливості користувачам працювати з Всесвітньою павутиною з допомогою безпровідних пристроїв, що мають доступ в Інтернет, як зі стаціонарних комп'ютерів так і з інших пристроїв.

C#—об'єктно-орієнтована мова програмуванняз безпечною системою типізації для платформи.NET. Розроблена Андерсом Гейлсбергом,Скотом Вілтамутомта Пітером Гольде під егідоюMicrosoft Research (при фірмі Microsoft).

Синтаксис C# близький доС++і Java. Мовамає строгу статичну типізацію, підтримує поліморфізм, перевантаження операторів, вказівники на функції-члени класів, атрибути, події, властивості, винятки, коментарі у форматіXML Перейнявши багато що від своїх попередників мов С++, Delphi, Модула і Smalltalk — С#, спираючись на практику їхнього використання, виключає деякі моделі, що зарекомендували себе як проблематичні при розробці програмних систем, наприкладмножинне спадкування класів (на відміну від C++).

C# є дуже близьким родичем мови програмування Java. Мова Java була створена компанією Sun Microsystems, коли глобальний розвиток інтернету поставив задачу роззосереджених обчислень. Взявши за основу популярну мову C++, Java виключила з неї потенційно небезпечні речі (типу вказівників без контролю виходу за межі). Для роззосереджених обчислень була створена концепція віртуальної машини та машинно-незалежного байт-коду, свого роду посередника між вихідним текстом програм і апаратними інструкціями комп'ютера чи іншого інтелектуального пристрою.

Java набула чималої популярності, і була ліцензована також і компанією Microsoft. Але з плином часу Sun почала винуватити Microsoft, що та при створенні свого клону Java робить її сумісною виключно з платформою Windows, чим суперечить самій концепції машинно-незалежного середовища виконання і порушує ліцензійну угоду. Microsoft відмовилася піти назустріч вимогам Sun, і тому зʼясування стосунків набуло статусу судового процесу. Суд визнав позицію Sun справедливою, і зобов'язав Microsoft відмовитися від позаліцензійного використання Java.

У цій ситуації в Microsoft вирішили, користуючись своєю вагою на ринку, створити свій власний аналог Java, мови, в якій корпорація стане повновладним господарем. Ця новостворена мова отримала назву C#. Вона успадкувала від Java концепції віртуальної машини (середовище.NET), байт-коду (MSIL) і більшої безпеки вихідного коду програм, плюс врахувала досвід використання програм на Java.

Нововведенням C# стала можливість легшої взаємодії, порівняно з мовами-попередниками, з кодом програм, написаних на інших мовах, що є важливим при створенні великих проектів. Якщо програми на різних мовах виконуються на платформі.NET,.NET бере на себе клопіт щодо сумісності програм (тобто типів даних, за кінцевим рахунком).

Станом на сьогодні C# визначено флагманською мовою корпорації Microsoft, бо вона найповніше використовує нові можливості.NET. Решта мов програмування, хоч і підтримуються, але визнані такими, що мають спадкові прогалини щодо використання.NET.

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.3.1.

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

 

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

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

 

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

 

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

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

– Сегменти;

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

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

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

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

 

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

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

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

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

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

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

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

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

– Кнопка “ОК;

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

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

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

 

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

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

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

 

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

– Сегмент;

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

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

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

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

– Запит;

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

 

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

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

4.4. Висновки

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

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

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

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







Дата добавления: 2015-09-04; просмотров: 1157. Нарушение авторских прав; Мы поможем в написании вашей работы!



Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Вопрос 1. Коллективные средства защиты: вентиляция, освещение, защита от шума и вибрации Коллективные средства защиты: вентиляция, освещение, защита от шума и вибрации К коллективным средствам защиты относятся: вентиляция, отопление, освещение, защита от шума и вибрации...

Задержки и неисправности пистолета Макарова 1.Что может произойти при стрельбе из пистолета, если загрязнятся пазы на рамке...

Вопрос. Отличие деятельности человека от поведения животных главные отличия деятельности человека от активности животных сводятся к следующему: 1...

Седалищно-прямокишечная ямка Седалищно-прямокишечная (анальная) ямка, fossa ischiorectalis (ischioanalis) – это парное углубление в области промежности, находящееся по бокам от конечного отдела прямой кишки и седалищных бугров, заполненное жировой клетчаткой, сосудами, нервами и...

Основные структурные физиотерапевтические подразделения Физиотерапевтическое подразделение является одним из структурных подразделений лечебно-профилактического учреждения, которое предназначено для оказания физиотерапевтической помощи...

Почему важны муниципальные выборы? Туристическая фирма оставляет за собой право, в случае причин непреодолимого характера, вносить некоторые изменения в программу тура без уменьшения общего объема и качества услуг, в том числе предоставлять замену отеля на равнозначный...

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия