Написать программу "проверка памяти"

Автор: Пользователь скрыл имя, 20 Июня 2013 в 03:53, курсовая работа

Описание работы

Описанный алгоритм отличается простотой, но его недостатком является то, что он позволяет обнаружить только тяжелые и устойчивые сбои в работе памяти, которые наверняка обнаружит и быстрый тест BIOS. Многие ошибки в работе памяти могут зависеть от содержимого памяти (речь идет о ситуации, когда в неисправной микросхеме некоторые соседние ячейки начинают "взаимодействовать" между собой).
Чтобы выявлять такие ошибки, алгоритм тестирования памяти должен проверять один и тот же участок памяти по нескольку раз, записывая и считывая различные (специально подобранные) паттерны. Удачный подбор паттернов позволит, насколько это, возможно, обойти и препятствия, связанные с особенностями выборки данных процессора, и добиться одинаковой эффективности выявления ошибок на разных чипах, отличающихся разным физическим расположением элементов памяти. Это расположение тоже может влиять на характер ошибок.

Содержание

Введение…………………………………………………………………………….3
Основная часть……………………………………………………………………...5
1 Основы программирования и разработка приложений………………………..5
2 Программирование и возможность программа "проверка памяти"…………13
Заключение………………………………………………………………………...21
Глоссарий………………………………………………………………………….22
Список использованных источников…………………………………………….24
Список сокращений……………………………………………………………….25
Приложения……………………………………………………………………….26

Работа содержит 1 файл

KR_Programmirovanie.doc

— 435.50 Кб (Скачать)

Сейчас осмотрим определение базисных адресов сектора, я писал, что  они держаться в регистрах SS, DS, CS, однако это не совершенно этак, в  их держится некоторый 16 битный селектор, который показывает на некоторый дескриптор частей, в котором, уже хранится нужный адресок.

Этак смотрится селектор, в 13-ти его битах держится индекс дескриптора  в таблице дескрипторов. Не коварно  подсчитать станет, что 2^13 = 8192 это наибольшее численность дескрипторов в таблице.

Дескрипторных таблиц случается 2 вида GDT и LDT 1-ая именуется глобальная матрица дескрипторов, она в системе постоянно лишь одна, её исходный адресок, адресок её нулевого дескриптора хранится в 48 битном системном регистре GDTR. И с момента старта системы не изменяется и в свопе не воспринимает роли.

А вот смысла дескрипторов имеют  все шансы изменяться.

Нежели в селекторе бит TI равен  нулю, тогда процессор элементарно  идет в GDT отыскивает сообразно индексу  подходящий дескриптор, с поддержкой которого исполняет доступ к этому сектору.

  Все элементарно было, однако, нежели TI равен 1 тогда это значит, что употребляться станет LDT. Таблиц  данных немало, однако употребляться  в этот момент станет та  селектор которой загружен в целый регистр LDTR, который в отличии, от GDTR может изменяться.[8]

Индекс селектора показывает на дескриптор, который показывает уже  не на базисный адресок сектора, а  на память, в котором хранится локальная  матрица дескрипторов, её свежий вещество. Ну а далее все этак же как и  с GDT. Таковым образом во время работы локальные таблицы имеют все шансы формироваться и уничтожаться сообразно мерке необходимости. LDT не имеют все шансы кормить дескрипторы на остальные LDT.

Мнение «обслуживание микросхем», в нашем коротком обзоре значит функцию занесения (записи) нужной в неизменное запоминающее приспособление (ПЗУ) микросхемы.

Благородный программатор может не лишь записывать, однако и считывать  информацию, а в ряде случаев, осуществлять и запасные акции, и информацией  записанной в ней. Это может существовать: очистка, запрещение чтения, запрещение программирования и т. п.

Рядовая СИ-программа представляет собой определение функции main, которая  для исполнения нужных действий вызывает остальные функции.

Приведенные больше образцы программ представляли собой один начальный файл, сохраняющий все нужные для исполнения программные функции. Ассоциация меж функциями исполнялась сообразно этим средством передачи характеристик и возврата значений функций.[9]

Однако  автор языка СИ дозволяет еще расколотить программу на некоторое количество отдельных долей (исходных файлов), оттранслировать каждую дробь раздельно, и потом соединить все доли в один исполняемый файл при поддержке редактора связей.

мат WSM(Write State Machine). Вычеркивание и программирование флэш-памяти вероятны лишь при подаче на ввод VPP напряжения 12. Сообразно командам, записываемым во врождённый регистр в шинном цикле записи сообразно сигналу.  Исполнение команд инициируется записью их кодов во врождённый регистр, не имеющий конкретного адреса.

