Bagaimana Cara Kerja Komputer? [Tutup]

59

Ini hampir memalukan bertanya ... Saya memiliki gelar dalam Ilmu Komputer (dan yang kedua sedang berlangsung). Saya telah bekerja sebagai Pengembang .NET penuh waktu selama hampir lima tahun. Saya biasanya tampak kompeten pada apa yang saya lakukan.

Tapi Saya Tidak Tahu Cara Kerja Komputer!

Tolong, telanjang dengan saya sebentar. Google cepat 'How a Computer Works' akan menghasilkan banyak dan banyak hasil, tetapi saya berjuang untuk menemukan yang benar-benar menjawab apa yang saya cari. Saya menyadari ini adalah pertanyaan besar, sangat besar, jadi sungguh, jika Anda bisa memberikan saya beberapa kata kunci atau arahan.

Saya tahu ada komponen .... catu daya, motherboard, ram, CPU, dll ... dan saya mendapatkan 'ide umum' dari apa yang mereka lakukan. Tapi saya benar-benar tidak mengerti bagaimana Anda pergi dari satu baris kode seperti Console.Readline()di .NET (atau Java atau C ++) dan sudah benar - benar melakukan hal - hal.

Tentu, saya samar-samar menyadari MSIL (dalam kasus .NET), dan bahwa beberapa keajaiban terjadi dengan kompiler JIT dan itu berubah menjadi kode asli (saya pikir). Saya diberitahu bahwa Java mirip, dan C ++ memotong langkah tengah.

Saya telah melakukan beberapa perakitan mainframe, beberapa tahun yang lalu. Saya ingat ada beberapa instruksi dan beberapa register CPU, dan saya menulis kode .... dan kemudian beberapa keajaiban terjadi .... dan program saya akan bekerja (atau crash). Dari apa yang saya mengerti, 'Emulator' akan mensimulasikan apa yang terjadi ketika Anda memanggil instruksi dan itu akan memperbarui register CPU; tetapi apa yang membuat instruksi itu bekerja seperti yang mereka lakukan?

Apakah ini berubah menjadi pertanyaan Elektronik dan bukan pertanyaan 'Komputer'? Saya kira tidak ada alasan praktis bagi saya untuk memahami hal ini, tetapi saya merasa saya harus bisa.

(Ya, inilah yang terjadi ketika Anda menghabiskan satu hari dengan anak kecil. Dibutuhkan sekitar 10 menit dan lima iterasi untuk bertanya 'Mengapa?' Bagi Anda untuk menyadari betapa Anda tidak tahu)

Rob P.
sumber
20
Saya akan merekomendasikan Kode oleh Charles Petzold
Itu bukan Emulator. Ini adalah sekelompok sirkuit semikonduktor nyata dengan ratusan (ribuan) kabel input dan output, dan miliaran gerbang logika. Itu Emulatordigunakan untuk tujuan instruksional saja.
rwong
1
Saya pikir judulnya harus diubah menjadi lebih spesifik / informatif. Ini sebenarnya adalah pertanyaan yang sangat berguna, tetapi pada pandangan pertama itu terlihat benar-benar konyol, seperti apa yang ditanyakan oleh anak kecil itu. Ubah ke sesuatu seperti "bagaimana perintah perangkat lunak tingkat tinggi terhubung ke respons perangkat keras tingkat rendah?"
jhocking
2
Hai Rob, seperti yang dikatakan sekarang, ini sangat luas dan dengan cepat berubah menjadi pertanyaan rekomendasi buku dan diskusi panjang: keduanya tidak kita inginkan di sini. Jika Anda dapat memperketat fokus Anda dan menanyakan sesuatu yang spesifik tentang masalah Anda saat menghadapi, jangan ragu untuk bertanya tentang hal itu.

Jawaban:

139

