Что такое счетчик в компьютере
Счетчиком называют устройство, которое производит подсчет поступающих на его вход импульсов.
Количество разрядов счетчика определяется наибольшим числом, которое должно быть получено в каждом конкретном случае. В счетчиках имеется один вход и п выходов, в зависимости от количества разрядов.
В общем случае счетчик имеет п устойчивых состояний. Под действием входных сигналов счетчик, установленный в исходное состояние, изменяет свое состояние и сохраняет его до тех пор, пока на вход не поступит следующий сигнал. Каждому состоянию счетчика соответствует порядковый номер 0, 1, 2, . N. Счетчики находят широкое применение как в вычислительной технике, так и в различных устройствах автоматики. Они применяются для формирования адреса ячеек запоминающих устройств, для счета количества циклов выполнения операций, для запоминания кода в аналого-цифровых преобразователях и т. д.
По своему назначению счетчики подразделяют на суммирующие, вычитающие и реверсивные.
В суммирующих счетчиках производится сложение поступающих на вход импульсов с тем числом, которое хранилось в счетчике.
Вычитающие счетчики производят вычитание поступивших на вход импульсов из начального числа.
Реверсивные счетчики могут производить как сложение, так и вычитание поступающих на вход импульсов в зависимости от управляющего сигнала, который переключает счетчик (с помощью специальной схемы переключения), либо в режим сложения, либо в режим вычитания.
Рисунок 1 – Схема счетчика импульсов (а) и временная диаграмма его работы (б).
Для построения счетчиков чаще всего используют статические триггеры со счетным сходом. Применяют также динамические триггеры, феррит-транзисторные и феррит-диодные ячейки.
Рассмотрим принцип действия счетчика, приведенного на рисунке 1, а. Импульсы, которые требуется сосчитать, подаются на счетный вход триггерной ячейки 1-го разряда (Т1).
Каждый приходящий импульс перебрасывает первую триггерную ячейку из одного устойчивого состояния в другое. Предположим, что все разряды счетчика стояли в положении «0», что соответствует коду «000» на 3-разрядном счетчике.
Первый входной импульс перебросит 1-й разряд в положение «1».
Второй входной импульс переведет его в положение «0». При этом возникает импульс переноса из 1-го во 2-й разряд, который перебрасывает триггерную ячейку 2-го разряда в положение «1».
Код на счетчике станет «010».
Триггерная ячейка 2-го разряда вновь перебросится в положение «О» только после 4-го импульса.
В рассматриваемом счетчике импульс переноса возникает в результате дифференцирования фронта выходного сигнала триггера, соответствующего перебросу триггера из положения «1» в положение «0».
В данном случае на емкость С подается сигнал с выхода «0» триггерной ячейки. Образовавшийся дифференцированный импульс поступает на счетный вход триггерной ячейки.
Количество просчитанных импульсов можно определить по положению триггеров счетчика. Код, стоящий на счетчике, точно соответствует числу поступивших на вход импульсов, выраженному в двоичном коде. Поэтому количество каскадов, которое должен иметь счетчик, равно количеству двоичных разрядов необходимого числа импульсов, поступивших на счетчик при одном подсчете, т. е. до установки счетчика в положение «0». Если после заполнения счетчика (код 111..1) не прекратится подача входных импульсов, то после перехода счетчика через положение «0» во всех разрядах подсчет импульсов начнется сначала. Этот режим работы счетчика называется циклическим. За один цикл работы на счетчик поступает 2 n импульсов, где п — количество разрядов счетчика.
В ряде случаев требуется, чтобы число импульсов было отличным от 2 n . Допустим, счетчик требуется выполнить на 10 импульсов.
Количество разрядов этого счетчика должно быть равно 4, так как ближайшее число 2 n , большее 10, равно 16. Для того чтобы цикл равнялся 10 импульсам, необходимо после каждого 10-го импульса производить установку счетчика в положение «0». На рисунке 2 приведена схема счетчика с циклом на 10 импульсов.
Рисунок 2 – Счетчик с пересчетом на 10.
Схема состоит из четырех триггеров. Образование импульса переноса осуществляется так же, как и в предыдущей схеме. Установка счетчика в положение «0» производится с помощью схемы совпадения на двух вентилях В1 и В2. Потенциальные входы этих вентилей подключены соответственно на единичные выходы триггеров 1-го и 4-го разрядов. Вентили одновременно открыты, когда на счетчике стоит код 1001 (т. е. число 9). Таким образом, схема совпадения открыта только для 10-го импульса, который должен установить счетчик в положение «0». Выходной импульс вентиля В2 нельзя подавать непосредственно на входы У «0» триггерных ячеек, так как при этом произойдет только сдвиг числа в счетчике влево. Поэтому вначале устанавливают каждый разряд счетчика в положение «1» путем подачи импульса с вентиля В2 на единичные входы триггерных ячеек. В этом случае импульсов переноса не образуется. Затем 1-й разряд устанавливается в. положение «0» подачей выходного импульса вентиля В2 через линию задержки τ2 на вход У «0» триггера. Образовавшийся в 1-м разряде импульс переноса последовательно перебросит все триггеры в положение «0».
Линия задержки τ2 становится для того, чтобы импульс с вентиля В2 пришел на вход У «0» триггерной ячейки 1-го разряда после установления всех триггеров в положение «1».
Поэтому импульс с вентиля В2 подается только на единичные входы У «1» 1-го и 3-го разрядов. Линия задержки τ1 на входе 1-го разряда включается для того, чтобы входной импульс смог пройти через вентиль В1 до переброса триггера Т1 в положение «0».
Одной из характеристик счетчика является коэффициент пересчета.
Если суммирующий счетчик имеет п разрядов, то лишь после подачи 2 n входных импульсов на единичном выходе триггера старшего разряда появится первый сигнал.
Следовательно, коэффициент пересчета такого счетчика равен 2 п .
Коэффициентом пересчета счетчика Ксч, называют отношение частоты импульсов, подаваемых на его вход, к частоте импульсов, образующихся на выходе его старшего разряда.
Считывание числа, записанного в счетчике, производится так же, как и в регистрах, т. е. в прямом коде с единичных выходов триггеров и в обратном коде с нулевых выходов.
Рисунок 3 – Вычитающий триггерный счетчик.
На рисунке 3 приведена схема вычитающего счетчика. В этом счетчике счетный вход триггеров старших разрядов соединяется не с единичным, а с нулевым выходом предыдущих разрядов триггеров. Каждый входной импульс уменьшает величину кода, установленного в вычитающем счетчике, на единицу.
Если, например, в счетчике записан код 100, то первый входной импульс перебрасывает триггер Т1 из нулевого в единичное положение.
Возникающий на его выходе импульс переноса переводит триггер Т2 также в единичное положение, а импульс переноса триггера Т2 переводит триггер Т3 из единичного положения в нулевое.
В результате в счетчике будет установлен код 011. Второй входной импульс уменьшит показание счетчика еще на единицу и т. д.
Счетчики со сквозным переносом. Быстродействие рассмотренных счетчиков зависит как от скорости переброса триггера младшего разряда, так и от времени передачи импульсов переноса по цепи счетчика. Повысить быстродействие счетчика можно за счет создания цепей, которые обеспечивают параллельную передачу импульсов переноса. Такие счетчики называют счетчиками со сквозным переносом. Принцип работы счетчиков со сквозным переносом основан на особенности сложения двоичных чисел, заключающейся в следующем.
Если к некоторому двоичному числу прибавляется единица младшего разряда, то получаемая сумма двух чисел может быть получена заменой первого нуля (считая справа налево) единицей, а всех единиц, стоящих справа от этого нуля, нулями. Например:
В первом слагаемом первый стоящий справа нуль расположен в третьем разряде. Производя замену этого нуля единицей, а стоящих перед ним единиц нулями, получим сумму, которая на единицу больше первого слагаемого.
Рисунок 4 – Счетчик со сквозным переносом.
На рисунке 4 приведена схема счетчика со сквозным переносом. Предположим, что в счетчике записано число 0111. При подаче входного импульса сигнал пройдет через открытые вентили В1 ÷ В3 по цепи сквозного переноса и поступит на вход триггера Т4. В результате триггер Т4 будет установлен в единичное положение. Одновременно при прохождении импульса по цепи переноса триггеры Т1, Т2 и Т3 поочередно будут установлены в нулевое положение. Таким образом, в результате прохождения первого входного импульса на счетчике будет установлено число 1000.
Реверсивные счетчики. В этих счетчиках предусматривается специальная переключающая схема, предназначенная для переклюю-чения счетчика либо на сложение, либо на вычитание. На рисунке 5 приведена схема реверсивного счетчика на три числовых разряда.
Рисунок 5 – Реверсивный счетчик.
В счетчике используются триггеры со счетным входом Т1, Т2 и Т3.Триггер управления Ту и вентили управления Вс и Вв представляют собой переключающую схему. Счетчик содержит также знаковый разряд Тзн.
В режиме сложения счетчик работает следующим образом. В исходном состоянии триггеры Т1 ÷ Т3 находятся в состоянии «0» и на их единичных выходах имеется низкий потенциал, поэтому входные сигналы через цепочку вентилей Вс1 ÷ Вс3 не пройдут.
При подаче сигнала сложения Ус триггер Ту устанавливается в единичное положение, в результате чего будет открыт вентиль Вс и входные импульсы UBX проходят в цепь сложения. Вентили Вс1 ÷ Вс3 образуют цепь сквозного переноса в режиме сложения. При этом сигналы, управляющие вентилями Вс1 ÷ Вс3, поступают с единичных выходов триггеров Т1 ÷ T3.
Первый входной импульс UBX перебросит в единичное положение триггер Т1 в результате чего вентиль Вс1 откроется, а вентиль Вв1 закроется. Второй входной импульс перебросит триггер Т1 в нулевое положение и, пройдя вентиль Вс1, установит триггер Т2 в состояние «1».
Третий входной импульс переводит триггер Т1 в единичное положение.
Четвертый импульс проходит через открытые вентили Вс1 и Вс2 и перебрасывает триггер Т3 в единичное положение. Он же переводит триггеры Т1 и Т2 в нулевое положение и т. д. Чтобы счетчик работал в режиме вычитания, управляющий сигнал Ув подается на триггер Ту. В результате триггер будет установлен в нулевое положение, при котором открывается вентиль Вв, а вентиль Вс закрывается. В этом случае входные импульсы будут теперь поступать уже в цепь вычитания – вентили ВВ1 ÷ BB3, которые образуют цепь сквозного переноса при вычитании. Эти вентили будут находиться в открытом состоянии при нулевом положении соответствующих триггеров Т1 ÷ Т3.
Знак числа, записанного в счетчике, может быть установлен 'с помощью триггера знака Тзн. Нулевое положение этого триггера соответствует положительному числу, а единичное – отрицательному числу в дополнительном коде.
Счетчик - устройство для подсчета числа входных импульсов. Счетчик можно реализовать на нескольких триггерах.
по модулю счёта:
с произвольным постоянным модулем счёта;
с переменным модулем счёта;
по направлению счёта:
по способу формирования внутренних связей:
с последовательным переносом;
Символом счетчиков на схемах служат буквы СТ (от англ. counter — счетчик), после символа проставляют число, характеризующее модуль счета (например, 2 или 10 — СТ2, СТ10).
Основными эксплуатационными показателями счетчика являются емкость и быстродействие. Емкость счетчика, численно равная коэффициенту счета, равна числу импульсов за один цикл.
В суммирующих счетчиках каждый входной импульс увеличивает число на его выходе на единицу, в вычитающих счетчиках каждый входной импульс уменьшает это число на единицу. Наиболее простые счетчики - двоичные. Счетчики можно реализовать на триггерах, которые соединяют последовательно. Выход каждого триггера действует на тактовый вход следующего. Для того чтобы реализовать суммирующий счетчик, необходимо счетный вход очередного триггера подключать к инверсному выходу предыдущего. Для того чтобы изменить направление счета (реализовать вычитающий счетчик), используют следующие способы:
а). считывание выходных сигналов счетчика не с прямых, а с инверсных выходов триггеров;
б). изменение структуры связей в счетчике. Подача на счетный вход следующего триггера сигнала не с инверсного, а с прямого выхода предыдущего триггера.
Реверсивный счетчик может работать в качестве суммирующего и вычитающего. Эти счетчики имеют дополнительные входы для задания направления счета. Режим работы определяется управляющими сигналами на этих входах. В программе EWB такие счетчики представлены ИМС 74163 и 74169 (К155ИЕ18, ИЕ17).
Главное достоинство счетчиков с последовательным переносом — простота схемы. Увеличение разрядности осуществляется подключением дополнительных триггеров к выходу последнего триггера. Основной недостаток счетчиков с последовательным переносом — сравнительно низкое быстродействие, поскольку триггеры срабатывают последовательно, один за другим. Счетчики этого класса в библиотеке EWB не представлены.
Счетчики с последовательным переносом представляют собой цепочку триггеров, в которой импульсы, подлежащие счету, поступают на вход первого триггера, а сигнал переноса передается последовательно от одного разряда к другому.
Счетчики с параллельным переносом состоят из синхронных триггеров. Счетные импульсы подаются одновременно на все тактовые входы, а каждый из триггеров цепочки служит по отношению к последующим только источником информационных сигналов. Срабатывание триггеров параллельного счетчика происходит синхронно, и задержка переключения всего счетчика равна задержке одного триггера. В таких счетчиках используются JK- и D-триггеры. В схемном отношении они сложнее счетчиков с последовательным переносом. Число разрядов у этих счетчиков обычно невелико (4. 6), поскольку с повышением числа разрядов число внутренних логических связей быстро растет.
Счетчики с параллельным переносом (их чаще называют синхронными) в библиотеке EWB представлены счетчиками 74160, 74162, 74163 и 74169 (аналоги — К155ИЕ9, ИЕН, ИЕ18, ИЕ17 соответственно).
Счетчики с параллельным переносом применяются в быстродействующих устройствах. Они обладают более высокой помехоустойчивостью, так как в паузах между импульсами триггеры счетчика блокированы. К их недостаткам следует отнести меньшую нагрузочную способность отдельных разрядов из-за дополнительной нагрузки внутренними связями. Каскад, предшествующий счетчику, должен иметь достаточную мощность, чтобы управлять входами нескольких триггеров.
Проектирование счетчика сводится к определению числа триггеров и организации связей между ними и логическими элементами, а также вычислению разрешающей способности счетчика (максимальной частоты счета).
Вопрос №36
Узлы как структурная единица ЭВМ, их типы.
Основные узлы ЭВМ.
Основными узлами ЭВМ являются :
- центральный процессор (ЦП)
- оперативная память (ОЗУ)
- постоянное запоминающее устройство (ПЗУ)
- внешняя память (ВЗУ)
- устройства Ввода (УВв)
- устройства Вывода (УВыв)
Все устройства ЭВМ подсоединены к единой ИНФОРМАЦИОННОЙ
Основные узлы ЭВМ объединены в следующую схему.
УУ |
АЛУ |
Ц П |
Системные программы |
ПЗУ |
Программа Данные Результаты |
ОЗУ |
Системная шина |
Устройства ВВОДА |
ВНЕШНЯЯ ПАМЯТЬ |
Устройства ВЫВОДА |
1. Центральный процессор
Главным элементом любой ЭВМ является ЦЕНТРАЛЬНЫЙ ПРОЦЕССОР . ЦП сосотоит из - Устройства Управления (УУ) - Арифметико-Логического устройства (АЛУ) |
Назначение ЦП : 1) Управление узлами компьютера
2) Обработка информации, которая сводится к
выполнению арифметических операций.
УУ - управляет работой ЭВМ, путем исполнения команд ПРОГРАММЫ. Рабочая программа хранится в ОЗУ. |
(АЛУ) Арифметико-логичеcкое устройство главный исполнительный орган ЭВМ. Назначение АЛУ - О Б Р А Б О Т К А ИНФОРМАЦИИ. Обработка информации сводится к выполнению арифметических операций. АЛУ выполняет над числами арифметические(+,-,умножить, делить) и логические( > , < , не равно и др.) операции |
Оперативная память (ОЗУ)
Назначение ОЗУ ОЗУ предназначена для хранения рабочей программы во время ее выполнения, а также данных, которые эта программа должна обработать и результатов обработки |
Вместе с программой в ОЗУ хранятся :
- ИСХОДНЫЕ ДАННЫЕ , которые программа обрабатывает
Пример: Вы рисуете на компьютере с помощью программы PAINT.
Где в этот момент хранится программа Paint и рисунок ? >
В оперативной памяти. Работающая программа и результат ее работы
находится в ОЗУ!
Рабочая программа находится в ОЗУ .
Недостатки ОЗУ ОЗУ современных ЭВМ является ЭНЕРГОЗАВИСИМОЙ. При выключении питания содержимое ОЗУ теряется. |
Главное достоинство ОЗУ ВЫСОКОЕ БЫСТРОДЕЙСТВИЕ . ОЗУ выполнена из электронных элементов, поэтому быстродействие ОЗУ сопоставимо с быстродействием ЦП. Это значит, что время чтения (записи) двоичного числа из (в) ОЗУ примерно равно времени , за которое ЦП выполняет одну операцию над парой чисел. |
Ответ : В принципе можно, но при этом резко упадет быстродействие ЭВМ (в 10 000 раз). Операции чтения записи с диска выполняются примерно в 10 000 раз медленнее, чем из электронных ячеек. |
Магнитная память обладает низким быстродействием (по сравнению с электронной памятью). Операции чтения записи с диска выполняются примерно в 10 000 раз медленнее, чем из электронных ячеек.
Если бы рабочая программа располагалась на диске, то ЦП большую часть времени пришлось бы простаивать в ожидании, пока будет прочитана очередная команда.
Работа компьютера сводится к чтению и исполнению команд программы. Поэтому быстродействие ЭВМ не может превысить, скорость чтения команд программы.
Чарльз Бэбидж - первый конструктор автоматической вычислительной машины, предполагал хранить программу на картонных картах.
1) До запуска все программы хранятся в .exe файлах на магнитном диске (винчестере). 2)После запуска программа копируются из .exe файла в ОЗУ. Зачем это делается? Для поддержки высокого быстродействия ЭВМ. (Что бы быстродействие ЭВМ было высоким, рабочая программа должна храниться в быстрой памяти, т.е. в ОЗУ) 3)После завершения выполнения очередной программы она удаляется из ОЗУ, тем самым освобождая место для запуска других программ. (программа удаляется только из ОЗУ, но остается в файле на диске) |
Ведь после выключения питания или перезагрузки ОЗУ очищается и не содержит никакой информации.
Первой в ОЗУ попадает ОПЕРАЦИОННАЯ СИСТЕМА. Она копируется из файлов на магнитном диске в ОЗУ.
Но чтобы выполнить это копирование, нужно запустить программу, специально для этого предназначенную. Ведь на компьютере все делается только с помощью программ.
Таковой программой является начальный загрузчик. ОН хранится в ПЗУ. НАЧАЛЬНЫЙ ЗАГРУЗЧИК стартует первым сразу при включении компьютера и копирует в ОЗУ ОС. Далее ОС включается в работу и управляет компьютером.
Счетчиком называется типовой функциональный узел компьютера, предназначенный для счета входных импульсов. Счетчик представляет собой связанную цепочку Т-триггеров, образующих память с заданным числом устойчивых состояний (Рис. 5.12)
Рисунок 5.12-Логическая структура счетчика
Разрядность счетчика п равна числу Т-триггеров. Каждый входной импульс изменяет состояние счетчика, которое сохраняется до поступления следующего сигнала. Значения выходов триггеров счетчика Qn,Qn-1, … Q1 -отображают результа счета в принятой системе счисления.
Логическая функция счетчика обозначаете буквами СТ (counter).
Список микроопераций счетчика включает:
-предварительную установку в начальное состояние,
-инкремент или декремент хранимого слова,
-выдачу слов параллельным кодом и др.
Счетчик является одним из основных функциональных узлов компьютера, а также различных цифровых управляющих и информационно-измерительных систем.
Основное применение счетчиков:
• образование последовательности адресов команд программы (счетчик команд или программный счетчик);
• подсчет числа циклов при выполнении операций деления, умножения, сдвига (счетчик циклов);
• получение сигналов микроопераций и синхронизации; аналого-цифровые преобразования и построение электронных таймеров (часов реального времени).
Счетчик характеризуется модулем и емкостью счета.
Модуль счета КСч определяет число состояний счетчика.
Модуль двоичного n-разрядного счетчика выражается целой степенью двойки М = 2 n .
После счета числа импульсов NBx = Ксч счетчик возвращается в начальное состояние. Таким образом, модуль счета, который часто называют коэффициентом пересчета, определяет цикл работы счетчика, после которого его состояние повторяется. Поэтому число входных импульсов и состояние счетчика однозначно определены только для первого цикла.
Емкость счета Nmаx определяет максимальное количество входных импульсов, которое может зафиксировать счетчик при одном цикле работы.
Емкость счета NСч=Ксч - 1 при условии, что работа счетчика начинается с нулевого начального состояния.
В счетчиках используются три режима работы: управления, накопления и деления.
В режиме управления считывание информации производится после каждого аходного счетного импульса, например, в счетчике адреса команд.
В режиме накопления главным является подсчет заданного числа импульсов либо счет в течение определенного времени.
В режиме деления (пересчета) основным является уменьшение частоты поступления импульсов в Ксч раз.
Большинство счетчиков может работать во всех режимах, однако в специальных счетчиках-делителях состояния в процессе счета могут изменяться в произвольном порядке, что позволяет упростить схему узла.
Счетчики классифицируют по следующим признакам:
• способу кодирования — позиционные и непозиционные;
• модулю счета — двоичные, десятичные, с произвольным постоянным или переменным (программируемым) модулем;
• направлению счета — простые (суммирующие, вычитающие) и реверсивные;
• способу организации межразрядных связей — с последовательным, сквозным, параллельным и комбинированным переносами (заемом);
• типу используемых триггеров — Т, JK, D в счетном режиме;
• элементному базису - потенциальные, импульсные и потенциально-импульсные.
В счетчиках с позиционным кодированием числовое выражение текущего состояния счетчика определяется формулой:
N = Qi = rn Qn + rn-1 Qn-1 + … + r1 Q1
где ri -вес i-го разряда;
Qi — значение выхода i-го разряда;
п — число разрядов.
Нулевое значение всех разрядов обычно принимается за начальное состояние счетчика. Остальные состояния нумеруют по числу поступивших входных импульсов.
В счетчиках с непозиционным кодированием (например, в кодах Грея) разряды не имеют постоянных весов и каждом набору состояний Qn, Qn-1,…Q1 приписывается определенное количество входных импульсов.
В компьютерах преимущественно используют счетчики с позиционным кодированием.
По виду переходов простые счетчики (Сч) подразделяются на суммирующие (прямого счета) и вычитающие (обратного счета).
В суммирующих счетчиках каждый прибавляемый импульс U + увеличивает состояние на единицу, то есть реализуется микрооперация инкремента Сч : = Сч + 1.
В вычитающих счетчиках каждый вычитаемый импульс U - уменьшает состояние на единицу, то есть реализуется микрооперация декремента Сч : = Сч - 1.
Реверсивные счетчики имеют переходы в прямом и обратном направлениях, что позволяет считать прибавляемые и вычитаемые импульсы.
К временным характеристикам счетчиков относятся:
- время установления (переключения) кода.
Разрешающая способность tpc -определяется минимальным интервалом времени между двумя входными импульсами, при котором еще сохраняется работоспособность счетчика. Параметр tpc задают временем переключения tT первого (младшего) триггера счетчика, то есть tpc = tT, поскольку он переключается под воздействием каждого входного импульса.
Быстродействие счетчика определяется максимальной частотою Fm поступления входных импульсов в режиме деления и вычисляется по формуле: Fm = 1/tT.
Bремя установления кода tуст отсчитывается от начала входного импульса до момента получения нового состояния. Данный параметр позволяет рассчитать быстродействие счетчика в режиме управления из соотношения: FmK = 1/(tуст + tсч), где tсч - время считывания информации.
Межразрядные связи обеспечивают выработку сигналов переноса в старшие разряды при суммировании импульсов и сигналов заема — при вычитании.
От вида реализации межразрядных связей существенно зависят параметры tyct и Fm.k.
В счетчиках с последовательными переносами триггеры переключаются поочередно после каждого входного импульса в направлении от младших разрядов к старшим. Такие счетчики называются последовательными или асинхронными. В счетчиках с параллельными переносами триггеры переключаются одновременно после каждого входного импульса, такие счетчики называются параллельными или синхронными.
Windows счетчики производительности обеспечивают высокоуровневый уровень абстракции с единообразным интерфейсом для сбора различных типов системных данных, таких как процессор, память и статистика использования диска. Системные администраторы используют счетчики производительности для наблюдения за проблемами производительности или поведения. Разработчики программного обеспечения используют счетчики производительности для проверки использования ресурсов их компонентов.
Windows счетчики производительности оптимизированы для обнаружения и сбора данных по администрированию и диагностике. Они не подходят для сбора данных с высокой частотой или для профилирования приложений, так как они не предназначены для сбора более одного раза в секунду. Для доступа к системной информации с более низкими издержками можно использовать более прямые API, такие как вспомогательное состояние процесса, глобалмемористатусекс, жетсистемтимесили GetProcessTimes. Для профилирования можно выполнять сбор журналов ETW с данными профилирования системы с помощью tracelog.exe с параметрами, или с -critsec -eflag -dpcisr -ProfileSource помощью профилирования счетчика оборудования.
не путайте Windows счетчики производительности с API QueryPerformanceCounter . Windows счетчики производительности обеспечивают высокоуровневую абстракцию для многих типов системных данных. Функция QueryPerformanceCounter предоставляет оптимизированный доступ к метке времени с высокой точностью.
Основные понятия
система счетчиков производительности Windows организована в виде потребителей, поставщиков, каунтерсетс, счетчиков, экземпляров и значений счетчиков.
Потребитель — это программный компонент, который использует данные о производительности. Windows включает несколько встроенных средств , которые используют данные о производительности. К ним относятся диспетчер задач, монитор ресурсов, монитор производительности, typeperf.exe, logman.exe и relog.exe. Разработчики могут создавать сценарии и приложения, обращающиеся к счетчикам производительности через API-интерфейсы счетчика производительности.
Поставщик — это программный компонент, который создает и публикует данные производительности. Поставщик будет публиковать данные для одного или нескольких каунтерсетс. Например, система базы данных может зарегистрироваться в качестве поставщика данных о производительности.
- Поставщик v1 — это программный компонент, который публикует данные производительности с помощью библиотеки DLL производительности , которая выполняется в процессе потребителя. Поставщик v1 устанавливается на компьютере с помощью .ini файла. Архитектура поставщика v1 устарела. Новые поставщики должны использовать архитектуру поставщика v2.
- Поставщик v2 — это программный компонент, который публикует данные производительности с помощью API поставщика счетчиков производительности. Поставщик v2 устанавливается на систему через .man файл (XML-манифест).
Набор счетчиков — это группирование данных о производительности в поставщике. Набор счетчиков имеет имя и один или несколько счетчиков. Сбор данных из набора счетчиков возвращает число экземпляров. в некоторых Windows api каунтерсетс называются объектами производительности. Например, поставщик данных производительности для системы базы данных может предоставлять набор счетчиков для статистики по базе данных.
Счетчик — это определение отдельной части данных о производительности. У счетчика есть имя и тип. Например, набор счетчиков «статистика по базе данных» может содержать счетчик с именем «транзакций в секунду» с типом PERF_COUNTER_COUNTER .
Экземпляр — это сущность, в которой сообщается о данных о производительности. Экземпляр имеет имя (строка) и одно или несколько значений счетчика. Например, набор счетчиков «статистика по базе данных» может содержать по одному экземпляру на базу данных. Имя экземпляра будет именем базы данных, а каждый экземпляр будет содержать значения счетчика для счетчиков "транзакций в секунду", "использование памяти" и "использование диска".
Значение счетчика — это значение одного элемента данных счетчика производительности. Значение счетчика — это целое число без знака, 32-бит или 64-бит, в зависимости от типа соответствующего счетчика. При разговоре об экземпляре значение счетчика иногда может называться счетчиком или значением.
Может быть полезно связать термины счетчиков производительности с более привычными условиями электронной таблицы. Набор счетчиков подобен таблице. Счетчик похож на столбец. Экземпляр похож на строку. Значение счетчика похоже на ячейку в таблице.
Один экземпляр каунтерсетс всегда содержит данные только для одного экземпляра. Это распространено для каунтерсетс, которые сообщают о глобальной системе статистики. например, Windows имеет встроенный набор счетчиков с одним экземпляром "память", который сообщает об использовании глобальной памяти.
Каунтерсетс с несколькими экземплярами содержит данные для переменного числа экземпляров. Это распространено для каунтерсетс, которые сообщают о сущностях в системе. например, Windows имеет встроенный набор счетчиков с несколькими экземплярами "сведения о процессоре", который сообщает по одному экземпляру для каждого установленного цп.
Потребители периодически собираются и записывают данные из CounterSet поставщика. Например, потребитель может получать данные один раз в секунду или один раз в минуту. Собранные данные называются примером. Пример состоит из меток времени и данных для экземпляров набора счетчиков. Данные для каждого экземпляра включают имя экземпляра (строку) и набор значений счетчика (целые числа, по одному значению для каждого счетчика в наборе счетчиков).
Имена экземпляров должны быть уникальными в образце, т. е. поставщик не должен возвращать два экземпляра с одним и тем же именем как часть одного примера. Некоторые старые поставщики не соответствуют этому правилу, поэтому потребители должны иметь возможность допускать неуникальные имена экземпляров. Имена экземпляров не учитывают регистр, поэтому экземпляры не должны иметь имен, отличающихся только регистром.
В целях обратной совместимости набор счетчиков "процесс" возвращает неуникальные имена экземпляров на основе имени файла EXE. Это может привести к путанице в результатах, особенно при запуске или завершении процесса с неуникальным именем, так как это обычно приводит к сбою данных из-за неправильного соответствия имен экземпляров между выборками. Потребители в наборе счетчиков "процесс" должны иметь возможность допускать эти неуникальные имена экземпляров и результирующие данные.
Имена экземпляров должны быть стабильными в образцах, т. е. поставщик должен использовать одно и то же имя экземпляра для одной и той же сущности каждый раз при сборе набора счетчиков.
Каждый счетчик имеет тип. Тип счетчика указывает тип необработанного значения счетчика (беззнаковое 32-разрядное целое число или неподписанное 64-разрядное целое число). Тип счетчика также указывает, что представляет собой необработанное значение счетчика, которое определяет, как обработанное значение должно обрабатываться для создания полезной статистики.
Хотя некоторые типы счетчиков просты и имеют необработанное значение, которое напрямую полезно, многие типы счетчиков нуждаются в дополнительной обработке , чтобы создать полезное отформатированное значение. Для создания форматированного значения некоторым типам счетчиков требуются необработанные значения из двух выборок, для некоторых типов счетчиков требуются метки времени, а для некоторых типов счетчиков требуются необработанные значения из нескольких счетчиков. Вот несколько примеров.
- PERF_COUNTER_LARGE_RAWCOUNT — Это 64-разрядное необработанное значение, которое не требует никакой обработки. Он подходит для значений на момент времени, например "байт используемой памяти".
- PERF_COUNTER_RAWCOUNT_HEX — Это 32-разрядное необработанное значение, которое должно быть полезно только для простого шестнадцатеричного форматирования. Он подходит для получения точки во времени или идентификации, например "Flags" или "базовый адрес".
- PERF_COUNTER_BULK_COUNT — Это 64-разрядное необработанное значение, указывающее количество событий и используемое для вычисления скорости возникновения событий. Чтобы быть полезным, для этого типа счетчика требуется два образца, которые были разделены по времени. Отформатированное значение — это частота событий, т. е. количество событий, произошедших в секунду за интервал между двумя примерами. Учитывая два образца s0 и s1 , отформатированное значение (частота событий) будет вычисляться как (s1.EventCount - s0.EventCount)/(s1.TimestampInSeconds - s0.TimestampInSeconds) .
Предполагается, что поставщики ведут себя так, как если бы они не изменяют состояние, т. е. сбор данных из набора счетчиков не должен заметно влиять на состояние поставщика. Например, поставщик не должен сбрасывать значения счетчика в 0 при сборе набора счетчиков и не должен использовать отметку времени предыдущей коллекции для корректировки значений в текущей коллекции. Вместо этого он должен предоставлять простые необработанные значения счетчиков с точными типами, чтобы потребитель мог вычислить полезную статистику на основе необработанных значений и их меток времени.
Приступая к работе
- Используйте средства счетчиков производительности , если требуется получить или просмотреть данные о производительности из системы.
- Используйте API сбора счетчиков производительности , если требуется написать сценарий или программу, собирающую данные о производительности из локальной системы.
- Используйте Классы счетчиков производительности WMI , если требуется получить данные о производительности из локальной или удаленной системы с помощью инструментария WMI.
- Используйте API поставщика счетчиков производительности , если требуется опубликовать данные о производительности из программного компонента.
Требования к среде выполнения
Сведения о требованиях времени выполнения для определенного программного элемента см. в разделе "требования" на странице справочника по этому элементу.
Программный счетчик PC (Program Counter) используется для указания следующей команды выполняемой программы. Реализация этой функции значительно осложняется, когда необходимо сохранить содержимое PC при вызове подпрограмм и обработке запросов прерывания или обеспечить ветвление программы. Рис. 2.16 иллюстрирует выполнение некоторых функций программного счетчика, однако на практике они оказываются существенно более сложными.
Программный счетчик представляет собой счетчик с параллельным вводом-выводом. На рис. 2.16 показано функционирование PC в процессоре с Принстонской архитектурой. В процессорах этого типа содержимое PC поступает по шине данных в схему управления памятью, указывая адрес считываемой команды. Часто PC входит в состав схемы управления памятью - это позволяет избежать передачи адреса по внутренней шине данных. Важные особенности функционирования программного счетчика - параллельная загрузка нового содержимого, поступающего с шины данных, возможность сброса (возврат к адресу первой команды программы), реализация инкремента (увеличение содержимого для адресации следующей команды). Сигналы, обеспечивающие выполнение этих операций, формируются дешифратором команд, который управляет последовательностью действий микроконтроллера.
Рис. 2.16 - Программный счетчик.
Начальное содержимое PC после запуска микроконтроллера может иметь любое значение. Хотя наиболее очевидным представляется использование в качестве начального значения 0000h, некоторые микроконтроллеры начинают выполнение программы с других адресов. Аналогичная ситуация имеет место с адресами («векторами») прерываний. При обслуживании прерываний в PC обычно загружают содержимое, которое отличается от адреса, загружаемого при начальном запуске микроконтроллера, однако для реализации прерывания и запуска могут использоваться одни и те же аппаратные средства.
После чтения очередной команды содержимое программного счетчика увеличивается (инкрементируется), чтобы обеспечить переход к адресу следующей команды. Если выполняется вызов подпрограммы или происходит прерывание, то адрес возврата (адрес следующей команды) может быть сохранен в стеке без выполнения дополнительных тактов для инкремента содержимого программного счетчика.
Необходимо сделать некоторые важные замечания по поводу функционирования программного счетчика. В работе с микроконтроллерами, имеющими Принстонскую архитектуру, необходимо следить, чтобы программный счетчик не вышел за пределы памяти программ. Если это случится, то микроконтроллер может начать выборку данных вместо команд и пытаться выполнить выбранные коды данных, что приведет к непредсказуемому результату.
Другая проблема может возникнуть, когда программный счетчик достигнет конца адресуемой памяти. Некоторые микроконтроллеры в этом случае осуществляют циклический переход к команде, размещенной по адресу 0000h, в других микроконтроллерах дешифратор команд продолжает инкрементировать программный счетчик, что приводит к выполнению неопределенных команд.
Архитектура API производительности
Потребители счетчиков производительности включают:
-
, такие как диспетчер задач, монитор ресурсов, монитор производительности и typeperf.exe.
- Предоставляемые корпорацией Майкрософт высокоуровневые поверхности API, которые предоставляют данные счетчиков производительности, такие как классы производительности WMI.
- Собственные приложения или скрипты, использующие API-интерфейсы потребителя счетчика производительности.
Большинство потребителей счетчиков производительности используют API из PDH.dll для получения данных о производительности. PDH управляет множеством сложных аспектов сбора счетчиков производительности, таких как анализ запросов, сопоставление экземпляров по нескольким примерам и вычисление форматированных значений из необработанных данных счетчиков. Реализация PDH использует API реестра при использовании данных от поставщика v1 и использует API-интерфейсы потребителя v2 При использовании данных от поставщика v2.
Некоторые старые получатели счетчиков производительности используют API реестра для получения данных о производительности из специального HKEY_PERFORMANCE_DATA раздела реестра. Это не рекомендуется для нового кода, поскольку обработка данных из реестра является сложной и подвержена ошибкам. Реализация API реестра напрямую поддерживает сбор данных от поставщиков v1. Он косвенно поддерживает сбор данных от поставщиков v2 через слой перевода, использующий API-интерфейсы потребителя версии 2.
Некоторые потребители счетчиков производительности используют функции-потребители версии PerfLib v2 для прямого доступа к данным из поставщиков v2. Это сложнее, чем использование данных с помощью интерфейсов API PDH, но этот подход может быть полезен, если интерфейсы API PDH не могут быть использованы из-за проблем с производительностью или зависимостями. Реализация PerfLib v2 напрямую поддерживает сбор данных от поставщиков v2. Он не поддерживает сбор данных от поставщиков v1.
Windows OneCore не включает PDH.dll и не поддерживает использование данных счетчиков производительности с помощью api-интерфейсов реестра. потребители, работающие на OneCore, должны использовать функции потребителя версии 2 PerfLib.
Поставщики v1 реализуются как библиотека DLL поставщика, которая загружается в процесс потребителя. Реализация API реестра управляет загрузкой библиотеки DLL поставщика, вызовом библиотеки DLL для получения данных о производительности и выгрузкой библиотеки DLL соответствующим образом. библиотека DLL поставщика отвечает за сбор данных о производительности по мере необходимости, например с помощью обычных Windows api, RPC, именованных каналов, общей памяти или других механизмов взаимодействия между процессами.
поставщики V2 реализуются как программа пользовательского режима (часто это Windows служба) или драйвер режима ядра. Обычно код поставщика данных о производительности интегрируется непосредственно в существующий компонент (т. е. драйвер или служба сообщает о своей статистике). Реализация PerfLib v2 управляет запросами и ответами с помощью расширения ядра PCW.sys, поэтому поставщику обычно не требуется реализовывать взаимодействие между процессами для предоставления данных о производительности.
Windows api и средства счетчиков производительности включают ограниченную поддержку доступа к счетчикам производительности с других компьютеров с помощью удаленного реестра (для поставщиков V1) и RPC (для поставщиков V2). Эту поддержку часто трудно использовать в терминах элементов управления проверки подлинности (средства и API-интерфейсы могут проходить проверку подлинности только в качестве текущего пользователя), а также в плане конфигурации системы (необходимые конечные точки и службы отключены по умолчанию). Во многих случаях лучше обращаться к счетчикам производительности удаленных систем через инструментарий WMI , а не через встроенную поддержку удаленного доступа.
Аудитория разработчиков
Поставщики счетчиков производительности обычно реализуются как драйверы режима ядра или службы пользовательского режима. Поставщики счетчиков производительности обычно пишутся на C или C++.
Читайте также: