Дефрагментація диску

 

Міністерство освіти і науки, молоді та спорту України

Державний вищий навчальний заклад

«Криворізький національний університет»

Факультет інформаційних технологій

Кафедра компютерних систем та мереж








КУРСОВА РОБОТА

з дисципліни «Системне програмування»

на тему: «Дефрагментація диску»




Виконала

студентка гр. КСМ-10-2

А. А. Команкова

Керівник курсової роботи

Ю. В. Юрко





Кривий Ріг



ЗМІСТ


ПЕРЕЛІК СКОРОЧЕНЬ

ВСТУП

1. АНАЛІЗ ТА ОГЛЯД ІСНУЮЧИХ РІШЕНЬ

1.2 Огляд існуючих рішень

1.2 Файлова система FAT

1.3 Постановка задачі

2. ПОБУДОВА АЛГОРИТМІВ ТА СТРУКТУР ДАНИХ

2.1 Опис існуючих алгоритмів дефрагментації

2.1.1 Проста дефрагментація

2.1.2 Дефрагментація вільного місця або цілковита дефрагментація

2.1.3 Дефрагментація часто даних, що використовуються

2.1.4 За датою останнього змінення

2.1.5 Сортування за іменем

2.2 Алгоритмізація

2.3 Опис роботи програми

3. КОДУВАННЯ

3.1 Використані бібліотеки та структури даних

3.2 Розробка візуального оформлення програми

4. ТЕСТУВАННЯ

4.1 Основна програма

4.2 Рекомендації

4.3 Тестування програми

ВИСНОВКИ

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



ПЕРЕЛІК СКОРОЧЕНЬ

(File Allocation Table) - таблиця розміщення файлів, класична архітектура файлової системи, яка використовується в флеш-накопичувачах.

NTFS (New Technology File System - «файлова система нової технології») - стандартна файлова система для операційних систем Microsoft <#"justify">ВСТУП


Метою курсового проекту є виконання та захист роботи, основною задачею якої є розробка програми дефрагментації диску.

Довгі дані записуються на диск в декількох кластерах. Якщо місця для запису певного файлу достатньо, то всі кластери розміщуються послідовно. Однак якщо простір частково заповнено, для великого файлу може не виявитись цільної вільної області для його розміщення. У такому випадку дані будуть записані у вільні кластери, за умови, що їх сумарний обсяг задовольняє даний файл. У цьому випадку файл записується у вигляді декількох фрагментів. Більше того: у багатьох файлових системах (приклад FAT32) початок файлу записується в початок кластера, отже, якщо сам файл або його частина за об'ємом менше розміру кластера, то місце, що залишилося в кластері залишається невикористаним. Тому фрагментація диска обернено пропорційна ефективності використання його простору.

Фрагментація дискового простору. Ефект, що виникає в процесі активної роботи з файлами (створення, видалення, переміщення, зміна розмірів) і виражається у відсутності на жорсткому диску достатньої кількості послідовних вільних блоків. На фрагментованому диску вільні блоки розкидані по всій поверхні диска, і при подальшій роботі з диском, це призводить до фрагментації даних.

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

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

Щоб уникнути фрагментації дискового простору необхідно проводити процес дефрагментації.

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




. АНАЛІЗ ТА ОГЛЯД ІСНУЮЧИХ РІШЕНЬ


.1 Огляд існуючих рішень


Для порівняння ефективності виконання дефрагментації диску, запустимо на виконання вже існуючи програми: Defraggler Windows, IObit Smart, Auslogics Disk Defrag.- дефрагментатор для Windows. Програма працює з системами файлів FAT32, NTFS, ExFAT. Підтримує обробку не тільки томів диска, але й окремих файлів або їх груп. Defraggler - це зручний, безкоштовний і простий інструмент для впорядкованого зберігання всіх файлів на комп'ютері. З даною утилітою прискорюється запис і читання файлів. Тобто і загальна швидкість роботи комп'ютера також збільшитися. Крім безпосередньо дефрагментації програма надає можливість пошуку помилок на дисках, аналіз їх стану, температурного режиму і т.д.

Можливості Defraggler:

Швидка і повна дефрагментація

Організація порожнього місця таким чином, щоб запобігти подальшій фрагментацію

Дефрагментація вільного місця

Надання звіту з повною картою фрагментованих файлів

Багатомовна підтримка (з російською мовою включно)

Пошук помилок на диску

Аналіз стану дисків

Підтримка операційної системи Windows 8

Запустимо Defraggler Windows:

Рисунок 1.1 - головне меню програми Defraggler Windows(вкладка «Диск С»)


Виконаємо аналіз та визначимо, чи необхідна дефрагментація заданого диску, тобто диску С:


Рисунок 1.2 - результат аналізу диску С.


Виконаємо дефрагментацію диску С за допомогою Defraggler Windows:



