уф... тоя петък нещо ме мързи

Значи в нашия бранш (и не само) има някаква систематизация и някакви термини. Систематизацията е направена с цел да не си бъркаме шапките. Всеки се занимава с някакъв дял от наУката и наУките са различни. Демек систематизирането е според кой каква теория (наУка) ползва, а не по исторически или политически/религиозни причини. А пък термините са за да се разбираме с две приказки, а не да се обясняваме като вклюбени гълъбчета...
Сега по-конкретно може да се почне от "електроника и електротехника", тва е общият кюп с всички жичкаджии и изобщо ел инджИнери и техните проблеми.
Тоя кюп се дели на две - аналоговщини и цифрощини. Разликата между двете е в това кой как интерпретира сигналите по жиците. Съответно наУките както казах са различни. Аналоговщините четат за закона на Ома, уравненията на Кирхоф и т.н.... някои даже знаят и уравненията на Максуел, квантова физика и кво ли не. Много е дебела тяхната

Цифровите сигнали са доста по-прости - има/няма единица/нула... фасулска работа

От своя страна цифротехниката се дели на две - комбинаторна логика и автомати с памет. Разликата е очевидно дали има или няма памет в схемата. Комбинаторната логика (тва дето няма акъл) използва разни логически функции И-НЕ-ИЛИ.. Правят се едни таблици истинност, карти на Карно... има разни нормални форми, дюзенктивни форми. Може и да звучи сложно, всъщност на практика с комбинаторна логика може да се правят и много сложни неща, но и най-най-най сложната схема ако се сложи в една черна кутия и се изведат входовете и изходите може да бъде разгадана само "с поглед". Причината е проста - няма памет, съответно като подадеш една комбинация на входовете, изкарва винаги точно определена комбинация на изходите

Сега ако в една комбинаторна логика вкараме памет се получава другия дял - автомат с памет. Важно е да се отбележи, че паметта не е "твърда" а такава, чието съдържание може да се променя от входовете на схемата. Точно тая дребна подробност вкарва една гооооляма разлика. Животното с памет вече не зависи само входовете си, а и от състоянието си, демек от съдържанието на паметта си.
Съответно теорията с която се описват автоматите е маалко по-различна и по сложна. За съжаление е и еднопосочна, в смисъл има различни начини как от една идея/задание да се генерира схема на автомат. Но няма 'ревърс' т.е. ако имаме един автомат в черна кутия няма сигурен начин да го разгадаем без да сме отворяли кутията...
Но да се върна на класификацията, значи стигнахме до автоматите... на практика всички "умни" джвъчки, включая компютри са по същество автомати. Защо? Ами защото "архитектурата" им включва като карантии памет и комбинаторна логика

Сега всички автомати имат памет, паметта им или част от нея може да се промяна при определени входни комбинации, а изходите им могат да зависят от текущата входна комбинаци и съдържанието на паметта им. Тънък момент в тая дефиниция е, че поведението на автомата зависи и от "началното" състояние на паметта си. И тук има два типа автомати - едният тип е такива, при които началното състояние е фикснато по един или друг начин. И други, при които може да се променя по един или друг начин. Вторите се наричат "програмируеми".
Освен това деление, автоматите могат да се разделят и според преднадзначението си. Предназначението може да е най-различно, обаче има една "особена" група наречена "computers". В случая под компютър се има предвид устройство, което може да изчислява нещо си, а не десктоп машина. Като под "изчисление" нямам предвид смятане на някаква сметка, а по-скоро "изпълнение" на някакъв алгоритъм.
От двете класификация най-често срещана е комбинацията "програмируем" + "изчислителен" автомат. Иначе казано "процесор". Демек ако нещо има в архитектурата си има "логика" плюс "памет", които са организирани по начин, който позволява "програмиране" и с това програмиране можем да описваме алгоритми, то имаме процесор. Дали ще е мини, микро или супер е въпрос на производствени възможности дето се менят ден с ден....
Тук малко "сдъвках" понятията ще е то алгоритъм, що е то изчисление и как точно се правят с автомати. Истината е че може по доста различни начини, но от гледна точка на теорията другарят Тюринг е доказал, че ако някакъв проблем може да бъде решен с някакъв алгоритъм, то този алгоритъм може да бъде реализиран на проста машина с краен брой прости инструкции. И обратно, ако няма алгоритъм или алгоритъмът е нерешим, то проблемът си е нерешим с машина изобщо. Иначе казано "архитектурата" няма теоретично отношение към програмите. И каквото може да се изчисли с 64-битов компютър, теоретично може да реши и с 4-битов. Каквото не може теоретично да се реши, просто не може с никакъв. Естествено това е при условие, че няма глупави практически ограничения.
Поради тия причини няма смисъл да се усложняват архитектурите и всички се въртят до тривиалното - памет (естествено) в която могат да се записват инструкции. Инструкциите както е казал Тюринг са краен команди и чрез тях може да се опише/изпълни произволен алгоритъм.
Навремето по чисто практични съображения, щото са се ползвали магнитни ленти, ферити и кви ли не екзотики та конструктивно са разделяли паметта за данни от паметта за програмата. От там идват и разликите във фон Нойман и Харвард, но днес това не е толкова съществено...
Та в общия случай имаме памет, програмен брояч сочещ поредната инструкция, извличане, декодиране, ала-бала...
Пак едно време, стъпките са се правели една по една, като управлението е ставало с микрокод. Демек вътре има нещо като елементарно прочесорче, което си има нещо като "инструкции" с които може да се чете от паметта, да се управлява ALU-то на големия, да се пише и т.н. Тия дето са учили ИТ/КС вероятно са правили схеми на такова животно, поне на времето нас ни караха...
Предимството на тоя подход е, че като брой транзистори става малко, но като скорост за една инструкция на основния проц отиват няколко до десетки инструкции на малкия, т.е. много клоци... краен резултат - ниска скорост.
Съответно са добавили "конвейра", т.е. ако условно кажем че една инструкция използва стъпки за извличане, декодиране, изпълнение, писане на резултат, то вместо тия стъпки да се изпълняват една по една, се пускат на "конвейр". Докато се изпълнява една инструкция, се декодира следващата и се извлича по-следващата. Това създава разни главоболия когато една инструкция трябва да ползва резултат от друга, както и при условни преходи... съответно има и техники за справянето с главоболието...
После са се усетили, че някои части на конвейра много често бездействат примерно ако има флойнтинг поинт, докато други прегряват. Тогава са се сетили, че ако дублират само по-натоварените части ще получат почти два пъти по-висока производителност, без да ползват транзистори като за два конвейра. Естествено това води до други главоболия, щото вече изпълнението става out-of-order, обаче пък всяко зло за добро - ако можеш да разбъркваш и разпределяш инструкциите може не само да натовариш 2-3-4 конвейра, ами и да ги разпределяш така че конвейрите да се задръстват по-малко... Та на тва му се вика суперскаларна архитектура. И се ползва в почти всички gsm смарт-талафони...естествено при компутрите е де-факто стандард от Пентиум насам. При АРМ64 (v8) един кур може да се конфигурира между 3 и 8 конвейра, като опашката за джуркане на инструкции е до 128.
И после следват мноогото курове... там се вкарават още ядове със синхронизации, с кешове... и те така нататък
