Организация современного компьютера
🕛 17.09.2009, 12:58
Современному человеку трудно представить свою жизнь без электронно-вычисли-тельных машин (ЭВМ). В настоящее время любому желающему по силам собрать у себя на рабочем столе полноценный вычислительный центр, степень функциональности которого может быть ограничена только фантазией и финансовыми возможностями его обладателя.В минимальной комплектации типовой персональный компьютер состоит из компонентов.
Из рисунка видно, что компьютер образуют несколько физических устройств, каждое из которых подключено к одному блоку, называемому системным. Если рассуждать логически, то ясно, что он играет роль некоторого координирующего устройства. Попытка открыть корпус и заглянуть внутрь системного блока, скорее всего, не приведет к удовлетворению жажды познания - непонятная совокупность разнообразных плат, блоков, индикаторов и соединительных проводов вряд ли даст однозначные ответы на возможные вопросы. Внутри монитора вы тем более ничего интересного не найдете, за исключением возможности удовлетворить другую жажду - жажду приключений. Если хорошо поискать отверткой подходящий источник, то, в отличие от системного блока, можно довольно быстро получить разряд в несколько киловольт.
Рассмотрим структурную схему типичного современного персонального компьютера. Она не претендует на безусловную точность и имеет целью лишь показать назначение, взаимосвязь и типовой состав его элементов.
На рис. 1.2 показана функциональная схема системного блока компьютера на базе процессоров семейства Intel. На схеме представлены: центральный процессор, оперативная память, внешние устройства. Все компоненты соединены между собой через системную шину. Системная шина имеет дополнительную шину - шину расширения. В компьютерах на базе Pentium в качестве такой шины используется шина PCI (Peripheral Component Interface), к которой подсоединяются внешние устройства, а также шины более ранних стандартов, например ISA (Industry Standard Architecture).
На рисунке показана самая общая схема сердца компьютера - процессора. Основу процессора составляют блок микропрограммного управления, исполнительное устройство, обозначенное как «конвейер», и регистры. Остальные компоненты процессора выполняют вспомогательные функции. Более подробный вариант этой схемы мы рассмотрим в следующей главе.
Машинный язык и язык ассемблера
Чтобы лучше понять принципы работы компьютера, давайте сравним его с человеком. У компьютера есть органы восприятия информации из внешнего мира - это клавиатура, мышь, накопители на магнитных дисках (на схеме они расположены под системными шинами). У компьютера есть органы, «переваривающие» полученную информацию, - это центральный процессор и оперативная память. И наконец, у компьютера есть органы речи, выдающие результаты переработки. Это также некоторые из устройств ввода-вывода, расположенные в нижней части схемы. Современным компьютерам, конечно, далеко до человека. Их можно сравнить с существами; взаимодействующими с внешним миром на уровне большого, но ограниченного набора безусловных рефлексов. Этот набор рефлексов образует систему машинных команд. На каком бы высоком уровне вы ни общались с компьютером, в конечном итоге все сводится к скучной и однообразной последовательности машинных команд. Каждая машинная команда является своего рода раздражителем для возбуждения того или иного безусловного рефлекса. Реакция на этот раздражитель всегда однозначна и «зашита» в блоке микропрограммного управления в виде микропрограммы. Эта микропрограмма и реализует действия по выполнению машинной команды, но уже на уровне сигналов, подаваемых на те или иные логические схемы компьютера, тем самым управляя различными подсистемами компьютера. В этом состоит так называемый принцип микропрограммного управления. Продолжая аналогию с человеком, отметим: для того чтобы компьютер правильно «питался», придумано множество операционных систем, компиляторов сотен языков программирования и т. д. Но все они являются, по сути, лишь блюдом, на котором по определенным правилам доставляется пища (программы) желудку (компьютеру). Только (вот досада!) желудок компьютера любит диетическую, однообразную пищу - подавай ему информацию структурированную, в виде строго организованных последовательностей нулей и единиц, комбинации которых и составляют машинный язык.Таким образом, внешне являясь полиглотом, компьютер понимает только один язык - язык машинных команд. Конечно, для общения и работы с компьютером необязательно знать этот язык, но практически любой профессиональный программист рано или поздно сталкивается с необходимостью его изучения. К счастью, при этом человеку не нужно пытаться постичь значение различных комбинаций двоичных чисел, так как еще в 50-е гг. программисты стали использовать для программирования символический аналог машинного языка, который назвали языком ассемблера. Этот язык точно отражает все особенности машинного языка. Именно поэтому, в отличие от языков высокого уровня, язык ассемблера для каждого типа компьютеров свой. Более того, бессмысленны разговоры о том, что ассемблер как язык программирования устарел и знать его необязательно. АССЕМБЛЕР ОБЪЕКТИВЕН, и подобные разговоры в определенной ситуации могут выглядеть довольно глупо (особенно для особо «продвинутых» программистов).
На первый взгляд ассемблер кажется очень сложным, но это не так. Для освоения этого языка совершенно не нужно выучивать наизусть все его команды и директивы. Более того, в большинстве случаев для практической работы достаточно понимания основных концепций и идей, лежащих в основе языка ассемблера. Детали реализации той или иной команды всегда можно найти в справочнике команд, гораздо важнее понимать, какое место данная команда занимает в системе команд, в идеале хорошо было бы знать и цели, которые преследовали разработчики процессора, вводя данную команду в систему машинных команд. Одна из целей данного учебника - сформировать у читателя именно такое понимание языка ассемблера.
Из всего сказанного напрашивается вывод о том, что самую эффективную программу можно написать только на ассемблере (при условии, что ее пишет квалифицированный программист), так как этот язык является «родным» для компьютера. Здесь есть одно маленькое «но»: это очень трудоемкий и требующий большого внимания и практического опыта процесс. Поэтому реально на ассемблере пишут в основном программы, которые должны обеспечить эффективную работу с аппаратной частью компьютера. Иногда на ассемблере пишутся критичные ко времени выполнения или расходованию памяти фрагменты программы. Впоследствии они оформляются в виде подпрограмм и совмещаются с кодом на языке высокого уровня.
В данном учебнике будут рассмотрены два фундаментальных для понимания логики функционирования компьютера вопроса: первый - архитектурные особенности процессора и основы его взаимоотношений с другими компонентами компьютера; второй - место и роль языка ассемблера во всем этом процессе. За основу в нашем рассмотрении будут взяты процессоры фирмы Intel. Необходимо отметить, что эти процессоры не являются единственными процессорами на рынке аппаратного обеспечения (hardware), хотя и занимают довольно большой сегмент этого рынка. Исторически сложилось так, что архитектура процессоров Intel полностью или частично поддерживается процессорами других фирм. Поэтому процессорам фирмы Intel приходится делить свой сегмент рынка с процессорами фирм AMD, VIA, Transmeta. Так как в своем сегменте рынка (Intel-совместимых процессоров) процессоры фирмы Intel являются стандартом де-факто, то в данном
учебнике речь будет идти исключительно о них, однако все приводимые примеры программ будут работать и на Intel-совместимых процессорах процессорах других фирм.