Рисунок 1.3 - результат виконання дефрагментації.


В результаті дефрагментації бачимо, що фрагментованих файлів 8, тобто 169,4 Мб, тобто 73 фрагменти, тобто 1%. Дана програма усунула отриману фрагментацію.

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

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

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

Основні можливості IObit SmartDefrag:

Забезпечує повну безпеку від ушкодження файлів на диску.

Вибір режимів роботи: проста дефрагментація, дефрагментація і оптимізація, глибока дефрагментація.

Ручний і автоматичний режими.

Планувальник завдань.

Інтерфейс - багатомовний (11 мов).

Запустимо IObit Smart:


Рисунок 1.4 - головне меню програми IObit Smart (вкладка «Статус (С:))


- вільний простір.

- не часто використовувані.

- часто використовувані.

- каталоги.

- MFT.

- непереміщувані.

- фрагментовані.

- переміщувані.

Виконаємо аналіз та визначимо, чи необхідна дефрагментація заданого диску, тобто диску С:



Рисунок 1.5 - результат аналізу диску С.


В результаті аналізу бачимо, що фрагментація складає 0,74%, це означає що не має потреби здійснювати дефрагментацію але для визначення як швидко виконається програма з отриманою фрагментацією, виконаємо дефрагментацію.

Виконаємо дефрагментацію за допомогою IObit Smart:


Рисунок 1.6 - результат виконання дефрагментації.


У результаті дефрагментації бачимо, що фрагментація значно зменшилась ( з 0,93% до 0,72%), кількість файлів, які були дефрагментовані - 61. Витрачений час на виконання дефрагментації становить 1 час та 30 хвилин. Disk Defrag призначена для дефрагментації файлової системи за рахунок оптимізаційних і профілактичних робіт, а також упорядкування файлів для поліпшення продуктивності і швидкодії роботи програм і операційної системи Microsoft Windows.

Можливості

Простий у використанні графічний інтерфейс.

Автоматична перевірка.

Оптимізація всієї файлової системи одним кліком миші.

Консолідація вільного дискового простору.

Планувальник завдань.

Дефрагментація вибраних файлів або окремих папок.

Підтримка жорстких дисків, розмір яких перевищує терабайт.

Мінімальне споживання системних ресурсів.

Повний звіт про всі проведені дії програми.

Інтернаціональна підтримка.

Можливість дефрагментації декількох дисків одночасно.

Запустимо Auslogics Disk Defrag:


Рисунок 1.7 - головне меню програми Auslogics Disk Defrag (вкладка «Общая»)


- немає файлів.

- зайняті.

- головна файлова таблиця.

- непереміщувані файли.

- оброблювані.

- фрагментовані.

- дефрагментовані.

Виконаємо дефрагментацію за допомогою Auslogics Disk Defrag:


Рисунок 1.8 - результат виконання дефрагментації.


Рисунок 1.9 - звіт результату дефрагментації.


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

Програма має українську та російську локалізації, останню версію можна безкоштовно завантажити на офіційному сайті.

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

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

У результаті дефрагментації диску бачимо, що кількість фрагментованих файлів - 13. Загальна кількістю файлів на диску - 107901, папок - 14372 . Швидкість виконання дефрагментації - 1час 6 хвилин.

Побудуємо порівняльну таблицю розглянутих програм:


Таблиця 1.1 - порівняльна таблиця програм.

НазваПідтримка платформСумісність із системамиРобота в системіШвидкість виконання дефрагментаціїНаявність звітуР-нь фрагм. до виконання програмиР-нь фрагм. після виконання програмиDefraggler WindowsWindows32-, 64-бітніNTFS, FAT32, exFAT--23%1%IObit SmartWindows32-, 64-бітніNTFS, FAT321 час 30 хвилин+0,93%0,72%Auslogics Disk DefragWindows32-, 64-бітніNTFS, FAT321час 6 хвилин+4,21%0%

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


.2 Файлова система FAT


При форматуванні носія інформації на ньому створюється файлова система.

Форматування можна порівняти з установкою полиць з ящиками з доданим списком з відомостями, за якими можна дізнатися, в якому ящику які речі знаходяться, і які речі підходять один одному. У цьому списку також відзначені зіпсовані і порожні ящики.(File Allocation Table - «таблиця розміщення файлів») - класична файлова система, без підтримки журналювання. Існує три версії FAT - FAT12, FAT16 і FAT32.

Назва цієї файлової системи походить від метода, який застосовується для організації файлів, - таблиця розміщення файлів (File Allocation Table), яка розміщується на початку тому. Для захисту тому на ньому зберігаються дві копії FAT, на той випадок, якщо одна з них буде пошкоджена. Крім того, таблиця розміщення файлів та кореневий каталог повинні розміщуватись по суворо фіксованим адресам, що файли, які необхідні для запуску системи, були розміщені коректно.

