3.1. Руководство программистa

 

В программе были применены, большое количество компонентов Windows, различные обработчик событий, процедуры и функции. При разработке программы было создано 3 модуля (Main, Diag, Example). В модуле Main былa примененa 1 процедурa.

 

Краткое описание основных использованных функций

 

Используем функцию GetComputerName для получения имени компьютера, функцию GetUserName для получения имени пользователя и функцию GetSystemInfo для получения информации о процессоре (наиболее полно данная функция реализована в Windows NT, где она возвращает и кол-во процессоров и их тип и т.д.).

Перейдем к параметрам экрану. Здесь мы будем использовать и Win32 API функции и стандартные объекты VCL. Так для получения разрешения экрана нам понадобится объект TScreen (его свойства Width и Height). Остальные параметры мы получим через контекст драйвера устройства DC используя функцию GetDeviceCaps.

Также будет интересна информация о памяти. Здесь нам поможет функция GlobalMemoryStatus, возвращающая информацию по объему физической и виртуальной памяти.

Узнаем информацию о ОС. Функция GetWindowsDirectory вернет путь к каталогу, где установлена система, функция GetSystemDirectory - к системному каталогу. Для определения версии ОС воспользуемся функцией GetVersionEx.

 Опишем функцию BIOSInfo с параметром, характеризующем текущую ОС. Важно отметить, что способ получения информации о дате BIOS различен. Для NT получим информацию из реестра, а для Windows 95/98 из соответствующего участка памяти. Эти два способа взаимоисключаемы, так как у Windows 95/98 нет соответствующего раздела реестра, а прямой доступ к памяти в NT невозможен.

Рассмотрим функцию SystemParametersInfo, которая позволяет управлять некоторыми настройками системы. Область применения данной функции для NT и Windows 95/98 различна. Умышленно выберем некоторую общую часть для обеих систем.

Также можно позволить пользователю изменять и сохранять настройки системы по своему вкусу. Здесь можно использовать функцию SystemParametersInfo. Для компонентов tbKeyboardSpeed, tbKeyboardDelay, cbScreenSaverActive, cbSpeaker, edSSTimeOut в ObjectInspector перейдем на закладку Events и изменим событие OnChange (для tbKeyboardSpeed, tbKeyboardDelay) , OnClick (для cbScreenSaverActive, cbSpeaker) и OnExit для edSSTimeOut на Change.

Использование Delphi совместно c фунциями Microsoft Win32 API позволит программисту создать более функционально богатые и гибкие приложения.

Процедуры модуля Main:

procedure TForm11.Timer1Timer(Sender: TObject);

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

 

Процедуры модуля Diag:

procedure TDiadnostic.AboutClick(Sender: TObject);

Процедура выполняет функцию открытия окна или формы. Это то же можно реализовать двумя способами:

1) Form1.Show;

2) Form1.Visible:=True;

procedure GetPrName(processor1:Tlabel);

Процедура определяет тип процессора.

procedure GetRegInfoWinNT;

Процедура используется для получения информации из реестра Windows. В частности, используется для выода информации о Базовой Системе Ввода-Вывода.


  В большинстве случаев очень важной оказывается информация о типе BIOS. Строка типа BIOS хранится по адресу 0FFA68, а строка даты BIOS по адресу 0FFFF5. Это физические адреса, следовательно адреса "сегмент:смещение": 0F000:FA68 и 0F000:FFF5.

  При включении компьютера BIOS инициализирует свои ресурсы и ищет, начиная с адреса 0C0000, ПЗУ установленных карт. Каждое ПЗУ имеет подпись, которая символизируется байтами 55AAh, если BIOS находит эти байты, то он узнаёт размер ПЗУ, который хранится в следующем байте и содержит число страниц по 512 байт, после чего по возможности считает контрольную сумму этого ПЗУ (она должна быть равна нулю) и передаёт управление на 4-ый байт. Также BIOS считает контрольную сумму байт CMOS, расположенных в ячейках 10h-2Dh. Так как в этих ячейках хранится важная, для продолжения работы, информация и её повреждения недопустимы.

  Исходя из этого, программа определяет тип BIOS и считает контрольные суммы Видео ПЗУ и CMOS.

