summaryrefslogtreecommitdiff
path: root/abstracts/23_structure_of_cpu/23_structure_of_cpu.tex
blob: 278d636bff8f4bc05ea304ab17b490c9f0d5a485 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
\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}