Saya akan mulai dari level terendah yang mungkin relevan (saya bisa mulai dari level yang lebih rendah lagi, tetapi mereka mungkin terlalu tidak relevan), mulai dari Atom, ke Listrik, ke Transistor, ke Logic Gates, ke Sirkuit Terpadu (Chip / CPU ), dan selesai di Assembly (saya anggap Anda terbiasa dengan level yang lebih tinggi).

Pada awalnya

Atom

Atom adalah struktur yang terdiri dari elektron, proton, dan neutron (yang terdiri dari partikel elementer ). Bagian yang paling menarik dari atom untuk komputer dan elektronik adalah elektron karena elektron bergerak (yaitu dapat bergerak dengan relatif mudah, tidak seperti proton dan neutron yang lebih sulit untuk bergerak) dan mereka dapat mengambang bebas dengan sendirinya tanpa ditahan di dalam sebuah atom.

Biasanya, setiap atom memiliki jumlah proton dan elektron yang sama, yang kita sebut keadaan "netral". Ketika itu terjadi, adalah mungkin bagi sebuah atom untuk kehilangan atau mendapatkan elektron ekstra. Atom-atom dalam keadaan tidak seimbang ini disebut sebagai atom "bermuatan positif" (lebih banyak proton daripada elektron) dan atom "bermuatan negatif" (lebih banyak elektron daripada proton).

Elektron tidak dapat dibangun dan tidak dapat dihancurkan (tidak demikian halnya dalam mekanika kuantum, tetapi itu tidak relevan untuk tujuan kita); jadi jika sebuah atom kehilangan satu elektron, beberapa atom lain di dekatnya harus menerima elektron ekstra atau elektron harus dilepaskan menjadi elektron mengambang bebas, sebaliknya karena elektron tidak dapat dibangun, untuk mendapatkan elektron ekstra, sebuah atom harus menyerapnya dari atom terdekat atau dari elektron mengambang bebas. Mekanika elektron sedemikian rupa sehingga jika ada atom bermuatan negatif di dekat atom bermuatan positif, maka beberapa elektron akan bermigrasi hingga kedua atom memiliki muatan yang sama.

Listrik

Listrik hanyalah aliran elektron dari suatu daerah dengan jumlah atom bermuatan negatif sangat tinggi ke suatu daerah dengan jumlah atom bermuatan positif sangat tinggi. Reaksi kimia tertentu dapat menciptakan situasi di mana kita memiliki satu simpul dengan banyak atom bermuatan negatif (disebut "anoda"), dan simpul lain dengan banyak atom bermuatan positif (disebut "katoda"). Jika kita menghubungkan dua node yang bermuatan berlawanan dengan kawat, massa elektron akan mengalir dari anoda ke katoda, dan aliran ini adalah apa yang kita sebut "arus listrik".

Tidak semua kabel dapat mentransmisikan elektron dengan sama mudahnya, elektron mengalir lebih mudah pada material "konduksi" daripada pada material "resisten". Bahan "konduktor" memiliki resistansi listrik yang rendah (mis. Kabel tembaga pada kabel) dan bahan "resistan" memiliki resistansi listrik yang tinggi (mis. Isolasi kabel karet). Beberapa bahan yang menarik disebut semi-konduktor (misalnya silikon), karena mereka dapat mengubah resistensi dengan mudah, dalam kondisi tertentu semikonduktor dapat bertindak sebagai konduktor dan pada kondisi lain itu dapat berubah menjadi resistor.

Listrik selalu lebih suka mengalir melalui material dengan resistansi paling rendah, jadi jika katoda dan anoda dihubungkan dengan dua kabel, satu memiliki resistansi sangat tinggi dan lainnya dengan resistansi sangat rendah, mayoritas elektron akan mengalir melalui kabel resistansi rendah dan hampir tidak ada yang mengalir melalui material resistansi tinggi.

Abad Pertengahan

Sakelar dan Transistor

