Jak działa komputer?


40

Od wielu lat jestem kujonem komputerowym. Potrafię programować w kilku językach, a nawet je budować. Pewnego dnia usiadłem z kumplem i zapytałem, w jaki sposób komputer rzeczywiście pobiera prąd i coś z nim robi, i po prostu nie mogliśmy tego zrozumieć, a Google też niewiele pomógł.

Mam na myśli, w jaki sposób komputer pobiera stały przepływ prądu i zamienia go na 1 i 0, a następnie faktycznie robi coś z tymi 1 i 0 jak włączanie światła na 15 sekund?

Rozumiem bramy (I, LUB, NOR, NAND, NIE) i trochę o diodach , opornikach i tranzystorach , ale pomyślałem, że byłoby to idealne miejsce, aby wyjaśnić to w prawdziwych słowach świeckich!

Czy ktoś może wskazać mi właściwy kierunek lub podać krótkie wyjaśnienie?


8
Równie dobrze możesz zapytać „jak działają bakterie?”. To jest niezwykle szerokie pytanie. Sugeruję, abyś spojrzał na prostą architekturę procesora (np. MIPS ; nauczono nas tego na zajęciach) i zaczął pracować w górę i w dół. Pytania, które napotkasz po drodze, prawdopodobnie lepiej pasują do Stack Exchange niż to.
Raphael

3
Wiem, jak działają bakterie, to komputer nie dostaję lol
Christian

14
Elfy Małe magiczne elfy.
JeffE

3
zobacz także, jak działają komputery
wrzes.

1
Najlepszym sposobem, aby dowiedzieć się, jak komputer naprawdę działa na najniższym poziomie, jest zaprojektowanie uproszczonego mikrokontrolera na FPGA lub ręcznie z bramek Nand. Zrobiłem to na zajęciach z zakresu „Architektury komputerowej” i naprawdę przyciągało to wzrok. Nie jest to nawet trudne, jeśli utrzymujesz wszystko na minimalnym poziomie i projektujesz 4-bitowy kontroler z dodatkiem, manipulacją bitami i skokiem warunkowym. Lub jeszcze prościej, sprzęt implementujący uproszczoną maszynę Turinga. Hm, ten jut dał mi pomysł: dowiedz się, jak działa maszyna Turinga. Zapewni to dobry wgląd.
vsz

Odpowiedzi:


47

To szerokie pytanie, na które nie ma łatwej odpowiedzi; to długa droga od elektronów wędrujących wzdłuż miedzianych drutów do renderowania strony internetowej w Firefoksie. Spróbuję dać ci przegląd od dołu do góry i wskażę odpowiednie rzeczy, na które można spojrzeć w górę.

Kodowanie liczb

01

Zauważ, że istnieje również wiele sposobów kodowania liczb w systemie binarnym. Po zbudowaniu pierwszego procesora zdajesz sobie sprawę z zalet robienia rzeczy w określony sposób. Popularnymi przykładami są dwa uzupełnienia i zmiennoprzecinkowe IEEE . Na początek ogranicz się do zwykłych liczb naturalnych.

Bramy

Załóżmy, że używamy kodowania binarnego. Pomyśl o tym, jak nauczyłeś się dodawania w szkole podstawowej i zapisz to samo dla liczb binarnych. Jak się okazuje, elementy składowe algebry boolowskiej są już dla ciebie dostępne; łatwo jest zbudować podstawowy sumator (i inne funkcje arytmetyczne) za pomocą bramek logicznych .

Jak zbudować takie bramy, nie wchodzi w zakres informatyki; inżynieria elektryczna dostarczyła wiele rozwiązań przy użyciu np. lamp lub tranzystorów . Udaj się do Elektrycznego Stos Exchange na pytania w tej sprawie.

Zegar i stan

Nie wszystkie bramki są równie szybkie i nie wszystkie części obliczeń mają tę samą liczbę bramek. Dlatego musimy szczególnie uważać, aby poszczególne operacje się nie wyprzedzały. Przydatne okazało się użycie zegara globalnego ; wynikiem danej sieci bramek jest stan przewodów wyjściowych na końcu cyklu (który może zmieniać się gwałtownie, gdy bramki kaskadowo zbliżają się do poszczególnych stanów końcowych).

