\documentclass[11pt,oneside,a4paper]{book} \usepackage[utf8]{inputenc} \usepackage[english,russian]{babel} \usepackage{hyperref} \usepackage{framed} \usepackage{indentfirst} \begin{document} \pagenumbering{arabic} \title{Методическое пособие. Общие тезисы для понимания работы вычислительной техники.} \author{Назарьев C.} \date{\today} \maketitle \tableofcontents \frontmatter \pagenumbering{arabic} \chapter{Введение} Дорогой друг, если ты читаешь это, то ты внезапно решил почитать вместо адекватных учебников и пособий по программированию краткое руководство-шпаргалку о том, как же этот ваш компьютер устроен и как же можно программировать под него. \mainmatter \pagenumbering{arabic} \chapter{Вычислительная техника} Главное, что должна делать любая вычислительная техника -- внезапно, вычислять. Значит, должно быть некое устройство, которое именно что вычисляет. Фактически, первым вычисляющим устройством был <<абак>> -- прародитель русских счётов из 5 века до н.э. Абак имеет набор операций, которые с ним можно выполнять (ввод данных, сумма, вычитание, умножение, деление). Если абстрагироваться от реализации (камней и палок), то такое описание полностью подходит и для описания нынешних процессоров: процессор умеет выполнять некоторые операции и предоставляет возможность ему <<приказывать>>. Уясним ещё раз: есть некое устройство, процессор, который умеет выполнять некий ряд операций, если его попросить. Для того, чтобы процессор понял, что от него хотят, ему нужно передать команду, или инструкцию. Команды в случае двоичных процессоров (то есть процессоров, работающих только с двоичными числами) -- это наборы единиц и нулей (спасибо, К.О.), или просто двоичное число, которое <<интерпретируeтся>>\footnote{воспринимаeтся} процессором как приказ выполнить определённую операцию. Фактически, мы можем подсунуть процессору любое число, чтобы он попытался интерпретировать его как команду\footnote{но в случае неизвестной команды может произойти всё, что угодно; часто в таких случаях говорят, что у выч. техники неопределённое поведение}. Из предположений, что команды и данные -- это просто числа, а процессору без разницы, что ему подсовывают, то для хранения команд и данных мы можем использовать одну и ту же память. Память в данном случае называют \textit{однородной}, а архитектуру такой вычислительной машины называют \textit{архитектурой фон Неймана} в противопоставлении с \textit{Гарвардской архитектурой}, в которой существует два вида памяти для инструкций и данных соответственно. Для того, чтобы хранить команду в процессоре, которые он выполняет, существует некоторое устройство -- \textit{регистр}. \textit{$N$-разрядный регистр} позволяет хранить $N$ двоичных разрядов. Процессор может считывать эти разряды из регистра и/или записывать в них новые значения. Теперь рассмотрим такой процессор, у которого есть два регистра -- регистр для хранения команд (регистр команд) и регистр для хранения результата какой-либо операции (аккумулятор). Из-за того, что процессор имеет централизованное место для хранения результата операций, такой процессор обычно называют <<процессором с аккумулятором>>. Наш процессор умеет лишь складывать две шестандцатиричные цифры, указанные внутри команды. Допустим, увидев команду $A12_{16}$, процессор разберёт её по частям (A -- операция сложения двух шестнадцатиричных цифр, а 1 и 2 -- операнды) и выполнит операцию сложения, положив результат в аккумулятор. Как именно? Всё зависит от внутренностей процессора, но обычно для этого используются логические операции, а реализуются они логическими схемами. \begin{framed} \hyperref[sum]{Рассказ о том, как работает операция сложения} \end{framed} Каким же образом команды попадают в процессор, откуда они берутся? В данном случае мы должны иметь источник наших команд и устройство, которое подсовывает процессору в его регистр команд команду и заставляет его эту команду выполнять. Источником могут служить, например, перфокарты -- пластинки с дырками или без дырок в определённых местах, обозначающие двоичные разряды, или же набор ламп: включенная лампа -- единица, а выключенная -- ноль; или же любое другое устройство, имеющее два состояния, которые можно интерпретировать как двоичную цифру (или же bit, BInary digiT). Набор ламп, перфокарты, набор конденсаторов или любые другие устройства, в совокупности позволяющие хранить единицы и нули, называются памятью. Для удобства, память разбивают на ячейки по $N$ бит, и опять же, для удобства, размер одной ячейки обычно равен размеру аккумулятора. Процессор, умеющий работать с $N$-битными числами, внезапно, называется $N$-битным процессором. \begin{framed} \hyperref[size]{А почему размер аккумулятора именно такой? Почему игровые приставки называются 8-битными или 16-битными?} \end{framed} Каждая ячейка имеет свой адрес, по которому она доступна в памяти. Легко посчитать нужное количество бит, которое необходимо, чтобы хранить адрес ячейки: нужно найти ближайшее число-степень двойки, тогда степенью будет то число бит, сколько нужно для хранения адреса в памяти. \begin{framed} \hyperref[windows]{Windows и проблемы с оперативной памятью 4 Гб+} \end{framed} Кроме самого источника, в котором у нас будут храниться данные, нам необходимо так называемое <<устройство управления>>, которое вытаскивает данные из памяти и кладёт их в регистр команд. В свою очередь размер аккумулятора зависит от того, с какими числами может оперировать процессор. Так как для процессора и наши исходные данные в памяти, и команды -- это всего лишь единицы и нули, то есть двоичные числа, то получается, что процессор обязан уметь работать с $N$-разрядными числами, где $N$ -- это максимум среди максимально возможного размера данных и максимально возможного размера команды. \appendix \input{size} \input{windows} \input{sum} \backmatter \chapter{Послесловие} \end{document}