Студопедия  
Главная страница | Контакты | Случайная страница

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

Схема алгоритму

Читайте также:
  1. II. ОБОБЩЕННАЯ СТРУКТУРНАЯ СХЕМА КОМПЬЮТЕРА
  2. RS-триггеры на интегральных микросхемах.
  3. А) Схема
  4. Алгоритм и требования к алгоритму (свойства алгоритма )
  5. Аминокислоты как класс биологически активных веществ. Триптофан и схема его промышленного синтеза.
  6. БАНКОВСКАЯ СХЕМА
  7. Блок-схема
  8. Блок-схема противоэпидемических мероприятий в очаге инфекционного заболевания.
  9. Бунташное время, причины, схема развития событий.
  10. В реальной практике стратегический и оперативный контроллинг достаточно тесно взаимодействуют друг с другом в процессе реализа­ций функций менеджмента (Приложение 4). СХЕМА

Програма тестування НГМД складається з двох процедур та головної програми.

Процедура Verif(Ngol,Ndor,Nsek:byte) виконує верифікацію дискети, використовуючи системну функцію 04h переривання 13h, яка була описана вище. Функція Verif реалізована за наступним алгоритмом:

- запис у регістри cl,ch та dh номера сектора, доріжки та голівки відповідно;

……..

reg.cl:=Nsek;

reg.ch:=Ndor;

reg.dh:=Ngol;

….

- посилання у регістр ah номера функції ($04);

reg.ah:=$04;

….

- у регістр dl – номер диска ($00 – диск А) та виклик 13 переривання;

reg.dl:=$00;

intr($13,reg);

- перевірка регістра ah: якщо 1 – то помилка.

Процедура Geom виводить на екран геометрію диска, використовуючи описану вище системну функцію 08h переривання 13h. Алгоритм функції Geom описано нижче:

- у регістр ah – номер системної функції ($08);

reg.ah:=$08;

- у регістр dl – номер диска ($00 – диск А);

reg.dl:=$00;

- виклик 13 переривання;

intr($13,reg);

- вивід на екран кількості голівок, циліндрів та секторів, для цього до значення регістрів dh та ch (які містять інформацію про кількість голівок та циліндрів) додаємо 1, оскільки циліндри та голівки починають рахуватися з 0;

Heads:=reg.dh+1;

Cyls:=reg.ch+1;

Sectors:=reg.cl;

 

- розрахунок об’єму диска шляхом знаходження добутка між кількістю секторів, доріжок, голівок та розміром сектору (512), та вивід його на екран;

V:=(Heads*Cyls*Sectors*t)/1024;

writeln('объём диска: ',V:11,'Mb');

 

У головній програмі спочатку викликається функція Geom для отримання інормації про кількість секторів, циліндрів та голівок на диску, після чого вводяться початкові та кінцеві номери діапозону тих голівок, доріжок та секторів, які необхідно перевірити. Далі організовано три цикла: перший для голівок, другий для циліндрів і третій для секторів. Для останнього циклу підраховується кількість проходів шляхом ділення без залишку різниці між кінцевим та початковим номерами діапазону секторів. В ціх циклах викликається процедура Verif за алгоритмом “Метелика”, який був описаний вище.

Перед викликом процедури Verif та після нього викликається функція GetTime(h,m,s,s100), за допомогою якої визначаємо час доступу до сектора.

....

for i:=NgBeg to NgFin do

for j:=NdBeg to NdFin do

begin

k:=((nsfin-nsbeg) div 2)+1;

while k<>0 do

begin

GetTime(h,m,s,s100);

Verif(i,j,nsbeg);

GetTime(hk,mk,sk,s100k);

Verif(i,j,nsfin);

nsbeg:=nsbeg+1;

nsfin:=nsfin-1;

k:=k-1;

end;

end;

writeln('Time: ',sk-s,' sec ',s100k-s100,' Sec/100'); readkey;

End.

 

ТЕКСТ ПРОГРАМИ.

program testFD;

uses crt,dos;

var

reg:REGISTERS;

NgBeg,NgFin:byte;

NdBeg,NdFin:byte;

NsBeg,NsFin:byte;

i,j,k:integer;

h,m,s,s100,hk,mk,sk,s100k:word;

{процедура перевірки диска}

Procedure Verif(Ngol,Ndor,Nsek:byte);

begin

reg.cl:=Nsek; {отримання номера сектора}

reg.ch:=Ndor; {отримання номера доріжки}

reg.dh:=Ngol; {отримання номера голівки}

reg.ah:=$04; {виклик функції 04h }

reg.dl:=$00; {00 – диск А (01 – В, 80 – С)}

intr($13,reg); {виклик переривання 13h}

{перевірка на помилку}

if reg.ah=1 then writeln('Error ',' Nsek= ',Nsek)

else

writeln('Nsek= ',Nsek,' Ndor= ',Ndor,' Ngol= ',Ngol,' OK');

