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)
Emulator
. Ini adalah sekelompok sirkuit semikonduktor nyata dengan ratusan (ribuan) kabel input dan output, dan miliaran gerbang logika. ItuEmulator
digunakan untuk tujuan instruksional saja.Jawaban:
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:
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:
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:
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:
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):
Mari kita simpulkan tabelnya sehingga kita hanya melihat B1, B2, dan O:
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:
Diberi operator NAND dan NOT, maka kita dapat membangun gerbang AND:
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:
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:
Kami ingin me-encode ulang tabel negara di atas sebagai tabel kebenaran:
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.
sumber
Dari Nand ke Tetris Dalam 12 Langkah
Saya pikir ini akan sangat sempurna untuk Anda:
Dari Nands ke Tetris Dalam 12 Langkah
sumber
Jika Anda telah melakukan perakitan, maka hanya ada dua atau tiga lapisan yang tersisa untuk dipahami:
Yang terakhir (Microcode) adalah apa yang membuatnya "klik" untuk saya, karena itu mengisi celah antara elektronik dan kode.
sumber
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 ".
sumber
Untuk sepenuhnya menjawab pertanyaan ini akan membutuhkan seluruh buku. Untungnya seseorang telah menulis buku itu. Itu disebut Kode: Bahasa Tersembunyi dari Perangkat Keras dan Perangkat Lunak Komputer oleh Charles Petzold. Ini adalah bacaan yang sangat informatif dan sangat menghibur.
sumber
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.
sumber
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.)
sumber
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.
sumber
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?
sumber
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.
sumber
Untuk bagian tentang mengubah program dalam bahasa tingkat tinggi dalam instruksi mesin, setiap buku penyusun harus mengisi tagihan. Misalnya buku naga .
Untuk bagian "bagaimana instruksi dijalankan?" Organisasi dan Desain Komputer: Antarmuka Perangkat Keras / Perangkat Lunak harus mengisi tagihan.
sumber
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.
sumber