\documentclass[bachelor, och, referat]{SCWorks}
% параметр - тип обучения - одно из значений:
%    spec     - специальность
%    bachelor - бакалавриат (по умолчанию)
%    master   - магистратура
% параметр - форма обучения - одно из значений:
%    och   - очное (по умолчанию)
%    zaoch - заочное
% параметр - тип работы - одно из значений:
%    referat    - реферат
%    coursework - курсовая работа (по умолчанию)
%    diploma    - дипломная работа
%    pract      - отчет по практике
% параметр - включение шрифта
%    times    - включение шрифта Times New Roman (если установлен)
%               по умолчанию выключен

\usepackage{subfigure}
\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.5}
\usepackage{float}

%\usepackage{titlesec}
\setcounter{secnumdepth}{4}
%\titleformat{\paragraph}
%{\normalfont\normalsize}{\theparagraph}{1em}{}
%\titlespacing*{\paragraph}
%{35.5pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}

\titleformat{\paragraph}[block]
{\hspace{1.25cm}\normalfont}
{\theparagraph}{1ex}{}
\titlespacing{\paragraph}
{0cm}{2ex plus 1ex minus .2ex}{.4ex plus.2ex}

% --------------------------------------------------------------------------%


\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\graphicspath{ {./images/} }
\usepackage{tempora}

\usepackage[sort,compress]{cite}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{fancyvrb}
\usepackage{listings}
\usepackage{listingsutf8}
\usepackage{longtable}
\usepackage{array}
\usepackage[english,russian]{babel}

\usepackage[colorlinks=true]{hyperref}
\usepackage{url}


\newcommand{\eqdef}{\stackrel {\rm def}{=}}

\renewcommand\theFancyVerbLine{\small\arabic{FancyVerbLine}}

\newtheorem{lem}{Лемма}

\begin{document}

% Кафедра (в родительном падеже)
\chair{}

% Тема работы
\title{Общая структура центрального процессора}

% Курс
\course{1}

% Группа
\group{131}

% Факультет (в родительном падеже) (по умолчанию "факультета КНиИТ")
\department{факультета КНиИТ}

