Общоизвестно е, че кодът се пише от разработчик и как хората общуват с компютрите. Замисляли ли сте се обаче как софтуер като код взаимодейства с компютърен хардуер като CPU (централен процесор)? Ако отговорът е да, значи сте попаднали на правилното място.
За да разберете как се изпълнява кодът на компютър, трябва да разберете какво кара компютъра да работи и как може да се манипулира. Първо, нека първо да поговорим за основните идеи на компютърния хардуер, преди да преминем към софтуерната страна на нещата.
Какво е двоично?
Двоичната е числова система с база 2, която процесорите и паметта използват за изпълнение на код. Двоичните числа могат да бъдат само 1 или 0, откъдето идва и името му. Ако групирате осем двоични числа (00000000), получавате това, което е известно като байт, докато едно двоично число (0) се нарича бит.
Как обикновен превключвател произвежда двоични сигнали
Всичко логично за компютрите с машини започва с простия превключвател. Прост ключ има два проводника и свързващ и разединяващ механизъм. Свързването на двата проводника позволява протичането на ток, който произвежда сигнал към другия край на проводника. От друга страна, ако проводниците са изключени, токът няма да тече, което означава, че няма да бъде произведен сигнал.
Тъй като превключвателят може да бъде включен или изключен само в даден момент, те осигуряват идеалния механизъм за създаване на високи и ниски сигнали, използвани за генериране на сигнали с квадратна вълна.
Когато натиснете превключвател, той произвежда сигнал или един бит данни. Една обикновена снимка, направена от смартфон, ще бъде около пет мегабайта данни, което се равнява на 40 000 000 бита. Това би означавало, че ще трябва да натиснете превключвателя десетки милиони пъти, само за да произведете достатъчно данни за една снимка, направена от вашия смартфон.
С механичните ограничения на превключвателя инженерите се нуждаеха от нещо, което нямаше никакви движещи се части и осигуряваше по-бързи скорости на превключване.
Транзистори, използвани като превключвател
Благодарение на откриването на допинга (манипулиране на електрическата проводимост на полупроводниците като силиция), инженерите успяха да направят електрически управлявани превключватели, известни като транзистори. Това ново изобретение позволява по-бързи скорости на обработка, които изискват малко напрежение за захранване, което в крайна сметка прави възможно подреждането на над милиард от тези транзистори на един модерен процесор.
Какво е архитектура на процесора?
След това транзисторите са умело подредени, за да направят логически порти, полусуматори, суматори, тригери, мултиплексори, регистри и различни компоненти, които правят процесора функционален. Начинът, по който тези компоненти са подредени, определя това, което е известно като архитектура на процесора.
Архитектурата на процесора също диктува ISA (архитектура на набора от инструкции) на процесора. ISA съдържа вграден списък с инструкции, които процесорът може да изпълнява естествено. След това тези инструкции се смесват последователно чрез език за програмиране, за да се създаде това, което е известно като програма. Обикновено стотици инструкции са лесно достъпни на процесора, включително събиране, изваждане, преместване, запазване и зареждане.
Ето примерен набор от инструкции:
Всяка инструкция в набор от инструкции има свой собствен двоичен адрес, известен като код на операция. Операционният код ще бъде първите няколко двоични бита, които казват коя операция от набора от инструкции да се използва.
След операционния код е операндът. Операндът съдържа стойности и адреси, където ще се използва кодът на операцията.
Диаграмата показва 8-битова инструкция. Ако процесорът има 64-битова архитектура, тогава инструкциите могат да обхващат до 64 бита в ширина на инструкциите, което го прави по-способен процесор.
Свързани: Как се различават RISC и CISC процесорите?
Асемблерът
Сега, когато разбирате двоичните сигнали, можете да научите как вашият компютър интерпретира такива сигнали. Как трябва да се тълкува машинният код зависи от типа на логиката, използвана в асемблера (програма от ниско ниво, използвана за декодиране и асемблиране на код в правилен двоичен файл).
Например, ако нашия асемблер използва стандарта ASCII (Американски стандартен код за обмен на информация), нашият асемблер ще вземе дадения машинен код и ще го интерпретира по същия начин, както от ASCII в таблицата По-долу.
00101001 | А | 00101111 | г | 00110101 | М | 00111011 | С | 01000001 | Й |
00101010 | Б | 00110000 | Х | 00110110 | н | 00111100 | т | 01000010 | З |
00101011 | ° С | 00110001 | аз | 00110111 | 0 | 00111101 | У | ||
00101100 | д | 00110010 | Дж | 00111000 | П | 00111110 | V | ||
00101101 | Е | 00110011 | К | 00111001 | В | 00111111 | У | ||
00101110 | Ф | 00110100 | Л | 00111010 | Р | 0100000 | х |
Тъй като нашият асемблер използва ASCII (8-битова версия), всеки осем двоични числа в двоичния файл се интерпретират като един знак. Асемблерът ще вземе този байт и ще го интерпретира според дадените стандарти. Например 01000001 01101001 01010100 ще се преведе в думата „бит“.
Разбиране на асемблерния език
Асемблерът е разбираем от човека език за програмиране на ниско ниво, който директно манипулира операционните кодове и операндите на архитектурата на процесора.
Ето пример за прост код за сглобяване, използващ набора от инструкции, показан по-рано:
1. LODA № 5
2. LODB № 7
3. ДОБАВЕТЕ R3
4. STRE M12
Този блок код се съхранява в RAM, докато процесорът извлече всеки ред код един по един.
Цикълът на извличане, декодиране и изпълнение на процесора
Процесорът изпълнява код чрез цикъл, известен като извличане, декодиране и изпълнение. Тази последователност показва как процесорът обработва всеки ред код.
извличане: Броячът на инструкциите в процесора взема един ред инструкции от RAM, за да уведоми процесора коя инструкция да изпълни следващата.
декодиране: Асемблерът ще декодира четения от човека блок от код и ще го сглоби като правилно форматирани двоични файлове, за да ги разбере компютърът.
1. 00010101
2. 00100111
3. 00110011
4. 01011100
Изпълни: След това CPU изпълнява двоичните файлове, като прилага инструкциите, посочени от кода на операцията, към предоставените операнди.
Компютърът ще изпълни то както следва:
- Заредете първия регистър с 5
- Заредете втория регистър със 7
- 5 + 7 = 12, запишете 12 в третия регистър
- Съхранявайте стойността на третия регистър в RAM адрес M12
Компютърът успешно е добавил две числа и е съхранил стойността на посочения RAM адрес.
Страхотен! Сега знаете как компютърът изпълнява код. Това обаче не спира дотук.
Отивайки по-нататък
С подходящия хардуер, асемблер и асемблер, хората биха могли да изпълняват код с разумна лекота. Въпреки това, тъй като както програмите, така и компютърния хардуер станаха още по-сложни, инженерите и програмистите трябваше да го направят помислете за начин да направите програмирането по-малко досадно и да осигурите съвместимост с различни видове процесори архитектура. По този начин създаването на компилатори и интерпретатори.
Какво е компилатор и интерпретатор?
Компилаторът и интерпретаторът са транслационни програми, които вземат изходен код (програми, направени от езици за програмиране от високо ниво) и ги превеждат на асемблер, който асемблерът след това ще декодира към двоичен.
Ан преводач ще вземе един ред код и веднага ще го изпълни. Това обикновено се използва на терминали като Linux Bash Shell терминал и Windows PowerShell терминал. Страхотно за изпълнение на прости еднократни задачи.
За разлика от това, а компилатор ще вземе няколко реда код и ще ги компилира, за да направи програма. Примери за тези програми биха били Microsoft Word, Photoshop, Google Chrome, Safari и Steam.
Със създаването на компилатори и интерпретатори бяха създадени езици за програмиране на високо ниво.
Езици за програмиране от високо ниво
Езиците за програмиране от високо ниво са всеки език след асемблерния код. Някои от тези езици, с които може би сте запознати, са C, Python, Java и Swift. Тези езици за програмиране направиха програмирането по-четимо и по-просто от асемблерния език.
Ето едно до друго сравнение, за да илюстрира колко по-трудно е да се програмира в асембли, отколкото с език за програмиране на високо ниво като Python:
И двата кода ще отпечатат „Hello World“.
С тези езици за програмиране разработчиците могат да програмират игри, уебсайтове, приложения и драйвери с разумно време.
Свързани: Python срещу Java: Най-добрият език за 2022 г
Компютрите могат да изпълняват всякакъв код
Компютърът е устройство, което може да чете само двоичен файл. Тези двоични файлове се произвеждат от над милиард транзистори с микроскопичен размер, опаковани в процесора. Подредбата на транзистора диктува ISA (архитектура на набора от инструкции) на процесора, която предоставя стотици инструкции, които процесорът може да изпълнява лесно, след като неговият код на операцията бъде извикан чрез код. Разработчиците смесват и съчетават тези инструкции последователно, което създава цяла програма, като двигатели за игри, уеб браузъри, приложения и драйвери.
Процесорът изпълнява код чрез последователност, известна като цикъл на извличане, декодиране и изпълнение. След като част от код се зареди в RAM, процесорът ще извлече съдържанието му едно по едно, ще декодира съдържанието в двоичен файл чрез асемблера и след това ще изпълни кода.
Тъй като асемблерът може да превежда само код, направен изрично за архитектурата на процесора, компилаторите и интерпретаторите бяха изградени върху асемблера (подобно на адаптер), за да работят върху различни типове процесори архитектура. Преводачът ще приеме една команда и ще я изпълни незабавно. За разлика от тях, компилаторът ще вземе всички ваши команди и ще ги компилира в програма за многократна употреба.
Езици за програмиране на високо ниво като Python, C и Java са създадени, за да направят програмирането по-лесно, по-бързо и удобно. По-голямата част от програмистите вече не трябва да кодират на асемблер, тъй като техните лесни за използване езици за програмиране от високо ниво могат да бъдат преведени в асемблера чрез компилатор.
Надяваме се, че вече имате по-добро разбиране за основите на компютрите и как те изпълняват код.
Това е прост въпрос, но този, който всеки размишлява от време на време: как всъщност работи този компютър пред вас?
Прочетете Следващото
- Обяснена технология
- Програмиране
- Компютърен процесор
- Обработка
Жадувайки да научи как работят нещата, Джейрик Манинг започва да се занимава с всякакви електронни и аналогови устройства през ранните си тийнейджъри. Започва съдебна медицина в университета в Багио, където се запознава с компютърната криминалистика и киберсигурността. В момента той много се самообучава и бърка в технологиите, за да разбере как работят и как можем да ги използваме, за да направим живота по-лесен (или поне по-готин!).
Абонирайте се за нашия бюлетин
Присъединете се към нашия бюлетин за технически съвети, ревюта, безплатни електронни книги и ексклузивни оферти!
Щракнете тук, за да се абонирате