Oznacza to, że wyniki jednego cyklu mogą wymagać zapisania aż do rozpoczęcia następnego cyklu, np. W przypadku podłączenia pętli. Istnieje wiele podstawowych elementów, których można użyć z różnym skutkiem, wszystkie gromadzone z bram; niektóre są nazywane klapkami . Są one również używane do budowania rejestrów , elementów przechowujących liczby dla tylu cykli zegara, ile potrzeba.

Architektura i polecenia

Teraz masz mnóstwo do wyboru. Jakie operacje arytmetyczne zapewnia twój procesor? Jak wyglądają twoje polecenia? Warto spojrzeć na architekturę MIPS, której wczesne formy są łatwe w porównaniu z innymi projektami. Spójrz na plany :

MIPS jednostopniowy
Oryginał z http://ube.ege.edu.tr/~erciyes/CENG311

Zasadniczo jest to pobieranie i dezasemblacja poleceń, zestaw rejestrów, ALU i kontrola. Polecenia kodują operację ALU, którą należy wykonać na których operandach (według numeru rejestru, w którym są przechowywane), jak manipulować licznikiem programu² lub który rejestr ładować / przechowywać z / do pamięci³.

Dalsze uwagi

Do tej pory masz działający procesor w nowoczesnym sensie, zakładając, że wymyśliłeś, jak zbudować pamięć i sposób, w jaki ją karmić. W drodze do nowoczesnej maszyny trzeba dokonać wielu wyborów. Oto niektóre:

Alternatywy

Na powyższe duży wpływ ma historia. W innym świecie o różnych umysłach komputery mogą działać inaczej. W rzeczywistości istnieje wiele modeli obliczeń , z których niektóre mają zalety, które czynią je przydatnymi jako abstrakcja dla prawdziwych maszyn w wielu przypadkach. Podejmowane są również próby naśladowania sposobu działania naszego mózgu, to znaczy umożliwienia obliczeń neuronowych , lub bardziej ogólnie, wykorzystania strategii rozwiązywania problemów i przechowywania informacji zaobserwowanych w naturze , w szczególności DNA i obliczeń kwantowych .

Więc może (mam nadzieję?) Powyższe informacje to cała starożytna historia za kolejne 50 lub 100 lat.


  1. Wszystkie fantazyjne rzeczy, które robimy dzisiaj z komputerami, są podzielone na wiele małych zadań arytmetycznych, które procesor wykonuje jeden po drugim.
  2. Jeśli Twój model pozwala programowi manipulować przepływem sterowania, byłby to adres pamięci, z którego procesor otrzymuje następną instrukcję. Możesz również wymyślić maszyny, które odczytują tylko stały zestaw instrukcji, powiedzmy, z taśmy. Tak naprawdę zrobiły to wczesne wdrożenia. Brak skoków oznaczał brak pętli; program był całkowicie rozwiniętą / rozwiniętą serią instrukcji w zależności od danych. Oczywiście możliwość korzystania z tego samego programu do wielu danych wejściowych jest silniejsza.
  3. Zakładając, że masz pamięć; Twój procesor działa bez niego, ale może poradzić sobie z tak wieloma wartościami jednocześnie. Wczesne komputery odczytywały wszystkie dane z taśm i trzymały je w rejestrach. Nie było pamięci, nie mówiąc już o trwałej pamięci do zapisu, jaką znamy dzisiaj.

Łał! To zasługuje na klaskać. To była świetna lektura. Dziękuję za udostępnienie. Na pewno się czegoś nauczyłem. Chociaż po przeczytaniu tego, myślę, że bardziej chcę poznać podstawy elektrotechniki pod względem tego, jak fizycznie kontroluje elektryczność. Dziś to pytanie zadam tej grupie nieco później. Dziękuję Ci!
Christian