Switches / Flip-Flops seperti saklar lampu biasa Anda, saklar dapat ditempatkan di antara dua potong kawat untuk memotong dan / atau mengembalikan aliran listrik. Transistor bekerja persis sama dengan sakelar lampu, kecuali bahwa alih-alih secara fisik menghubungkan dan melepaskan kabel, transistor menghubungkan / memutus aliran listrik dengan mengubah resistansi tergantung pada apakah ada listrik di simpul dasar, dan, seperti yang mungkin sudah Anda duga. Saya tahu, transistor dibuat dari semikonduktor karena kita dapat mengubah semikonduktor menjadi resistor atau konduktor untuk menghubungkan atau memutus arus listrik.

Salah satu jenis transistor yang umum, NPN Bipolar Junction Transistor (BJT), memiliki tiga simpul: "base", "collector", dan "emitter". Dalam NPN BJT, listrik dapat mengalir dari simpul "emitor" ke simpul "kolektor" hanya ketika simpul "basis" diisi. Ketika node dasar tidak diisi, praktis tidak ada elektron yang dapat mengalir dan ketika node dasar diisi, maka elektron dapat mengalir antara emitor dan kolektor.

Perilaku transistor

(Saya sangat menyarankan Anda membaca ini sebelum melanjutkan, karena dapat menjelaskan lebih baik daripada saya dengan grafis interaktif)

