Flatik.ru

Перейти на главную страницу

Поиск по ключевым словам:

страница 1
Федеральное агентство по образованию

Государственное образовательное учреждение

Высшего профессионального образования

Тульский государственный университет

Кафедра электронных вычислительных машин

Эксплуатация ЭВМ.


Лабораторная работа №6.

«РАЗРАБОТКА программного обеспечения ТЕСТИРОВАНИЯ НГМД»




Выполнили:

студенты гр. 250261

Косухин К.Ю.

Сафронова А.Д.

Мантаева З.М.

Грибченков Р.Ю.


Проверил:

Лебеденко Ю.И.


  1. Цель и задачи работы:

Целью работы является изучение принципов функционирования и освоение методов тестирования накопителей на гибких магнитных дисках (НГМД) и их реализация в программном обеспечении.




  1. Задание на работу:

В соответствии с вариантом задания, выданным преподавателем, разработать программу, реализующую тестирование исправности накопителя ГМД и поверхности носителя информации.

Задания:

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

2) Тестирование исправности шагового двигателя с использованием команд пошагового перемещения блока головок.

3) Тестирование исправности блока головок и поверхности носителя с использованием команд чтения записи и чтения произвольного сектора.

4) Тестирование исправности датчика защиты дискеты от записи.



  1. Краткие теоретические сведения:

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

Стандартный формат дискеты типа HD (High Density – высокая плотность) – 80 дорожек на каждой из сторон, 18 секторов по 512 байт на дорожке. Уплотненный формат – 82 или 84 дорожки, до 20 секторов по 512 байт, или до 11 секторов по 1024 байта.

Операционная система MS-DOS предоставляет широкий набор функций для работы с дисковыми накопителями [6].

Для определения наличия того или иного оборудования в системе используется прерывание 11h.

Выход: AX = битовые флаги оборудования

Нижний уровень работы с дисками образуют функции прерывания INT 13h.

Функция 00h – сброс системы контроллера дисковода

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

Функция 01h – определить состояние дисковода

Возвращает в AL байт состояния дисковода после последней операции ввода-вывода.

Функция 02h – чтение сектора

Функция 03h – запись сектора

Функция 04h – верификация секторов

Функция 05h – форматирование дорожки

Функция 08h – параметры дискового накопителя

Функция 15h – тип дискового накопителя

Функция 16h – смена диска



  1. Листинги программ:




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

#include

REGISTERS regs;



extern void intr(int, REGISTERS* regs); // вызов прерывания

short floppy_check() {

intr(11h, &regs);



return regs.ax;

}

short floppy_write_sector(char* buffer, short len) {

regs.ah = 03h; // функция записи в сектор

regs.al = 1; // пишем один сектор

regs.ch = 0; // номер трека

regs.cl = 0; // пишем в нулевой сектор

regs.dh = 0; // номер поверхности (головки)

regs.dl = 0; // номер накопителя

regs.es = buffer; // начало массива

regs.bx = len; // длина массива

intr(13h, &regs);



return regs.cf;

}

short floppy_read_sector(char* buffer, short len) {

regs.ah = 02h; // функция чтения из сектора

regs.al = 1; // читаем один сектор

regs.ch = 0; // номер трека

regs.cl = 0; // читаем из нулевого сектора

regs.dh = 0; // номер поверхности (головки)

regs.dl = 0; // номер накопителя

regs.es = buffer; // начало массива

regs.bx = len; // длина массива

intr(13h, &regs);



return regs.cf;

}

void main() {

char buffer[512];

short result;

result = check_floppy();



if(result && 0x1 == 0) { // нулевой бит содержит показывает присутствие дискового накопителя

printf("дискета отсутствует");



return;

}

buffer = "test";



if(floppy_write_sector(buffer, 512) == 1) {

printf("ошибка записи сектора");



return;

}

if(floppy_read_sector(buffer, 512) == 1) {

printf("ошибка чтения сектора");



return;

}

if(strcmp("test", buffer) != 0) {

printf("ошибка чтения сектора");



return;

}

printf("Дисковод работает без ошибок");



}



Тестирование исправности шагового двигателя с использованием команд пошагового перемещения блока головок.

#include

REGISTERS regs;



extern void intr(int, REGISTERS* regs); // вызов прерывания