1
Przyszło mi do głowy, że prawdopodobnie powinienem uwzględnić „rozmowę z częścią maszynową”. Oznacza to zaprojektowanie języka, z którym ludzie mogą efektywnie pracować, i przetłumaczenie go (za pomocą kompilatora) na określony zestaw instrukcji. To są główne tematy informatyki, podczas gdy materiał w mojej odpowiedzi to głównie inżynieria komputerowa .
Raphael

Wyobrażam sobie, że nie jest to szybka odpowiedź. Pewnego dnia zapłacę inżynierowi, który buduje takie płyty główne lub telefony komórkowe, jak działają podstawy. To znaczy, jak komputer oblicza lub włącza światło na 5 sekund, a następnie wyłącza się. Wyobrażam sobie, że ma to wiele wspólnego z przełącznikami i kondensatorami.
Christian

@Christian Jeśli chcesz zaoszczędzić trochę pieniędzy, zastanów się nad zakupem skrzynki eksperymentalnej EE (takiej jak dla dzieci), która zawiera tranzystory. Zazwyczaj włącza się włączanie światła lub budowanie małego sumatora, afaik. (Znów inżynierowie prawdopodobnie wiedzą więcej.)
Raphael

25

Pełny obraz jest dość skomplikowany. Istnieje wiele warstw ułożonych jedna na drugiej, które wspólnie realizują abstrakcje wysokiego poziomu nad napięciami elektrycznymi. Nie ma prostego wyjaśnienia, jak wszystko się składa, szczególnie biorąc pod uwagę, że sprzęt komputerowy i oprogramowanie zmieniły się dramatycznie w ciągu ostatnich pięćdziesięciu lat.

Jeśli chcesz zobaczyć, jak wszystko się składa, możesz sprawdzić The Elements of Computing Systems , książkę, która zaczyna się od bramek NAND i stopniowo buduje działającą implementację Tetris na podstawie kompilatora i systemu operacyjnego, który ty także budujesz. Każdy element komputera jest zbudowany na poprzednim, co może pomóc zobaczyć, jak wszystko działa.


To brzmi jak idealne miejsce początkowe. Zacznie się tam. Dziękuję bardzo :)
Christian

2
Polecam również przeczytanie KODU Charlesa Petzolda.
ybakos

7

Podcast Bezpieczeństwo teraz! napisałem serię na temat działania komputerów, zaczynając od podstawowych zasad.

  • 233 - Zaprojektujmy komputer (część 1)
  • 235 - Język maszynowy
  • 237 - Indirection: The Power of Pointers (technicznie nie jest częścią serii)
  • 239 - Stosy, rejestry i rekurencja
  • 241 - Przerwania sprzętowe
  • 247 - Awers „Multi”
  • 250 - Systemy operacyjne
  • 252 - RYZYKO Biznes
  • 254 - Co zrobimy dla szybkości

Luki w liczbach wynikają z tego, że co drugi odcinek to odcinek opinii słuchacza, więc możesz też chcieć je obejrzeć. Również między 241 a 247 zrobili kilka epizodów na temat SSL ze względu na najświeższe informacje o krajach zmuszających CA do przyznania im certyfikatów root.

Również EP. 248 to „przenośny zabójca psów”, który nie zabija psów, ale broń wiązki dźwiękowej, którą Steve sam stworzył jako dziecko, aby pomóc w uczeniu psa sąsiada, aby nie podbiegł do linii ogrodzenia i nie próbował atakować ludzi na chodniku .


ciekawy! Dziękuję za udostępnienie. Zerknę.
Christian

4

Komputer działa poprzez manipulowanie gradientami energii (które następnie interpretujemy jako 1 i 0) w spójny , zdefiniowany sposób. To spójność definiuje komputer, podczas gdy to definicja dzieli poszczególne procesory.

Dowiedz się również, w jaki sposób dwie bramki logiczne (OR i AND) są wystarczającymi elementami do zbudowania dowolnego komputera ogólnego przeznaczenia. Zobacz także Danny Hillis i komputer Tinkertoy.


To była ciekawa informacja o TinkerToy, szczególnie o tym, że zawsze wygrywa! ( Science20.com/brain_candyfeed_your_mind/… )
Christian