Сообразно, кормления врождённый регистр команд обнуляется, что подходит команде  чтения, и микросхема работает, как  рядовая микросхема PROM либо EPROM. Это  дозволяет ставить микросхемы флэш-памяти за место EPROM подобной емкости. При подаче на ввод VPP невысокого напряжения(0-6,5 В) вычеркивание и программирование невероятны, и микросхема ведет себя, как рядовая микросхема EPROM.

Микросхемы  другого поколения — ячейки группируются в блоки, дозволяющие независящее  вычеркивание асимметричное разбиение —,симметричное. Долгая операция стирания 1-го блока может прекращаться для считывания данных остальных блоков, что существенно увеличивает упругость и продуктивность устройства.

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

2 Программирование и возможность программа "проверка памяти"

«Конструктор» – это метод класса, имя которого совпадает с именем класса. Конструктор вызывается автоматически после выделения памяти для переменной и обеспечивает инициализацию компонент – данных.

Язычок  программирования — формальная знаковая система, при поддержке которой записываются компьютерные программы. Сообразно различным оценкам, в настоящее время есть от 2-ух с половиной по 10 разных языков программирования.

В сведения о языках программирования организованы в облике трехуровневой  структуры: "язык" →"реализация" →"версия". Еще описаны диалекты языков программирования (желая вопросов, что полагать языком, а что диалектом, является достаточно спорным).[10]

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

Большая часть представленных в энциклопедии языков разрешено полагать языками  высочайшего уровня.

Еще в не проводится деления на интерпретируемые и компилируемые языки: для почти  всех языков, обычно считавшихся интерпретируемыми, в данный момент есть компиляторы, и  напротив.

Вероятна  еще композиция интерпретации и  компиляции: компиляция в байт-код. Таковым образом, классифицирование сообразно принципу интерпретируемости либо языка не имела бы огромного значения.

Языки программирования (их реализации) условно  делятся на группу компиляторов и  группу интерпретаторов. Таковым методом  подчеркивается нрав порождаемых кодов, какие получаются в итоге процесса трансляции.

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

Этак  компиляторы, традиционно, предоставляют  наиболее действенные сообразно  времени исполнения программы.

Но, цену компилятора и сопутствующих  программ высока, а издержки на заготовление трудной программы (компиляция, сборка), которая нередко изменяется, оказываются  неприемлемыми.

Интерпретаторы комфортны тем, что строчки языка осуществляются сходу. Образом, сходу видимы недостатки либо оплошности при написании программа. Не считая такого, во почти всех вариантах непринципиально, станет программа выполнена за 1 секунду либо за 0. 0001 секунды, к примеру, программа разговора с оператором.

Компиляторы – сразу переводят исходный текст, программы на язык машинных кодов. После этого формируется командный файл (exe или .com) и сама исходная программа уже не нужна.[11]

Языки программирования (их реализации) условно делятся на группу компиляторов и группу интерпретаторов. Таковым методом подчеркивается нрав порождаемых кодов, какие получаются в итоге процесса трансляции.

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

Нежели строчка исходного языка  наполняется сходу после ввода, то таковой язычок зовутся интерпретатором.[12]

Этот пост был задуман после такого, как на принципиальные вопросы не было отыскано внятных ответов. Недостает, всё еще спереди, однако период высиживания уже пройден. Это статья из цикла «Не умеешь сам — научи другого». В значении, чтоб кое-что лучше взять в толк необходимо это кое-что, кому-то разъяснить. Мотовелосипед не мой, данная выдумка встречалась мной ранее в публикациях.

Некие вещи чрезвычайно трудно взять  в толк. И люди, какие соображают, традиционно не имеют все шансы  разъяснить начинающему. Это как  беседа зрелого и ребёнка. Фактически конфликт поколений. По, куда мою степень не перерос в специалиста, необходимо выложить.

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

Вслед за тем всё написано довольно ясно для людей, какие о программировании знают очень не достаточно. Информация незначительно обветшала, однако для старта сойдёт. Может она Вам уже попадалась на глаза либо вы, даже скачали ее, однако отложили в каталог с литературой (ну таковой каталог имеется у всякого, он занимает 10-ки. и всё это мы намереваемся прочесть, как лишь покажется свободное время, а каталог всё растёт).

Сбои в подсистеме памяти часто  становятся причиной ошибок, происхождение  которых неочевидно, причем ошибки эти могут проявляться не каждый раз. Быстрый тест памяти, выполняемый  подпрограммами BIOS при запуске компьютера, способен выявить далеко не все проблемы в работе ОЗУ. Приведу пример из собственного опыта.

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

