1. Принципы построения ЭВМ
Бинарные числа и логические операции
Как видно, единицу деть некуда - она пропадает и результат сложения получается неверным.
Когда число имеет знак, то на определение этого знака отдается целый бит.
Сложение чисел со знаком в прямом коде невозможно (невозможно получить верный результат).
Также при использовании прямого кода вытекает проблема при работе с числом 0 (ноль). Ноль будет иметь два значения: -0 и +0, и при сравнении с другими числами возникнут проблемы (и нужного результат не получится)
Прямой код числа это представление беззнакового двоичного числа. Если речь идет о машинной арифметике, то как правило на представление числа отводится определенное ограниченное число разрядов. Диапазон чисел, который можно представить числом разрядов n равен 2^n
Обратный код числа, или дополнение до единицы (one’s complement) это инвертирование прямого кода (поэтому его еще называют инверсный код). То есть все нули заменяются на единицы, а единицы на нули.
Дополнительный код числа, или дополнение до двойки (two’s complement) это обратный код, к младшему значащему разряду которого прибавлена единица
Для работы с отрицательными числами их нужно преобразовать в дополнительный код
Преобразовываются только отрицательные числа (у которых первый бит равен 1, что значит что число отрицательное)
Положительные числа остаются неизменными.
Чтобы преобразовать отрицательное число в дополнительный код, нужно:
-
Инвертировать прямой код
-5 = 1101 инв. -5 = 1010
-
Прибавить 1 к полученному числу
1010 + 1 = 1011
- Число -5 в дополнительном коде - 1011
5 - 5 = 5 + (-5) = 0101 + (1101 -> 1010 -> 1011)
Про числа с плавающей точкой
Задания
Посчитайте сумму чисел 17233 и 21413, при условии что вы работаете со знаковыми 16 битными числами, представленными дополнением до 2
У вас есть два 16 битных регистра R1 и R2, для представления отрицательных чисел используется дополнение до 2. В регистре R1 хранится число X не равное нулю. Вы записали в регистр R2 значение -X и оказалось, что значения в регистрах R1 и R2 равны. Найдите число X
Ответ: -32768
Связано с графиком который есть на рисунке выше. И в условии задачи сказано что в R1 хранится, а в R2 мы записали (записали - не значит что оно туда поместилось полностью)
Поэтому получается что число -32768 в двоичной системе выглядит как набор единиц (16 единиц), а +32768 выглядит как набор единиц перед которым есть нули (которые уходят в переполнение и в итоге значения в регистрах одинаковые).
Простейшие электронные компоненты
Двухкаскадный триггер (для избежания помех):
Архитектура вычислительной системы
Принципы Фон-Неймана:
- Адресность
- Однородность памяти
- Программное управление
Каждая ячейка памяти имеет номер, к ней можно обратиться по этому номеру.
Однородность означает что память может использоваться как для данных, так и для инструкций. Компьютер может интерпретировать содержимое ячейки либо как данные, либо как инструкцию в зависимости от ситуации.
Управление вычислительным процессом происходит ранее загруженному сценарию (программе). Программа представляет из себя набор инструкций и данных.
Чтобы исполнять инструкции есть специальная память в процессоре которая содержит счетчик команд (instruction pointer) который указывает на адрес текущей исполняемой инструкции.
Можно выделить несколько типов команд:
- Вычислительные ("+","or", итд)
- Запись/чтение
- Команды переходов (заставляют процессор перезагрузить значение instruction pointer другим значением)
Основные компоненты вычислительной системы
Простейший компьютер по принципу архитектуры Фон-Неймана
В вычислительной системе присутствует тактовый генератор (обычно кварцевый, т.к. он наиболее стабильный). Этот генератор задает общее время в системе, чтобы синхронизировать разные компоненты системы
Ввод вывод данных в компьютер может быть организован двумя способами:
-
Через порты - Процессор связан с памятью шиной. Память имеет адресное пространство (диапазон индексов по которым можно обраться к данным (или записать их), их записывают в 16-ричном виде). Каждый адрес в адресном пространстве не обязательно должен быть физически представлен в системе.
Например:
Адресное пространство позволяет хранить адреса от 0 до ffff, но физически в систему может быть установлена только половина этой памяти. Часть свободного адресного пространства может быть использована для организации ввода/вывода. Резервируется диапазон адресов через которые устройство может общаться с процессором через шину памяти. Если процессор устанавливает на адресную шину номер из выделенного диапазона, то это значит что он хочет записать (или прочитать) данные не из памяти, а из подключенного устройства. А подключенное к шине устройство, когда видит свой порт (адрес), понимает что данные предназначены ему. -
Через память - Для обеспечения этого механизма существует специальная схема (электронный компонент), которая позволяет отобразить память устройства на диапазон адресов памяти в адресном пространстве (немного похоже на порты, но теряется некоторый диапазон адресов).
Прерывание это сигнал для процессора о внешнем событии
Процессор выполняет инструкции последовательно и когда получает сигнал о прерывании, он прекращает выполнение инструкций и начинает выполнение какого-то набора операций
У процессора есть специальный контакт, когда на него подается логическая единица - возникает прерывание
Процессор завершает выполнение текущей инструкции и переходит к выполнению обработчика прерываний (обработчик прерываний это подпрограмма в памяти)
После выполнения обработчика процессор возвращается к выполнению следующей инструкции (которая была следующей до прерывания)
Прерывания бывают синхронные и асинхронные
Синхронные возникают в процессоре и связаны с возникновение исключительных ситуаций (выход за пределы памяти, вычислительные ошибки итд)
Так же выполняемые программы могут вызывать синхронные прерывания, например для вывод информации на дисплей
Асинхронные вызываются внешними устройствами (потому и называются асинхронными, тк невозможно предсказать когда возникнут), например сетевой платой когда она получила данные и нужно переместить данные из памяти сетевой карты в память компьютера
Для упорядочивания асинхронных прерываний используется контроллер прерываний
У процессора есть контакт NMI (non mascable interrupt), когда на него подается единица, процессор переходит к выполнению обработчика безусловного прерывания
И INTR (interrupt request) запрос на прерывание (в паре с ним есть контакт INTA - interrupt acknoledge)
Часто при выполнении критических участков программ, для того чтобы гарантировать выполнение определенной последовательности команд целиком, приходится запрещать прерывания (т.е. сделать систему нечувствительной ко всем или отдельным прерываниям). Это можно сделать командой CLI. Ее нужно поместить в начало критической последовательности команд, а в конце расположить команду STI, разрешающую процессору воспринимать прерывания. Команда CLI запрещает только маскируемые прерывания, немаскируемые всегда обрабатываются процессором.
Маскируемые - те прерывания которые можно проигнорировать
Не маскируемые проигнорировать нельзя
Насколько вспоминаю - маскируемые прерывания могут быть обработаны, но с задержкой т.е. как бы их можно "замаскировать" / отложить на какое-то время, это для того чтобы не отвлекать всякой ерундой Процессор. Обычно маскируемые прерывания выставляют устройства не очень "важные" для работы, и от которых можно "отмахнуться" на какое - то время - типа мышки. Это на аппаратном уроне в самом устройстве закладывается, что оно может вставлять только маскируемое (не очень важное) прерывание. Когда процессор освободиться тогда он и обрабатывает маскируемое прерывания, которое в очереди ждет.
А вот есть немаскируемые - т.е. это те прерывания, от которых процессор уже никак не может и как только они возникают процессор все сразу останавливает и сразу же переходит к их обработке - настолько важные это немаскируемые прерывания их нельзя замаскировать / отложить. Обычно немаскируемые прерывания могут выставить только очень важных (VIP) устройства - например сама память. т.е. от которых зависит функционирования всего компьютера. Например в случае если памяти больше нет свободной срочно нужно все останавливать и сообщить процессору.
Для шутки ради например, если у человека заболело сердце - это будет немаскируемое прерывание. Нужно все бросать и идти сразу к врачу, ибо через пять минут будет может уже поздно. А вот если зачешется нос - это будет маскируемое прерывание - которое можно и отложить - ничего страшного не случиться. Можно и потом почесаться
В общем, устройство подает сигнал на intr и ждет ответа от процессора, процессор может не мочь выполнить прерывание потому что этот тип прерываний замаскирован или он сейчас занят выполнением инструкции
Одновременно с этим устройство выставляет номер прерывания, по этому номеру будет найден нужный обработчик прерываний
Так как у процессора только три контакта для работы с прерываниями, то для подключения к системе большого количества устройств используется контроллер прерываний. Он имеет большее количество контактов для вызова прерываний и занимается упорядочиванием вызовов от разных устройств и передачей этих вызовов процессору
Контроллеры прерываний могут подключаться друг в друга
Когда говорят об обработке прерываний используют термины: вектор прерываний и таблица векторов прерываний
Для указания нужного обработчика прерывания используется номер (передается в процессор по шине данных), номера хранятся в таблице и связаны с адресами памяти указывающими на самих обработчиков
Элемент номер:обработчик называется вектором, становится понятно что такое таблица векторов
No Comments