рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Участники тестирования

Участники тестирования - раздел Информатика, Организация тестовой диагностики внешней памяти ПК   Участники Тестирования Имеют Одинаковый Объем, Но По Остальны...

 

Участники тестирования имеют одинаковый объем, но по остальным эксплуатационным характеристикам принадлежат к совершенно различным категориям. Три накопителя (Western Digital WD20EARS, Seagate ST2000DL003 и Samsung HD204UI) относятся к партии «зеленых» и, как следствие, обладают пониженным энергопотреблением и уровнем шума. Все они используют технологию Advanced Format, которая предусматривает разбивку поверхност и магнитных пластин на физические секторы объемом 4 Кбайт. В статье про первый внутренний HDD объемом 3 Тбайт она описана во всех подробностях. Для дисков объемом 2 Тбайт Advanced Format не является насущной необходимостью, но и издержки от ее использования проявляются лишь в низкой скорости произвольной записи мелких блоков данных (меньше 4 Кбайт). Насколько сильно этот недостаток в действительности бьет по быстродействию винчестера, покажут тесты.

Модель WD20EARS заслуживает отдельного рассмотрения: еще в прошлом году она претерпела обновление, и есть вероятность, что в продаже до сих пор встречается старая модификация. Разница между «изданиями» диска заключается в количестве пластин: первоначальная версия имела четыре «блина», а новая перешла на три, по 667 Гбайт на пластину. Опознать последнюю можно по приставке -00MVWB0 в модельном номере. Этот диск также не имеет черной вставки на крышке, характерной для прочих изделий WD, хотя на этот признак полагаться не стоит: редизайн модели произошел еще до перехода на три пластины.

Western Digital Caviar Green WD20EARS

Выделяется из общего ряда и диск Seagate Barracuda Green ST2000DL003. Дело в том, что диски с Advanced Format испытывают резкое падение скорости произвольной записи, если границы блока из четырех виртуальных 512-байтовых секторов не совпадают с границами физического 4-килобайтного сектора. В таком случае для записи блока данных из 4 Кбайт (размер кластера NTFS по умолчанию для разделов крупнее 2 Гбайт) винчестеру приходится считывать и перезаписывать два физических сектора, на которых он расположился. Именно такая ситуация возникает при форматировании винчестера в среде Windows XP (пользователи «Висты», семерки и трех последних версий Mac OS X могут спать спокойно), поэтому для данной ОС выпущены специальные утилиты, которые сдвигают созданные ранее разделы, совмещая границы физических и виртуальных секторов. Другой вариант — установка перемычки на диске (как у AF-дисков Western Digital). Так вот, Seagate утверждает, что Barracuda Green ST2000DL003 можно разбивать в Windows XP без всякого выравнивания разделов за счет технологии под названием Smart Align. Подробности ее работы держат в секрете. В общих чертах известно лишь то, что диск в фоновом режиме ускоряет операции типа чтение-изменение-запись, используя для этого время простоя. Возникает гипотеза: быть может, винчестер Seagate просто активно использует отложенную запись данных, по максимуму заполняя буфер «невыровненными» запросами, прежде чем, поймав подходящий момент, сбросить их на магнитные пластины. Проверить ее с помощью бенчмарков будет нетрудно.

 

Seagate Barracuda Green ST2000DL003

Пару слов стоит сказать и о винчестере Samsung. По сравнению с конкурентами он имеет буфер вдвое меньшего объема: 32 Мбайт против 64. На вопрос, как сильно этот факт ограничивает производительность устройства, опять-таки ответят тесты.

 

Samsung EcoGreen F4EG H204UI

Остальные диски представляют топовые серии десктопных HDD соответствующих производителей. В список испытуемых затесался даже корпоративный привод Western Digital WD2003FYYS. По ТТХ он мало отличается от одного из представителей «черной» линейки WD (WD2001FASS), зато стоит на добрых полторы тысячи рублей больше. За эти деньги пользователь получает гарантию стабильной работы диска в режиме 24/7.

 

2. Узагальнений алгоритм тестування НЖМД

1) Вибір пристрою для тестування. Отримання данних щодо його конфігурації.

2) Задання діапазону тестування(початкове та кінцеве значення).

3) Вибір методу переверки (верефікація, запис-читання з перевіркою)

4) Вивід на екран або файл для кожного протестованого сектора максимальну інформацію (час перевірки, номер сектора)