Иногда, в процессе копирования  файла с диска CD-ROM, система сообщала об ошибке копирования, а иногда - просто зависала. Отмечу сразу, что быстрый  тест памяти, выполняемый BIOS при запуске  компьютера, рапортовал о полной исправности  модулей.

Столкнувшись с ошибками чтения с CD-диска, я сперва естественно "погрешил" на носитель, но на другом компьютере диск читался исправно. Простые манипуляции  с оборудованием убедили меня в том, что ни CD-драйв, ни шлейф, соединяющий  его с материнской платой, ни жесткий диск не виноваты.

Где скрывался сбой? Я решил последовательно  заменять все компоненты и проверять  каждую новую конфигурацию с помощью "тестового" CD-диска. Начал я  с модулей памяти (просто потому, что их легче всего было поменять). Когда после замены модуля система заработала нормально (и файлы со злополучного диска стали копироваться без проблем), я прежде всего подумал о том, что проблема была бы решена гораздо быстрее, если бы в тот момент в моем распоряжении была утилита тестирования микросхем памяти.

Почему тестировать микросхемы памяти на компьютерах, управляемых  современными операционными системами, сложно?

Дело в том, что все современные  операционные системы более или  менее успешно скрывают от выполняющихся  в них прикладных программ особенности физической реализации ОЗУ. Вообще-то изоляция программ от деталей работы памяти - вещь полезная. Благодаря этой изоляции программы в многозадачной системе могут выполняться совместно, не мешая друг другу, а операционная система может "сделал

вид", что в ее распоряжении больше оперативной памяти, чем на самом деле. Однако все это затрудняет работу программ тестирования памяти, которые должны непосредственно проверять ячейки (ОЗУ), адрес за адресом.

Впрочем, особенности современных  ОС - не единственное препятствие на пути тестирования памяти.

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

На первый взгляд это может показаться парадоксальным, но самый простой совет – и посмотреть, как все работает –

является не только "дорогостоящим", но и малоэффективным. Как уже  было отмечено, многие ошибки памяти проявляются  лишь в определенных ситуациях (и  то не всегда), так, что заменив, дефектные, модули на исправные и запустив любимую игрушку, вы можете и не обнаружить отличий (отличия могут проявиться потом, когда вы захотите установить, например, Oracle Client).[13]

В то же время программы тестирования памяти являются весьма надежным средством выявления ошибок, так как специально создают такие условия, в которых эти ошибки проявляются. Что представляет собой хороший алгоритм тестирования памяти?

а первый взгляд, кажется, что достаточно просто последовательно заполнять все ячейки памяти каким-то определенным значением (паттерном), а затем считывать записанные в память значения.

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

Чтобы выявлять такие ошибки, алгоритм тестирования памяти должен проверять один и тот же участок памяти по нескольку раз, записывая и считывая различные (специально подобранные) паттерны. Удачный подбор паттернов позволит, насколько это, возможно, обойти и препятствия, связанные с особенностями выборки данных процессора, и добиться одинаковой эффективности выявления ошибок на разных чипах, отличающихся разным физическим расположением элементов памяти. Это расположение тоже может влиять на характер ошибок.

Все три утилиты, рассмотренные в этом обзоре, имеют малый размер (любой из дистрибутивов умещается на дискете).

Это неудивительно, ведь код алгоритма  тестирования памяти занимает не так  уж много места, а кроме тестирования программы, по сути, ничего и не делают. Еще одна общая черта утилит тестирования памяти - возможность выполнять "бесконечные" тесты. Закончив один прогон теста, программа тут же начинает его снова и так - до тех пор, пока пользователь не прервет этот процесс. По заявлениям авторов программ, одного прохода достаточно для того, чтобы выявить практически все возможные ошибки подсистемы памяти, но особо дотошные пользователи могут крутить тесты сколь угодно долго.

Разгон памяти — это весьма, радикальное средство увеличения производительности, но и чрезвычайно требовательное к качеству модулей памяти. Впрочем, некачественные модули могут сбоить даже в штатном режиме безо всякого разгона. Последствия таких ошибок весьма разнообразны: от аварийного завершения приложения до потери и/или искажения обрабатываемых данных.

Судя по всему, приобретение "битой" памяти — отнюдь не редкость и со сбоями памяти народ сталкивается достаточно регулярно. К его немедленному отказу. Чаще всего дефект проявляется лишь при определенном стечении ряда обстоятельств. Тяжеловесное приложение, «гоняющее" память "и в хвост, и в гриву", имеет все шансы за короткое время "подобрать" нужную комбинацию, провоцирующую сбой.

Информация о работе Написать программу "проверка памяти"