% Специальность/направление код - наименование
%\napravlenie{09.03.04 "--- Программная инженерия}
%\napravlenie{010500 "--- Математическое обеспечение и администрирование информационных систем}
%\napravlenie{230100 "--- Информатика и вычислительная техника}
%\napravlenie{231000 "--- Программная инженерия}
\napravlenie{090301 "--- Компьютерная безопасность}

% Для студентки. Для работы студента следующая команда не нужна.
% \studenttitle{Студентки}

% Фамилия, имя, отчество в родительном падеже
\author{Гущина Андрея Юрьевича}

% Заведующий кафедрой
% \chtitle{} % степень, звание
% \chname{}

%Научный руководитель (для реферата преподаватель проверяющий работу)
\satitle{доцент} %должность, степень, звание
\saname{О.В. Мещерякова}

% Руководитель практики от организации (только для практики,
% для остальных типов работ не используется)
% \patitle{к.ф.-м.н.}
% \paname{С.~В.~Миронов}

% Семестр (только для практики, для остальных
% типов работ не используется)
%\term{8}

% Наименование практики (только для практики, для остальных
% типов работ не используется)
%\practtype{преддипломная}

% Продолжительность практики (количество недель) (только для практики,
% для остальных типов работ не используется)
%\duration{4}

% Даты начала и окончания практики (только для практики, для остальных
% типов работ не используется)
%\practStart{30.04.2019}
%\practFinish{27.05.2019}

% Год выполнения отчета
\date{2020}

\maketitle

% Включение нумерации рисунков, формул и таблиц по разделам
% (по умолчанию - нумерация сквозная)
% (допускается оба вида нумерации)
\secNumbering


\tableofcontents

% Раздел "Обозначения и сокращения". Может отсутствовать в работе


% Раздел "Определения". Может отсутствовать в работе
%\definitions

% Раздел "Определения, обозначения и сокращения". Может отсутствовать в работе.
% Если присутствует, то заменяет собой разделы "Обозначения и сокращения" и "Определения"
% \defabbr

% Раздел "Введение"
% \intro
\section{Общая структура центрального процессора}
\subsection{Процессор}
Центральный процессор -- это мозг компьтера. Его задача -- выполнять программы,
находящиеся в основной памяти. Для этого он вызывает команды из памяти, определяет
их тип, а затем выполняет одну за другой. Компоненты соединены \textbf{шиной},
представляющей собой набор параллельно связанных проводов для передачи адресов,
данных и управляющих сигналов. Шины могут быть внешними (связывающими процессор с
памятью и устройствами ввода-вывода) и внутренними. Современный компьютер использует
несколько шин. На рисунке \ref{fig:onecpu_comp} изображёна схема компьютера с одним
процессором и двумя устройствами ввода-вывода.

\begin{figure}[H]
    \centering
    \includegraphics{image008.jpg}
    \caption{Схема однопроцессорной системы}
    \label{fig:onecpu_comp}
\end{figure}

Процессор состоит из нескольких частей. Блок управления отвечает за вызов команд
из памяти и определение их типа. Арифметико-логическое устройство выполняет 
арифметические операции (например, сложение) и логические операции (например,
логическое И).

\subsection{Устройство центрального процессора}
Внутреннее устройство тракта данных типичного фон неймановского процессора 
иллюстрирует рисунок \ref{fig:data-tract}. Тракт данных состоит из регистров 
(обычно от 1 до 32), арифметико-логического устройства (АЛУ) и нескольких 
соединительных шин. Содержимое регистров поступает во входные регистры АЛУ, 
которые на рисунке \ref{fig:data-tract} обозначены буквами А и В. В них 
находятся входные данные АЛУ, пока АЛУ производит вычисления.

АЛУ выполняет сложение, вычитание и другие простые операции над входными данными
и помещает результат в выходной регистр. Содержимое этого выходного регистра
может записываться обратно в один из регистров или сохранятся в памяти, если
это необходимо. Рисунок \ref{fig:data-tract} иллюстрирует операцию сложения. 
Отметим, что входные и выходные регистры есть не у всех компьютеров.

Большинство команд можно разделить на две группы: типа регистр-память и типа 
регистр-регистр. Команды первого типа вызывают слова из памяти, помещают их 
в регистры, где они используются в качестве входных данных АЛУ 
(слова -- это такие элементы данных, которые перемещаются между памятью и 
регистрами). Словом может быть целое число. Другие команды этого типа
помещают регистры обратно в память.

Команды второго типа вызывают два операнда из регистров, помещают их во 
входные регистры АЛУ, выполняют над ними какую-нибудь арифметическую или 
логическую операцию и переносят результат обратно в один из регистров.

Этот процесс называется циклом тракта данных. В какой-то степени он 
определяет, что может делать машина. Чем быстрее происходит цикл тракта 
данных, тем быстрее компьютер работает.

\begin{figure}[H]
    \centering
    \includegraphics{tract_data.png}
    \caption{Тракт данных обычной фон-неймановской машины}
    \label{fig:data-tract}
\end{figure}

\subsection{Устройство управления}
\textbf{Устройство управления} процессором -- блок, устройство, компонент
аппаратного обеспечения компьютеров. Представляет собой конечный дискретный автомат. 
Структурно устройство управления состоит из:
\begin{itemize}
    \item 
        Блок генерации адресов инструкций. Он содержит в себе регистр
        программного счётчика (program counter или instruction pointer), 
        хранящий адрес считываемой из памяти инструкции, и модифицирующийся
        после выборки каждой инструкции.
    \item
        Блок выборки инструкции, обеспечивающий считывание программ из памяти 
        через устройство ввода-вывода. Он получает на вход адрес с блока генерации
        адреса инструкции, передаёт его на УВВ, получает с него данные по 
        переданному адресу, и выдаёт на блок декодирования интсрукций.
    \item
        Блок декодирования инструкций, производящий преобразование кодов инструкций в
        последовательность кодов функций, передаваемые на исполнительные устройства.
    \item
        Блок переходов. Получает функциональные коды переходов и ветвлений, признаки
         результатов операций с функциональных устройств, проверяет истинность условия
          перехода, и передаёт сигнал на изменение программного счётчика.
    \item
        Блок обработки исключений. Принимает извне сигналы исключительных ситуаций 
        (прерывания, ошибки узлов микропроцессора, нарушение привилегий, 
        команды-ловушки и пр.) и передаёт сигнал на переход по вектору исключения 
        в случае обнаружения.
\end{itemize}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.75\textwidth]{control_unit_block.png}
    \caption{Обобщенная блок-схема устройства управления}
    \label{}
\end{figure}

\subsection{Арифметико-логическое устройство}
\textbf{Арифметико-логическое устройство} -- блок процессора, который под 
управлением устройства управления (УУ) служит для выполнения арифметических
и логических преобразований (начиная от элементарных) над данными, называемыми
в этом случае операндами. Разрядность операндов обычно называют размером
или длиной машинного слова. 

\begin{figure}[H]
    \centering
    \includegraphics[width=0.75\textwidth]{alu_block.png}
    \caption{Обобщенная блок-схема арифметико-логического устройства}
    \label{}
\end{figure}

Одноразрядное двоичное бинарное (двухоперандное) АЛУ с бинарным 
(двухразрядным) выходом может выполнять до 
${\displaystyle 2^{(2^{2})*2}=2^{8}=256}$ двоичных бинарных 
(двухоперандных) функций (операций) с бинарным (двухразрядным) выходом.

По способу действия над операндами АЛУ делят на:
\begin{enumerate}
    \item 
        Параллельные -- операнды представляются параллельным кодом и 
        операции совершаются одновременно над всеми разрядами операндов.
    \item 
        Последовательные -- операции над операндами производятся последовательно 
        во времени над их отдельными разрядами.
\end{enumerate}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.75\textwidth]{alu.png}
    \caption{Схема арифметико-логического устройства (АЛУ) К155ИП3}
    \label{}
\end{figure}

\subsection{Регистры процессора}
Внутри центрального процессора находится быстрая память небольшого объёма для 
хранения промежуточных результатов и некоторых команд управления. Эта память
состоит из нескольких регистров, каждый из которых выполняет определённую
функцию. Обычно размер всех регистров одинаков. Каждый регистр содержит
одно число в диапазоне, верхняя граница которого зависит от размера регистра.
Операции чтения и записи с регистрами выполняются очень быстро, поскольку они
находятся внутри центрального процессора.

Самый важный регистр -- \textbf{счётчик команд}, который указывает, какую
команду нужно выполнить следующей. Название ``счётчик команд'' выбрано неудачно,
посколько он ничего не \textit{считает}, но этот термин употребляется повсеместно.
Также есть \textbf{регистр команд}, в котором находится выполняемая в данный момент
команда. У большинства компьютеров имеются и другие регистры, одни из них 
многофункциональны, другие служат каким-либо определённым целям. Третьи регистры
используются операционной системой для управления компьютером.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.75\textwidth]{registers_x86.png}
    \caption{Регистры x86-совместимого процессора}
    \label{}
\end{figure}

\subsection{Выполнение команд}
Центарльный процессор выполняет каждую команду за несколько шагов.
Он делает следующее:

\begin{enumerate}
    \item Вызывает следующую команду из памяти и переносит её в регистр команд.
    \item
        Меняет положение счётчика команд, который после этого/
        указывает на следующую команду.
    \item Определяет тип вызванной команды.
    \item Если команда использует слово из памяти, определяет, где находится это слово.
    \item Переносит слово, если это необходимо, в регистр центрального процессора.
    \item Выполняет команду.
    \item Переходит к шагу 1, чтобы начать выполнение следующей команды.
\end{enumerate}

Такая последовательность шагов 
(\textbf{выборка} -- \textbf{декодирование} -- \textbf{исполнение})
является основой работы всех компьютеров.

\subsection{Интерпретаторы}
Написание программ-интерпретаторов, которые имитируют работу процессора, 
широко используется при разработке компьютерных систем. После того как 
разработчики выбрали машинный язык (Я) для нового компьютера, они должны 
решить, строить ли им процессор, который будет выполнять программы на 
языке Я, или написать специальную программу для интерпретации программ 
на языке Я. Если они решают написать интерпретатор, они должны создать 
аппаратное обеспечение для выполнения этого интерпретатора. Возможны 
также гибридные конструкции, когда часть команд выполняется аппаратным 
обеспечением, а часть интерпретируется.

Интерпретатор разбивает команды на маленькие шаги. Таким образом, машина 
с интерпретатором может быть гораздо проще по строению и дешевле, чем 
процессор, выполняющий  программы  без интерпретации. Такая экономия 
особенно важна, если компьютер содержит большое количество сложных команд
с различными опциями. В сущности, экономия проистекает из самой замены
аппаратного обеспечения программным обеспечением (интерпретатором).

Первые компьютеры содержали небольшое количество команд, и эти команды 
были простыми. Но поиски более мощных компьютеров привели, кроме всего 
прочего, к появлению более сложных команд. Вскоре разработчики поняли, 
что при наличии сложных команд программы выполняются быстрее, хотя 
выполнение отдельных команд занимает больше времени. 
(В качестве примеров сложных команд можно назвать выполнение операций 
с плавающей точкой, обеспечение прямого доступа к элементам массива и т.п.)
Если обнаруживалось, что две определенные команды часто выполнялись
последовательно одна за другой, то вводилась новая команда, заменяющая 
работу этих двух.

\begin{figure}[H]
    \centering
    \includegraphics{ibm_701.jpg}
    \caption{IBM-710 -- Один из первых компьютеров}
    \label{}
\end{figure}

Сложные команды были лучше, потому что некоторые операции иногда 
перекрывались. Какие-то операции могли выполняться параллельно, 
для этого использовались разные части аппаратного обеспечения. 
Для дорогих компьютеров с высокой производительностью стоимость этого
дополнительного аппаратного обеспечения была вполне оправданна. 
Таким образом, у дорогих компьютеров было гораздо больше команд, 
чем у дешевых. Однако развитие программного обеспечения и требования
совместимости команд привели к тому, что сложные команды стали использоваться
и в дешевых компьютерах, хотя там во главу угла ставилась стоимость, а не
скорость работы. 

К концу 50-х годов компания IBM, которая лидировала тогда на компьютерном 
рынке, решила, что производство семейства компьютеров, каждый из которых
выполняет одни и те же команды, имеет много преимуществ и для самой компании,
и для покупателей. Чтобы описать этот уровень совместимости, компания IBM
ввела термин \textbf{архитектура}. Новое семейство компьютеров должно 
было иметь одну общую архитектуру и много разных разработок, различающихся по
цене и скорости, которые могли выполнять одну и ту же программу. Но как 
построить дешевый компьютер, который будет выполнять все сложные команды, 
предназначенные для высокоэффективных дорогостоящих машин?

\begin{figure}[H]
    \centering
    \includegraphics[width=0.75\textwidth]{IBM_S360.jpg}
    \caption{IBM System/360}
    \label{}
\end{figure}

Решением этой проблемы стала интерпретация. Эта технология, впервые предложенная
Уилксом в 1951 году, позволяла разрабатывать простые дешевые компьютеры, которые,
тем не менее, могли выполнять большое количество команд. В результате IBM создала 
архитектуру System/360, семейство совместимых компьютеров, различных по цене и 
производительности. Аппаратное обеспечение без интерпретации использовалось только 
в самых дорогих моделях.

\subsection{RISC и CISC}
В конце 70-х годов проводилось много экспериментов с очень сложными командами, 
появление которых стало возможным благодаря интерпретации. Разработчики 
пытались уменьшить пропасть между тем, что компьютеры способны делать, и тем,
что требуют языки высокого уровня. Едва ли кто-нибудь тогда думал о разработке
более простых машин, так же как сейчас мало кто занимается разработкой менее 
мощных операционных систем, сетей, редакторов и т. д. (к несчастью).

В компании IBM группа разработчиков во главе с Джоном Коком противостояла 
этой тенденции; они попытались воплотить идеи Сеймура Крея, создав экспериментальный
высокоэффективный мини-компьютер 801. Хотя IBM не занималась сбытом этой машины, 
а результаты эксперимента были опубликованы только через несколько лет, весть быстро
разнеслась по свету, и другие производители тоже занялись разработкой подобных 
архитектур.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.75\textwidth]{ibm801.jpg}
    \caption{IBM-801}
    \label{}
\end{figure}

В 1980 году группа разработчиков в университете Беркли во главе с 
Дэвидом Паттерсоном и Карло Секвином начала разработку процессоров VLSI без 
использования интерпретации. Для обозначения этого понятия они придумали термин 
RISC и назвали новый процессор RISC I, вслед за которым вскоре был выпущен RISC II.
Немного позже, в 1981 году, Джон Хеннеси в Стенфорде разработал и выпустил другую 
микросхему, которую он назвал MIPS. Эти две микросхемы развились в коммерчески 
важные продукты SPARC и MIPS соответственно.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.6\textwidth]{risc_2.jpg}
    \caption{Чип RISC II}
    \label{}