5) Повідомлення про кінець тестування.

3. Перелік та опис WinApi-функцій використаних у програмі.

1) GetLogicalDriveSettings - повертає всі логічні диски у використанні.

DWORD GetLogicalDriveStrings(DWORD bufferSize,LPTSTR buffer);

· bufferSize - розмір буфера;

· buffer – для зберигання строки;

Повертає 0 у разі помилки.

2) GetDriveType – визначає, чи є накопичувач Drive знімним, фіксованим або видаленим.

function GetDriveType(Drive: Integer): Word;

Паpаметpы:

· Drive: Перевіряємий накопичувач, A: це 0, B: це 1 тощо.

Повернене значення:

Drive_Removable, Drive_Remote, Drive_Fixed или нуль, если накопитель не поддается опpеделению; 1 - если не существует.

3) GetDiskFreeSpace – повертає інформацію щодо диску, кількість свободного простору.

BOOL WINAPI GetDiskFreeSpace(

__in LPCTSTR lpRootPathName,

__out LPDWORD lpSectorsPerCluster,

__out LPDWORD lpBytesPerSector,

__out LPDWORD lpNumberOfFreeClusters,

__out LPDWORD lpTotalNumberOfClusters

);

Параметри:

· lpRootPathName – корнева директорія для котрого виконується фугкція;

· lpSectorsPerCluster – вказівник на змінну, яка отримує число секторів у кластері.

· lpBytesPerSector - вказівник на змінну, яка отримує число байтів у секторі.

· lpNumberOfFreeClusters - вказівник на змінну, яка отримує кількість вільних кластерів.

· lpTotalNumberOfClusters- вказівник на змінну, яка отримує загальну кількість кластерів.

Повернене значення:

Повертає нуль у разі помилки у функції.

4) ReadFile - читает из файла блок данных начиная с текущей позиции. После прочтения блока, позиция переносится в конец прочитанного блока.

BOOL ReadFile(

HANDLE hFile,

LPVOID lpBuffer,

DWORD nNumberOfBytesToRead,

LPDWORD lpNumberOfBytesRead,

LPOVERLAPPED lpOverlapped

);

Параметри:

· hFile – вказівник на відкритий файл;

· lpBuffer – вказівник на буфер, в який розміщується прочитаний блок;

· nNumberOfBytesToRead – кількість прочитаних байтів;

· lpNumberOfBytesRead, - вказівник на число прочитаних байтів;

· lpOverlapped – вказівник на структуру OVERLAPPED;

У разі виконання повертає True.

5) WriteFile – виконує запис блоку даних починаючи з дійсної позиції у файлі.

BOOL WriteFile(

HANDLE hFile,

LPCVOID lpBuffer,

DWORD nNumberOfBytesToWrite,

LPDWORD lpNumberOfBytesWritten,

LPOVERLAPPED lpOverlapped );

Параметри:

· hFile, - вказівник на відкритий файл;

· lpBuffer – вказівник на дані для запису;

· nNumberOfBytesToWrite – кількість записаних байт;

· lpNumberOfBytesWritten – вказівник кількість записаних байт;

· lpOverlapped - вказівник на структуру OVERLAPPED;

У разі виконання повертає True.

6) SetFilePointer – встановлює позицію у файле.

DWORD SetFilePointer(

HANDLE hFile,

LONG lDistanceToMove,

PLONG lpDistanceToMoveHigh,

DWORD dwMoveMethod

);

Параметри:

· hFile - вказівник на відкритий файл;

· lDistanceToMove - кількість байт для переміщення;

· lpDistanceToMoveHigh - кількість байт для переміщення;

· dwMoveMethod – початок перемізення;

Повертає молодший байт позиції.

 

Пооператорна схема алгоритму програми

1) Створюємо новий проект на базі Visual Studio 2009 C++

2) Підключаємо потрібні бібліотеки

#include "stdafx.h"

#include <windows.h>

#include <stdio.h>

#include <tchar.h>

#include <string.h>

#include <psapi.h>

#include <strsafe.h>

#include <ctime>

#include <iostream>

3) Визначаємо потрібні константи

#define BUFSIZE 512

#define F_beg 0

Розмір буферу дорінює розміру одного сектора.

4) Опис та ініціалізація змінних

DWORD DrSet,test,dwSectPerClust, dwBytesPerSect, dwFreeClusters, dwTotalClusters;