function GetDisplayDevice: string;

данная функция определяет основные параметры видеокарты, такие как размер памяти и строку данных производителя.

function LocalIP : string;

данная функция возвращает IP адрес текущего компьютера.

Function GetCPUSpeed: Double;

Выясняем тактовую частоту процессора.

function CheckDriveType(ch:char): String;

возвращает тип диска (сменный, жесткий)

procedure TDiadnostic.FormCreate(Sender: TObject);

создает главное окно программы

function getprintername:string;

Возвращает имя принтера, сетевого или локального.

procedure TDiadnostic.Button4Click(Sender: TObject);

выполняет обновление информации о состоянии памяти

procedure TDiadnostic.disknameChange(Sender: TObject);

выполняет смену имени диска

procedure TDiadnostic.FormClose(Sender: TObject; var Action: TCloseAction);

Процедура выполняет функцию выхода из программы. Мгновенный выход из программы.

Выход из программы можно организовать несколькими способами, такими как:

-  Application.Terminate;

-  Form1.Hide;

-  Form1.Visible:=False;

-  Form1.Close;

Эти команды практически не отличаются друг от друга. Единственным различием может быть то, что первый выход работает гораздо быстрее, т.е. приложение закрывается мгновенно.

function OpenCD(Drive : Char) : Boolean;

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

function CloseCD(Drive : Char) : Boolean;

выполняет функцию закрытия сд-рома.

procedure TDiadnostic.SpeedButton1Click(Sender: TObject);

Процедура выполняет функцию открытия окна или формы. В данном случае открывается окно тестирования процессора.

Процедуры модуля Example:

procedure TForm1.Button1Click(Sender: TObject);

выполняет измерение тактовой частоты процессора.

Следует подробнее рассказать об идентификации процессора. Как известно, в процессорах пятого поколения, а также в некоторых четвёртого поколения, появилась команда CPUID. Эта команда позволяет больше узнать об установленном в системе процессоре. Обмен информацией происходит через основные регистры (EAX, EBX, ECX, EDX). Параметры задаются через регистр EAX. Таким образом, чтобы узнать информацию о версии процессора, я записал в EAX 1 и вызвал CPUID, после чего в EAX хранился результат. Для того, чтобы узнать производителя процессора, я записал в EAX 0 и вызвал CPUID, после чего в основных регистрах находится, уникальная для каждого производителя, строка. Для AMD это "AuthenticAMD", для Intel - "GenuineIntel", для Cyrix - "CyrixInstead". Теперь расскажу об идентификации процессоров, не имеющих инструкции CPUID. Понятно, что столь подробную информацию, в этом случае получить невозможно. Т.к. программа требует процессор не ниже третьего поколения, я начал проверку именно с этого поколения. Наличие 386-го процессора определяется недоступностью для записи 18-го бита регистра флагов, если бит доступен для записи, то я проверяю наличие поддержки команды CPUID, если она не поддерживается, то процессор 486-ой. Если же CPUID поддерживается, то дальше всё определение ложится именно на эту команду.

  Наличие поддержки команды CPUID определяется доступностью для записи 21-го бита регистра флагов.

procedure TForm1.pcc2PrecizeProc(Sender: TObject);

используется для тестирования скорости выполнения арифметических операций, а именно для вычисления времени сложения 100 целых чисел.

procedure TForm1.pcc3PrecizeProc(Sender: TObject);

используется для вычисления времени сложения 100 целых 64-битных чисел.

procedure TForm1.pcc4PrecizeProc(Sender: TObject);

используется для сложения 100 вещественных чисел

procedure TForm1.Button2Click(Sender: TObject);

собственно выполняет 3 вышеперечисленных процедуры

procedure TForm1.pcc5PrecizeProc(Sender: TObject);

используется для тестирования скорости системной шины

procedure TForm1.Button3Click(Sender: TObject);

при нажатии данной кнопки процессор последовательно производит вычисления над 64-мя операциями NOP, расположенными в первом случае в памчти, во втором- в кэше, и потом вычисляет задержку на передачу команд из памяти.

procedure TForm1.Button4Click(Sender: TObject);

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

procedure TForm1.pcc7PrecizeProc(Sender: TObject);

