Проектируем свой компьютер: начало
1. Начало
Ключ к пониманию сложных систем
Самое первое, что нам предстоит освоить — это такое понятие как абстракция. Абстракции — это с чем мы сталкиваемся каждый день. Рассмотрим эту идею на примере автомобиля. Что бы им управлять, нам не обязательно вдаваться в детали его устройства. Мы просто воздействуем на руль, педали и коробку передач и машина реагирует соответствующим образом. Если смотреть чуть глубже можно понять, что автомобиль состоит из двигателя, трансмиссии, электронной начинки, системы охлаждения и шасси.
Каждый из этих элементов сам свою очередь состоит из каких-то частей. Например, электронная начинка может включать в себя аккумулятор, провода, фары и регулятор напряжения. Мы можем пойти еще дальше и задаться вопросом — а как устроен аккумулятор? Я не буду здесь касаться этого вопроса, если интересно, — можете загуглить :)
Главную идею вы уловили — наш разум не в состоянии переварить устройство сложных механизмов сразу во всех деталях. Тут то нам на помощь и приходит абстракция — из всей системы мы выхватываем только интересующий нас набор элементов и рассматриваем их взаимодействие друг с другом, игнорируя их внутреннее строение. Благодаря этому мы можем создавать сложные системы и понимать как они устроены.
Уровни абстракции компьютера
Теперь перейдем непосредственно к компьютеру и его уровням абстракции.
- Cофт (программное обеспечение)
- Архитектура
- Микроархитектура
- Логические элементы
- Девайсы (транзисторы и т.д.)
- Физика
Итак, на физическом уровне мы имеем заряженные частицы (электроны и протоны), которые взаимодействуют между собой силами притягивания и отталкивания. На уровне девайсов мы видим устройства, которые организовывают движение электронов таким образом, что бы они выполняли полезную работу (вычисления). Первые два уровня являются скорее прерогативой инженеров-электронщиков, поэтому мы сразу перейдем к уровню логических элементов, абстрагируясь от их физического строения, а отталкиваясь от этого уровня можно будет двигаться выше по этой лестнице абстракций.
Логический элемент (мы будем называть его также логическим гейтом или просто гейтом — от английского logic gate) функционально представляет из себя довольно простое устройство. Он имеет вход и выход. На вход мы подаем некий сигнал или несколько сигналов и в ответ на это он выдает определенный сигнал на выход. Важно знать, что всего у нас есть два типа сигналов: их условно называют единица и ноль либо истина и ложь. Далее мы поймем почему. Логических элементов существует несколько типов. Рассмотрим их подробнее.
AND
Рассмотрим гейт, который называют AND (И). Как он работает? У него два входа (A и B) и один выход (X). Если на оба входа подаются единицы, то и на выходе гейт будет выдавать единицу. В любых других случаях на выходе мы будем иметь ноль. Более наглядно работу данного гейта можно изобразить используя таблицу (такие таблицы еще называют таблицами истинности). A B X 0 0 0 0 1 0 1 0 0 1 1 1 Его неспроста назвали И — если приглядеться, можно увидеть, что он представляет собой физическое воплощение логической операции конъюнкции. Конъюнкция, как гласит Википедия, — логическая операция, по смыслу максимально приближенная к союзу «и». Ничего сложного на самом деле тут нет — если мы слышим некое утверждение, например «2+2=4 И небо-голубое» то мы интуитивно чувствуем, что в целом это утверждение является истинным, поскольку обе его части истины. В остальных же случаях, когда одна или обе части утверждения ложны, — понятно что и в целом утверждение будет ложным. Теперь рассмотрим такой гейт как OR (или). И тут же ознакомимся с его таблицей истинности A B X 0 0 0 0 1 1 1 0 1 1 1 1 Если снова обратится к нашей интуиции, то мы поймем что логическая операция ИЛИ ведет себя именно таким образом. Если в утверждении с союзом «или» хотя бы одна часть будет истина то и само утверждение в целом будет истинно («2*2=4 ИЛИ овчарки умеют летать»), если же обе части утверждения ложны то и само утверждение будет ложным. Еще один гейт — NOT (НЕ). Как мы видим у него только один вход и выход. Сам этот элемент как бы отрицает сигнал на входе. Единица превращается в ноль, а ноль наоборот в единицу. A X 0 1 1 0 Гейт XOR (исключающее ИЛИ) Таблица истинности A B X 0 0 0 0 1 1 1 0 1 0 0 0 Гейт NAND (НЕ-ИЛИ). Этот логический гейт выдает ноль только когда на обоих его входах единица. В остальных же случаях на выходе гейта мы имеем единицу. A B X 0 0 1 0 1 1 1 0 1 1 1 0 Все эти логические элементы по-сути являются некими кирпичами. Комбинируя гейты друг с другом можно построить вычислительную систему любой сложности.
OR

NOT

XOR

NAND
