Я почну з найнижчого рівня, який може бути релевантним (я можу почати з ще нижчого рівня, але вони, мабуть, занадто неактуальні), починаючи від 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 або виправити його самостійно, якщо у вас є представник або створити додаткову відповідь.