Як працюють комп’ютери? [зачинено]


59

Це майже неприємно запитати ... Я маю науковий ступінь з інформатики (і другий - за фахом). Я працював штатним розробником .NET. Майже п’ять років. Я взагалі здаюся компетентним у тому, що я роблю.

Але я не знаю, як працюють комп’ютери!

Будь ласка, оголіться зі мною на секунду. Швидкий гугл "Як працює комп'ютер" дасть багато та багато результатів, але я намагався знайти той, який би реально відповів на те, що я шукаю. Я усвідомлюю, що це величезне, величезне питання, тож справді, якщо ви можете просто дати мені кілька ключових слів чи певний напрямок.

Я знаю, що є компоненти .... джерело живлення, материнська плата, оперативність, процесор тощо ... і я отримую "загальне уявлення" про те, що вони роблять. Але я дійсно не розумію, як ви переходите від рядка коду, як-от Console.Readline()у .NET (або Java чи C ++), і чи справді це робити .

Звичайно, я смутно знаю про MSIL (у випадку .NET), і що з компілятором JIT трапляється якась магія, і вона перетворюється на власний код (я думаю). Мені кажуть, що Java схожа, а C ++ вирізає середній крок.

Я зробив декілька мейнфреймів, це було кілька років тому. Я пам’ятаю, були якісь інструкції та деякі регістри процесора, і я написав код .... і тоді сталося якесь чарівництво .... і моя програма запрацювала (або збої). З того, що я розумію, "Емулятор" імітуватиме те, що відбувається під час виклику інструкції, і оновить регістри процесора; але що змушує ці інструкції працювати так, як вони роблять?

Чи перетворюється це на питання "Електроніка", а не на "Комп'ютер"? Я здогадуюсь, що для мене це не має жодної практичної причини, але я відчуваю, що мені це потрібно.

(Так, це відбувається, коли ви проводите день з маленькою дитиною. На запитання "Чому?" Потрібно близько 10 хвилин і п'ять повторень, щоб зрозуміти, скільки ви не знаєте)



20
Я рекомендую Код від Чарльза Петцольда

Це не ан Emulator. Це купа справжніх напівпровідникових схем із сотнями (тисячами) вхідних та вихідних проводів та мільярдами логічних воріт. EmulatorВикористовувався тільки для навчальних цілей.
rwong

1
Я думаю, що заголовок слід змінити, щоб він був більш конкретним / інформативним. Це насправді досить корисне питання, але на перший погляд це виглядає цілком смішно, як те, що спочатку запитувала маленька дитина. Змініть це на щось на кшталт "як команди програмного забезпечення високого рівня підключаються до апаратних відповідей низького рівня?"
поштовх

2
Привіт Роб, як сказано зараз, це безнадійно широко і швидко перетворилося на запитання щодо рекомендацій щодо книги та розгорнуту дискусію: обох ми не хочемо тут. Якщо ви можете підтягти свій фокус і запитати що - то конкретне про проблему , яку ви в даний час стикається, НЕ соромтеся питати про це.

Відповіді:


139

Я почну з найнижчого рівня, який може бути релевантним (я можу почати з ще нижчого рівня, але вони, мабуть, занадто неактуальні), починаючи від Atom, до електрики, транзисторів, логічних воріт, до інтегральних мікросхем (мікросхема / процесор) ), і закінчується на асамблеї (я вважаю, що ви знайомі з вищими рівнями).

На початку

Атом

Атом - це структура, що складається з електронів, протонів та нейтронів (які самі складаються з елементарних частинок ). Найцікавішою частиною атома для комп'ютерів та електроніки є електрони, тому що електрон є рухливим (тобто він може рухатися навколо порівняно легко, на відміну від протонів і нейтронів, які важче рухатись) і вони можуть вільно плавати сам, не затримуючись всередині атом.

Зазвичай кожен атом має рівну кількість протонів і електронів, ми називаємо цей "нейтральний" стан. Як це буває, атом може втратити або отримати додатковий електрон. Кажуть, що атоми в цьому незбалансованому стані є атомом «позитивно зарядженого» (більше протона, ніж електронів) та «негативно зарядженого» атома (більше електрона, ніж протона).

Електрони нерозбірливі і незнищувані (не так у квантовій механіці, але це не має значення для нашої мети); тому якщо атом втрачає електрон, якийсь інший сусідній атом повинен був отримувати зайві електрони або електрон повинен був вивільнитися у вільний плаваючий електрон, навпаки, оскільки електрон є неконструктивним, щоб отримати зайвий електрон, атом повинен був викинути його з розташованих поруч атомів або з вільно плаваючого електрона. Механіка електронів така, що якщо біля позитивно зарядженого атома є негативно заряджений атом, то деякі електрони будуть мігрувати, поки обидва атоми не матимуть однакового заряду.

Електрика

Електроенергія - це лише потік електронів з області з дуже великою кількістю негативно заряджених атомів до області з дуже великою кількістю позитивно заряджених атомів. Певні хімічні реакції можуть створити ситуацію, коли у нас є один вузол з великою кількістю негативно заряджених атомів (званий «анод») та інший вузол з великою кількістю позитивно заряджених атомів (званий «катодом»). Якщо ми з’єднаємо два протилежно заряджені вузли дротом, маси електронів будуть перетікати від анода до катода, і цей потік називається "електричним струмом".

Не всі дроти можуть передавати електрони однаково легко, електрони протікають набагато легше у «провідних» матеріалах, ніж у «стійких» матеріалах. "Провідний" матеріал має низький електричний опір (наприклад, мідні дроти в кабелях), а "стійкий" матеріал має високий електричний опір (наприклад, ізоляція гумового кабелю). Деякі цікаві матеріали називаються напівпровідниками (наприклад, силікони), оскільки вони можуть легко змінити опір, за певних умов напівпровідник може виконувати роль провідника, а в інших умовах може перетворитися на резистор.

Електроенергія завжди вважає за краще протікати через матеріал з найменшим опором, тому якщо катод і анод з'єднані двома проводами, один має дуже високий опір, а другий з дуже низьким опором, більшість електронів буде протікати через кабель низького опору і майже жоден не протікає через матеріал високої стійкості.

Середній вік

Вимикачі та транзистори

Вимикачі / перемикачі - це як звичайні вимикачі світла, перемикач може бути розміщений між двома елементами дроту, щоб відключити та / або відновити потік електроенергії. Транзистори працюють точно так само, як і перемикач світла, за винятком того, що замість фізичного підключення та відключення проводів транзистор підключає / відключає потік електроенергії, змінюючи його опір залежно від того, чи є електроенергія в базовому вузлі, і, як ви вже могли здогадатися / знайте, транзистори виготовлені з напівпровідників, тому що ми можемо змінити напівпровідник, щоб стати або резистором, або провідником для підключення або відключення електричних струмів.

Один поширений тип транзистора, NPN біполярний перехідний транзистор (BJT), має три вузли: "база", "колектор" і "випромінювач". У NPN BJT електрика може надходити від вузла "випромінювач" до вузла "колектор" лише тоді, коли заряджений "базовий" вузол. Коли базовий вузол не заряджений, практично жоден електрон не може протікати через нього, а коли базовий вузол заряджений, то між випромінювачем і колектором можуть протікати електрони.

Поведінка транзистора

(Я настійно пропоную прочитати це перед тим, як продовжувати, оскільки це може пояснити краще, ніж мені, інтерактивну графіку)

Скажімо, у нас є транзистор, підключений до джерела електричної енергії на його базі та колекторі, а потім підключаємо вихідний кабель біля його колектора (див. Малюнок 3 на http://www.spsu.edu/cs/facturing/bbrown/web_lectures / транзистори / ).

Якщо ми не застосовуємо електроенергію ні до бази, ні до колектора, то електроенергія не може взагалі надходити, оскільки немає електрики, про яку можна говорити:

B   C  |  E   O
0   0  |  0   0

Коли ми застосовуємо електроенергію до колектора, але не до основи, електроенергія не може надходити до випромінювача, оскільки база стає матеріалом високої стійкості, тому електроенергія потрапляє на вихідний провід:

B   C  |  E   O
0   1  |  0   1

Коли ми застосовуємо електроенергію до бази, але не до колектора, також електрика не може надходити, оскільки між колектором та випромінювачем немає різниці заряду:

B   C  |  E   O
1   0  |  0   0

Коли ми застосовуємо електроенергію як до базового, так і до колекторного, ми отримуємо електроенергію, що протікає через транзистор, але оскільки транзистор зараз має менший опір, ніж вихідний провід, через вихідний провід майже жодна електроенергія не тече:

B   C  |  E   O
1   1  |  1   O

Логічні ворота

Коли ми підключаємо випромінювач одного транзистора (Е1) до колектора іншого транзистора (С2), а потім підключаємо вихід біля основи першого транзистора (О) (див. Рис. 4 на http://www.spsu.edu / cs / факультет / bbrown / web_lectures / транзистори / ), тоді трапляється щось цікаве. Скажімо також, що ми завжди подаємо електрику на колектор першого транзистора (С1), і тому ми граємо лише з базовими вузлами транзисторів (В1, В2):

B1   B2   C1   E1/C2  |  E2   O
----------------------+----------
0    0    1    0      |  0    1
0    1    1    0      |  0    1
1    0    1    0      |  0    1
1    1    1    1      |  1    0

Підведемо підсумки таблиці, щоб ми бачили лише B1, B2 та O:

B1   B2  |  O
---------+-----
0    0   |  1
0    1   |  1
1    0   |  1
1    1   |  0

Ось і ось , якщо ви знайомі з булевою логікою та / або логічними воротами, вам слід помітити, що це саме ворота NAND. І якщо ви знайомі з булевими логічними та / або логічними воротами, ви також можете знати, що NAND (як і NOR) функціонально завершений , тобто, використовуючи лише NAND, ви можете сконструювати всі інші логічні ворота та решту правди столи. Іншими словами, ви можете створити цілий комп'ютерний чіп, використовуючи лише ворота NAND.

Насправді більшість процесорів (або це було раніше?) Розроблені за допомогою NAND лише тому, що виготовлення дешевше, ніж використання комбінації NAND, NOR та AND, OR тощо.

Виведення інших булевих операторів з NAND

Я б не описував, як зробити всі булеві оператори, лише ворота NOT і AND, решту ви можете знайти десь ще.

Враховуючи оператор NAND, ми можемо побудувати ворота NOT:

Given one input B
O = NAND(B, B)
Output O

Враховуючи оператор NAND і NOT, ми можемо побудувати ворота AND:

Given two inputs B1, B2
C = NAND(B1, B2)
O = NOT(C) // or NAND(C,C)
Output O

Ми можемо побудувати інші логічні ворота аналогічним чином. Оскільки NAND-шлюз функціонально повний , можливо також побудувати логічні ворота з більш ніж 2 входами і більше 1 виводу, я не збираюся обговорювати, як тут будувати такі логічні ворота.

Просвітницький вік

Побудова машини Тюрінга від Булевих воріт

Процесор є лише більш складною версією машини Тьюрінга. Реєстри процесора - це внутрішній стан машини Тьюрінга, а оперативна пам'ять - стрічка машини Тьюрінга.

Машина Тьюрінга (ЦП) може робити три речі:

  • читати 0 або 1 зі стрічки (читати комірку пам'яті з ОЗУ)
  • змінити свій внутрішній стан (змінити регістри)
  • рухатися вліво або вправо (читати кілька позицій з ОЗУ)
  • записати 0 або 1 на стрічку (записати в комірку пам'яті в оперативну пам'ять)

З цією метою ми будуємо 2-державну машину Тьюрінга Wolfram, використовуючи комбінаторну логіку (сучасні процесори використовуватимуть мікрокод, але вони складніші, ніж це потрібно для нашої мети).

Державна таблиця (2,3) машини Тюрінга Вольфрама така:

    A       B
0   P1,R,B  P2,L,A
1   P2,L,A  P2,R,B
2   P1,L,A  P0,R,A

Ми хочемо перекодувати вищезгадану таблицю стану як таблицю правдивості:

Let I1,I2 be the input from the tape reader (0 = (0,0), 1 = (0,1), 2 = (1,0))
Let O1,O2 be the tape writer (symbol encoding same as I1,I2)
Let M be connected to the machine's motor (0 = move left, 1 = move right)
Let R be the machine's internal state (A = 0, B = 1)
(R(t) is the machine's internal state at timestep t, R(t+1) at timestep t+1)
(Note that we used two input and two outputs since this is a 3-symbol Turing machine.)

      R  0          1
I1,I2
(0,0)    (0,1),1,1  (1,0),0,0
(0,1)    (1,0),0,0  (1,0),1,1
(1,0)    (0,1),0,0  (0,0),1,0

The truth table for the state table above:

I1  I2  R(t) | O1  O2  M   R(t+1)
-------------+--------------------
0   0   0    | 0   1   1   1
0   0   1    | 1   0   0   0
0   1   0    | 1   0   0   0
0   1   1    | 1   0   1   1
1   0   0    | 0   1   0   0
1   0   1    | 0   0   1   0

Я не збираюся будувати такий логічний воріт (я не впевнений, як намалювати його в SE і, мабуть, це буде досить величезно), але оскільки ми знаємо, що ворота NAND функціонально завершені , то у нас є спосіб знайти серію воріт NAND, які реалізують цю таблицю істинності.

Важливою властивістю машини Тьюрінга є те, що можна емулювати комп'ютер із збереженою програмою за допомогою машини Тьюрінга, у якої є лише фіксована таблиця станів. Отже, будь-яка універсальна машина Тьюрінга може читати свою програму з стрічки (ОЗУ) замість того, щоб її інструкція була жорстко закодована у внутрішню таблицю стану. Іншим словом, наша (2,3) машина Turing може читати її вказівки з штифтів I1, I2 (як програмне забезпечення), замість того, щоб їх жорстко кодували в реалізації логічних воріт (як апаратні засоби).

Мікрокоди

Через зростаючу складність сучасних процесорів стає надзвичайно важко використовувати комбінаторну логіку лише для розробки цілого процесора. Сучасний процесор зазвичай розроблений як інтерпретатор інструкцій мікрокодів; мікрокод - це невелика програма, вбудована в процесор, яка використовується процесором для інтерпретації фактичного машинного коду. Сам цей інтерпретатор мікрокодів, як правило, розроблений з використанням комбінаторної логіки.

Реєстрація, кеш і оперативна пам’ять

Ми щось забули вище. Як ми щось запам’ятали? Як ми реалізуємо стрічку та оперативну пам’ять? Відповідь - в електронному компоненті під назвою Конденсатор. Конденсатор - це як акумуляторна батарея, якщо конденсатор заряджений, він збереже зайві електрони, а також може повернути електрони в схему.

Щоб записати в конденсатор, ми заповнюємо конденсатор електроном (записуємо 1) або зливаємо всі електрони в конденсатор, поки він не порожній (запиши 0). Щоб прочитати значення конденсатора, ми спробуємо розрядити його. Якщо ми намагаємось розрядитись, не протікає електрика, то конденсатор порожній (читаємо 0), але якщо ми виявляємо електрику, то конденсатор повинен бути заряджений (читати 1). Ви можете помітити, що зчитування конденсатора зливає його електронний запас, сучасні оперативні пам’яті мають схему періодично перезаряджати конденсатор, щоб вони могли зберігати свою пам’ять, доки є електрика.

Існує кілька типів конденсаторів, які використовуються в процесорі, регістри процесора і кеші CPU вищого рівня виготовляються за допомогою дуже швидкісних "конденсаторів", які фактично побудовані з транзисторів (тому "відставання" для читання / запису з майже немає їх), вони називаються статичною ОЗУ (SRAM); в той час як основна оперативна пам’ять оперативної пам'яті виробляється з використанням меншої потужності, але повільніших і значно дешевших конденсаторів, вони називаються динамічною оперативною пам'яттю (DRAM).

Годинник

Дуже важливою складовою процесора є годинник. Годинник - це компонент, який "тикає" регулярно, щоб синхронізувати обробку. Годинник, як правило, містить кварц або інші матеріали з добре відомим і відносно постійним періодом коливань, а схема годинника підтримує та вимірює це коливання, щоб підтримувати своє відчуття часу.

Операції з процесором виконуються між тактовими годинниками, а читання / запис проводиться в галочках, щоб забезпечити, що всі компоненти рухаються синхронно і не топчуться один одного, перебуваючи в проміжних станах. У нашій (2,3) машині Тьюрінга між годинниковими кліщами електрика проходить через логічні ворота для обчислення виходу з входу (I1, I2, R (t)); а в годинникових галочках магнітофон записує на стрічку O1, O2, мотор рухатиметься залежно від значення M, а внутрішній регістр записується від значення R (t + 1), потім зчитувач стрічки буде читати поточну стрічку і заряджати в I1, I2, і внутрішній реєстр буде перечитаний назад до R (t).

Розмова з периферією

Зверніть увагу, як (2,3) машина Тьюрінга взаємодіє зі своїм двигуном. Це дуже спрощене уявлення про те, як процесор може взаємодіяти з довільним обладнанням. Довільне обладнання може слухати або записувати на певний провід для входів / виходів. Що стосується (2,3) машини Тюрінга, її інтерфейс з двигуном - це лише один провід, який дає змогу двигуну повертатись за годинниковою або проти годинникової стрілки.

Що залишається невимовленим у цій машині, це те, що Мотор повинен був мати ще один «годинник», який працює синхронно з внутрішнім «годинником» машини, щоб знати, коли запустити та припинити працювати, тому це приклад синхронної передачі даних . Інша поширена альтернатива, асинхронна передача використовує інший провід, який називається лінією переривання, для передачі точок синхронізації між процесором та асинхронним пристроєм.

Цифрова епоха

Код машини та складання

Мова складання - це людська читальна мнемоніка для машинних кодів. У найпростішому випадку - однозначне відображення між збіркою та машинним кодом; хоча в сучасних мовах складання деякі інструкції можуть відображатись до декількох опкодів.

Мова програмування

Ми всі з цим знайомі, чи не так?


Phew, нарешті, закінчив, я все це набрав всього за 4 години, тому я впевнений, що десь є помилка (я в першу чергу програміст, а не інженер-електрик і не фізик, тому може бути кілька речей, які явно неправильно). Якщо ви знайшли помилку, не соромтесь надіслати @yell або виправити його самостійно, якщо у вас є представник або створити додаткову відповідь.


37
" чудовий " не робить це справедливістю. Ця відповідь позитивно героїчна .
njd

1
Хіба атоми не є неправильними? Як правило, вони будуть іонізуватися, утворюючи заряджені атоми, а не залишатись нейтральними для того, щоб мати повну зовнішню підклітину.
альтернатива

3
+1, +1000, якщо я міг. Що мене по-справжньому дивує, і чому я люблю цю сферу, - це те, що велика широта інформації у цій відповіді навіть ледве не починає дряпати поверхню дивовижної глибини технології, яка змушує роботу сучасного ПК.
квентин-зірін

Святе гімно. Це круто. Мені б хотілося, щоб я міг зробити більше, ніж здійснити надбавку один раз.
Роб П.

3
+1, хоча я думаю, що слід зазначити, що сучасне обладнання не робиться точно через ворота NAND. Так, є ворота, але вони дійсно досить складні і мають лише (зазвичай) приблизну логіку NAND; обмеження в значній мірі фізичні. Фізичні ворота спочатку збираються в логічні модулі, які можуть бути класичним NAND, але, як правило, набагато більше (наприклад, фліп-флоп або наполовину суматор). Точний набір дозволених воріт залежить від логічного стилю, який використовується, та обмежень, що виробляються у виробництві; не кожен фаб може все створити. (Aaargh! Я починаю пам’ятати деталі! Допомога!)
стипендіати

12

Від Нанду до тетрісу в 12 кроків

Я думаю, що це буде абсолютно ідеально для вас:

Від Нанду до тетрісу в 12 кроків


дякую за посилання, переглядаючи його зараз. Чи є центральний індекс цих переговорів, чи вам просто траплялося десь побачити цей блог?
поштовх

Я не впевнений, це конкретно з'явилося, коли я займався серфінгом одного дня
Darknight

Він пропустив 13-й крок - кремнієві вафлі.
Робота

дякую за публікацію! Це, в основному, підсумок навчального курсу курсу, який автор розмов у відео лекціях IDC в ​​Ізраїлі, і заснований на його книзі - я розмістив посилання на книгу у своїй відповіді.
littleadv

Чи є цей сайт тим самим матеріалом? Тому що схоже, що це набагато краще організовано, ніж просто одне велике відео nand2tetris.org
jhocking

10

Якщо ви виконали збірку, для розуміння залишається лише два-три шари:

  • Логічні ворота , як логіка реалізується за допомогою переміщення електронів - тут це стає питанням електроніки
  • Дизайн процесора та системи, який складається з логічних воріт для формування процесора та підключення до оперативної пам'яті та периферійних пристроїв. Сучасні процесори надзвичайно складні, але для вашого бажання зрозуміти, як все в основному працює, слід досить переглянути класичний простий процесор, як Z80 .
  • Мікрокод - це те, як інтерпретуються інструкції по збірці та перетворюються на апаратні рівні регістрів та логічних схем.

Останній (Microcode) - це те, що змусило мене «натиснути», оскільки воно заповнило проміжок між електронікою та кодом.


Можливо, саме мікрокод мені не вистачає. Я брав заняття з логічних воріт та дизайну процесора / системи, запрограмований у збірці та дізнався про все, що стосується бінарних команд (і це було добре у всіх цих класах), але я все одно не міг сказати вам, як чорт все це поєднується. Мені доведеться дослідити мікрокод.
Кейсі Паттон

@Casey: цілком можливо, що це дійсно те, чого ти не вистачає. Для мене, вивчення (та написання деяких) мікрокодів було саме там, де я хоч: ОК, тепер я розумію, як працюють комп'ютери. Звичайно, вони стали настільки складними, що ви все ще можете легко зіткнутися з ситуаціями, які здаються неможливими для розуміння, але я впевнений, що будь-яку таку ситуацію можна зрозуміти, якщо ви компетентні, наполегливі та вкладаєте достатньо часу.
Майкл Боргвардт

7

Приклад навчальної програми для бакалавратів CS, яка пояснює саме те, про що ви запитували, можна знайти тут (IDC.AC.IL курс CS101) . Він заснований на цій книзі MIT Press: " Елементи обчислювальних систем: побудова сучасного комп'ютера за першими принципами ".


1
+1 за згадування "Елементи обчислювальних систем". Це чудова книга, і вона повинна точно відповідати на питання "Як працюють комп'ютери?".
Седрік

Ви б не хотіли пояснити докладніше, чим займаються ці ресурси, і чому ви рекомендуєте їх відповідати на поставлене запитання? "Відповіді лише на посилання" не дуже вітаються на біржі стеків
gnat

7

Щоб повністю відповісти на це питання, знадобиться ціла книга. На щастя, хтось уже написав цю книгу. Він називається Код: прихована мова комп'ютерного обладнання та програмного забезпечення Чарльза Петцольда Це дуже інформативне і дуже цікаве читання.


1
+1, просто Ctrl-F для "Petzold" приносить відповідь, я був майже впевнений, що там;)
mlvljr

4

Я високо рекомендую Код Чарльза Петцольда. Книга є і уроком історії, і технічним оглядом того, як побудувати комп’ютер. Починаючи з пояснення простих телеграфних комутаторів, книга демонструє, як працюють транзистори, потім до логічних воріт, програмованого комп’ютера, до складніших речей. Його також дуже добре написано і, можливо, його може зрозуміти будь-хто з достатньою цікавістю.


3

Перерахувати все, що вам, можливо, знадобиться, щоб отримати достатнє розуміння того, що вам потрібно знати, буде дуже важко (і довго!). Відома книга, яка насправді відповідає на всі ці питання, створена від Ендрю Таненбаума: Структурована комп'ютерна організація .

Ця книга насправді веде вас від фізичного комп’ютера на вашому столі аж до логічних воріт та булевої алгебри, а потім показує приклад архітектури, який допоможе вам простежити, як все насправді відбувається в такій системі.

(Одна примітка: це дуже дорого, оскільки це ~ 800 сторінок. Напевно, добре просто придбати б / у версію або старішу версію. Концепції не змінилися.)


2

Ну, потрібно багато кульок, щоб сказати це і запитати, я здогадуюсь.

Значно код зменшується все далі і далі, до складнішого коду нижчого рівня. До коду рівня складання з регістрами натискання та переміщення .. тощо.

Потім апаратне забезпечення приймає цей код і діє на нього. У більшості випадків апаратні засоби фактично матимуть власні інструкції щодо того, як робити справи. Тож може бути проста інструкція, така як PUSH, де реєстр (місце пам'яті) отримує таке значення, як 1 або 2 або будь-яке інше ..

Це, безумовно, питання комп’ютера. А також програмування. Деякі програмісти програмують обладнання, яке візьме ваш код і змусить його робити щось, хоча і на дуже низькому рівні. Це також питання електроніки.


1

Є пристрої.

Потім є драйвери пристроїв, які взаємодіють із цими пристроями. Частина написана на С, частина в складі, як правило.

Операційна система взаємодіє з прикладним програмним забезпеченням на одному кінці та драйверами пристроїв на іншому для спілкування з фактичним обладнанням.

Якщо вас справді цікавить, чому б не зробити злом ядра Linux, щоб дізнатися більше?


Дякую за вашу відповідь та пропозицію. Це звучить як чудова ідея!
Роб П.

1

В основі речей це питання електроніки, хоча основи цього повинні були бути висвітлені в курсі опитування для будь-якого ступеня CS. Всі апаратні засоби засновані на воротах, запрограмованих в ньому на рівні компонентів. Це найосновніші логічні операції: NOT, AND, OR, XOR, NAND, NOR. Кожна брама має певну функцію:

Блок NOT приймає одне вхідне значення і виробляє одне вихідне значення, він отримує 0 або 1 і виводить протилежне.

І затвор приймає два вхідних значень і виробляє один вихідне значення, він отримує будь-яку комбінацію з 0 і 1 , і виводить 0 для будь-якої комбінації , за винятком два з них, для яких вона виводить 1.

АБО воріт працює так само, як І - воріт, але буде виробляти 1 для кожної комбінації 0 і 1 він отримує , крім двох нулів, для яких він виводить 0.

XOR ворота знову аналогічні як І і АБО ворота, але він буде виробляти 0 , коли обидва входи є однаковими, і 1 , коли обидва входи різні.

NAND затвор є логічною протилежністю логічного елемента і нори коміром є логічною протилежністю логічного елемента АБО.

Іншими словами, на апаратному рівні все зводиться до найосновніших бінарних логічних виразів. Все інше - це лише перехід від вищого рівня програмування до нижчого, поки він не досяг цього останнього шару.


+1 Наступний рівень - як зробити послідовну поведінку з цими логічними воротами. Ключовим компонентом є триггер . Зберіть логічні ворота, щоб створити ALU, якийсь триггер для регістрів, годинник, і ви отримаєте процесор.
mouviciel

@mouviciel Ви забули мультиплексори.
starblue

1

Що стосується перетворення програми на мову високого рівня в машинні інструкції, будь-яка книга-компілятор повинна заповнити рахунок. Наприклад, книга дракона .

Для частини про те, як виконуються інструкції? Організація та дизайн комп'ютера: Апаратно-програмний інтерфейс повинен заповнити рахунок.


1

Хоча я вважаю приголомшливим, що хтось може закінчити курс CS, не розуміючи апаратного забезпечення, я вважаю, що цілком можливо, що курс міг би зосередитися лише на теорії як галузі математики, а не на деталях інженерії та впровадження. Поважні SICP лекції (зданих в 1980 - х роках) , здавалося б , як це.

На моєму курсі CS два десятиліття тому в перший рік було прочитано більш раннє видання " Комп'ютери: від логіки до архітектури" .
Щось подібне повинно заповнити прогалини.

Крім того, у відкритому курсі MIT має бути щось, що допоможе.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.