русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Дополнительные сведения о работе центрального процессора


Дата добавления: 2015-06-12; просмотров: 798; Нарушение авторских прав


Команды процессора. Центральный процессор выполняет команды, число которых не превышает двух сотен. Основными из них являются простейшие арифметические команды, которые выполняются над данными, находящимися в регистрах.Регистр - это область памяти, расположенная в центральном процессоре и имеющая довольно небольшую емкость: до нескольких байт, в зависимости от типа процессора. Так как центральный процессор выполняет арифметические операции в регистрах, то часто используются команды пересылки данных из оперативной памяти в регистры и обратно. Чтобы сложить два числа, которые находятся в оперативной памяти, необходимо сначала переслать их в регистры, затем выполнить операцию сложения, а потом переслать в оперативную память. Кроме того, может встретиться переполнение при сложении чисел и возникает, когда результат не помещается в выделенный для него регистр, и вызывается программа обработки данной ошибки. То есть для одной операции может возникнуть необходимость выполнения сразу нескольких операций. Так как процессор имеет большую производительность, то эти операции выполняются очень быстро. Когда сообщается, что процессор может работать с частотой 400 мегагерц, то это не означает, что он выполнит 400 миллионов арифметических операций в секунду. Во-первых, для одной операции сложения могут потребоваться дополнительные команды, например, пересылки, и, во-вторых, не все команды выполняются за один такт, некоторые сложные команды могут потребовать для выполнения несколько тактов и, в-третьих, при большом количестве операций ввода-вывода, то есть пересылки данных по системной шине, процессор, послав запрос на данное из оперативной памяти, может простаивать до тех пор, пока шина не освободится.

Для сложения чисел имеется несколько разных видов команд, каждая из которых работает с определенными видами данных в зависимости от их длины и вида (двоичное, десятичное, упакованное и пр.). В результате, хотя команд много, существует достаточно небольшое количество групп команд, которые довольно легко систематизируются.



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

Существуют и другие команды, например, циклический сдвиг разрядов числа, пустой оператор и пр., которые используются довольно редко по сравнению с вышеуказанными командами. Команды для центрального процессора имеют размер от 1 до 11 байт, в среднем 4-5 байт.

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

Принцип построения центрального процессора основан на обратной совместимостипроцессоров. Это означает, что все программы, которые работали на текущем компьютере, будут работать и в следующем поколении процессоров. То есть программы для 8086 будут работать и на современном процессоре Pentium. Однако это означает и то, что недостатки, которые имелись в более ранних центральных процессорах, будут присутствовали и в последующих моделях. Так, основным недостатком является принцип деления оперативной памяти на обычную и расширенную, метод сегмент:сектор, размещение числовых данных, при котором вначале находится младшее значение, потом старшее, и т.д..

Принципиальными отличиями с точки зрения математического обеспечения, связанным с введением новых режимов работы, характеризовались три первые вида процессоров: 8086 (когда он появился), 80286 (введен защищенный режим с адресацией до 16 мегабайт) и 80386 (введен принцип постраничного обмена для виртуальной памяти, увеличена адресация защищенного режима до 4 Гигабайт). Остальные виды процессоров имели повышенную разрядность для обработки данных, увеличенную кэш-память, повышенную производительность и новые наборы команд, которые убыстряют работу мультимедийных программ за счет того, что позволяют одновременно обрабатывать несколько данных (ММХ, 3DNow!). То есть программа, которая работает с Pentium III, будет работать и с 386 процессором, только очень медленно.

Здесь, конечно, можно задать вопрос: каким образом это происходит, ведь программа может использовать какой-либо из существующих дополнительных наборов команд (например, ММХ), а 386 процессор их не поддерживает. Все очень просто. Когда программа начинает выполняться, то она проверяет, может ли производиться работа с дополнительным набором команд на данном виде процессора. Если может, то будет работать один вид подпрограмм, если нет, то другой вид, то есть, если процессор не поддерживает определенный набор команд, то программа это определит и все равно будет работать, но медленнее, чем если бы имелись дополнительные наборы команд.

Центральный процессор может работать в разных режимах. Рассмотрим их подробнее.

В первых моделях процессора х86 использовался реальный режим для работы с оперативной памятью, при котором физический адрес формировался как сумма двух чисел: базовый*16+смещение, где базовый адрес указывал на начало в области памяти, куда загружается программа, а смещение - на смещение относительно начала программы.

В первых компьютерах для адресации памяти использовался один байт, что позволяло производить адресацию в 64 Кб памяти, и поначалу оказалось, что это очень много для персональных компьютеров. Однако этого пространства скоро стало не хватать и возникла необходимость перехода к другой схеме адресации. Вполне понятно, что лучшим решением был бы вариант перехода на адресацию при помощи 16 разрядов (2-х байт). Это позволило бы адресовать 2 16 = 4 гигабайт оперативной памяти, что было бы вполне достаточно и для современных компьютеров. Однако, чтобы перевести программы, работавшие в среде СР/М, был реализован другой подход, который вычисляет адрес по формуле сегмент*16+смещение.

Таким образом, загрузив программу по произвольному адресу и переслав этот адрес в базовый регистр, программа сможет выполняться в любом месте оперативной памяти, то есть базовый указывает на начало программы, а смещение - на смещение относительно начала программы или относительно базового адреса, что одно и то же. При этом пара чисел база:сегмент называется логическим адресом.

Поясним смысл этого более подробно. Область оперативной памяти может быть разбита на сегменты по 64 Кбайт каждый. Так как для адреса использовалось 2 байта (16 бит), то можно адресовать до 64 Кбайт памяти (216 = 64 Кбайт). Для адресации более 64 Кбайт используется два адреса по два байта. При этом первый называется базовым, а второй - смещением. Базовый адрес может принимать максимальное значение 16*216 = 1 Мегабайт, а сам адрес вычисляется по формуле: базовый адрес*16 + смещение. Таким образом, можно адресовать 1 Мбайт памяти, то есть в реальном режиме можно работать только с одним мегабайтом памяти. Это ограничение остается справедливым для реального режима и для современных компьютеров. Начало области является базовым адресом, местоположение данных в сегменте определяется смещением относительно начала сегмента. Это сегментированный адрес.

Начиная с серии 286 компьютеров, процессор может перейти в защищенный режим памяти. В этом режиме используется адресация виртуальной памяти. При этом, когда задан адрес в программе, то для вычисления физического адреса в памяти используются специальные таблицы (таблицы дескрипторов), которые содержат строки с указанием начала, длины области данных, права доступа. Каждая строка соответствует одной области, которая может достигать от 1 байта до 4 гигабайт. При помощи этих таблиц вычисляется физический адрес, после чего по нему происходит обращение к данным. Все эти вычисления производятся внутри центрального процессора по заложенным разработчиком алгоритмам, программист же часто даже не знает, как это реализовано. Для него важно указать адрес данного и получить возможность работать с данными. Адрес указывается при помощи двух чисел – селектор:смещение, которое называется линейным адресом, причем смещение указывает на смещение относительно начала области, указанной селектором.

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

Преимуществом этого метода является возможность организации параллельной работы нескольких задач, каждая из которых действует в своей области памяти и при обращении программы к данным другой задачи процессор это отслеживает. В записи селектор:смещение, смещение может иметь 32 разряда. Если программа использует 32-разрядный формат, то принято говорить о 32-разрядном приложении, если 16 разрядов - то это 16-разрядное приложение.

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

Кроме того, в 386 процессорах реализован механизм страничной памяти. Причина, по которой она введена, заключается в том, что программа может использовать только один мегабайт памяти. Для использования памяти сверх первого мегабайта как раз и предназначен этот режим, при котором в верхней части первого мегабайта устанавливается буфер, в который копируются данные из области свыше первого мегабайта. При данном методе используется 32-разрядная адресация, состоящая из трех частей. Первые 10 бит используются в каталоге таблицы для выбора номера таблицы страниц, далее 10 бит указывают на номер в таблице страниц и 12 бит - на смещение относительно найденной страницы. Все эти методы организованы на аппаратном уровне и программе не обязательно знать, как организованы таблицы и где они находятся, надлежит указывать только линейный адрес.

Зачем нужен защищенный режим? В первых моделях персональных компьютеров использовалась одна задача, которая имела монопольный доступ к разным устройствам. Этот режим называется однопрограммным. Со временем возникла необходимость запускать две разные задачи, которые работали бы в компьютере независимо друг от друга. Такой режим называют многопользовательским и был реализован ранее на больших машинах, например, IBM 360 и в советских ЕС. Как раз для организации такого режима на персональных компьютерах и был создан защищенный режим процессора, который характеризуется тем, что в памяти машины используются четыре уровня защиты, нулевой для операционной системы, третий - для прикладных задач. Задачи нулевого уровня имеют возможность вторгаться в области данных всей машины, третьего уровня - для использования только тех данных, которые определяются правами доступа, назначенными задачей. Второй и третий уровни пока не используются. Работая с виртуальным адресом, процессор выполняет большое количество дополнительных операций.

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

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

Виртуальная память – особое состояние защищенного режима (V86), позволяющая любой задаче использовать до 64 Гбайт, то есть использовать 16 сегментов по 4 Гбайт, в которых имеется специальный бит, указывающий на отсутствие или присутствие данного сегмента в оперативной памяти. Если сегмента не имеется в памяти, то он восстанавливается из внешней памяти (как правило, из жесткого диска), а долгое время не используемые данные загружаются во внешнюю память. Это организовано аппаратными средствами. Функционирование в режиме V86 возможно с параллельным выполнением других задач в защищенном режиме.

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

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

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

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

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

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

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

Регистры, которые хранят данные, полученные из оперативной памяти, имеют названия AX, BX, CX, DX (где Х - от слова eXtended - расширенный). Они разделены на две части: например, для АХ левая часть - AH и правая - AL, для BX - BH и BL и так далее. Размер регистра зависит от типа процессора. Первые модели имели 16 разрядов, а последние - 64. Регистры интересны тем, что определяют возможности центрального процессора. Чем больше они по размеру, тем больше данных можно обработать, но для этого должна быть соответствующее программное обеспечение. В первых моделях было 14 регистров. В современных компьютерах больше регистров, чем в первых моделях, часть из них видна для программиста, то есть он может ими воспользоваться, часть скрыта от программы, но используется модулями центрального процессора, и это отдельная тема. Современные процессоры программно переопределяют имя регистра, что повышает производительность центрального процессора. Переименование регистров используется для записи промежуточных результатов, что позволяет исполнять несколько инструкций одновременно.

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

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

Первые процессоры (286) имели только арифметико-логическое устройство, и для работы с дробными числами требовался специальный микропроцессор с плавающей запятой FPU. Он был специализирован только для работы с данными числами и назывался сопроцессор, имел специальный разъем на материнской плате, куда и вставлялся. Если данного устройства не было, то операции выполнял обычный процессор, для чего вместо одной команды выполнялось несколько и время работы компьютера существенно увеличивалось. Потом стали выпускаться процессоры, которые содержали в себе две части: работающие с целыми и с плавающими (дробными) числами. Начиная с процессоров 486 поколения, сопроцессоры стали встраивать в основной процессор, хотя существовали первые модели и без них. Начиная с моделей Pentium, все процессоры укомплектованы сопроцессором с плавающей точкой. Отметим, что блок FPU работает с командами ММХ, то есть данные помещаются в регистры сопроцессора с плавающей точкой и над ними выполняются инструкции ММХ. В силу этого разделения можно одновременно выполнять операции в ALU и FPU, то есть работать с целыми и дробными числами.

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

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



<== предыдущая лекция | следующая лекция ==>
Производительность | Вентиляция


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.828 сек.