\end{figure}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.75\textwidth]{mips.jpg}
    \caption{Чип MIPS}
    \label{}
\end{figure}



В то время как разрабатывались эти простые процессоры, всеобщее внимание привлекало
относительно небольшое количество команд (обычно их было около 50). 
Для сравнения: число команд в DEC VAX и больших IBM в то время составляло от 200 
до 300. RISC -- это сокращение от Reduced Instruction Set Computer -- компьютер 
с сокращенным набором команд. RISC противопоставлялся CISC 
(Complex Instruction Set Computer -- компьютер с полным набором команд). 
В качестве примера CISC можно привести VAX, который доминировал в то время в 
научных компьютерных центрах. На сегодняшний день мало кто считает, что главное 
различие RISC и CISC состоит в количестве команд, но название сохраняется до сих пор.

С этого момента началась грандиозная идеологическая война между сторонниками 
RISC и разработчиками VAX, Intel и больших IBM. По их мнению, наилучший 
способ разработки компьютеров -- включение туда небольшого количества 
простых команд, каждая из которых выполняется за один цикл тракта данных,
то есть берет два регистра, производит над ними какую-либо арифметическую или 
логическую операцию и помещает результат обратно в регистр. В качестве аргумента
они утверждали, что даже если RISC должна выполнять 4 или 5 команд вместо одной,
которую выполняет CISC, притом что команды RISC выполняются в 10 раз быстрее 
(поскольку они не интерпретируются), он выигрывает в скорости. Следует 
также отметить, что к этому времени скорость работы основной памяти приблизилась 
к скорости специальных управляющих постоянных запоминающих устройств, потому
недостатки интерпретации были налицо, что повышало популярность компьютеров RISC.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.75\textwidth]{dec_vax.jpg}
    \caption{Компьютер из серии DEC VAX}
    \label{}
\end{figure}


% Раздел "Заключение"
% \conclusion


%Библиографический список, составленный вручную, без использования BibTeX
%
\begin{thebibliography}{99}
    \bibitem{8086} \url{https://ru.bmstu.wiki/Intel_8086}
    \bibitem{Tannenbaum} Э.Танненбаум "Архитектура компьютера" (6-e издание)
    \bibitem{RISC} \url{http://users.ics.forth.gr/~kateveni/risc/index.html}
    \bibitem{ALU} \url{https://digteh.ru/proc/ALU/}
    \bibitem{IBM} \url{https://ru.wikipedia.org/wiki/IBM}
\end{thebibliography}

%Библиографический список, составленный с помощью BibTeX
%\bibliographystyle{mdpi}
\bibliographystyle{gost780uv}
\bibliography{thesis}

% Окончание основного документа и начало приложений
% Каждая последующая секция документа будет являться приложением

\appendix


\end{document}