Katakanlah kita memiliki transistor yang terhubung ke sumber listrik di pangkalan dan pengumpulnya, dan kemudian kita memasang kabel Output di dekat pengumpulnya (lihat Gambar 3 di http://www.spsu.edu/cs/faculty/bbrown/web_lectures / transistor / ).

Ketika kita menerapkan listrik ke basis atau pengumpul, maka tidak ada listrik yang dapat mengalir sama sekali karena tidak ada listrik untuk dibicarakan:

B   C  |  E   O
0   0  |  0   0

Ketika kita menerapkan listrik ke pengumpul tetapi tidak ke basis, listrik tidak dapat mengalir ke emitor karena basis menjadi bahan resistensi tinggi, sehingga listrik lolos ke kawat Output:

B   C  |  E   O
0   1  |  0   1

Ketika kita menerapkan listrik ke pangkalan tetapi bukan kolektor, juga tidak ada listrik yang dapat mengalir karena tidak ada perbedaan muatan antara kolektor dan emitor:

B   C  |  E   O
1   0  |  0   0

Ketika kita menerapkan listrik ke basis dan pengumpul, kita mendapatkan listrik yang mengalir melalui transistor, tetapi karena transistor sekarang memiliki resistansi yang lebih rendah daripada kabel Output, hampir tidak ada aliran listrik melalui kabel Output:

B   C  |  E   O
1   1  |  1   O

Gerbang Logika

Ketika kita menghubungkan emitor dari satu transistor (E1) ke kolektor dari transistor lain (C2) dan kemudian kita menghubungkan output di dekat basis transistor pertama (O) (lihat Gambar 4 di http://www.spsu.edu / cs / fakultas / bbrown / web_lectures / transistor / ), maka sesuatu yang menarik terjadi. Katakanlah kita selalu menerapkan listrik ke pengumpul transistor pertama (C1) dan jadi kita hanya bermain-main dengan basis node dari transistor (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

Mari kita simpulkan tabelnya sehingga kita hanya melihat B1, B2, dan O:

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

Lihatlah , jika Anda terbiasa dengan Boolean Logic dan / atau Logic Gates, Anda harus memperhatikan bahwa inilah tepatnya gerbang NAND. Dan jika Anda terbiasa dengan Boolean Logic dan / atau Logic Gates Anda mungkin juga tahu bahwa NAND (dan juga NOR) secara fungsional lengkap , yaitu hanya menggunakan NAND, Anda dapat membangun semua gerbang logika lainnya dan kebenaran lainnya. meja. Dengan kata lain, Anda dapat mendesain chip komputer secara keseluruhan menggunakan gerbang NAND saja.

Bahkan, sebagian besar CPU (atau dulu?) Dirancang menggunakan NAND hanya karena lebih murah untuk diproduksi daripada menggunakan kombinasi NAND, NOR, AND, OR, dll.

Turunan dari operator boolean lain dari NAND

Saya tidak akan menjelaskan cara membuat semua operator boolean, hanya gerbang NOT dan AND, Anda dapat menemukan sisanya di tempat lain.

Diberikan operator NAND, maka kita dapat membangun gerbang NOT:

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

Diberi operator NAND dan NOT, maka kita dapat membangun gerbang AND:

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

Kita dapat membangun gerbang logika lain dengan cara yang sama. Karena gerbang NAND secara fungsional lengkap , dimungkinkan juga untuk membangun gerbang logika dengan lebih dari 2 input dan lebih dari 1 output, saya tidak akan membahas bagaimana membangun gerbang logika seperti itu di sini.

Zaman Pencerahan

Membangun Mesin Turing dari Boolean Gates

CPU hanyalah versi yang lebih rumit dari Mesin Turing. Register CPU adalah kondisi internal Turing Machine, dan RAM adalah tape Turing Machine.

Mesin Turing (CPU) dapat melakukan tiga hal:

  • baca 0 atau 1 dari kaset (baca sel memori dari RAM)
  • ubah status internalnya (ubah registernya)
  • bergerak ke kiri atau ke kanan (baca beberapa posisi dari RAM)
  • tulis 0 atau 1 ke kaset (tulis ke sel memori ke RAM)

Untuk tujuan kami, kami sedang membangun Mesin Turing 3-simbol 2-simbol Wolfram menggunakan logika kombinatorial (CPU modern akan menggunakan mikrokode, tetapi mereka lebih kompleks daripada yang diperlukan untuk tujuan kami).

Tabel keadaan Mesin Turing Wolfram (2,3) adalah sebagai berikut:

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

Kami ingin me-encode ulang tabel negara di atas sebagai tabel kebenaran:

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

Saya tidak benar-benar akan membangun gerbang logika seperti itu (saya tidak yakin cara menggambarnya di SE dan mungkin akan cukup besar), tetapi karena kita tahu bahwa gerbang NAND secara fungsional lengkap , maka kita memiliki cara untuk menemukan serangkaian gerbang NAND yang akan mengimplementasikan tabel kebenaran ini.

Properti penting dari Turing Machine adalah memungkinkan untuk meniru komputer program tersimpan menggunakan mesin Turing yang hanya memiliki tabel status tetap. Oleh karena itu, Mesin Universal Turing apa pun dapat membaca programnya dari Tape (RAM) alih-alih harus memiliki instruksinya yang telah dikodekan ke dalam tabel keadaan internal. Dengan kata lain, Mesin Turing (2,3) kami dapat membaca instruksi dari I1, pin I2 (sebagai perangkat lunak) alih-alih di-hardcode dalam implementasi gerbang logika (sebagai perangkat keras).

Kode mikro

Karena meningkatnya kompleksitas CPU modern, menjadi sangat sulit untuk menggunakan logika kombinatorial sendiri untuk merancang CPU secara keseluruhan. CPU modern biasanya dirancang sebagai interpreter dari instruksi mikrokode; Microcode adalah program kecil yang tertanam dalam CPU yang digunakan oleh CPU untuk menginterpretasikan kode mesin yang sebenarnya. Penerjemah mikrokode ini sendiri umumnya dirancang menggunakan logika kombinatorial.

Daftar, Cache, dan RAM

Kami telah melupakan sesuatu di atas. Bagaimana kita mengingat sesuatu? Bagaimana kita menerapkan kaset dan RAM? Jawabannya ada pada komponen elektronik yang disebut Capacitor. Kapasitor seperti baterai yang dapat diisi ulang, jika kapasitor diisi maka akan mempertahankan elektron tambahan dan juga dapat mengembalikan elektron ke sirkuit.

Untuk menulis ke kapasitor, kita mengisi kapasitor dengan elektron (tulis 1) atau tiriskan semua elektron dalam kapasitor sampai kosong (tulis 0). Untuk membaca nilai kapasitor, kami mencoba untuk melepaskannya. Jika, ketika kami mencoba melepaskan, tidak ada listrik yang mengalir, maka kapasitor kosong (baca 0), tetapi jika kami mendeteksi listrik, maka kapasitor harus diisi (baca 1). Anda mungkin memperhatikan bahwa membaca kapasitor menghabiskan penyimpanan elektronnya, RAM modern memiliki sirkuit untuk mengisi ulang kapasitor secara berkala sehingga mereka dapat mempertahankan ingatan mereka selama ada listrik.

Ada beberapa jenis kapasitor yang digunakan dalam CPU, register CPU dan cache tingkat yang lebih tinggi dibuat menggunakan "kapasitor" berkecepatan sangat tinggi yang sebenarnya dibangun dari transistor (oleh karena itu hampir tidak ada "jeda" untuk membaca / menulis dari mereka), ini disebut RAM statis (SRAM); sementara RAM memori utama dibuat menggunakan daya yang lebih rendah, tetapi kapasitor lebih lambat dan jauh lebih murah, ini disebut Dynamic RAM (DRAM).

Jam

Komponen CPU yang sangat penting adalah jam. Jam adalah komponen yang "menandai" secara teratur untuk menyinkronkan pemrosesan. Jam biasanya berisi kuarsa atau bahan lain dengan periode osilasi yang terkenal dan relatif konstan, dan sirkuit jam mempertahankan dan mengukur osilasi ini untuk mempertahankan indera waktu.

Operasi CPU dilakukan antara tick tick dan baca / tulis dilakukan pada tick untuk memastikan bahwa semua komponen bergerak secara sinkron dan tidak saling menginjak satu sama lain saat berada dalam kondisi perantara. Dalam Mesin Turing (2,3) kami, antara clock ticks listrik melewati gerbang logika untuk menghitung output dari input (I1, I2, R (t)); dan pada clock ticks, penulis kaset akan menulis O1, O2 ke tape, motor akan bergerak tergantung pada nilai M, dan register internal ditulis dari nilai R (t +1), kemudian pembaca kaset akan membaca rekaman saat ini dan memasukkan muatan ke I1, I2 dan register internal dibaca kembali ke R (t).

Berbicara dengan Periferal

Perhatikan bagaimana (2,3) Mesin Turing berinteraksi dengan motornya. Itu adalah pandangan yang sangat sederhana tentang bagaimana CPU dapat berinteraksi dengan perangkat keras yang sewenang-wenang. Perangkat keras sewenang-wenang dapat mendengarkan atau menulis ke kawat tertentu untuk input / output. Dalam kasus untuk Mesin Turing (2,3), antarmuka dengan motor hanya satu kawat yang memerintahkan motor untuk memutar searah atau berlawanan arah jarum jam.

Yang tertinggal dalam mesin ini adalah bahwa Motor harus memiliki "jam" lain yang berjalan selaras dengan "jam" internal Mesin untuk mengetahui kapan harus mulai dan berhenti berjalan, jadi ini adalah contoh dari pengiriman data yang sinkron . Alternatif lain yang biasa digunakan, transmisi asinkron menggunakan kabel lain, yang disebut jalur interupsi, untuk mengkomunikasikan titik sinkronisasi antara CPU dan perangkat asinkron.

Era digital

Kode dan Perakitan mesin

Bahasa assembly adalah mnemonik yang bisa dibaca manusia untuk kode mesin. Dalam kasus yang paling sederhana, ada pemetaan satu-ke-satu antara perakitan ke kode mesin; meskipun dalam bahasa assembly modern beberapa instruksi dapat memetakan ke beberapa opcode.

Bahasa pemrograman

Kita semua akrab dengan ini bukan?


Fiuh, akhirnya selesai, saya mengetik semua ini hanya dalam 4 jam, jadi saya yakin ada kesalahan di suatu tempat (saya terutama seorang programmer, bukan insinyur listrik atau fisikawan, jadi mungkin ada beberapa hal yang salah secara terang-terangan). Silakan jika Anda menemukan kesalahan, jangan ragu untuk memberikan @ yell atau memperbaikinya sendiri jika Anda memiliki perwakilan atau membuat jawaban pelengkap.

Lie Ryan
sumber
37
"Luar biasa " tidak melakukannya dengan adil. Jawaban ini sangat heroik .
njd
1
Bukankah atomnya salah? Umumnya mereka akan terionisasi untuk membentuk atom yang terisi daripada tetap netral untuk memiliki subkulit luar penuh.
alternatif
3
+1, +1000 jika aku bisa. Apa yang benar-benar mencengangkan bagi saya, dan mengapa saya menyukai bidang ini, adalah bahwa luasnya informasi dalam jawaban ini bahkan tidak mulai menggores permukaan kedalaman teknologi yang membuat PC modern berfungsi.
quentin-starin
Omong kosong Itu luar biasa. Saya berharap bisa melakukan lebih dari satu kali upvote.
Rob P.
3
1 meskipun saya merasa saya harus mencatat bahwa perangkat keras modern tidak dilakukan melalui gerbang NAND. Ada gerbang, ya, tapi mereka benar-benar sangat kompleks dan hanya (biasanya) perkiraan logika NAND; kendala fisiknya cukup banyak. Gerbang fisik pertama kali dirakit menjadi modul logika, yang bisa menjadi NAND klasik tetapi biasanya lebih (misalnya, flip-flop atau half-adder). Set gerbang yang tepat diperbolehkan tergantung pada gaya logika yang digunakan dan kendala pabrik fabrikasi; tidak setiap fab dapat membangun segalanya. (Aaargh! Aku mulai mengingat detail! Tolong!)
Donal Fellows
12

Dari Nand ke Tetris Dalam 12 Langkah

Saya pikir ini akan sangat sempurna untuk Anda:

Dari Nands ke Tetris Dalam 12 Langkah

Malam gelap
sumber
terima kasih untuk tautannya, tontonlah sekarang. Apakah ada indeks utama dari pembicaraan ini, atau apakah Anda kebetulan melihat yang ini di blog di suatu tempat?
jhocking
Saya tidak yakin, ini muncul ketika saya sedang berselancar pada suatu hari
Darknight
Dia melewatkan langkah ke-13 - wafer silikon.
Pekerjaan
terima kasih sudah mempostingnya! Ini pada dasarnya adalah ringkasan dari silabus kursus yang penulis ceramah di video ceramah di IDC di Israel, dan didasarkan pada bukunya - saya memasang tautan ke buku itu dalam jawaban saya.
littleadv
Apakah situs ini materi yang sama? Karena sepertinya itu jauh lebih terorganisir daripada hanya satu video besar nand2tetris.org
jhocking
10

Jika Anda telah melakukan perakitan, maka hanya ada dua atau tiga lapisan yang tersisa untuk dipahami:

  • Gerbang logika , yang merupakan cara logika diterapkan melalui elektron yang bergerak - di sini ia menjadi pertanyaan elektronik
  • CPU dan desain sistem, yang merupakan cara gerbang logika disusun untuk membentuk CPU dan terhubung dengan RAM dan periferal. CPU modern sangat kompleks, tetapi untuk keinginan Anda untuk memahami bagaimana hal-hal pada dasarnya bekerja, itu sudah cukup untuk melihat CPU sederhana klasik seperti Z80 .
  • Microcode , yang merupakan cara instruksi perakitan diinterpretasikan dan diubah menjadi tindakan tingkat hardware dari register dan sirkuit logika.

Yang terakhir (Microcode) adalah apa yang membuatnya "klik" untuk saya, karena itu mengisi celah antara elektronik dan kode.

Michael Borgwardt
sumber
Mungkin mikrokode yang saya lewatkan. Saya telah mengambil kelas di gerbang logika dan desain CPU / sistem, diprogram dalam perakitan, dan belajar semua tentang perintah biner (dan dilakukan dengan baik di semua kelas itu), tapi saya masih tidak bisa memberi tahu Anda bagaimana sih semua bisa cocok bersama. Saya harus meneliti microcode.
Casey Patton
@Casey: sangat mungkin itulah yang Anda lewatkan. Bagi saya, belajar tentang (dan menulis beberapa) mikrokode persis di tempat saya: OK, sekarang saya mengerti bagaimana komputer bekerja. Tentu, mereka menjadi begitu rumit sehingga Anda masih dapat dengan mudah mengalami situasi yang tampaknya mustahil untuk dipahami, tetapi saya cukup yakin bahwa situasi semacam itu dapat dipahami jika Anda kompeten, gigih, dan menginvestasikan waktu yang cukup.
Michael Borgwardt
7

Contoh untuk silabus program sarjana CS yang menjelaskan dengan tepat apa yang Anda tanyakan dapat ditemukan di sini (IDC.AC.IL kursus CS101) . Ini didasarkan pada buku Pers MIT ini: " Elemen Sistem Komputasi: Membangun Komputer Modern dari Prinsip Pertama ".

littleadv
sumber
1
+1 untuk menyebutkan "Elemen Sistem Komputasi". Ini buku yang bagus, dan harus menjawab pertanyaan "Bagaimana komputer bekerja?".
Cedric
maukah Anda menjelaskan lebih lanjut tentang apa yang dilakukan sumber daya ini dan mengapa Anda merekomendasikan ini sebagai jawaban atas pertanyaan yang diajukan? "Jawaban khusus tautan" tidak diterima di Stack Exchange
agas
4

Saya sangat merekomendasikan Kode oleh Charles Petzold. Buku ini merupakan pelajaran sejarah dan tinjauan teknis tentang cara membuat komputer. Dimulai dengan menjelaskan saklar telegraf sederhana, buku ini menunjukkan bagaimana transistor bekerja, kemudian ke gerbang logika, komputer yang dapat diprogram, ke hal-hal yang lebih kompleks. Ini juga ditulis dengan sangat baik dan mungkin bisa dipahami oleh siapa pun dengan rasa ingin tahu yang cukup.

Doug T.
sumber
3

Akan terlalu sulit (dan lama!) Untuk mendaftar semua yang mungkin perlu Anda ketahui untuk mendapatkan pemahaman yang cukup tentang apa yang perlu Anda ketahui. Sebuah buku terkenal yang benar-benar menjawab semua pertanyaan ini adalah dari Andrew Tanenbaum: Structured Computer Organization .

Buku ini benar-benar membawa Anda dari komputer fisik di meja Anda sampai ke gerbang logika dan aljabar boolean, kemudian menunjukkan contoh arsitektur untuk memandu Anda melalui bagaimana segala sesuatu sebenarnya terjadi dalam sistem seperti itu.

(Satu catatan: ini sangat mahal karena ~ 800 halaman. Mungkin bagus hanya untuk mendapatkan versi bekas atau edisi yang lebih lama. Konsepnya tidak berubah.)

Deckard
sumber
2

Yah butuh banyak nyali untuk mengatakan itu dan saya kira.

Cukup banyak kode dikurangi lebih jauh dan lebih jauh ke bawah ke tingkat kode yang lebih rumit. Kode level Down to Assembly dengan register push and move .. dll ...

Kemudian perangkat keras mengambil kode ini, dan menindaklanjutinya. Seringkali perangkat keras akan memiliki instruksi sendiri tentang cara melakukan sesuatu. Jadi mungkin ada instruksi sederhana seperti PUSH di mana register (lokasi memori) mendapat nilai seperti 1 atau 2 atau apa pun ..

Ini pasti pertanyaan komputer. Dan juga pemrograman. Beberapa programmer memprogram perangkat keras yang akan mengambil kode Anda dan membuatnya melakukan sesuatu meskipun pada tingkat yang sangat rendah. Ini juga merupakan pertanyaan elektronik.

Ross
sumber
1

Ada beberapa perangkat.

Lalu ada driver perangkat yang berinteraksi dengan perangkat ini. Bagian ditulis dalam C, bagian dalam perakitan biasanya.

OS berinteraksi dengan perangkat lunak aplikasi di satu ujung dan driver perangkat di sisi lain untuk berkomunikasi dengan perangkat keras yang sebenarnya.

Jika Anda benar-benar tertarik mengapa tidak melakukan peretasan kernel Linux untuk mempelajari lebih lanjut?

Fanatic23
sumber
Terima kasih atas jawaban dan saran Anda. Itu terdengar seperti ide yang bagus!
Rob P.
1

Pada intinya, ini adalah pertanyaan elektronik, meskipun dasar-dasarnya harus dicakup dalam kursus survei untuk setiap gelar CS. Semua perangkat keras bertindak berdasarkan gerbang yang diprogram ke dalamnya di tingkat komponen. Ini adalah yang paling dasar dari operasi logis: BUKAN, DAN, ATAU, XOR, NAND, NOR. Setiap gerbang memiliki fungsi spesifik:

The TIDAK gerbang mengambil satu nilai input dan menghasilkan satu nilai output, itu mendapat 0 atau 1 dan output sebaliknya.

The DAN gerbang mengambil dua nilai input dan menghasilkan satu nilai output, mendapat kombinasi 0 dan 1 dan output 0 untuk kombinasi apapun kecuali dua yang, untuk yang output 1.

The OR gerbang bekerja seperti gerbang, tetapi akan menghasilkan 1 untuk setiap kombinasi 0 dan 1 mendapat kecuali dua angka nol, untuk yang output 0.

The XOR gerbang lagi mirip dengan kedua AND dan gerbang OR, tetapi akan menghasilkan 0 ketika kedua input adalah sama, dan 1 ketika kedua input yang berbeda.

The NAND gate adalah kebalikan logis dari gerbang dan NOR gerbang adalah kebalikan logis dari gerbang OR.

Dengan kata lain, pada tingkat perangkat keras, semuanya bermuara pada ekspresi logis biner yang paling dasar. Yang lainnya hanyalah transisi dari level pemrograman yang lebih tinggi ke level yang lebih rendah hingga mencapai lapisan terakhir ini.

MaQleod
sumber
+1 Tingkat selanjutnya adalah cara membuat perilaku berurutan dengan gerbang logika ini. Komponen kuncinya adalah flip-flop . Pasang gerbang logika untuk membentuk ALU, beberapa flip-flop untuk register, jam, dan Anda mendapatkan CPU.
mouviciel
@mouviciel Anda lupa multiplexer.
starblue
1

Meskipun saya merasa mengejutkan bahwa seseorang dapat menyelesaikan kursus di CS tanpa memahami perangkat keras, saya kira itu sepenuhnya mungkin bahwa kursus hanya dapat berkonsentrasi pada teori sebagai cabang matematika, daripada rincian teknik dan implementasi. Ceramah terhormat SICP (seperti yang disampaikan pada 1980-an) tampak seperti ini.

Pada kursus CS saya, dua dekade lalu, edisi Komputer sebelumnya: dari Logika ke Arsitektur harus dibaca pada tahun pertama.
Sesuatu seperti ini harus mengisi kekosongan.

Sebagai alternatif, Open Courseware MIT harus memiliki sesuatu yang akan membantu.

njd
sumber