Том, відформатований для використання файлової системи FAT, розмічається по кластерам. Розмір кластера за замовчуванням визначається розміром тома. При використанні файлової системи FAT номер кластера повинен мати довжину не більше ніж 16 біт і представляти собою одну зі степенем 2. складається з 5 областей. Вони перераховані в наступній таблиці. Також в таблиці вказані формули для розрахунку початку кожної області.


Таблиця 1.2 - структура FAT.

НазваАдреса сектора (зсув)Головний завантажувальний запис MBR(Master Boot Record)= 0Завантажувальний запис розділу PBR(Partition Boot Record)= 1C8h(4байта) у головному завантажувальному записіЗаписи FAT= завантажувальний запис розділу + 0Eh (2 байта) у завантажувальному записі розділуЗаписи каталогу= записи FAT + (16h (2 байта) * 10h (1байт)) в завантажувальному записі розділуОбласть даних (кластер 0)= записи каталогу + (11h (2байта) * 32/512) у завантажувальному записі розділу.

Розмір сектору завжди складає 512 байтів. Це число також вказане у позиції завантажувальному записі розділу 0Вh (розмір запису 2 байта) в байтах.

Кластер утворюється з декількох обєднаних секторів. Кількість секторів в кластері:


Таблиця 1.3 - кількість секторів у класторі.

Об'єм носія данихРозмір кластера FAT16Розмір кластера FAT32Розмір кластера NTFS7 Мб - 16 Мб2 КбНе підтримумується512 байтів17 Мб - 32 Мб512 байтівНе підтримумується512 байтів33 Мб - 64 Мб1 Кб512 байтів512 байтів65 Мб - 128 Мб2 Кб1 Кб512 байтів129 Мб - 256 Мб4 Кб2 Кб512 байтів257 Мб - 512 Мб8 Кб4 Кб512 байтів512 Мб - 1 Гб16 Кб4 Кб1 Кб


Кількість секторів у кластері також вказані в позиції завантажувального запису розділу 0Dh (розмір запису 1 байт).

Головний завантажувальний запис (MBR).

Він містить інформацію про жорсткий диск и його розділи.


Таблиця 1.4 - головний завантажувальний запис.

АдресаОписРозмір, байтів000hГоловний завантажувальний запис4461BEhЗапис розділу161CEhЗапис розділу161DEhЗапис розділу161EEhЗапис розділу161FEhСигнатура DIOS (55hAAh)2

Перший запис розділу містить наступні відомості:


Таблиця 1.5 - відомості в першому записі розділу .