end;

{Геометрія диска}

Procedure Geom;

var v,t:real;

Heads:byte;

Cyls:byte;

Sectors:byte;

begin

reg.ah:=$08; {виклик функції 08h}

reg.dl:=$00; {диск А}

intr($13,reg); {виклик переривання 13h}

Heads:=reg.dh+1; {кількість голівок}

Cyls:=reg.ch+1; {кількість циліндрів}

Sectors:=reg.cl; {кількість секторів}

writeln('Heads: ',Heads); {вивід кількості голівок}

writeln('Cyls: ',Cyls); {вивід кількості циліндрів}

writeln('Sectors: ',Sectors); {кількість циліндрів}

t:=512;

V:=(Heads*Cyls*Sectors*t)/1024; {розрахунок об’єму диска } writeln('объём диска: ',V:11,'Mb'); {вивід об’єму диска }

end;

{головна програма}

Begin

ClrScr;

Geom;

readkey;

 

{вводимо параметри діапазону}

 

writeln('Введите начальный номер головки');

readln(NgBeg);

writeln('Введите конечный номер головки');

readln(NgFin);

writeln('Введите начальный номер цилиндра');

readln(NdBeg);

writeln('Введите конечный номер цилиндра');

readln(NdFin);

writeln('Введите начальный номер сектора');

readln(NsBeg);

writeln('Введите конечный номер сектора');

readln(NsFin);

 

for i:=NgBeg to NgFin do {цикл для голівок}

for j:=NdBeg to NdFin do {цикл для доріжок}

begin

k:=((nsfin-nsbeg) div 2)+1; {кількість проходів}

for t:=0 to k-1 do {цикл для сеторів}

begin

GetTime(h,m,s,s100); {отримуємо значення часу}

Verif(i,j,nsbeg+t);

GetTime(hk,mk,sk,s100k);

Verif(i,j,NsFin-t);

end;

end;

{визначаємо час доступу до сектора}

 

writeln('Timeb: ',m,' min ',s,' sec ',s100,' Sec/100');

writeln('Timef: ',mk,' min ',sk,' sec ',s100k,' Sec/100');

readkey;

End.

 

Результати роботи програми:

Запустимо програму для визначення часу доступу до сектора на одній доріжці

Отримали результат:

 

Heads: 2

Cyls: 80

Sectors: 18

объём диска: 1.44E+0003Mb

Введите начальный номер головки

Введите конечный номер головки

Введите начальный номер цилиндра

Введите конечный номер цилиндра

Введите начальный номер сектора

Введите конечный номер сектора

Nsek= 3 Ndor= 4 Ngol= 1 OK

Nsek= 6 Ndor= 4 Ngol= 1 OK

Nsek= 4 Ndor= 4 Ngol= 1 OK

Nsek= 5 Ndor= 4 Ngol= 1 OK

Timebeg: 15 min 38 sec 12 Sec/100

Timefin: 15 min 38 sec 29 Sec/100

 

Тобто бачимо що час доступу складає 17 Sec/100

Також видно що сектори перевіряються за алгоритмом “Метелика”.

 

Визначимо час доступу до секторів різних доріжок:

Результат:

 

Введите начальный номер головки

Введите конечный номер головки

Введите начальный номер цилиндра

Введите конечный номер цилиндра

Введите начальный номер сектора

Введите конечный номер сектора

Nsek= 4 Ndor= 2 Ngol= 1 OK

Nsek= 5 Ndor= 2 Ngol= 1 OK

Nsek= 4 Ndor= 3 Ngol= 1 OK

Nsek= 5 Ndor= 3 Ngol= 1 OK

Timebeg: 22 min 59 sec 83 Sec/100

Timefin: 23 min 0 sec 5 Sec/100

 

Тобто час доступу дорівнює 22 Sec/100.

Визначимо час доступу до секторів різних доріжок

Результат:

 

Введите начальный номер головки

Введите конечный номер головки

Введите начальный номер цилиндра

Введите конечный номер цилиндра

Введите начальный номер сектора

Введите конечный номер сектора

Nsek= 7 Ndor= 2 Ngol= 0 OK

Nsek= 8 Ndor= 2 Ngol= 0 OK

Nsek= 7 Ndor= 3 Ngol= 0 OK

Nsek= 8 Ndor= 3 Ngol= 0 OK

Nsek= 7 Ndor= 2 Ngol= 1 OK

Nsek= 8 Ndor= 2 Ngol= 1 OK

Nsek= 7 Ndor= 3 Ngol= 1 OK

Nsek= 8 Ndor= 3 Ngol= 1 OK

Timebeg: 24 min 37 sec 22 Sec/100

Timefin: 24 min 37 sec 44 Sec/100

 

Бачимо, що час доступу – 22 Sec/100.

 

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

 




Дата добавления: 2014-12-18; просмотров: 25 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.013 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав