Jak działają komputery? [Zamknięte]


59

To prawie krępujące pytanie ... Mam dyplom z informatyki (i drugi w toku). Pracuję jako pełnoetatowy programista .NET od prawie pięciu lat. Generalnie wydaje mi się kompetentny w tym, co robię.

Ale nie wiem, jak działają komputery!

Proszę, zostań ze mną na chwilę. Szybkie Google zatytułowane „Jak działa komputer” przyniesie wiele wyników, ale starałem się znaleźć taki, który naprawdę odpowiedziałby na to, czego szukam. Zdaję sobie sprawę, że jest to ogromne, ogromne pytanie, więc naprawdę, jeśli możesz podać mi jakieś słowa kluczowe lub jakiś kierunek.

Wiem, że są komponenty ... zasilacz, płyta główna, RAM, procesor itp. ... i rozumiem, co robią. Ale tak naprawdę nie rozumiem, jak wychodzisz z wiersza kodu, takiego jak Console.Readline().NET (lub Java lub C ++), i mam to do zrobienia .

Jasne, jestem niejasno świadomy MSIL (w przypadku .NET) i że pewna magia dzieje się z kompilatorem JIT i zamienia się on w natywny kod (tak myślę). Powiedziano mi, że Java jest podobna, a C ++ odcina środkowy krok.

Zrobiłem trochę montażu na komputerze mainframe, to było kilka lat temu. Pamiętam, że było kilka instrukcji i kilka rejestrów procesora, i napisałem kod ... a potem nastąpiła magia ... i mój program zadziałałby (lub zawiesił się). Z tego, co rozumiem, „emulator” symulowałby to, co dzieje się, gdy wywołasz instrukcję, i aktualizowałby rejestry procesora; ale co sprawia, że ​​te instrukcje działają tak, jak działają?

Czy to zmienia się w pytanie o elektronikę, a nie pytanie o komputer? Zgaduję, że nie ma żadnego praktycznego powodu, aby to zrozumieć, ale czuję, że powinienem być w stanie.

(Tak, dzieje się tak, gdy spędzasz dzień z małym dzieckiem. Zajmuje im to około 10 minut i pięć powtórzeń pytania „Dlaczego?”, Abyś zdał sobie sprawę, ile nie wiesz)



20
Polecam Code autorstwa Charlesa Petzolda

To nie jest Emulator. Jest to garść prawdziwych obwodów półprzewodnikowych z setkami (tysiącami) przewodów wejściowych i wyjściowych oraz miliardami bramek logicznych. Został Emulatoron wykorzystany wyłącznie w celach instruktażowych.
rwong

1
Myślę, że tytuł powinien zostać zmieniony, aby był bardziej szczegółowy / informacyjny. To właściwie bardzo przydatne pytanie, ale na pierwszy rzut oka wygląda zupełnie niedorzecznie, tak jak pierwotnie zadawało małe dziecko. Zmień to na coś w rodzaju „w jaki sposób polecenia oprogramowania wysokiego poziomu łączą się z odpowiedziami sprzętu niskiego poziomu?”
jhocking

2
Cześć Rob, jak to teraz sformułowano, jest beznadziejnie szeroki i szybko zamienił się w pytanie o rekomendacje książek i długą dyskusję: których nie chcemy tutaj. Jeśli możesz bardziej skoncentrować się i zapytać o konkretny problem, z którym się obecnie mierzysz, możesz o to zapytać.

Odpowiedzi:


139

Zacznę od najniższego poziomu, który może być istotny (mogę zacząć od jeszcze niższego poziomu, ale prawdopodobnie są one zbyt mało istotne), począwszy od Atomu, przez elektryczność, do tranzystorów, bramek logicznych, do układów scalonych (chip / procesor) ) i kończy się na Zgromadzeniu (zakładam, że znasz wyższe poziomy).

Na początku

Atom

Atom jest strukturą złożoną z elektronów, protonów i neutronów (które same składają się z cząstek elementarnych ). Najciekawszą częścią atomu dla komputerów i elektroniki są elektrony, ponieważ elektron jest mobilny (tzn. Może poruszać się stosunkowo łatwo, w przeciwieństwie do protonów i neutronów, które są trudniejsze do poruszania się) i mogą one same unosić się swobodnie, nie będąc w środku atom.

Zwykle każdy atom ma taką samą liczbę protonów i elektronów, nazywamy to stanem „neutralnym”. Tak się składa, że ​​atom może stracić lub zyskać dodatkowe elektrony. Mówi się, że atomy w tym niezrównoważonym stanie są odpowiednio atomem „naładowanym dodatnio” (więcej protonu niż elektrony) i atomem „naładowanym ujemnie” (więcej elektronu niż protonu).

Elektrony są nie do zbudowania i niezniszczalne (nie w mechanice kwantowej, ale nie ma to znaczenia dla naszych celów); więc jeśli atom traci elektron, jakiś inny atom w pobliżu musiał otrzymać dodatkowe elektrony lub elektron musiał uwolnić się w swobodnym swobodnym elektronie, i odwrotnie, ponieważ elektron jest niemożliwy do zbudowania, aby uzyskać dodatkowy elektron, atom musiał wyssać go z pobliskich atomów lub z swobodnego swobodnego elektronu. Mechanika elektronów jest taka, że ​​jeśli w pobliżu dodatnio naładowanego atomu znajduje się ujemnie naładowany atom, wówczas niektóre elektrony będą migrować, aż oba atomy będą miały taki sam ładunek.

Elektryczność

Elektryczność to po prostu przepływ elektronów z obszaru o bardzo dużej liczbie ujemnie naładowanych atomów do obszaru o bardzo dużej liczbie dodatnio naładowanych atomów. Pewne reakcje chemiczne mogą stworzyć sytuację, w której mamy jeden węzeł z dużą ilością ujemnie naładowanych atomów (zwany „anodą”), a drugi węzeł z dużą ilością dodatnio naładowanych atomów (zwany „katodą”). Jeśli połączymy drutem dwa przeciwnie naładowane węzły, masy elektronów przepłyną od anody do katody, a przepływ ten nazywamy „prądem elektrycznym”.

Nie wszystkie druty mogą przenosić elektrony równie łatwo, elektrony płyną znacznie łatwiej w materiałach „przewodzących” niż w materiałach „odpornych”. Materiał „przewodzący” ma niski opór elektryczny (np. Druty miedziane w kablach), a materiał „odporny” ma wysoką rezystancję elektryczną (np. Gumowa izolacja kabla). Niektóre interesujące materiały nazywane są półprzewodnikami (np. Silikony), ponieważ mogą one łatwo zmieniać swoją rezystancję, w pewnych warunkach półprzewodnik może działać jako przewodnik, aw innych warunkach może przekształcić się w rezystor.

Elektryczność zawsze woli przepływać przez materiał o najmniejszym oporze, więc jeśli katoda i anoda są połączone dwoma drutami, jeden o bardzo wysokiej rezystancji, a drugi o bardzo niskiej rezystancji, większość elektronów przepłynie przez kabel o niskiej rezystancji i prawie żaden nie przepływa przez materiał o wysokiej odporności.

Wiek średni

Przełączniki i tranzystory

Przełączniki / przerzutniki są jak zwykłe włączniki światła, między dwoma kawałkami drutu można umieścić przełącznik, aby odciąć i / lub przywrócić przepływ prądu. Tranzystory działają dokładnie tak samo, jak włącznik światła, z tym wyjątkiem, że zamiast fizycznie podłączać i odłączać przewody, tranzystor łączy / odłącza przepływ prądu, zmieniając jego rezystancję w zależności od tego, czy w węźle bazowym jest prąd, i, jak można się już domyślić / Wiem, tranzystory są wykonane z półprzewodników, ponieważ możemy zmienić półprzewodnik, aby stał się rezystorem lub przewodnikiem do łączenia lub odłączania prądów elektrycznych.

Jeden wspólny typ tranzystora, NPN Bipolar Junction Transistor (BJT), ma trzy węzły: „podstawowy”, „kolektor” i „emiter”. W NPN BJT energia elektryczna może przepływać z węzła „emitera” do węzła „kolektora” tylko wtedy, gdy węzeł „bazy” jest naładowany. Gdy węzeł podstawowy nie jest naładowany, praktycznie żaden elektron nie może przepływać, a gdy węzeł podstawowy jest naładowany, wówczas elektrony mogą przepływać między emiterem a kolektorem.

Zachowanie tranzystora

(Gorąco sugeruję przeczytanie tego przed kontynuowaniem, ponieważ może to wyjaśnić lepiej niż ja dzięki interaktywnej grafice)