TCHAR buff[BUFSIZE];

buff[0] = '';

char drive2[13][5] = {"A://", "B://", "C://", "D://", "E://", "F://", "G://", "H://","I://", "J://", "K://", "L://"};

5) Отримуємо данні щодо носіїв памяті

5.1) Отримуємо строку зі списком пристроїв з перевіркою на помилки та виводом результату.

DrSet= GetLogicalDriveStrings (BUFSIZE-1,buff);

if (DrSet)//esli ne 0 (oshibki net)

std::cout<<"Polu4ennaya stroka: "<<DrSet<<std::endl;

else //esli oshibka

{

std::cout<<"Error!! Program has been close"<<std::endl;

std::cin>>test;

return(0); //zakan4ivaem vipolnenie programmi

}

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

for (int i=0; i<13; i++) //prohod po vsem diskam

int DrType = GetDriveType(drive2[i]);

BOOL fResult = GetDiskFreeSpace(drive2[i],&dwSectPerClust,&dwBytesPerSect,&dwFreeClusters,&dwTotalClusters);

 

6) Тестування обраного диску методом запису-читання з лінійним доступом до секторів.

6.1) Отримуємо від користувача діапозон секторів, які полягають тестуванню.

int n_nach,n_kon,lDistance;

std::cout<<"n Vvedite na4alnii nomer sectora"<<std::endl;

std::cin>>n_nach;

std::cout<<"n Vvedite kone4nii nomer sectora"<<std::endl;

std::cin>>n_kon;

6.2) Визначаємо змінні

HANDLE hDevice; // handle to the drive to be examined

DISK_GEOMETRY pdg; // геометрическая структура дискового устройства

BOOL bResult; // флажок общих результатов

DWORD junk; // сбрасываем результаты

byte con=0,buf1[BUFSIZE],buf2[BUFSIZE],buf3[BUFSIZE]; DWORD dwBytesRead;

DWORD dwBytesWritten;

LARGE_INTEGER tick,ticksn,timen, tickpsk,ticksk,timek;

6.3) Заповнюємо буфер констант комбінацією 0 1 0 1 0 1 …. Розміром 512 байт

6.4) Отримуємо доступ до диску D:

hDevice = CreateFile("\\.\D:",

6.5) Створюємо цикл з реалізацією лінійного доступу.

while (n_nach<=n_kon)

6.6) Визначаємо дистанцію сдвигу до визначеного користувачем сектору.

lDistance = n_nach*BUFSIZE;

6.7) Зчитуємо данні з сектору для наступного їх відновлення після тестування.

ReadFile(hDevice, buf1, 512, &dwBytesRead, NULL);

6.8) Записуємо у сектор константну комбінацію 01010101 розміром 512 байт. Виконуємо виміри часу запису. Данні виводимо на екран.

WriteFile(hDevice, buf2, 512, &dwBytesWritten, NULL);

QueryPerfomanceCounter(&tick);

6.9) Зчитуємо сектору константну комбінацію 01010101 розміром 512 байт. Виконуємо виміри часу запису. Данні виводимо на екран.

QueryPerfomanceCounter(&tick);

ReadFile(hDevice, buf3, 512,&dwBytesRead, NULL);

6.10) Виконуємо побайтну перевірку інформацію сектора

or (int i = 0 ; i<BUFSIZE ; i++)

if (buf1[i]!=buf3[i+1]){

std::cout<<"n Oshibka sravneniya!!!!!!!!!!!!!!!!!!!n";

i=BUFSIZE;}

std::cout<<"sector #"<<n_nach<<" proverku na sravnenie prosheln";

6.11) Виводимо результати перевірки

6.12) Повертаємо данні на сектор

WriteFile(hDevice, buf1, 512, &dwBytesWritten, NULL);

6.13) Переходимо на наступний сектор

n_nach++;

 

Практична частина

 

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

 

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

 

// gos_dud1.cpp: определяет точку входа для консольного приложения.

//

//podklu4aemie biblioteki

#include "stdafx.h"

#include <windows.h>

#include <stdio.h>

#include <tchar.h>

#include <string.h>

#include <psapi.h>

#include <strsafe.h>

#include <ctime>

#include <iostream>

#undef UNICODE

//opredelyaem globalnie konstanti

#define BUFSIZE 512

#define F_beg 0

int _tmain(int argc, _TCHAR* argv[]) //na4alo glavnoi funkcii