здесь тестируется скорость заполнения кэша

procedure TForm1.pcc8PrecizeProc(Sender: TObject);

выясняем количество тактов, необходимых для выполнения одной операции NOP

NOP - Пустая операция.

---------------------------------------------------------

O D I T S Z A P C

----------------------------------------------------------------¬

¦Код Инструкция Такты Описание ¦

¦операции ¦

+--------T---------T-----T-----T-----T------T-------------------+

¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦

+--------+---------+-----+-----+-----+------+-------------------+

¦90 ¦NOP ¦1 ¦3 ¦3 ¦3 ¦Нет операции. ¦

L--------+---------+-----+-----+-----+------+--------------------

Операция NOP не выполняет никакой операции. NOP - это одно-

байтовая инструкция, которая занимает место, но но не влияет на

содержимое машины (кроме (E)IP).

NOP - это псевдоним инструкции XCHG (E)AX, (E)AX.

procedure TProcessorClockCounter.TestPrecizeProc;

данная процедура помещает небольшой код в кэш память

procedure TProcessorClockCounter.TestPrecizeProcInCache;

данная процедура тестирует кусок кода, уже находящийся в кэш-памяти

procedure TDiadnostic.SpeedButton2Click(Sender: TObject);

данная процедура высвечивает сообщение о том, что программа тестирования памяти загружена в оперативную память.


  Тестированию подвергается память, расположенная выше первого мегабайта, во избежание проблем. Программа использует три разновидности тестирования: Бегущая Единица, Бегущий Ноль, Шахматная доска. Перед тем как начать тестирование, программа определяет объём памяти, установленной в системе. Для этого в последние четыре байта, каждого мегабайта, записывается число, затем оно читается и сравнивается. Если оно не совпадает с записанным, значит этого и последующих мегабайт памяти не существует.

  Особенности применяемых тестов следующие. Тест "Бегущая Единица" или "Бегущий Ноль" состоит в том, что в каждый байт памяти записывается значение 0FFh или 0 соответственно, затем это значение сравнивается. Несовпадение говорит об ошибке. В тесте "Шахматная доска" в память записываются значения вида 10101010b, затем они сдвигаются и сравниваются. Несовпадение - ошибка.



Информация о работе «Утилита диагностики компьютера»
Раздел: Информатика, программирование
Количество знаков с пробелами: 65737
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
509004
6
0

... ? 8. Какими программами можно воспользоваться для устранения проблем и ошибок, обнаруженных программой Sandra? Раздел 3. Автономная и комплексная проверка функционирования и диагностика СВТ, АПС и АПК Некоторые из достаточно интеллектуальных средств вычислительной техники, такие как принтеры, плоттеры, могут иметь режимы автономного тестировании. Так, автономный тест принтера запускается без ...

Скачать
49707
0
6

... , так и при последующей эксплуатации, что позволяет каждому пользователю конфигурировать пакет под собственные нужды и прибавляет комфортность в работе. Глава 2. Разработка сайта По проделанному сравнительному анализу был разработан сайт. Сайт разрабатывался на языке HTML. При создании сайта использовались следующие программы: текстовый редактор Блокнот; Macromedia Dreamweaver; Xara ...

Скачать
63640
0
0

... прерывания, каналы ПДП и т.д.) В первую очередь проверил бы систему на вирус, затем проверил бы конфигурирование ОЗУ и конфигурацию системы. Затем обратил бы внимание на винчестер, провёл бы его диагностику. РЕМОНТ НАКОПИТЕЛЕЙ, КЛАВИАТУРЫ, “МЫШИ” Ранее нормально работающий флоппи-дисковод стал плохо читать дискеты, особенно большие файлы. В чём возможные причины неисправности и как их ...

Скачать
75484
0
2

... ждать. В 1973 г. фирма Intel выпустила 8-битовый микропроцессор Intel-8080, которая до конца 70-х годов стала стандартом для микрокомпьютерной индустрии. Появление персональных компьютеров. Вначале микропроцессоры использовались в различных специализированных устройствах, например, в калькуляторах. Но в 1974 г. несколько фирм объявили о создании на основе микропроцессора Intel-8008 персонального ...

0 комментариев


Наверх