Jednakże, chociaż daje mi to dobry wgląd w to, jak „myśli” komputer, tzn. Dając mu każdą kombinację i mechanikę znajdowania kolejnej odpowiedzi na poprzednią, nie odpowiada na moje pierwotne pytanie, jak właściwie zbudować komputer. Załóżmy, że jadę do mojego lokalnego sklepu ze sprzętem elektrycznym (który ma wszystko), aby kupić bity fundamentowe (tranzystory, rezystory, kondensatory, bramki itp.) I skonfigurować je, aby mieć wyjątkowo podstawowy komputer. Czego potrzebowałbym? W końcu pierwszy komputer miał rozmiar magazynu z kawałkami i drutami, więc musi być to możliwe!
Christian

@Christian: haha, dobra, zbuduj kilka podstawowych bramek logicznych (ORAZ / LUB / NIE) kilka przerzutników do podstawowej pamięci i możesz być w stanie dodać dwie liczby 4-bitowe.

Mam kilka klapek! W rzeczywistości dwie pary.
Christian

3

Komputer jest duża synchroniczny układ logiczny , co oznacza, że

  • 0/1
  • działa z (bardzo szybkim) zegarem, dzięki czemu wszystkie sygnały są próbkowane w dyskretnych momentach, aby zapewnić spójność.

0/1

Ma wyspecjalizowane obwody do przechowywania informacji, dopóki komputer jest zasilany (pamięć RAM w dużych ilościach). Ma wyspecjalizowane obwody do wykonywania arytmetyki binarnej (w rzeczywistości bity są obsługiwane w grupach - zwykle w wielokrotnościach 8 - które łącznie reprezentują liczbę całkowitą). I ma wyspecjalizowane możliwości routingu oparte na adresach pamięci, które są niczym innym jak liczbami całkowitymi.

Wreszcie, nowoczesny komputer ma również program przechowywany w pamięci RAM, który jest listą instrukcji zakodowanych jako liczby całkowite, który jest wykonywany sekwencyjnie, zwykle pobierając dane z pamięci, wykonując pewną arytmetykę i wysyłając wyniki z powrotem do pamięci.

W twoim scenariuszu można pomyśleć o implementacji, w której upływ czasu jest przechowywany gdzieś w pamięci RAM, a program instruuje, aby

  • pobierz wartość upływającego czasu,
  • zwiększ to za pomocą sumatora,
  • porównaj to z predefiniowanym opóźnieniem z komparatorem,
  • w przypadku nierówności powróć do adresu początkowego programu (tzn. „pętle”),
  • w przeciwnym razie ustaw specjalistyczny sygnał, który trafia do zewnętrznego przełącznika zamiast do pamięci RAM.

Zauważ, że wszystkie te elementy osiągają obecnie wysoki stopień wyrafinowania, a każde zdanie w tym bardzo krótkim przeglądzie zasługuje na kilka książek z wyjaśnieniami.


-1

Istnieje kilka sposobów wykonania funkcji opóźnienia lub konwersji danych binarnych na dane dziesiętne lub siłę sygnału. Po wprowadzeniu wartości „15” komputer wyświetla na ekranie obraz bitmapowy liczby 15. Jest to w rzeczywistości wartość binarna, w tej chwili kod binarny twojej klawiatury jest również wysyłany do procesora. Będzie parsował dane, a następnie zamienił kod na jednostkę przetwarzającą ALU (arytmetyczna jednostka logiczna), aby przekształcić go w impuls na układ DAC. Sygnał analogowy kontroluje teraz częstotliwość (częstotliwość od kHz do Hz) obwodu przerzutnika. Teraz wyjście częstotliwości zostanie skierowane do pamięci RAM, a procesor odczyta pamięć RAM, aby dopasować, jeśli dane to „1111”. To 4 sekundy.


Nie jestem pewien, jak to odpowiada na pytanie.
Yuval Filmus

widać, że zapytał, w jaki sposób flashowanie komputera prowadziło przez 15 sekund, i wyjaśniam, w jaki sposób komputer tworzy drugą wartość do użycia w pętli.
Lan ...
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.