{

//peremennie

DWORD DrSet,test,dwSectPerClust, dwBytesPerSect, dwFreeClusters, dwTotalClusters;

TCHAR buff[BUFSIZE];

buff[0] = '';

char drive2[13][5] = {"A://", "B://", "C://", "D://", "E://", "F://", "G://", "H://","I://", "J://", "K://", "L://"};

//******************** LogicalDriveStrings *************

//zapis' v peremennyu DrSer stroki buffera

DrSet= GetLogicalDriveStrings (BUFSIZE-1,buff);

//polu4enie stroki v buffer

std::cout<<"1. strings that specify valid drives in the system."<<std::endl;

//proverka na oshibku

if (DrSet)//esli ne 0 (oshibki net)

std::cout<<"Polu4ennaya stroka: "<<DrSet<<std::endl;

else //esli oshibka

{

std::cout<<"Error!! Program has been close"<<std::endl;

std::cin>>test;

return(0); //zakan4ivaem vipolnenie programmi

}

//***************** Drive Type & Free space ********************

//Proverka tipa diska C

std::cout<<"2. Proverka tipa nositelya. Disk C"<<std::endl;

//funkciya opredeleniya tipa nositelya

//DrType = GetDriveTypeA (DrName);

//vivod rezultata

for (int i=0; i<13; i++) //prohod po vsem diskam

{

int DrType = GetDriveType(drive2[i]);

switch (DrType)

{ //vibor tipa dlya kagdogo diska

case(0):std::cout<<drive2[i]<<std::endl<<" - The drive type cannot be determined"<<std::endl; break;

case(1):std::cout<<drive2[i]<<std::endl<<" - The root path is invalid; for example, there is no volume mounted at the specified path."<<std::endl; break;

case(2):std::cout<<drive2[i]<<std::endl<<" - The drive has removable media; for example, a floppy drive, thumb drive, or flash card reader."<<std::endl;break;

case(3):

{

std::cout<<drive2[i]<<std::endl<<" - The drive has fixed media; for example, a hard drive or flash drive."<<std::endl;

//vivod svobodnogo ob'ema dlya fixirovannih diskov

BOOL fResult = GetDiskFreeSpace(drive2[i],&dwSectPerClust,&dwBytesPerSect,&dwFreeClusters,&dwTotalClusters);

std::cout<<"nUsing GetDiskFreeSpace()...n";

//kod oshibki

std::cout<<"The return value: "<<fResult<<" error code: "<<GetLastError()<<std::endl;

//Sectorov na klaster

printf("Sector per cluster = %uln", dwSectPerClust);

//Bytes na sector

printf("Bytes per sector = %uln", dwBytesPerSect);

//kol-vo svobodnih sektorov

printf("Free cluster = %uln", dwFreeClusters);

//kol-vo klasterov

printf("Total cluster = %uln", dwTotalClusters);

//peres4et svobodnogo mesta

printf("Total free bytes = %uln", (dwFreeClusters*dwSectPerClust*dwBytesPerSect));

}break;

case(4):std::cout<<drive2[i]<<std::endl<<" - The drive is a remote (network) drive."<<std::endl; break;

case(5):std::cout<<drive2[i]<<std::endl<<" - The drive is a CD-ROM drive."<<std::endl; break;

case(6):std::cout<<drive2[i]<<std::endl<<" - The drive is a RAM disk."<<std::endl; break;

}};

//****************** Testing ***************

//polu4enie nomera sektora

int n_nach,n_kon,lDistance;

std::cout<<"n Vvedite na4alnii nomer sectora"<<std::endl;

std::cin>>n_nach;

std::cout<<"n Vvedite kone4nii nomer sectora"<<std::endl;

std::cin>>n_kon;

HANDLE hDevice; // handle to the drive to be examined

DISK_GEOMETRY pdg; // геометрическая структура дискового устройства

BOOL bResult; // флажок общих результатов

DWORD junk; // сбрасываем результаты

byte con=0,buf1[BUFSIZE],buf2[BUFSIZE],buf3[BUFSIZE]; //БУФФеР

DWORD dwBytesRead;

DWORD dwBytesWritten;

//ZAPOLNENIE BUFERA KONSTANT

for (int j=0;j<BUFSIZE;j++)

{

if(con==0)

{ buf2[j]=con; con++; }

else

{ buf2[j]=con; con--; }

//std::cout<<"Const: "<<buf2[j]<<std::endl;

}

std::cout<<"Const: "<<buf2<<std::endl;

hDevice = CreateFile("\\.\D:", // открываемое устройство

0, // нет доступа к устройству

FILE_SHARE_READ | // режим совместного использования

FILE_SHARE_WRITE,

NULL, // атрибуты безопасности по умолчанию

OPEN_EXISTING, // расположение

0, // атрибуты файла

NULL); // не копировать атрибуты файла

while (n_nach<=n_kon)

{

lDistance = n_nach*BUFSIZE;

DWORD dwPtr = SetFilePointer( hDevice, lDistance, NULL, F_beg );

if (dwPtr == INVALID_SET_FILE_POINTER) // Test for failure

{ // Obtain the error code.

DWORD dwError = GetLastError() ;

} // End of error handler

//4TENIE SECTORA

__int64 ctr1 = 0, ctr2 = 0, freq = 0;

QueryPerformanceCounter((LARGE_INTEGER *)&ctr1);

ReadFile(hDevice, buf1, 512, &dwBytesRead, NULL); QueryPerformanceCounter((LARGE_INTEGER *)&ctr2);

QueryPerformanceFrequency((LARGE_INTEGER *)&freq);

long double res = ((ctr2 - ctr1)*1.0/ freq);

std::cout<<std::fixed<<"nOpration READ time: "<<res<<"seconds";

std::cout<<"n Dannie sectora s4itanin";

//std::cout<<buf1;

//zapis' konstanti

dwPtr = SetFilePointer( hDevice, lDistance, NULL, F_beg );

//QueryPerfomanceCounter(&tick);

//perevodim v secundi

//time.QuadPart = tick

QueryPerformanceCounter((LARGE_INTEGER *)&ctr1); WriteFile(hDevice, buf2, 512, &dwBytesWritten, NULL);

QueryPerformanceCounter((LARGE_INTEGER *)&ctr2);

QueryPerformanceFrequency((LARGE_INTEGER *)&freq);

res = ((ctr2 - ctr1)*1.0/ freq);

std::cout<<std::fixed<<"Opration Write time: "<<res<<"seconds n";

//QueryPerformanceCounter(&tick); std::cout<<tick;

//sravnenie

dwPtr = SetFilePointer( hDevice, lDistance, NULL, F_beg );

ReadFile(hDevice, buf3, 512,&dwBytesRead, NULL);

//for (int j=0;j<BUFSIZE;j++)

//{

// std::cout<<"Const: "<<buf3[j]<<std::endl;

//}

for (int i = 0 ; i<BUFSIZE ; i++)

if (buf1[i]!=buf3[i+1]){

std::cout<<"n Oshibka sravneniya!n";

i=BUFSIZE;}

std::cout<<"sector #"<<n_nach<<" proverku na sravnenie prosheln";

dwPtr = SetFilePointer( hDevice, lDistance, NULL, F_beg );

//vosstanovlenie dannih

clock_t start;

WriteFile(hDevice, buf1, 512, &dwBytesWritten, NULL);

n_nach++;

}

std::cin>>test;

return 0;

}

 

1) Загальні відомості щодо пристройв пам’яті (Рис. 1).

 

 

Рис. 1

 

2) Перевірка диска засобом запису-читання з перевіркою. Доступ до пам’яті – лінійний.

 

 

Рис. 2

 

 

– Конец работы –

Эта тема принадлежит разделу:

Организация тестовой диагностики внешней памяти ПК

Организация тестовой диагностики внешней памяти ПК... Внешняя память это устройство позволяющее автономно сохранять информацию для последующего ее использования...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Участники тестирования

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Функции для работы с секторами. Функции группы CreateFile.
· CreateFile – выполняет открытие устройства в виде файла с указателем на 1-м байте с проверкой выполнения; · ReadFile – чтение файла в буфер (посекторно); · Writ

Особенности использования функции CreateFile.
Функция имеет 7 параметров: 1. Устройство. 2. Способ доступа к объекту (если верификация – то только чтение; если запись/чтение со сравнением – то запись и чтение). 3. Ре

Обновленное тестирование жестких дисков объемом 2 Тбайт
Дата: 11.07.2011   Жесткий диск емкостью 2 Тбайт сейчас является, пожалуй, наиболее выгодной покупкой для пользователя, которому требуется хранить большие объемы данных, ибо

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги