- •Обработка данных
- •Вентили и триггеры
- •Другие методы хранения данных
- •Шестнадцатеричная система счисления
- •Основная память
- •Массовая память
- •Магнитные диски
- •Компакт-диски
- •Магнитная лента
- •Сохранение и считывание файлов
- •Представление числовых значений
- •Представление изображений
- •Представление целых чисел
- •Двоичный дополнительный код
- •Сложение чисел в двоичном дополнительном коде
- •Двоичная нотация с избытком
- •Наиболее распространенные типы цп
- •Интерфейс между цп и основной памятью
- •Машинные команды
- •Команды передачи данных
- •Арифметические и логические команды
- •Команды управления
- •Концепция хранимой программы
- •Представление машинных команд в виде битовых комбинаций
- •Машинный язык
- •Коды операций
- •Операнды
- •Пример программы
- •Сравнение производительности компьютеров
- •Пример выполнения программы
- •Программы и данные
- •Операции сдвига
- •Арифметические операции
- •Скорость передачи данных
- •Конструкция шины
- •Cisc- и risc-архитектура компьютеров
- •Конвейерная обработка
- •Многопроцессорные машины
- •Машинный язык
Операции сдвига
Операции сдвига и вращения (циклического сдвига) позволяют перемещать биты в регистре и часто используются для решения проблем выравнивания, например при подготовке значения байта к последующим операциям маскирования или манипулирования значением мантиссы в представлениях с плавающей точкой. Классификация этих операций производится по направлению движения (вправо или влево), а также с учетом того, является сдвиг циклическим или нет. В рамках этой классификации существует множество различных вариантов, для обозначения которых используется смешанная терминология. Давайте бегло ознакомимся с основными принципами, положенными в ее основу.
Возьмем для примера некоторый байт и сдвинем его содержимое на один бит вправо или влево. На том конце байта, в направлении которого происходит сдвиг, крайний бит выйдет за его пределы и будет потерян, на другом конце образуется пустое место, в которое потребуется ввести некоторое значение. Что произойдет с удаляемым битом и что будет вставлено в освободившуюся позицию — именно это и определяет отличия между множеством разнообразных операций сдвига. Одним из возможных решений является помещение бита, удаляемого с одного конца байта, в пустую позицию на другом его конце. В результате мы получим циклический сдвиг, который также иногда называют вращением. Если выполнить циклический сдвиг байта вправо восемь раз подряд, то получим ту же битовую комбинацию, которая существовала вначале, тогда как семь циклических сдвигов вправо идентичны одному циклическому сдвигу влево.
Другим вариантом решения является удаление бита, выходящего за пределы байта, и помещение в освобождающиеся позиции исключительно значения 0. Подобный вариант называют логическим сдвигом. Этот вариант сдвига влево можно использовать для умножения значения байта в дополнительном двоичном коде на число 2. В любом случае сдвиг двоичных цифр влево означает умножение значения на 2, подобно тому как и аналогичный сдвиг десятичных цифр означает умножение на десять. Кроме того, сдвинув двоичную строку вправо, можно выполнить деление ее значения на два. Однако в этом случае нужно обязательно сохранить тот знаковый бит, который используется в данной нотации. Для этого часто используется такой вариант сдвига вправо, при котором освобождающаяся позиция (а это, чаще всего, и будет знаковый бит) всегда заполняется тем значением, которое в ней находилось до операции сдвига. Сдвиги, которые не изменяют значения знакового бита, иногда называют арифметическими.
Арифметические операции
Несмотря на то, что выше уже шла речь об арифметических операциях сложения, вычитания, умножения и деления, все же необходимо расставить все точки над i. Как уже говорилось, все операции этой группы чаще всего могут быть реализованы с помощью единственной операции сложения и действия отрицания. Поэтому некоторые малогабаритные компьютеры содержат в своем наборе команд только операции сложения или сложения и вычитания.
Кроме того, следует напомнить, что существует множество различных вариантов любой арифметической операции. При операциях сложения операнды могут быть представлены в двоичном дополнительном коде, и тогда операция их сложения будет выполняться как обычное двоичное суммирование. Если же операнды будут представлены как числа в формате с плавающей точкой, то при суммировании потребуется выделить мантиссу каждого из чисел. После этого эти значения должны быть сдвинуты вправо или влево в зависимости от значения в поле порядка. Затем проверяются знаковые биты и выполняется операция сложения. Полученный результат вновь переводится в формат с плавающей точкой. Как видите, хотя обе описанные выше операции считаются операциями сложения, действия машины по их выполнению будут существенно отличаться. Более того, с точки зрения самой машины, между этими двумя операциями вообще нет никакой связи.
Взаимодействие с другими устройствами
Основная память и центральный процессор образуют центральное звено компьютера. В этом разделе мы рассмотрим, как это центральное звено взаимодействует с различными периферийными устройствами, такими как дисковые накопители, принтеры, а также другими компьютерами.
Взаимодействие через управляющее устройство
Взаимодействие между машиной и другими устройствами обычно осуществляется через промежуточное устройство, называемое контроллером. Если в качестве примера взять персональный компьютер, то контроллер будет представлять собой ту монтажную плату, которая вставляется в разъем на основной плате компьютера (материнской плате). С помощью кабелей платы контроллеров соединяются с периферийными устройствами, установленными в самом компьютере, а соединение с внешними устройствами осуществляется через промежуточные разъемы, установленные на задней стенке корпуса компьютера.
Каждый контроллер обеспечивает взаимодействие с определенным видом устройства. Некоторые из них разработаны для взаимодействия с монитором, другие отвечают за взаимодействие с дисководами, а есть контроллеры, поддерживающие взаимодействие компьютера с устройствами чтения компакт-дисков. Поэтому иногда вместе с новым периферийным устройством приходится покупать и новый контроллер. Задача контроллера состоит в преобразовании сообщений и данных, которыми обмениваются компьютер и периферийное устройство, в тот формат, который будет совместим с внутренними характеристиками самого компьютера и подключенного к нему устройства. Подобные контроллеры часто представляют собой небольшие специализированные компьютеры с собственной основной памятью и центральным процессором, который выполняет программу, управляющую всеми действиями данного контроллера.
Когда контроллер вставляется в один из разъемов на материнской плате компьютера, он электрически подключается к шине, соединяющей ЦП компьютера и его основную память (рис. 2.8). В месте своего подключения каждый контроллер осуществляет непрерывное наблюдение за сигналами, посылаемыми из ЦП машины, и отвечает на те, которые адресованы непосредственно ему. Более того когда контроллер подключен к шине компьютера, он может посылать сигналы чтения и записи непосредственно в основную память машины, используя для этого те микросекунды, когда ЦП не обращается к шине.
Подобный тип доступа контроллера к основной памяти называется прямым доступом к памяти (DMA — direct memory access) и является важным средством повышения производительности компьютера. Если в компьютере контроллер дисковых устройств обладает прямым доступом к памяти, то ЦП может посылать ему представленные в виде битовых комбинаций запросы, требующие считать с диска определенный сектор и поместить прочитанные данные в указанный блок ячеек основной памяти. Такой блок ячеек называется буфером. В общем случае буфер представляет такое местоположение, где одна система может оставить данные, к которым позднее сможет получить доступ другая система. Пока контроллер будет выполнять затребованную операцию считывания данных, ЦП может продолжать обработку других заданий. Это означает, что в одно и то же время будут выполняться два разных действия. ЦП будет выполнять программу, а контроллер в это время будет обеспечивать передачу данных между дисковым устройством и основной памятью компьютера. Такой подход позволяет избежать простоя вычислительных ресурсов во время выполнения относительно медленного процесса передачи данных.
Рис 2.8 Подключение контроллеров к шине компьютера
Однако механизм DMA оказывает и определенный отрицательный эффект, поскольку при этом увеличивается количество взаимодействий, осуществляемых через шину компьютера. Битовые комбинации должны перемещаться между ЦП и основной памятью, между ЦП и каждым из контроллеров, а также между каждым из контроллеров и основной памятью компьютера. Координация всей этой деятельности, осуществляемой через шину компьютера, является важнейшей задачей конструирования. Даже в самых лучших проектных решениях центральная шина может превратиться в источник помех в работе компьютера, возникающих из-за того, что ЦП и контроллеры соревнуются между собой за доступ к шине.
Взаимодействие центрального процессора компьютера и каждого из контроллеров осуществляется по тем же принципам, что и взаимодействие ЦП и основной памяти. Чтобы послать некоторую битовую комбинацию контроллеру, эта комбинация должна быть сначала создана в одном из регистров общего назначения процессора. Затем ЦП выполняет команду, подобную STORE, которая позволяет "записать" эту комбинацию в контроллер. Следовательно, единственное отличие между записью битовой комбинации в основную память и пересылкой битовой комбинации в контроллер заключается только в месте назначения для доставки комбинации. И действительно, в машинном языке многих компьютеров выполняемая в обоих этих случаях операция имеет один и тот же код. Как правило, при этом схемы основной памяти машины разрабатываются таким образом, чтобы игнорировать ссылки на определенные ячейки памяти, тогда как контроллеры конструируются так, чтобы реагировать только на ссылки к этим ячейкам. Поэтому когда ЦП посылает сообщение на шину для записи данных в эти особые ячейки памяти, их получает соответствующий контроллер, а не основная память компьютера. Аналогичным образом, когда ЦП пытается считать данные из этих ячеек памяти, например с помощью команды LOAD, он получит битовую комбинацию не из основной памяти, а из соответствующего контроллера. Такая схема взаимодействия называется отображением ввода/вывода в память, поскольку различные устройства ввода/вывода компьютера представлены для ЦП как определенные ячейки памяти. Адреса памяти, выделенные контроллерам при использовании подобной схемы, называются портами, каждый из которых представляет определенное "местоположение", через которое информация попадает в машину или выводится из нее (рис. 2.9).
Рис. 2.9 Концептуальная схема метода отображения ввода/вывода в память
Передача данных между двумя компонентами компьютера редко бывает односторонним действием. На первый взгляд может показаться, что принтер является устройством, которое способно только получать данные, однако в действительности оно способно посылать данные обратно в компьютер. В самом деле, компьютер способен подготавливать символы и передавать их принтеру намного быстрее, чем принтер сможет их печатать. Если компьютер будет передавать данные на принтер вслепую то принтер быстро начнет отставать, что может привести к потере данных. Поэтому такой процесс, как печать документа, предусматривает постоянный двусторонний диалог, в процессе которого компьютер и периферийное устройство обмениваются информацией о текущем состоянии устройства.
Такой диалог часто предусматривает использование слова состояния устройства, т.е. определенной битовой комбинации, которая генерируется периферийным устройством и посылается его контроллеру. Биты в слове состояния отражают текущее состояние устройства. Если вернуться к примеру с принтером, то значение младшего бита слова состояния может указывать, что в принтере закончилась бумага, тогда как следующий бит в этом слове указывает, готов ли принтер к приему очередной порции информации. В зависимости от выбранной системы, контроллер либо сам реагирует на подобную информацию о состоянии устройства, либо передает ее на обработку в ЦП. В каждом случае либо программа в контроллере, либо программа, выполняемая центральным процессором, должна быть разработана так, чтобы задержать пересылку данных на принтер до тех пор, пока от него не будет получена соответствующая информация о состоянии.