short floppy_check() {

intr(11h, &regs);



return regs.ax;

}

short floppy_write_sector(short sector_index, char* buffer, short len) {

regs.ah = 03h; // функция записи в сектор

regs.al = 1; // пишем один сектор

regs.ch = 0; // номер трека

regs.cl = sector_index; // пишем в сектор с индексом sector_index

regs.dh = 0; // номер поверхности (головки)

regs.dl = 0; // номер накопителя

regs.es = buffer; // начало массива

regs.bx = len; // длина массива

intr(13h, &regs);



return regs.cf;

}

short floppy_read_sector(short sector_index, char* buffer, short len) {

regs.ah = 02h; // функция чтения из сектора

regs.al = 1; // читаем один сектор

regs.ch = 0; // номер трека

regs.cl = sector_index; // читаем сектора с индексом sector_index

regs.dh = 0; // номер поверхности (головки)

regs.dl = 0; // номер накопителя

regs.es = buffer; // начало массива

regs.bx = len; // длина массива

intr(13h, &regs);



return regs.cf;

}

void main() {

char buffer[512];

short result;

short i;

result = check_floppy();



if(result && 0x1 == 0) { // нулевой бит содержит показывает присутствие дискового накопителя

printf("дискета отсутствует");



return;

}

// тестируем первые 3 сектора

for(i = 0; i < 3; i++) {

buffer = "test";



if(floppy_write_sector(i, buffer, 512) == 1) {

printf("ошибка записи сектора");



return;

}

if(floppy_read_sector(i, buffer, 512) == 1) {

printf("ошибка чтения сектора");



return;

}

if(strcmp("test", buffer) != 0) {

printf("ошибка чтения сектора");



return;

}

}

printf("Дисковод работает без ошибок");



}



Тестирование исправности блока головок и поверхности носителя с использованием команд чтения записи и чтения произвольного сектора.

#include

#include

REGISTERS regs;

extern void intr(int, REGISTERS* regs); // вызов прерывания
short floppy_check() {

intr(11h, &regs);



return regs.ax;

}
short floppy_count_sectors() {

short result;

regs.ah = 08h; // функция сбора параметров дискового накопителя

regs.dl = 0; // номер накопителя

intr(13h, &regs);



if(regs.cf) // если была ошибка

result = -1; // устанавливаем количество секторов в -1



else

result = regs.cl && 0x3f; // количество секторов хранится в первых шести битах



return result;

}
short floppy_write_sector(short sector_index, char* buffer, short len) {

regs.ah = 03h; // функция записи в сектор

regs.al = 1; // пишем один сектор

regs.ch = 0; // номер трека

regs.cl = sector_index; // пишем в сектор с индексом sector_index

regs.dh = 0; // номер поверхности (головки)

regs.dl = 0; // номер накопителя

regs.es = buffer; // начало массива

regs.bx = len; // длина массива

intr(13h, &regs);



return regs.cf;

}
short floppy_read_sector(short sector_index, char* buffer, short len) {

regs.ah = 02h; // функция чтения из сектора

regs.al = 1; // читаем один сектор

regs.ch = 0; // номер трека

regs.cl = sector_index; // читаем сектора с индексом sector_index

regs.dh = 0; // номер поверхности (головки)

regs.dl = 0; // номер накопителя

regs.es = buffer; // начало массива

regs.bx = len; // длина массива

intr(13h, &regs);



return regs.cf;

}
void main() {

char buffer[512];

short result;

short sectors_count;

short section_index;

result = check_floppy();



if(result && 0x1 == 0) { // нулевой бит содержит показывает присутствие дискового накопителя

printf("дискета отсутствует");



return;

}

sectors_count = floppy_count_sectors();



if(sectors_count == -1) {

printf("Не удается собрать информацию о дисковом накопителе");



return;

}

section_index = rand() % sectors_count;

buffer = "test";

if(floppy_write_sector(section_index, buffer, 512) == 1) {

printf("ошибка записи сектора");



return;

}

if(floppy_read_sector(section_index, buffer, 512) == 1) {

printf("ошибка чтения сектора");



return;

}

if(strcmp("test", buffer) != 0) {

printf("ошибка чтения сектора");



return;

}

printf("Дисковод работает без ошибок");



}



Тестирование исправности датчика защиты дискеты от записи.

#include

#include

REGISTERS regs;

extern void intr(int, REGISTERS* regs); // вызов прерывания
short floppy_check() {

intr(11h, &regs);



return regs.ax;

}
short floppy_count_sectors() {

short result;

regs.ah = 08h; // функция сбора параметров дискового накопителя

regs.dl = 0; // номер накопителя

intr(13h, &regs);



if(regs.cf) // если была ошибка

result = -1; // устанавливаем количество секторов в -1



else

result = regs.cl && 0x3f; // количество секторов хранится в первых шести битах



return result;

}
short floppy_write_sector(short sector_index, char* buffer, short len) {

regs.ah = 03h; // функция записи в сектор

regs.al = 1; // пишем один сектор

regs.ch = 0; // номер трека

regs.cl = sector_index; // пишем в сектор с индексом sector_index

regs.dh = 0; // номер поверхности (головки)

regs.dl = 0; // номер накопителя

regs.es = buffer; // начало массива

regs.bx = len; // длина массива

intr(13h, &regs);



return regs.cf;

}
short floppy_read_sector(short sector_index, char* buffer, short len) {

regs.ah = 02h; // функция чтения из сектора

regs.al = 1; // читаем один сектор

regs.ch = 0; // номер трека

regs.cl = sector_index; // читаем сектора с индексом sector_index

regs.dh = 0; // номер поверхности (головки)

regs.dl = 0; // номер накопителя

regs.es = buffer; // начало массива

regs.bx = len; // длина массива

intr(13h, &regs);



return regs.cf;

}
void main() {

char buffer[512];

short result;

result = check_floppy();



if(result && 0x1 == 0) { // нулевой бит содержит показывает присутствие дискового накопителя

printf("дискета отсутствует");



return;

}

printf("убедитесь, что у используемой дискеты используется защита от записи\n");



if(floppy_read_sector(section_index, buffer, 512) == 1) {

printf("ошибка чтения сектора");



return;

}

buffer = "test";



if(floppy_write_sector(section_index, buffer, 512) == 0) {

printf("датчика защиты дискеты от записи неисправен");



return;

}

printf("Дисковод работает без ошибок");



}




Тула 2011

Лабораторная работа №6. «Разработка программного обеспечения тестирования нгмд»

Целью работы является изучение принципов функционирования и освоение методов тестирования накопителей на гибких магнитных дисках (нгмд) и их реализация в программном обеспечении

271.49kb.

14 10 2014
1 стр.


Лабораторная работа №2. «Разработка программного обеспечения тестирования памяти»

Целью работы является освоение методов тестирования запоминающих устройств и их реализация в прикладном программном обеспечении

32.07kb.

01 10 2014
1 стр.


«Понятие программы, программного обеспечения. История и перспективы развития по. Классификация и общая характеристика по»

Дать первые основные понятия программного обеспечения,познакомить с историей развития, классификацией программного обеспечения

125.91kb.

11 09 2014
1 стр.


Дипломной практике по теме: «Разработка программного обеспечения для моделирования комплекса многокамерной автоматизированной съемки и видеотрансляции»

«Разработка программного обеспечения для моделирования комплекса многокамерной автоматизированной съемки и видеотрансляции»

112.77kb.

14 09 2014
1 стр.


Бочкарёв Евгений Сергеевич Программист Delphi

Разработка и внедрение программного обеспечения для обмена данными (репликации) в неоднородных информационных пространствах Заказная разработка систем автоматизации Внедренческий к

125.23kb.

12 09 2014
1 стр.


Программа по дисциплине метрология и качество программного обеспечения краснобаев Ю. Л. Для очной формы обучения всего 40

Целью изучения дисциплины является получение студентами теоретических знаний по основам обеспечения качества программного обеспечения (ПО), методам его измерения и оценки, повышени

39.55kb.

15 12 2014
1 стр.


Лабораторная работа №1 Работа в Oracle Database Express Edition 1 Лабораторная работа №6

Лабораторная работа Выполнение расчетов с использованием программирования в среде Visual Basic for Applications

232.43kb.

18 12 2014
1 стр.


Разработка программного обеспечения для моделирования комплекса многокамерной автоматизированной съёмки и видеотрансляции
451.99kb.

30 09 2014
7 стр.