АдресаОписРозмір поля, байтів00hСтатус розділу: 0 якщо неактивний, 80h якщо активний101hГоловка, на якій починається розділ102hДоріжка, на якій починається розділ (біти 16 - 6), і сектор, на якому починається розділ (біти 5 - 0).204hТип розділу (1h - FAT12, 4h - FAT16 < 32Мб, 6h - FAT16 > 32Мб, Bh - FAT32105hГоловка, на якому закінчується розділ106hДоріжка, на якому закінчується розділ (біти 16 - 6)б і сектор, на якому закінчується розділ (біти 5 - 0).208hВідстань між секторами MBR і першим сектором, в секторах40ChЗагальна кількість секторів в розділі4

Завантажувалиний запис розділу (PBR).

Знаходиться у розділі і містить відомості про форматування цього розділу.



Таблиця 1.6 - PBR.

АдресаОписРозмір поля, байтів00hВказання переходу + NOP303hОЕМ назва80BhКількість байтів в секторі на жорсткому диску20DhКількість секторів в кластері10EhКількість зарезервованих секторів210hКількість копій FAT, як правило, 2111hКількість можливих записів у кореневому каталозі: 512 при FAT16213hКількість секторів в менших розділах215hТип носія: F8 для жорстких дисків; F0 для дисків116hСекторів на FAT218hСекторів на доріжку21AhЧисло голівок21ChЗарезервованих секторів на початку жорсткого диску420hЗагальна кількість секторів в розділі424hНомер дисководу. Перший жорсткий диск має позначення 80h, інший 81h і т.д.226hРозширена завантажувальна сигнатура (29h)127hСерійний номер носія даних42BhНайменування носія даних1136hНазва FAT (FAT16)83EhВиконуючий код4481FEhСигнатура (55h AAh)2

Записи FAT.

Кожний запис має розмір 2 байта, а її позиція відповідає відповідному кластеру в області даних.

Запис містить в собі або номер наступного кластера файлу, або стан поточного кластера.



Рисунок 1.11 - записи FAT


Позначення:


Таблиця 1.7 - позначення.

0000Кластер, який не використовуєтьсяВід 1 до кількості кластерівНомер кластеру з наступною частиною файлуFFFF0h - FFFF6Зарезервований кластерFFF7Зіпсований кластерFFF8h - FFFFhКінець файлу (ця позиція відповідає останньому кластеру файлу)

Записи каталогу


Таблиця 1.8 - записи каталогу.

АдресаРозмір, байтівЗначення0h8И`мя файлу8h3Розширення0Bh1Властивості файлу (00ARSHDV) 00: зарезервовані біти А: біт «архівний» R: біт «тільки для читання» S: біт «системний» D: біт «каталог» V: біт «том»16h2Час18h2Дата1Ah2Перший кластер1Ch4Розмір

Область даних (кластер 0)

Дані файлу починаються у відповідному кластері без попереднього попередження. Якщо останній кластер не повний, байти які залишились мають значення 00h. Таким чином, якщо файл містить 1 байт, цей файл займе 1 Кбайт памяті (якщо розмір кластеру дорівнює двом секторам). 1023 байта кластера, які залишилися, будуть містити нуль. Щоб знайти останній байт файлу, потрібно взяти величину файлу з позиції запису каталогe 1Ch (4 байта) і відняти від нього значення (кількість кластерів - 1) * розмір кластера.

При дефрагментації даних кластери файлу приєднуються послідовно один до одного (якщо це можливо).


.3 Постановка задачі


В даному курсовому проекті треба розробити програму, яка буде виконувати дефрагментацію диску (флешки), яка буде містити:

Зручний інтерфейс;

карту тому;

інформацію про стан тому, тобто, кількість фрагментованих файлів, кількість екстент, загальна кількість файлів, відсоток фрагментованих файлів, кількість фрагментів;

повідомлення про завершення роботи програми;

повідомлення про помилки під час виконання програми;

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


. ПОБУДОВА АЛГОРИТМІВ ТА СТРУКТУР ДАНИХ


.1 Опис існуючих алгоритмів дефрагментації


.1.1 Проста дефрагментація

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

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

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

На рисунках 2.1. и 2.2. представлен, в графічному вигляді, принцип роботи алгоритма. На рисунку 2.3 зображені умовні позначення.


Рисунок 2.1 - область диску до дефрагментації.


Рисунок 2.2 - використаний «простий» метод.

Рисунок 2.3 - «Легенда».


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

Недоліки: не здатний дефрагментувати вільний простір, що призводить до сильної фрагментації не зайнятих кластерів. Не виконується ніякого сортування даних.


.1.2 Дефрагментація вільного місця або цілковита дефрагментація


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

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

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

На рисунках 2.4 и 2.5 представлено, в графічному вигляді, принцип роботи алгоритма. На рисунку 2.6 зображене умовне позначення.


Рисунок 2.4 - область диску до дефрагментації.


Рисунок 2.5 - дефрагментація вільного місця.


Рисунок 2.3 - «Легенда»


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

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


.1.3 Дефрагментація часто даних, що використовуються

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

Для мінімальної фрагментації і підтримки високої продуктивності слід використовувати даний метод регулярно.

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

На рисунках 2.7 і 2.8 представлений, в графічному вигляді, принцип роботи алгоритму. На рисунку 2.9 зображені умовні позначення.


Рисунок 2.7 - область диску до дефрагментації.


Рисунок 2.8 - дефрагментація даних, які часто використовуються.

Рисунок 2.9 - «Легенда»


Переваги: реорганізація даних підвищує продуктивність на серверних станціях. Повна дефрагментація дозволяє об'єднати більшість вільного місця на жорсткому диску.

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

За датою останнього змінення.

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

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

На рисунках 2.10 і 2.11 представлений, в графічному вигляді, принцип роботи алгоритму. На рисунку 2.12 зображені умовні позначення.

Рисунок 2.10 - область диску до дефрагментації.


Рисунок 2.11 - за датою останнього змінення.


Рисунок 2.12 - «Легенда»


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

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


.1.4 Сортування за іменем

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

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

Використання такого методу дефрагментації дозволяє прискорити процес роботи комп'ютера, зокрема завантаження операційної системи. Це пояснюється тим, що при завантаженні більшість необхідних бібліотек завантажуються з декількох каталогів «C: \ Windows \ System32 \», «C: \ Windows \ System32 \ drivers»).

Даний алгоритм рекомендується використовувати на системних дисках, на яких файли рідко змінюються.

На рисунках 2.13 і 2.14 представлений, в графічному вигляді, принцип роботи алгоритму. На рисунку 2.15 зображені умовні позначення.


Рисунок 2.13 - область диску до дефрагментації.


Рисунок 2.14 - сортування за іменем.


Рисунок 2.15 - «Легенда».


Переваги: алгоритм повної дефрагментації сортує всі файли на жорсткому диску. Підвищує швидкість роботи операційної системи.

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


2.2 Алгоритмізація


У даному підрозділі необхідно розробити загальну блок-схему роботи програми дефрагментації флешки.

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

Розглянемо алгоритм роботи першого візуального блоку MainWindows.cs (алгоритм вмісту кожної функції наведено в додатку А):

Рисунок 2.16 - алгоритм роботи першого вікна програми.


Пояснимо кожну подію:

Блок 2. Це подія, яка викликається після натиснення клавіші «Более детальный анализ». Для її реалізації спочатку створюємо змінні (максимальна кількість фрагментів, кількість фрагментів, кількість фрагментованих файлів, кількість, файлів що не переміщуються) та масив файлів. Далі перевіряємо чи був зупинений аналіз, якщо так, то програма видає повідомлення « Аналіз зупинено», якщо ні - продовжуємо аналіз. Отримуємо список фрагментів файлу (ця функція створена у класі DefragClass). Якщо отримуємо біт стоп, то повертаємось. Отримуємо ширину зображення карти тому (за допомогою функції Width). Далі перевіряємо файл, якщо він порожній, то перейти до іншого файлу. Якщо кількість екстент (знаходяться у класі DefragClass) у файлі більше 3-х, то додаємо цей файл у список, якщо ж ні - заносимо в список але не виводимо на екран. Кількість фрагментів збільшуємо на кількість екстент у файлі. Якщо кількість знайдених екстент більше максимальної кількості фрагментів, то присвоюємо максимальному значенню знайдене. Після цього визначаємо чи файл може бути переміщений, якщо ні, то кількість не переміщених файлів збільшується на 1 (їх ми зафарбовуємо червоним кольором на карті). Якщо кількість фрагментів дорівнює 0, то цей файл не фрагментований. Після того, як знайшли всі потрібні данні виводимо їх на екран.

Блок 3. Ця подія посилається на другий візуальний блок. Тобто, якщо після отримання списку фрагментованих файлі, вибираємо один за допомогою кліку мишки, то ми після натиснення «Дефрагментировать файл» автоматично переходимо до іншої форми.

Блок 4. Ця подія відбувається сомою першою при запуску програми. Вона відповідає за початковий поверхневий аналіз тому. Де спочатку створюється масив кластерів файлу на карті. Далі отримуємо список неперервно вільних кластерів ( ця функція розроблена у класі DefragClass). Якщо карта кластеру не порожня, звільнюємо її та за допомогою вбудованих функцій зафарбовуємо вільні місця білим кольором.

Блок 5. Подія, яка відповідає за автоматичну побудову поверхневого аналізу. Я подія реалізується за допомогою вбудованого класу EventArgs.

Розглянемо алгоритм другого візуального блоку DefragmentFile.cs(алгоритм вмісту кожної функції наведено в додатку А):



Рисунок 2.17- алгоритм роботи другого вікна програми.


Блок 6. Дана подія відбувається, якщо користувач бажає вибрати файл не зі списку, а з іншого місця. Для реалізації цього блоку були використані стандартні функції відкриття діалогового вікна (CD.Title - відкрити діалогове вікно та задати його назву, CD.Filter - відкрити та задати фільтр, CD.ShowDialog() - відкрити діалогове вікно; txtFileName.Text- поле з імям файлу ). Після вибору файлу на формі виводиться кількість кластерів (за допомогою функції cmdRefresh_Click, яка спрацьовує автоматично за допомогою стандартного класу EventArgs()).

Блок 7. Дана функція необхідна для подальшого її використання у дефрагментації. Вона полягає у тому, що ми створюємо виключення (помилку) за допомогою try-catch-throw. Це виключення відстежує за допомогою catch задані у try помилки, і якщо такі є зявляється повідомлення.

Блок 8. Ця подія призначена для повідомлення користувача про вдале або не вдале дефрагментування. Для її реалізації спочатку було створено два флага(bDefragmenting - вказує на те чи відбувається дефрагментування (true) чи ні - bDefragStop(false)) та змінна ret, яка приймала результат дефрагментуваня. Якщо не зупинка дефрагментації, то продовжуємо процес. Якщо трапилась зупинка, тобто bDefragStop, то виводимо повідомлення про зупинку процесу. В іншому випадку записуємо результат у ret та виводемо повідомлення про успішне завершення процесу завдяки switch-case-default. Після виконання дефрагментації у текстовому полі автоматично зяблюється список кластерів одного цілого ланцюга (виконується за замовчуванням за допомогою EventArgs()).

Блок 9. Саме у цій ця події відображаються список кластерів файлу, які знаходяться в класі DefragClass.cs функцією GetFileBitmap.

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

Розглянемо алгоритм роботи класу (алгоритм вмісту кожної функції наведено в додатку А):


Рисунок 2.18 - загальний алгоритм роботи програми.

Рисунок 2.19 - продовження алгоритму роботи програми.

Перш за все для розробки функцій створимо структури, які будуть використовуватись.

Блок 20. Ця функція відповідає за отримання списку кластерів файлу. Для її реалізації, перш за все створимо змінну, яка характеризує назву файлу (File). Далі створюємо змінну FileBitmap структури RETRIEVAL_POINTERS_BUFFER, яка описує карту розміщення. Початкову кількість екстент приймаємо рівную 0. Створюємо початкову адресу структури LARGE_INTEGER, яка використовується для представлення 64-х бітного знакового цілочисельного значення і містить змінні, які визначають молодші та старші 32 біти. Потім за допомогою функції CreateFile задаємо параметри файлу та відкриваємо його, записуючи дескриптор у змінну hfile. Якщо отримали, що файл зайнятий іншим процесом, то вказуємо, що його переміщувати не можна і знову задаємо параметри файлу функцією CreateFile. (якщо файл зайнят іншим процесом, то повертаємо результат списку кластерів файлу (result). Ця змінна описана в структурі STARTING_VCN_INPUT_BUFFER). В іншому випадку вказуємо, що кластери файлу можна переміщувати. Обнуляємо адреса структури LARGE_INTEGER.

Далі виконуємо безпосередньо пошук кластерів файлу на диску. Виконуємо уву, поки не отримали всіх кластерів файлу. Для цього використовуємо код FSCTL_GET_RETRIEVAL_POINTERS (для використання цього коду треба викликати функцію DeviceIoControl). Результат записується у змінну FileBitmap. Далі визначаємо чи перевищує кількість екстент 512, якщо так, то додаємо цей фрагмент в кінець та записуємо адресу екстента і повертаємось у цикл.

Блок 21. Ця функція необхідна для ProgressBar (поле, в яеому відображається процес аналізу). Створюємо список файлів. За допомогою DirectoryInfo отримуємо список усіх файлів у томі. Визначаємо розмір масиву. Для цього розміру, якщо в створену на початку змінну tmp потрапив байт стоп, то отримали потрібну інформацію, якщо ні, то збільшуємо розмір бару. Для того, щоб вікно оновлювалось і код міг обробляти інші події застосовується Application.DoEvents().

Блок 22. Для переміщення файлів використовуємо структуру FSCTL_MOVE_FILE та записуємо їх у змінну tempRefParam. Якщо змінна ret (в неї записуємо результат дефрагментації) дорівнює 0, то повідомляємо про помилку.

Блок 23. Безпосередньо дефрагментації файлу. Створюємо список вільних кластерів (volFreeClusters). Отримуємо дескриптор тому та записуємо його у змінну volHandle. Якщо том зайнятий іншим процесом, повідомляємо про помилку. Записуємо в volFreeClusters карту неперервно вільних кластерів, а у fClusters список кластерів файлу. Якщо файл містить більше одного екстента, то отримуємо дескриптор цього файлу (якщо файл зайнятий іншим процесом повідомляємо про помилку та вивільнюємо дескриптор, який пов'язаний із томом). Виконаємо переміщення екстент файлу за допомогою вже створеної функції MoveFileExtent, результат запишемо у змінну result.

Блок 24. Отримуємо дескриптор тому за допомогою функції CreateFile.

Блок 25. Вивільнюємо дескриптор, який пов'язаний з томом, за допомогою підключення спеціальної бібліотеки "kernel32.dll".

Блок 26. Отримаємо вільні діапазони карти кластерів за допомогою функції VOLUME_BITMAP_BUFFER. Виконаємо побітну операцію зсуву для визначення чи співпадають верхні та нижні адреси, якщо так, то доріжка розміщена не у файлі, а на томі. Її адресація починається з 0. Шукаємо вільні кластери (функція GetVolumeBitmap)та копіюємо їх у масив результату дефрагментації.

Блок 27. Функція отримання вільних кластерів (GetVolumeBitmap) використовуючи функцію VOLUME_BITMAP_BUFFER. Виконуємо цикл, поки неперервний ланцюг вільних кластерів, отримуємо дескриптор тому, перевіряємо кластери та збільшуємо адресу (повертаємо у цикл). Потім повертаємо список вільних кластерів.

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











Рисунок 2.20 - Схема взаємодії блоків програми.


.3 Опис роботи програми


Після запуску програми користувач обирає том та одразу отримує карту фрагментації диску. Функція, яка виконує цю дію - drvLetters_SelectedIndexChanged().

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

Після натиснення на кнопку «Дефрагментировать файл» відкривається наступне вікно програми, в якому можна одразу дефрагментувати обраний файл на попередньому кроці або обрати інший файл за допомогою функції cmdBrowse_Click().

Після натискання кнопки «Обн.», тобто оновлення, зявляється інформація про про кількість екстентів та кластерів. Цю дію виконую функція cmdRefresh_Click().

Останнім кроком програми є дефрагментування файлу, після натиснення відповідної кнопки відбувається процес дефрагментації. Цю дію виконує функція cmdDefrag_Click(). В результаті успішності виконання або навпаки зявляється повідомлення. Якщо ви бажаєте на деки час зупинити дефрагментацію потрібно використовувати кнопку «Остановка дефрагментации».

Для перевірки виконання програми можна повернутись в перше вікно та знову виконати аналіз, результатом якого буде зменшення кількості дефрагментованих файлів на один.



3. КОДУВАННЯ


3.1 Використані бібліотеки та структури даних


Розглянемо бібліотеки, які були підключені при написанні програми:

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

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

System.Drawing. Простір імен забезпечує доступ до функціональних можливостей графічного інтерфейсу GDI +.

System.IO. Простір імен System.IO містить типи, які дозволяють читання і запису файлів і потоків даних, і типи, які забезпечують основну файлів і каталогів підтримку..Windows.Forms простір імен містить класи для створення програми Windows, які приймають всі переваги функцій користувальницького інтерфейсу предикати і функції, доступних в операційній системі Microsoft Windows.

System.Runtime.InteropServices. Простір імен надає широкий спектр членів, що підтримують COM-взаємодія та служби виклику некерованого коду..Diagnostics. Надає набір методів і властивостей, що використовуються при трасуванні виконання коду..Collections. Простір імен System.Collections містить інтерфейси і класи, які визначають різні колекції об'єктів, такі як списки, черги, двійкові масиви, хеш-таблиці та словники..VisualBasic. Простір імен Microsoft.VisualBasic містить типи, які підтримують середовище виконання Visual Basic в Visual Basic.

"kernel32.dll" - додаткова бібліотека, яка відповідає за обробку пам'яті, операцій введення-виведення і переривань в операційних системах Windows. В нашому випадку вона необхідна для роботи на пряму з диском

Розглянемо змінні, які були використані в програмі:


Таблиця 3.1 - Основні змінні програми та їх опис

ЗміннаТипОписDELETEintЗмінна для надання права на видаленняFILE_READ_ACCESSintЗмінна для надання дозволу на читання вмісту файлуFILE_FLAG_BACKUP_SEMANTICSintЗмінна для надання права створення резервної копії файлуOPEN_EXISTINGintВідкрити тільки існуючі файлиFILE_SHARE_READintФайли для читанняFILE_SHARE_WRITEintФайли для записуGENERIC_READintЗмінна для отримання права на читання файла та його атрибутиGENERIC_WRITEintЗмінна для запису з файлуExtentCountintЗмінна, яка визначає кількість екстентFileHandleintДескриптор файлуClusterCountintКількість кластерівERROR_MORE_DATAintЗмінна для повідомлення про системну помилкуMoveableintПереміщення файлівbtintЗмінна битstatusintЗмінна статусу кластераxintЗмінна лічильникhFileintЗмінна файлуubintВерхній межа файлуvolHandleintДескриптор томуnClusterFreeintКількість вільних кластерівmaxNumFragintМаксимальна кількість фрагментівnumFragintКількість фрагментівnumFragFilesintКількість фрагментованих файлівnumNonMoveableintКількість файлів, що не переміщуютьсяvolSizeintРозмір томуwintШирина зображенняbStopboolТип, який приймає значення true або false. Змінна означає біт стоп.bDefragStopboolЗмінна зупинки дефрагментаціїbDefragmentingboolЗмінна процесу дефрагментації.bCanStopboolЗмінна зупинки аналізуFilestringВикористовується для знаходження списку кластерів файлуBufferbyteМасив, який використовується для отримання списку вільних кластерів.bitShiftsbyteМасив,на скільки вліво переміщуватись при пошуку вільних кластерів.ExtentsList<Extent>Список екстентret tmpList<VolumeFreeClusters>Список вільних кластерів

Структури, які були використані при написанні програми:

Структура STARTING_VCN_INPUT_BUFFER (блок 11). Ця структура коду FSCTL_GET_RETRIEVAL_POINTERS <#"352" src="doc_zip44.jpg" />

Рисунок 3.1 - перша форма.


DefragmentsFile


Рисунок 3.2 - друга форма.


На першій форму розміщено: (drvLettes) - відповідає за вибір диску;(picVolume) - відповідає за виведення зображення карти тому;(LvFiles) - відповідає за виведення переліку фрагментованих файлів;(lblSummary) - відповідає за представлення інформації про том;(PB) - відповідає за відображення процесу аналізу тому;(cmdAnaliseMore) - кнопка, яка запускає процес аналізу;(cmdGefrag) - кнопка, яка відкриває другу форму.

На другій формі розміщено:(txtFileName) - текстове поле, яке відповідає за представлення шляху файлу;(cmdBrowse) - кнопка, після натиснення якої відкривається діалогове вікно, в якому можна вибрати файл не з отриманого списку;(cmdRefresh) - кнопка, після натиснення якою в ListBox зявляється інформація;

ListBox (lstCluster) - відповідає за надання інформації про адресу кластеру на томі та кількість кластерів у файлі(cmdDefrag) - кнопка, після натиснення якої відбувається процес дефрагментації вибраного файлу, після завершення процесу зявляється повідомлення про успішне завершення процесу.



4. ТЕСТУВАННЯ


.1 Основна программа


Лістинг програми наведений в додатку Б.

Рекомендації

Дана програма написана у середовищі програми Microsoft Visual Studio 2012 на мові С#/ Мова є C подібною, має невеликі відмінності, які значно покращують якість коду. Ця мова має безліч бібліотек, велика кількість готових функцій, має безліч можливостей, написання коду займає значно менше часу, в порівнянні з іншими мовами.

Вимоги до системи. Розроблена програма не має визначених системних вимог, для її реалізації згодиться будь - який компютер, на якому встановлена Microsoft Visual Studio 2012 . Але все таки наведемо характеристики компютера, на якому була зроблена дана програма.


Таблиця 4.1 - Вимоги до системи.

НазваВимогиПлатформаX86Операційна системаWindows XPПроцесорAMD Athlon (tm) '' Dual-core M 320Частота2.10 GHzОбєм фізичної памяті2 048 МБПотужність процесора34.92 ВтДисплейATI Mobility Radeon HD 4500 Series

4.2 Тестування програми


Після запуску файлу Defrag.exe, програма має вигляд:

Рисунок 4.1 - Зовнішній вигляд програми.


Одразу ми бачимо, що представлена карта тому. Для того, щоб проаналізувати, тобото виявити фрагментовані файли, отримати інформацію про фрагменти, виконаємо «Более глибокий анализ…».

В результаті виконання чого бачимо наступне:


Рисунок 4.2 - результат аналізу.

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

Далі вибираємо файл, який бажаємо дефрагментувати та натискаємо кнопку «Дефрагментировать файл». Після чого зявляється вікно, де вказано шлях файлу. Натиснемо кнопку «Обн.», тобто оновити та отримуємо:


Рисунок 4.3 - результат оновлення інформації файлу.


Далі, виконуємо дефрагментацію файлу, натиснувши кнопку «Дефрагментировать». Після успішної дефрагментації отримуємо наступне:


Рисунок 4.4 - результат успішної дефрагментації.

Після натиснення кнопки «ОК». Отримуємо


Рисунок 4.5 - отримана адреса файлу та кількість кластерів у ньому.


Щоб пересвідчитись у виконання дефрагментації виконаємо повторний аналіз:


Рисунок 4.6 - результат повторного аналізу.


В результаті повторного аналізу бачимо, що кількість фрагментованих файлів зменшилась на той один файл, що ми дефрагментували.

ВИСНОВКИ


У процес виконання роботи була досліджена FAT система. Досліджена причина фрагментації файлів, наслідки даного явища. Під час виконання завдання були вивчені популярні алгоритми для дефрагментації файлів, їх методи роботи, особливості, переваги і недоліки. Був проведений аналіз існуючих програм дефрагментації дисків, їх порівняння, визначення найкращого. Додаток розроблювався в універсальному середовищі розробки Microsoft Visual Studio 2012. Для забезпечення більш високої швидкості роботи дефрагментатора код був написаний на мові високого рівня С#, відкомпільований стандартним компілятором Microsoft.

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

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



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

дефрагментація диск файловий сортування

Сайт «program.com.ua» [ Електронний ресурс] - Режим доступу: <http://programy.com.ua/ru/iobit_smart_defrag/>

Сайт «Компьютерный портал… или портал компьюторщика» [Електронний ресурс] - Режим доступу: <http://it.sander.su/disk-fragmentation.php>

Сайт «Заметки сис. админа» [Електронний ресурс] - Режим доступу: <http://sonikelf.ru/defragmentiruem-zhestkie-diski/>

Сайт «PIClist RUS» [Електронний ресурс] - Режим доступу: <http://piclist.ru/S-FAT-MMC-RUS/S-FAT-MMC-RUS.html>

Стаття «Файловая система FAT» [Електронний ресурс] - Режим доступу: <http://www.shalumov.pp.ru/fat.htm>

Сайт «ComputerBooks» [Електронний ресурс] - Режим доступу: <http://www.computerbooks.ru/%D0%BA%D0%BD%D0%B8%D0%B3%D0%B0/4.%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D0%B5%D0%B5%20%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%BE%20windows%20(%D0%B3%D0%BB.%2012-14)>


Міністерство освіти і науки, молоді та спорту України Державний вищий навчальний заклад «Криворізький національний університет» Факультет інф

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