Компютърно устройство. RAM, процесор, процесорни регистри. хардуерен стек

Компютърно устройство

Компютърът е универсален изпълнител, който може да управлява други изпълнители и има собствена вътрешна памет. Писането на алгоритъм за компютър се нарича програма. Всички съвременни компютри са изградени според така наречената архитектура на фон Нойман: програмата се съхранява в паметта на компютъра, точно както данните.

Компютърът е изграден от следните компоненти:

  • Процесоръте основата на всеки компютър, неговият мозък. Процесорът извършва всички изчисления и издава команди към всички други компоненти на компютъра;
  • RAMсъщо е основна част от всеки компютър. Паметта с произволен достъп (RAM - Random Access Memory) съхранява както програмата, така и данните (т.е. стойностите на променливите). Част от паметта може да бъде защитена от запис и да се съхранява в специален чип (ROM - Read Only Memory или ROM - Read Only Memory). Обикновено ROM съдържа програмата за зареждане и основната входно-изходна система (BIOS);
  • busе канал за предаване на команди и данни между всички компоненти на компютъра. Един компютър може да има една или повече шини. Всички устройства са свързани към шината паралелно, т.е. редът на свързване не е важен и броят на проводниците не зависи от броя на свързаните устройства. Редът, в който се предават командите и данните, се определя от протокола на шината, т.е. ясно дефиниран набор от конвенции, обикновено приети като международен стандарт. Всяко устройство е свързано към шината с помощта на контролер, който превежда от езика на сигналите, предавани по шината, на командния език на конкретно устройство;
  • външните устройстваса свързани към компютърната шина. Най-често срещаните външни устройства сатвърд диск, клавиатура, монитор, мрежова карта, модем и др. Нито едно от тях не е необходимо, както показва примерът на компютър, управляващ автомобилен двигател с впръскване на гориво. Но някои външни устройства винаги присъстват, защото чрез тях компютърът комуникира с външния свят.

Разгледайте по-подробно всяка от съставните части на компютъра.

RAM

Обичайно е да се номерират битове вътре в машинна дума (както и вътре в байт) отдясно наляво, започвайки от нула и завършвайки с 31. Най-малко значимият бит има нулево число, най-значимият или знаков бит е номер 31. Най-малко значимите битове на числото са в най-малко значимите битове на машинната дума.

Има два начина за номериране на байтове в машинна дума. В съответствие с това всички процесори са разделени на два вида:

Много компютърни протоколи обаче са ориентирани към Big Endian, тъй като съществуват от дълго време. Например, всички интернет протоколи предават данни във формат Big Endian, т.к те са разработени през 70-те години. На машини с Little Endian трябва да размените байтове в рамките на една дума, преди да изпратите IP пакет към мрежата или когато получите IP пакет от мрежата.

Процесорът е гръбнакът на всеки компютър. Това е голяма микросхема, съдържаща стотици хиляди или дори милиони елементи вътре. Съвременните процесори са изключително сложни и могат да съдържат няколко нива на конструкция и описание. По този начин можете да разграничите инструкциите на външния процесор във формата, в която се използват в програми и записват в RAM, и вътрешния микрокод, използван за изпълнение на външни инструкции. Процесорът може да съдържа в себе си устройства, предназначени да ускорят работата - конвейер за инструкции, усъвършенствано устройствоизвличане на паметта, кеш памет и др.

Нека разгледаме само най-общите принципи на изграждане и работа на процесора, които са еднакви както за примитивните, така и за най-модерните процесори.

Всеки процесор има устройство, което изпълнява команди и собствена вътрешна памет, внедрена в процесорния чип. Нарича сепроцесорни регистри. Има 3 вида регистри:

тези. един от аргументите на команда е и неин резултат. Този аргумент се наричадестинация. Аргумент, който не се променя в резултат на командата, се наричаизточник (източник). Няма консенсус сред програмистите относно реда, в който да се пишат аргументи, когато се използва Assembler, т.е. в символното означение на машинните инструкции. Например в асемблера "masm" на IBM за процесори Intel 80x86 местоназначението винаги се записва първо, а източникът - второ. Асемблерът "masm" се използва в операционни системи MS DOS и Windows. В асемблера "as", който е част от компилатора "gcc" и се използва в системи от тип Unix (Linux и т.н.), приемникът винаги е последният аргумент. Същата команда за добавяне е написана в "as" като

което означава да съберете Y и X и да запишете резултата в X.

Операндите на инструкциите могат да бъдат регистри или елементи на паметта. В действителност, разбира се, процесорът винаги първо копира думата от паметта в регистър, който може или да бъде изрично указан в инструкцията, или да се използва имплицитно. Операцията винаги се извършва върху съдържанието на регистрите. След това резултатът може да бъде записан в паметта или оставен в регистър. Например, когато изпълнявате команда за увеличаване на цяло число с единица

в случай, когато операнд X е RAM дума, съдържанието на думата X е първоимплицитно се копира във вътрешен регистър на процесора, след което се увеличава с единица и след това увеличената стойност се записва обратно в паметта.

CISC и RISC процесори

Изглежда, че CISC процесорите трябва да имат предимство пред RISC процесорите, но всъщност всичко е точно обратното. Факт е, че простотата на набора от инструкции на процесора улеснява неговия дизайн, в резултат на което е възможно да се постигнат следните цели:

RISC архитектурите имат неоспорими предимства пред CISC архитектурите – скорост, ниска цена, лекота на програмиране и т.н. - и практически нямат недостатъци. Съществуването на CISC процесори в повечето случаи се обяснява само с традицията и изискването за съвместимост със стар софтуер. Има обаче и трети вариант - процесори, които по същество са RISC процесори, но емулират външния набор от инструкции на остарели процесори, например модерни процесори Intel Pentium.

Компютърен алгоритъм

Сред всички процесорни регистри във всяка архитектура винаги има два специални регистъра: това е компютърният регистър, което означава Програмен брояч, на български се наричаброяч на команди, а SP регистърът е Stack Pointer, т.е.указател на стека. Понякога компютърният регистър се нарича IP, което означава Instruction Pointer, указател на инструкции. (Инструкциите на процесора често се наричат ​​инструкции.)

хардуерен стек

Стекът е устройство за съхранение, от което елементите се изваждат в обратния ред, в който са поставени в стека. Купчината може да се разглежда като купчина листове хартия, всеки от които съдържа един от съхранените елементи. Вгорната частна стека е последният съхранен елемент.

процесор

стек можепредставляват под формата на тръба с пружинно дъно, разположено вертикално. Горният край на тръбата е отворен, можете да добавите или, както се казва, да натиснете елементи в нея. Общоприетите английски термини в това отношение са много колоритни, операцията по добавяне на елемент към стека се обозначава с push, което означава "натискане, натискане". Новодобавеният елемент избутва елементите, които преди това са били избутани в стека, една позиция надолу. Когато елементите се извадят от стека, те изглеждат избутани нагоре, на английски pop („стреля“).

Команди за извикване на подпрограма извикване и връщане return

Хардуерен стек и локални променливи на подпрограмата

Тъй като хардуерният стек се намира в RAM, той може да съхранява обикновени програмни променливи. Поставянето на локални променливи в стека има редица предимства пред статичното поставяне на променливи във фиксирани RAM местоположения. Както бе споменато по-горе, това ви позволява да организирате рекурсия. В допълнение, поддръжката на паралелни процеси, работещи върху споделени статични променливи, е от основно значение в съвременните архитектури. Това са така наречените леки процеси или нишки (Thread), изпълняващи се паралелно в рамките на една и съща програма. Например, работата на всички графични приложения в системата Microsoft Windows 32 се основава на използването на нишки: една нишка обработва съобщенията на графичната система (натискане на бутоните на клавиатурата и мишката, преначертаване на прозорци, избор на команди от менюто и т.н.), други нишки се занимават с изчисления, мрежов обмен, анимация и т.н.

Различни нишки работят паралелно върху споделени статични данни, като по този начин вършат известна работа заедно. В този случай една и съща подпрограма може да бъде извикана от различни нишки. За разлика от статичнотопроменливи, които са общи за всички нишки, всяка нишка има свой собствен отделен стек. Когато използвате нишки, е много важно локалните променливи на подпрограмата да бъдат поставени в стека. В противен случай би било невъзможно да се извика една и съща подпрограма от различни нишки паралелно: повторно извикване на подпрограма, която вече се изпълнява в друга нишка, би унищожило статичния набор от локални променливи на тази подпрограма. И когато използвате стек, локалните набори от данни на една и съща подпрограма, извикана от различни нишки, са различни, защото са разположени на различни стекове. По този начин различните нишки работят с различни набори от локални променливи, без да си пречат една на друга.

Нека разгледаме по-подробно как локалните променливи на подпрограмата се поставят в стека, използвайки примера на езика C. В C подпрограмите се наричат ​​функции. Една функция може да има аргументи и локални променливи, т.е. променливи, които съществуват само по време на изпълнение на функция. Като пример, разгледайте функция ƒ, която зависи от два входни аргумента x и y от тип цяло число и използва три локални променливи a, b и c, които също са от тип цяло число. Функцията връща целочислена стойност.

Нека функцията ƒ бъде извикана на някое място в програмата с аргументи x = 222, y = 333:

Извикващата програма избутва действителните стойности на аргументите x и y на функцията ƒ в стека, като първият аргумент на функцията е отгоре на стека, а вторият аргумент е под него. Извикването на функцията се превежда в следните команди:

В началото на функцията ƒ стекът изглежда така:

След заснемане на рамката от локални променливи, стекът изглежда така.

Извикващият премахва от стека действителните стойности на аргументите x и y, изпратени в стека, преди да извика функцията ƒ.

2018-11-0118:08:45 часа
Anwbcoi

Преминете 1 регистрация, направете 2 действия и вземете от 8950 рубли всеки ден в автоматичен режим.

Ние гарантираме: - Първи печалби в рамките на 60 минути. - Стабилен доход 24 часа в денонощието. - Получаване на пари без забавяне. - За България, страните от ОНД и Европа. - Без прикачени файлове и инсталиране на софтуер. - Специално за начинаещи и хора без опит.