Załóżmy, że mamy tranzystor podłączony do źródła elektrycznego u podstawy i kolektora, a następnie podłączamy kabel wyjściowy w pobliżu jego kolektora (patrz rysunek 3 w http://www.spsu.edu/cs/faculty/bbrown/web_lectures / tranzystory / ).

Kiedy przykładamy energię elektryczną do bazy lub kolektora, wówczas nie może ona w ogóle przepłynąć, ponieważ nie ma elektryczności, o której można by mówić:

B   C  |  E   O
0   0  |  0   0

Kiedy przykładamy elektryczność do kolektora, ale nie do podstawy, elektryczność nie może przepłynąć do emitera, ponieważ podstawa staje się materiałem o wysokiej rezystancji, więc elektryczność ucieka do drutu wyjściowego:

B   C  |  E   O
0   1  |  0   1

Kiedy przykładamy energię elektryczną do podstawy, ale nie do kolektora, również energia elektryczna nie może przepływać, ponieważ nie ma różnicy w ładunku między kolektorem a emiterem:

B   C  |  E   O
1   0  |  0   0

Kiedy przykładamy elektryczność zarówno do podstawy, jak i do kolektora, dostajemy elektryczność przepływającą przez tranzystor, ale ponieważ tranzystor ma teraz niższy opór niż drut wyjściowy, prawie żaden prąd nie przepływa przez drut wyjściowy:

B   C  |  E   O
1   1  |  1   O

Bramki logiczne

Kiedy podłączamy emiter jednego tranzystora (E1) do kolektora innego tranzystora (C2), a następnie podłączamy wyjście w pobliżu podstawy pierwszego tranzystora (O) (patrz rysunek 4 w http://www.spsu.edu / cs / faculty / bbrown / web_lectures / tranistors / ), wtedy dzieje się coś ciekawego. Powiedzmy również, że zawsze przykładamy prąd do kolektora pierwszego tranzystora (C1), więc bawimy się tylko podstawowymi węzłami tranzystorów (B1, B2):

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

Podsumujmy tabelę, aby zobaczyć tylko B1, B2 i O:

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

I oto , jeśli znasz Boolean Logic i / lub Logic Gates, powinieneś zauważyć, że jest to dokładnie brama NAND. A jeśli znasz Boolean Logic i / lub Logic Gates, możesz również wiedzieć, że NAND (jak również NOR) jest funkcjonalnie kompletny , tj. Używając tylko NAND, możesz skonstruować wszystkie pozostałe bramki logiczne i resztę prawdy stoły Innymi słowy, możesz zaprojektować cały układ komputerowy przy użyciu samych bramek NAND.

W rzeczywistości większość procesorów jest (czy była kiedyś?) Projektowana przy użyciu tylko NAND, ponieważ jest tańsza w produkcji niż przy użyciu kombinacji NAND, NOR, AND, OR itp.

Pozyskiwanie innych operatorów logicznych z NAND

Nie opisałbym, jak zrobić wszystkie operatory logiczne, tylko bramkę NOT i AND, resztę można znaleźć gdzie indziej.

Biorąc pod uwagę operator NAND, możemy zbudować bramę NOT:

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

Biorąc pod uwagę operator NAND i NOT, możemy zbudować bramkę AND:

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

W podobny sposób możemy zbudować inne bramki logiczne. Ponieważ bramka NAND jest funkcjonalnie ukończona , możliwe jest również zbudowanie bramek logicznych z więcej niż 2 wejściami i więcej niż 1 wyjściem, dlatego nie zamierzam tutaj omawiać, jak zbudować takie bramki logiczne.

Wiek oświecenia

Budowanie maszyny Turinga z Boolean Gates

Procesor to po prostu bardziej skomplikowana wersja maszyny Turinga. Rejestry procesora to stan wewnętrzny maszyny Turinga, a pamięć RAM to taśma maszyny Turinga.

Maszyna Turinga (CPU) potrafi trzy rzeczy:

  • odczytać 0 lub 1 z taśmy (odczytać komórkę pamięci z RAM)
  • zmień jego stan wewnętrzny (zmień jego rejestry)
  • przesuń w lewo lub w prawo (odczyt wielu pozycji z pamięci RAM)
  • zapisz 0 lub 1 na taśmie (napisz do komórki pamięci do RAM)

W naszym celu budujemy 2-stanową 3-symbolową maszynę Turinga Wolframa z wykorzystaniem logiki kombinatorycznej (nowoczesne procesory wykorzystywałyby mikrokod, ale są one bardziej złożone niż jest to konieczne do naszych celów).

Tabela stanu maszyny Turinga Wolframa (2,3) jest następująca:

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

Chcemy ponownie zakodować powyższą tabelę stanów jako tabelę prawdy:

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

Tak naprawdę nie zamierzam budować takiej bramki logicznej (nie jestem pewien, jak narysować ją w SE i prawdopodobnie będzie dość duża), ale ponieważ wiemy, że brama NAND jest funkcjonalnie ukończona , więc mamy sposób znaleźć serię bramek NAND, które wdrożą tę tabelę prawdy.

Ważną właściwością maszyny Turinga jest to, że można emulować komputer z programem przechowywanym za pomocą maszyny Turinga, która ma tylko stałą tabelę stanów. Dlatego dowolna uniwersalna maszyna Turinga może odczytać swój program z taśmy (RAM) zamiast konieczności zapisywania instrukcji w wewnętrznej tabeli stanów. Innymi słowy, nasza (2,3) maszyna Turinga może odczytać instrukcje z pinów I1, I2 (jako oprogramowanie) zamiast być zakodowana na stałe w implementacji bramki logicznej (jako sprzęt).

Mikrokody

Z powodu rosnącej złożoności współczesnych procesorów, zbyt trudne staje się używanie samej logiki kombinatorycznej do projektowania całego procesora. Współczesny procesor jest zwykle zaprojektowany jako interpreter instrukcji mikrokodów; mikrokod to mały program osadzony w CPU, który jest wykorzystywany przez CPU do interpretacji rzeczywistego kodu maszynowego. Ten interpreter mikrokodu jest na ogół zaprojektowany przy użyciu logiki kombinatorycznej.

Zarejestruj się, pamięć podręczna i pamięć RAM

Zapomnieliśmy czegoś powyżej. Jak coś pamiętamy? Jak wdrażamy taśmę i pamięć RAM? Odpowiedź znajduje się w elemencie elektronicznym o nazwie Kondensator. Kondensator jest jak akumulator, który po naładowaniu zachowa dodatkowe elektrony i może również zwrócić elektrony do obwodu.

Aby zapisać na kondensatorze, wypełniamy kondensator elektronem (zapis 1) lub drenujemy wszystkie elektrony w kondensatorze, aż będzie pusty (zapis 0). Aby odczytać wartość kondensatora, staramy się go rozładować. Jeśli, gdy próbujemy rozładować, nie przepływa prąd, wówczas kondensator jest pusty (odczyt 0), ale jeśli wykryjemy prąd, wówczas kondensator musi zostać naładowany (odczyt 1). Można zauważyć, że odczyt kondensatora wyczerpuje jego magazyn elektronów, nowoczesne pamięci RAM mają układ okresowego ładowania kondensatora, aby mogli zachować pamięć tak długo, jak długo jest prąd.

Istnieje wiele rodzajów kondensatorów używanych w procesorze, rejestry procesora i pamięci podręczne procesora wyższego poziomu są tworzone przy użyciu bardzo szybkich „kondensatorów”, które faktycznie są zbudowane z tranzystorów (dlatego prawie nie ma „opóźnienia” do odczytu / zapisu z im), nazywane są statyczną pamięcią RAM (SRAM); podczas gdy główna pamięć RAM jest wykonana przy użyciu mniejszej mocy, ale wolniejszych i znacznie tańszych kondensatorów, są one nazywane dynamiczną pamięcią RAM (DRAM).

Zegar

Bardzo ważnym elementem procesora jest zegar. Zegar to składnik, który „tyka” regularnie w celu synchronizacji przetwarzania. Zegar zazwyczaj zawiera kwarc lub inne materiały o dobrze znanym i stosunkowo stałym okresie oscylacji, a zespół zegarowy utrzymuje i mierzy tę oscylację, aby zachować swoje poczucie czasu.

Operacje procesora są wykonywane między taktami zegara, a tykania odczytywania / zapisywania są wykonywane w taktach, aby zapewnić, że wszystkie komponenty poruszają się synchronicznie i nie depczą do siebie w stanie pośrednim. W naszej (2,3) maszynie Turinga między tyknięciami zegara prąd przepływa przez bramki logiczne, aby obliczyć moc wyjściową (I1, I2, R (t)); a w tyknięciach zegara zapisujący taśmę zapisze O1, O2 na taśmie, silnik będzie poruszał się w zależności od wartości M, a rejestr wewnętrzny jest zapisywany z wartości R (t + 1), a następnie czytnik taśm odczyta bieżącą taśmę i włoży ładunek do I1, I2, a rejestr wewnętrzny zostanie ponownie odczytany z powrotem do R (t).

Rozmowa z urządzeniami peryferyjnymi

Zwróć uwagę, w jaki sposób (2,3) maszyna Turinga współpracuje z silnikiem. Jest to bardzo uproszczony widok tego, w jaki sposób procesor może współpracować z dowolnym sprzętem. Arbitralny sprzęt może nasłuchiwać lub zapisywać na określonym przewodzie dla wejść / wyjść. W przypadku maszyny Turinga (2,3) jej interfejs z silnikiem jest tylko pojedynczym drutem, który instruuje silnik, aby obrócił się w prawo lub w lewo.

W tej maszynie nie zostało powiedziane, że silnik musiał mieć inny „zegar”, który działa synchronicznie z wewnętrznym „zegarem” maszyny, aby wiedzieć, kiedy rozpocząć i zatrzymać pracę, więc jest to przykład synchronicznej transmisji danych . Druga powszechnie stosowana alternatywna transmisja asynchroniczna wykorzystuje inny przewód, zwany linią przerwania, do komunikacji punktów synchronizacji między CPU a urządzeniem asynchronicznym.

Era cyfrowa

Kod maszynowy i montaż

Język asemblera to czytelny dla człowieka mnemonik kodów maszynowych. W najprostszym przypadku istnieje odwzorowanie jeden na jeden między zestawem a kodem maszynowym; chociaż w nowoczesnych językach asemblerowych niektóre instrukcje mogą być mapowane na wiele kodów operacyjnych.

Język programowania

Wszyscy wiemy, czyż nie?


Uff, w końcu skończyłem, napisałem to wszystko w zaledwie 4 godziny, więc jestem pewien, że gdzieś jest błąd (jestem przede wszystkim programistą, a nie inżynierem elektrykiem ani fizykiem, więc może być kilka rzeczy, które są rażąco złe). Jeśli znajdziesz błąd, nie wahaj się dać @yell lub naprawić go samodzielnie, jeśli masz przedstawiciela lub udzielisz uzupełniającej odpowiedzi.


37
niesamowite ” nie oddaje sprawiedliwości. Ta odpowiedź jest pozytywnie heroiczna .
njd

1
Czy część atomów nie jest niepoprawna? Zasadniczo będą one jonizować, tworząc naładowane atomy, a nie pozostać neutralne, aby uzyskać pełną powłokę zewnętrzną.
alternatywny

3
+1, +1000, gdybym mógł. To, co naprawdę mnie zaskakuje i dlaczego uwielbiam tę dziedzinę, polega na tym, że ogromna ilość informacji w tej odpowiedzi nawet nie zaczyna drapać powierzchni niesamowitej głębi technologii, która sprawia, że ​​nowoczesny komputer działa.
quentin-starin

O kurczę. To cudownie. Chciałbym móc zrobić więcej niż jednomyślnie.
Rob P.

3
+1, chociaż uważam, że powinienem zauważyć, że nowoczesny sprzęt nie jest dokładnie wykonywany za pośrednictwem bramek NAND. Są bramki, tak, ale są naprawdę dość złożone i tylko (zwykle) przybliżona logika NAND; ograniczenia są prawie fizyczne. Fizyczne bramki są najpierw składane w moduły logiczne, które mogą być klasycznym NAND, ale zwykle są raczej większe (np. Flip-flop lub pół-sumator). Dokładny zestaw dozwolonych bramek zależy od zastosowanego stylu logiki i ograniczeń zakładu produkcyjnego; nie każdy fab potrafi zbudować wszystko. (Aaargh! Zaczynam zapamiętywać szczegóły! Pomoc!)
Donal Fellows

12

Od Nand do Tetris w 12 krokach

Myślę, że będzie to dla ciebie absolutnie idealne:

Od Nands do Tetris w 12 krokach


dzięki za link, oglądam go teraz. Czy istnieje centralny indeks tych rozmów, czy zdarzyło Ci się gdzieś zobaczyć je na blogu?
jhocking

Nie jestem pewien, ten konkret pojawił się, gdy pewnego dnia
surfowałem

Przegapił 13 stopień - krzemowe płytki.
Job

dzięki za opublikowanie go! Jest to w zasadzie streszczenie sylabusa kursu, który autor wykładów na wykładach wideo w IDC w Izraelu, i opiera się na jego książce - zamieściłem link do książki w mojej odpowiedzi.
littleadv

Czy ta strona to ten sam materiał? Ponieważ wygląda na to, że jest znacznie lepiej zorganizowany niż tylko jeden duży film nand2tetris.org
jhocking 11.03.13

10

Jeśli wykonałeś montaż, to tak naprawdę są tylko dwie lub trzy warstwy do zrozumienia:

  • Bramy logiczne , czyli logika realizowana za pomocą ruchomych elektronów - tutaj staje się to kwestią elektroniki
  • Projektowanie procesora i systemu, czyli w jaki sposób bramki logiczne składają się na procesor i są połączone z pamięcią RAM i urządzeniami peryferyjnymi. Nowoczesne procesory są niezwykle złożone, ale aby zrozumieć, jak to właściwie działa, wystarczy spojrzeć na klasyczny prosty procesor, taki jak Z80 .
  • Mikrokod , czyli sposób interpretacji instrukcji montażu i przekształcenia ich w działania rejestrów i układów logicznych na poziomie sprzętowym.

Ten ostatni (Microcode) sprawił, że „kliknął”, ponieważ wypełnił lukę między elektroniką a kodem.


Może brakuje mi mikrokodu. Brałem udział w bramkach logicznych i projektowaniu procesora / systemu, programowałem w asemblerze i nauczyłem się wszystkiego o komendach binarnych (i dobrze sobie radziłem we wszystkich tych klasach), ale nadal nie mogę powiedzieć, jak do diabła wszystko do siebie pasuje. Będę musiał zbadać mikrokod.
Casey Patton

@Casey: całkiem możliwe, że rzeczywiście tego brakuje. Dla mnie nauka o mikrokodzie (i pisanie go) była dokładnie tam, gdzie myślałem: OK, teraz rozumiem, jak działają komputery. Jasne, stały się tak skomplikowane, że wciąż możesz łatwo wpaść w sytuacje, które wydają się niemożliwe do zrozumienia, ale jestem całkiem przekonany, że każdą taką sytuację można zrozumieć, jeśli jesteś kompetentny, wytrwały i zainwestujesz wystarczająco dużo czasu.
Michael Borgwardt,

7

Przykład sylabusa kursu licencjackiego CS, który dokładnie wyjaśnia, o co prosiłeś, można znaleźć tutaj (kurs IDC.AC.IL CS101) . Opiera się na książce prasowej MIT: „ Elementy systemów obliczeniowych: budowanie nowoczesnego komputera od pierwszych zasad ”.


1
+1 za wzmiankę o „elementach systemów obliczeniowych”. To świetna książka, która powinna dokładnie odpowiedzieć na pytanie „Jak działają komputery?”.
Cedric

czy mógłbyś wyjaśnić więcej o tym, czym zajmują się te zasoby i dlaczego polecasz je jako odpowiedź na zadane pytanie? „Tylko odpowiedzi” nie są mile widziane na Stack Exchange
gnat


4

Bardzo polecam Code Charlesa Petzolda. Książka jest zarówno lekcją historii, jak i przeglądem technicznym budowy komputera. Zaczynając od wyjaśnienia prostych przełączników telegraficznych, książka pokazuje, jak działają tranzystory, a następnie logiczne bramki, programowalny komputer, do bardziej skomplikowanych rzeczy. Jest również bardzo dobrze napisany i prawdopodobnie mógłby go pochwycić każdy, kto ma dość ciekawości.


3

To będzie zbyt trudne (i długie!), Aby wymienić wszystko, co możesz wiedzieć, aby uzyskać wystarczające zrozumienie tego, co musisz wiedzieć. Słynna książka, która faktycznie odpowiada na wszystkie te pytania, pochodzi od Andrew Tanenbaum: Structured Computer Organisation .

Ta książka zabiera cię od fizycznego komputera na biurku do bramek logicznych i algebry logicznej, a następnie pokazuje przykładową architekturę, która poprowadzi cię przez to, jak wszystko dzieje się w takim systemie.

(Jedna uwaga: jest bardzo droga, ponieważ zawiera około 800 stron. Prawdopodobnie dobrze jest kupić wersję z drugiej ręki lub starszą wersję. Pojęcia się nie zmieniły).


2

Cóż, potrzeba dużo piłek, żeby to powiedzieć i chyba tak.

Kod jest coraz bardziej redukowany do bardziej skomplikowanego kodu niższego poziomu. W dół do kodu poziomu zestawu z rejestrami push i move ... itd ...

Następnie sprzęt pobiera ten kod i działa na niego. W większości przypadków sprzęt będzie miał własne instrukcje, jak to zrobić. Może więc istnieć prosta instrukcja, na przykład PUSH, w której rejestr (lokalizacja pamięci) otrzymuje wartość 1 lub 2 lub cokolwiek innego.

To zdecydowanie pytanie komputerowe. A także programujący. Niektórzy programiści programują sprzęt, który zabierze Twój kod i sprawi, że zrobi coś, choć na bardzo niskim poziomie. To także pytanie o elektronikę.


1

Istnieją urządzenia.

Następnie są sterowniki urządzeń, które współdziałają z tymi urządzeniami. Część napisana w C, zazwyczaj część w asemblerze.

System operacyjny współpracuje z oprogramowaniem aplikacji z jednej strony i sterownikami urządzeń z drugiej strony, aby komunikować się z rzeczywistym sprzętem.

Jeśli jesteś naprawdę zainteresowany, dlaczego nie zhakować jądra Linuksa, aby dowiedzieć się więcej?


Dziękuję za odpowiedź i sugestię. To brzmi jak świetny pomysł!
Rob P.

1

Zasadniczo jest to pytanie dotyczące elektroniki, chociaż jego podstawy powinny być omówione na kursie ankietowym dla dowolnego stopnia CS. Cały sprzęt działa w oparciu o bramki, które są w nim zaprogramowane na poziomie komponentu. Są to najbardziej podstawowe operacje logiczne: NOT, AND, OR, XOR, NAND, NOR. Każda brama ma określoną funkcję:

NIE brama ma jedną wartość wejściową i wytwarza jedną wartość wyjściową, to dostaje 0 lub 1 i wyprowadza przeciwnego.

I brama zajmuje dwie wartości wejściowe i wytwarza jedną wartość wyjściową, robi żadnej kombinacji 0 i 1 oraz wyjścia 0 dla dowolnej kombinacji z wyjątkiem dwóch z nich, dla których wyjściach to 1.

LUB brama działa podobnie jak I bramy, ale będzie produkować 1 dla każdej kombinacji 0 i 1 to dostaje z wyjątkiem dwóch zer, na które wyjścia to 0.

XOR brama jest znowu podobnie zarówno AND i do bram, ale spowoduje to wartość 0 gdy oba składniki są takie same, i 1, gdy oba składniki są różne.

NAND brama jest logiczną naprzeciwko elementu I i NOR brama jest logiczną naprzeciwko albo bramy.

Innymi słowy, na poziomie sprzętowym wszystko sprowadza się do najbardziej podstawowych binarnych wyrażeń logicznych. Cała reszta to tylko przejście z wyższego poziomu programowania na niższy, aż do osiągnięcia ostatniej warstwy.


+1 Następnym poziomem jest sposób sekwencyjnego zachowania przy użyciu tych bramek logicznych. Kluczowym elementem jest flip-flop . Złóż bramki logiczne, aby utworzyć ALU, trochę flip-flopa dla rejestrów, zegar i dostaniesz procesor.
mouviciel

@mouviciel Zapomniałeś multiplekserów.
starblue


1

Chociaż wydaje mi się oszałamiające, że ktoś może ukończyć kurs CS bez znajomości sprzętu, przypuszczam, że jest całkiem możliwe, że kurs może koncentrować się tylko na teorii jako gałęzi matematyki, a nie na szczegółach inżynierii i implementacji. Czcigodne wykłady SICP (wygłoszone w latach 80.) wyglądały tak.

Na moim kursie CS, dwie dekady temu, w pierwszym roku wymagana była wcześniejsza edycja Computers: od logiki do architektury .
Coś takiego powinno wypełnić luki.

Alternatywnie, Open Courseware MIT powinien mieć coś, co pomoże.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.