Bilgisayarlar Nasıl Çalışır? [kapalı]


59

Bu neredeyse utanç verici bir sorudur ... Bilgisayar Bilimleri alanında bir derecem var (ve devam eden birincisi). Yaklaşık beş yıl boyunca tam zamanlı bir .NET Geliştirici olarak çalıştım. Yaptığım işte genelde yetenekli görünüyorum.

Fakat bilgisayarların nasıl çalıştığını bilmiyorum!

Lütfen, bir saniye benimle çıplak kalın. 'Bilgisayar Nasıl Çalışır' konusunda hızlı bir Google, çok ve çok sayıda sonuç getirecek, ancak aradığımı gerçekten cevaplayan birini bulmakta zorlandım. Bunun çok büyük, büyük bir soru olduğunun farkındayım, bu yüzden gerçekten, eğer bana sadece bazı anahtar kelimeler veya bir yön verebilirseniz.

Bileşenler olduğunu biliyorum ... güç kaynağı, anakart, RAM, CPU, vb ... ve yaptıkları şeylerin genel fikrini alıyorum. Ancak Console.Readline(), .NET (veya Java veya C ++) gibi bir kod satırından nasıl geçtiğinizi anlamıyorum ve gerçekten bir şeyler yapmasını sağladım.

Tabii, MSIL'in (.NET durumunda) belirsiz bir şekilde farkındayım ve bazı sihirlerin JIT derleyicisiyle gerçekleştiğini ve yerel koda dönüştüğünü (sanırım). Java'nın benzer olduğunu ve C ++ 'ın orta adımı aştığını söyledim.

Bazı anabilgisayar montajı yaptım, birkaç yıl önceydi. Bazı talimatlar ve bazı CPU kayıtları olduğunu hatırlıyorum ve kod yazdım .... ve sonra bazı sihirler oldu .... ve programım işe yarayacak (ya da çökecek). Anladığım kadarıyla, bir 'Emülatör' bir talimat çağırdığınızda ne olacağını simüle eder ve CPU kayıtlarını güncellerdi; Ancak bu talimatların yaptıkları gibi çalışmasını sağlayan nedir?

Bu bir 'Elektronik' sorusuna dönüşüyor mu? 'Bilgisayar' sorusu değil mi? Bunu anlayabilmem için pratik bir sebep olmadığını tahmin ediyorum, ama yapabileceğimi hissediyorum.

(Evet, küçük bir çocukla bir gün geçirdiğinizde bu olur. Ne kadar tanımadığınızı farketmeniz için 'Neden?' Sorusunun yaklaşık 10 dakika beş kez tekrarlanması gerekir.



20
Code by Charles Petzold'u tavsiye ederim

Bu bir değil Emulator. Yüzlerce (binlerce) giriş ve çıkış kablosu ve milyarlarca mantık kapılı gerçek yarı iletken devreler grubudur. EmulatorÖğretim amaçlı sadece kullanıldı.
rwong

1
Başlığın daha spesifik / bilgilendirici olması için değiştirilmesi gerektiğini düşünüyorum. Bu aslında oldukça faydalı bir soru, ancak ilk bakışta küçük çocuğun ilk başta sorduğu gibi tamamen saçma görünüyor. "Yüksek seviye yazılım komutları düşük seviye donanım yanıtlarına nasıl bağlanır?" Gibi bir şeyle değiştirin.
jhocking

2
Merhaba Rob, şu anda ifade edildiği gibi, bu umutsuzca geniştir ve hızlı bir şekilde kitap önerisi sorusuna ve genişletilmiş tartışmalara dönüşmüştür: ikisi de burada istemiyoruz. Odağınızı sıkılaştırabilir ve şu anda karşı karşıya kaldığınız bir sorun hakkında özel bir şey sorabilirseniz , sormaktan çekinmeyin.

Yanıtlar:


139

İlgili olabilecek en düşük seviyeden başlayacağım (daha düşük seviyeden başlayabilirim, ancak muhtemelen çok da alakasızdırlar), Atom, Elektrik, Transistörler, Mantık Kapıları, Entegre Devreler (Chip / CPU) ) ve Mecliste bitirir (daha yüksek seviyelere aşina olduğunuzu varsayarım).

Başlangıçta

atom

Atom , elektronlardan, protonlardan ve nötrondan oluşan bir yapıdır (kendileri temel parçacıklardan oluşur ). Atomun bilgisayarlar ve elektronikler için en ilginç kısmı elektronlardır çünkü elektron hareketlidir (yani hareket etmeleri daha zor olan proton ve nötronların aksine nispeten kolay hareket edebilir) ve içinde serbestçe dolaşabilirler. bir atom.

Genellikle, her bir atomun eşit sayıda proton ve elektronu vardır, biz buna "nötr" durum diyoruz. Olduğu gibi, bir atomun fazladan elektron kaybetmesi veya kazanması mümkündür. Bu dengesiz durumda atomların sırasıyla "pozitif yüklü" atom (elektronlardan daha fazla proton) ve "negatif yüklü" atom (protondan daha fazla elektron) olduğu söylenir.

Elektronlar yapılamaz ve tahrip edilemez (kuantum mekaniğinde öyle değil, bu bizim amacımızla alakalı değil); eğer bir atom bir elektronu kaybederse, yakındaki bazı diğer atomlar fazladan elektronları almak zorunda kaldı veya elektron serbest elektronu serbest bırakmak zorunda kaldı, aksi halde elektron yapılamaz olduğundan, fazladan elektron elde etmek için, bir atomun yakındaki atomları salıvermesi gerekiyordu. veya serbest bir yüzen elektrondan. Elektronların mekaniği, pozitif yüklü bir atomun yanında negatif yüklü bir atom varsa, o zaman bazı elektronlar her iki atom aynı yüke sahip olana kadar göç edeceklerdir.

Elektrik

Elektrik , çok fazla sayıda negatif yüklü atom bulunan bir bölgeden yalnızca çok sayıda pozitif yüklü atom içeren bir bölgeye bir elektron akışıdır. Bazı kimyasal reaksiyonlar, çok sayıda negatif yüklü atom içeren bir düğümümüz ("anot" olarak adlandırılır) ve çok sayıda pozitif yüklü atom içeren bir düğüm ("katod" olarak adlandırılır) oluşturabilir. Karşılıklı olarak yüklü iki düğümü bir tel ile bağlarsak, anottan katoda elektron kütleleri akacaktır ve bu akış "elektrik akımı" dediğimiz şeydir.

Tüm teller elektronları eşit derecede kolay iletemezler, elektronlar "iletken" malzemelerde "dirençli" malzemelerden daha kolay akarlar. "İletken" bir malzeme düşük elektrik direncine sahiptir (örneğin, kablolardaki bakır teller) ve "dirençli" bir malzemenin elektrik direnci yüksektir (örneğin, kauçuk kablo yalıtımı). Bazı ilginç malzemelere yarı iletkenler (örneğin siliconlar) denir, çünkü dirençlerini kolayca değiştirebilirler, bazı koşullar altında yarı iletken bir iletken gibi davranabilir ve diğer koşullarda bir rezistansa dönüşebilir.

Elektrik her zaman en az dirençli malzemeden geçmeyi tercih eder, bu nedenle bir katod ve anot iki tel ile bağlanırsa, biri çok yüksek dirençli ve diğeri çok düşük dirençli ise, elektronların çoğu düşük dirençli kablodan akacak ve neredeyse hiçbiri yüksek dirençli malzemeden akmaz.

Orta Çağ

Anahtarlar ve Transistörler

Anahtarlar / Parmak arası Terlikler normal ışık anahtarlarınız gibidir, elektrik akışını kesmek ve / veya geri yüklemek için iki kablo parçası arasında bir anahtar yerleştirilebilir. Transistörler, bir elektrik şalterinin fiziksel olarak bağlanması ve ayrılması yerine, bir transistörün, temel düğümde elektrik olup olmadığına bağlı olarak direncini değiştirerek ve daha önce tahmin etmiş olabileceğiniz gibi, elektrik akımını bağlaması / bağlantısını kesmesi dışında tamamen bir ışık anahtarıyla aynı şekilde çalışır. Transistörler yarı iletkenlerden yapılır, çünkü yarı iletkenleri elektrik akımlarını bağlamak veya kesmek için bir direnç veya iletken olarak değiştirebiliriz.

Yaygın bir transistör tipi olan NPN Bipolar Junction Transistörünün (BJT) üç düğümü vardır: "baz", "toplayıcı" ve "yayıcı". Bir NPN BJT'de, elektrik "yayıcı" düğümden "toplayıcı" düğüme yalnızca "taban" düğümü yüklendiğinde akabilir. Temel düğüm şarj edilmediğinde, pratik olarak hiçbir elektron akamaz ve temel düğüm şarj edildiğinde elektronlar verici ve toplayıcı arasında akabilir.

Transistörün davranışı

(Ben çok okumak önermek bu interaktif grafiklerle benden iyi açıklayabilir olarak, devam etmeden önce)

Diyelim ki, üssünde ve kolektöründe bir elektrik kaynağına bağlı bir transistörümüz var ve sonra kolektörünün yakınında bir Çıkış kablosu bağlıyoruz (bkz. Şekil 3, http://www.spsu.edu/cs/faculty/bbrown/web_lectures / transistörler / ).

Ne baz ne de kollektöre elektrik verdiğimizde, konuşacak elektrik olmadığından elektrik akamaz.

B   C  |  E   O
0   0  |  0   0

Toplayıcıya elektrik verdiğimizde ancak tabana elektrik uygulayamadığımız zaman, elektrik vericiye akmaz, çünkü taban yüksek dirençli bir malzemedir, bu nedenle elektrik Çıkış kablosuna kaçar:

B   C  |  E   O
0   1  |  0   1

Tabana elektrik uygular ancak kollektöre değil, kollektör ile vericinin şarj farkı olmadığından elektrik de akamaz:

B   C  |  E   O
1   0  |  0   0

Hem tabana hem de kollektöre elektrik uyguladığımızda, transistörden elektrik akıyor, ancak transistör artık Çıkış telinden daha düşük bir dirence sahip olduğundan, Çıkış telinden neredeyse hiçbir elektrik akımı geçmiyor:

B   C  |  E   O
1   1  |  1   O

Mantık kapıları

Bir transistörün (E1) vericisini başka bir transistörün (C2) toplayıcısına bağladığımızda ve sonra ilk transistörün (O) tabanının yakınında bir çıkış bağlarız (bkz. Http: //www.spsu.edu'da Şekil 4). / cs / faculty / bbrown / web_lectures / transistors / ), sonra ilginç bir şey olur. Ayrıca her zaman ilk transistörün (C1) toplayıcısına elektrik uyguladığımızı ve bu yüzden sadece transistörlerin temel düğümleriyle (B1, B2) oynadığımızı varsayalım:

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

Masayı özetleyelim ki sadece B1, B2 ve O’yu görelim:

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

Bakın ve görüyorsunuz, eğer Boole Mantığı ve / veya Mantık Kapıları hakkında bilginiz varsa, bunun tam olarak NAND kapısı olduğunu fark etmelisiniz. Ve Boolean Logic ve / veya Logic Gates ile tanışıyorsanız, bir NAND'in (NOR'un da) işlevsel olarak tamamlandığını , yani yalnızca NAND'ın kullanıldığını, diğer tüm mantık kapılarını ve gerçeğin geri kalanını inşa edebileceğinizi de bileceksiniz. tablolar. Başka bir deyişle, tek başına NAND geçitlerini kullanarak bütün bir bilgisayar çipi tasarlayabilirsiniz.

Aslında, çoğu CPU yalnızca NAND kullanılarak tasarlanır (ancak eskiden kullanılır mı?), Ancak NAND, NOR, AND, OR, vb.

Diğer boole işleçlerini NAND'dan türetme

Tüm boolean operatörleri nasıl yapacağımı tarif etmem, sadece NOT ve AND geçidi, gerisini başka bir yerde bulabilirsin.

Bir NAND operatörü verildiğinde, bir NOT geçidi inşa edebiliriz:

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

Bir NAND ve NOT işleci verildiğinde, bir AND geçidi yapabiliriz:

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

Benzer bir şekilde diğer mantık kapılarını da yapabiliriz. NAND geçidi işlevsel olarak tamamlandığından , 2'den fazla giriş ve 1'den fazla çıktılı mantık kapıları oluşturmak da mümkün, bu tür mantık kapılarının burada nasıl kurulacağını tartışmayacağım.

Aydınlanma Çağı

Boolean Gates'den bir Turing Makinesi Oluşturmak

Bir CPU, Turing Makinesinin sadece daha karmaşık bir versiyonudur. CPU kayıtları Turing Machine'in dahili durumudur ve RAM bir Turing Machine'in bandıdır.

Bir Turing Makinesi (CPU) üç şey yapabilir:

  • Banttan 0 veya 1 oku (RAM’den bir bellek hücresi)
  • iç durumunu değiştir (kayıtlarını değiştir)
  • sola veya sağa kaydır
  • Kasete 0 veya 1 yazın (RAM’e bir bellek hücresine yazın)

Amacımız için, Wolfram'ın 2 durumlu 3 sembol Turing Makinesi'ni birleştirici mantık kullanarak inşa ediyoruz (modern CPU'lar mikro kod kullanır, ancak bunlar bizim amacımız için gerekenden daha karmaşıktır).

Wolfram'ın (2,3) Turing Makinesi durum tablosu aşağıdaki gibidir:

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

Yukarıdaki durum tablosunu doğruluk tablosu olarak yeniden kodlamak istiyoruz:

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

Gerçekten böyle bir mantık kapısı inşa etmeyeceğim (SE'de nasıl çizileceğinden emin değilim ve muhtemelen oldukça büyük olacak), ancak NAND kapısının işlevsel olarak tamamlandığını bildiğimiz için, bir yolumuz var. Bu doğruluk tablosunu uygulayacak bir seri NAND kapısı bulmak için.

Turing Makinesinin önemli bir özelliği, sadece sabit durum tablosuna sahip bir Turing makinesini kullanarak depolanmış bir bilgisayarı taklit etmenin mümkün olmasıdır . Bu nedenle, herhangi bir Universal Turing Makinesi, talimatlarını dahili durum tablosuna kodlamak zorunda kalmak yerine, programını Teypten (RAM) okuyabilir. Başka bir deyişle, (2,3) Turing Machine, mantık kapısı uygulamasında (donanım olarak) kodlanmış olmak yerine, talimatlarını I1, I2 pinlerinden (yazılım olarak) okuyabilir.

Microcodes

Modern CPU'ların artan karmaşıklığından ötürü, bütün bir CPU'yu tasarlamak için tek başına birleştirme mantığını kullanmak çok zorlaşıyor. Modern CPU, genellikle mikrokod talimatlarının yorumlayıcısı olarak tasarlanmıştır; bir mikro kod, gerçek makine kodunu yorumlamak için CPU tarafından kullanılan CPU'da bulunan küçük bir programdır. Bu mikro kod yorumlayıcısının kendisi genellikle birleşimsel mantık kullanılarak tasarlanmıştır.

Kayıt Ol, Önbellek ve RAM

Yukarıda bir şey unuttuk. Bir şeyi nasıl hatırlıyoruz? Kaseti ve RAM'i nasıl uygularız? Cevap, Kapasitör adı verilen elektronik bir bileşendir. Bir kondansatör şarj edilebilir bir pil gibidir, bir kondansatör şarj edildiğinde ekstra elektronları tutar ve elektronları devreye geri gönderir.

Bir kondansatöre yazmak için, kondansatöre elektronla doldurun (yazma 1) veya kondansatördeki tüm elektronları boşalana kadar boşaltın (yazma 0). Bir kondansatörün değerini okumak için boşaltmaya çalışıyoruz. Eğer deşarj etmeye çalıştığımızda, elektrik akışı olmazsa, o zaman kapasitör boştur (okuma 0), ancak elektrik tespit edersek, o zaman kondansatör şarj edilmelidir (okuma 1). Bir kondansatör okumanın elektron deposunu boşalttığını fark edebilirsiniz, modern RAM'lerde kapasitörün periyodik olarak şarj edilmesi için bir devre vardır, böylece elektrik olduğu sürece hafızalarını koruyabilirler.

Bir CPU'da kullanılan birçok kapasitör tipi vardır, CPU kayıtları ve daha yüksek seviyedeki CPU önbellekleri, aslında transistörlerden yapılmış çok hızlı "kapasitörler" kullanılarak yapılır (bu nedenle okuma / yazma için neredeyse hiçbir "gecikme" yoktur). onlara), bunlar statik RAM (SRAM); Ana bellek RAM'i düşük güç kullanılarak yapılırken, ancak daha yavaş ve daha ucuz kapasitörler kullanılarak bunlara Dinamik RAM (DRAM) denir.

Saat

Bir CPU'nun çok önemli bir bileşeni saattir. Bir saat, işlemi senkronize etmek için düzenli olarak "keneler" yapan bir bileşendir. Bir saat tipik olarak iyi bilinen ve göreceli olarak sabit salınım periyoduna sahip bir kuvars veya başka malzemeler içerir ve saat devresi zaman salımını korumak için bu salınımı korur ve ölçer.

İşlemci işlemleri saat keneleri arasında yapılır ve tüm bileşenlerin senkronize olarak hareket etmesini ve orta hallerde birbirine geçmemesini sağlamak için kenelerdeki okuma / yazma işlemleri yapılır . (2,3) Torna Tezgahımızda, saat keneleri arasındaki elektrik, girişten (I1, I2, R (t)) çıktısını hesaplamak için mantık geçitlerinden geçer; ve de saat keneler, bant yazar banda O1, O2 yazacak, M değerine bağlı olarak hareket edecek, motor ve iç yazmacı R değerinden yazılır (t + 1), daha sonra şerit okuyucu Geçerli bandı okuyacak ve I1, I2'ye yük atacak ve dahili kayıt R (t) 'ye geri dönecektir.

Çevre Birimleriyle Konuşmak

(2,3) Turing Makinesi'nin motoruyla nasıl bir araya geldiğine dikkat edin. Bu, bir CPU'nun isteğe bağlı bir donanım ile nasıl bir araya gelebileceğini çok basitleştirilmiş bir görünümdür. İsteğe bağlı donanım, girişler / çıkışlar için belirli bir kabloyu dinleyebilir veya yazabilir. (2,3) Turing Makinesi için, motorla olan arayüzü, motora saat yönünde veya saat yönünün tersine dönmesini söyleyen tek bir teldir.

Ne bu makinede söylenmemiş bırakılır Motorlu Makine'nin iç "saat" başlamasını ve yayınının durdurulmasını bilmek ile eşzamanlı çalışan başka bir "saat" olması gerektiğini, bu nedenle bu bir örneğidir eşzamanlı veri iletimi . Yaygın olarak kullanılan diğer bir alternatif olan asenkron iletim, CPU ve asenkron cihaz arasındaki senkronizasyon noktalarını iletmek için kesme hattı adı verilen başka bir kablo kullanır.

Dijital yaş

Makine kodu ve montaj

Assembly dili, makine kodları için okunabilir bir anımsatıcıdır. En basit durumda, montaj ile makine kodu arasında bire bir eşleme vardır; Her ne kadar modern montaj dillerinde bazı talimatlar çoklu kodlara eşlenebilir.

Programlama dili

Hepimiz buna aşinayız değil mi?


Phew, nihayet bitti, bütün bunları sadece 4 saatte yazdım, bu yüzden bir yerde bir yanlışlık olduğundan eminim (öncelikle bir programcıyım, elektrik mühendisi veya fizikçi değilim, bu yüzden kesinlikle yanlış olan birkaç şey olabilir). Lütfen bir hata bulursanız, temsilciniz varsa veya tamamlayıcı bir cevap oluşturduysanız, bir @yell vermekten çekinmeyin veya kendiniz düzeltin.


37
" müthiş " adalet yapmaz. Bu cevap olumlu kahramanca .
njd

1
Atomun kısmı yanlış değil mi? Genel olarak , tam bir dış alt kabuğa sahip olmak için nötr kalmak yerine yüklü atomları oluşturmak için iyonize olurlar .
alternatif

3
Yapabilseydim +1, +1000. Benim için gerçekten şaşırtıcı olan ve neden bu alanı sevdiğimi , bu cevaptaki büyük bilgi genişliğinin, modern bir PC'nin çalışmasını sağlayan teknolojinin şaşırtıcı derinliğinin yüzeyini çizmeye bile başlamaması.
quentin-starin

Kutsal bok Bu harika. Keşke bir keresinden fazla oy kullanabilseydim.
Rob P.,

3
+1, modern donanımın NAND kapıları üzerinden tam olarak yapılmadığını not etmem gerektiğini düşündüğüm halde. Evet, kapılar var, ama gerçekten oldukça karmaşıklar ve sadece (genellikle) NAND mantığı; kısıtlamalar hemen hemen fiziksel. Fiziksel kapılar ilk önce klasik bir NAND olabilen ancak genellikle daha fazla olan (örneğin flip-flop veya yarım toplayıcı) mantık modüllerine monte edilir. İzin verilen kapıların tam seti, kullanılan mantık stiline ve üretim tesisinin kısıtlamalarına bağlıdır; Her fab her şeyi inşa edemez. (Aaargh! Detayları hatırlamaya başladım! Yardım!)
Donal Fellows

12

Nand'den Tetris'e 12 Adımda

Bunun kesinlikle sizin için mükemmel olacağını düşünüyorum:

Nands'tan Tetris'e 12 Adımda


bağlantı için teşekkürler, şimdi izliyor. Bu görüşmelerin merkezi bir endeksi var mı, yoksa bunu bir blogda başka bir yerde gördünüz mü?
jhocking

Emin değilim, bu özellikle bir gün sörf yaparken geldi
Darknight

13. basamağı - silikon gofretleri özledi.
Meslek

gönderdiğiniz için teşekkürler! Bu, temel olarak, İsrail’de IDC’de video konferanslarında konuştuğu yazarın ders kitabının özeti ve kitabına dayanıyor - cevabımda kitabın bağlantısını yayınladım.
littleadv 19

Bu site aynı malzeme midir? Çünkü nand2tetris.org'daki
saat

10

Eğer montajı yaptıysanız, anlayacağınız yalnızca iki veya üç katman kalır:

  • Mantık hareket eden elektronlar vasıtasıyla mantığın uygulandığı mantık kapıları - burada elektronik bir soru haline geliyor
  • İşlemci ve sistem tasarımı, mantık kapılarının bir CPU oluşturmak için nasıl oluşturulduğunu ve RAM ve çevre birimlerine bağlandığını gösterir. Modern CPU'lar son derece karmaşıktır, ancak temelde işlerin nasıl yürüdüğünü anlama arzunuz için Z80 gibi basit bir işlemciye bakmak yeterli olacaktır .
  • Microcode , montaj talimatlarının nasıl yorumlandığını ve kayıtların ve mantık devrelerinin donanım düzeyinde işlemlerine dönüştürüldüğünü belirtir.

Sonuncusu (Microcode) benim için “tıklamayı” sağlayan şeydi, çünkü elektronik ve kod arasındaki boşluğu doldurdu.


Belki de eksik olduğum mikro koddur. Mantık kapıları ve CPU / sistem tasarımı dersleri aldım, montajda programladım ve tüm ikili komutları (ve tüm bu sınıflarda iyi iş çıkardılar) öğrendim, ama hala hepsinin nasıl bir araya geldiğini size söyleyemedim. Mikro kod araştırmam gerekecek.
Casey Patton

@Casey: Gerçekten de kaçırdığın şey bu. Benim için mikro kod hakkında bir şeyler öğrenmek (ve bazılarını yazmak) tam olarak düşündüğüm yerdeydi: Tamam, şimdi bilgisayarların nasıl çalıştığını anlıyorum. Elbette, o kadar karmaşık hale geldiler ki, kolayca anlaşılması imkansız gibi görünen durumlara kolayca rastlayabilirsiniz, ancak eğer yetkin, ısrarcı ve yeterince zaman harcarsanız, böyle bir durumun anlaşılabileceğine inanıyorum.
Michael Borgwardt

7

Tam olarak neyi sorduğunuzu açıklayan bir CS lisans ders programı örneği burada bulunabilir (IDC.AC.IL kurs CS101) . Bu MIT Press kitabına dayanıyor: " Bilgi İşlem Sistemlerinin Elemanları: İlk İlkelerden Modern Bir Bilgisayar Kurmak ".


1
"Bilgi İşlem Sistemlerinin Elemanları" ndan bahsetmek için +1. Harika bir kitap ve "Bilgisayarlar nasıl çalışır?" Sorusunu tam olarak yanıtlamalıdır.
Cedric,

Bu kaynakların ne yaptığını ve neden sorulan soruyu yanıtlarken bunları neden tavsiye edersiniz? "Link-only cevaplar" Stack Exchange'de pek hoş karşılanmıyor
gnat


4

Charles Petzold'un Kodunu şiddetle tavsiye ediyorum . Kitap hem tarih dersi hem de bilgisayar yapımına ilişkin teknik bir bakış niteliğindedir. Basit telgraf anahtarlarını açıklamaya başlamakla başlayan kitap, transistörlerin nasıl çalıştığını, ardından mantık kapılarına, programlanabilir bilgisayarlara, daha karmaşık şeylere kadar olduğunu göstermektedir. Aynı zamanda çok iyi yazılmış ve muhtemelen yeterince meraklı biri tarafından anlaşılabilir.


3

Bilmeniz gerekenler hakkında yeterli bir anlayış kazanmak için bilmeniz gereken her şeyi listelemek çok zor (ve uzun!) Olacak. Bütün bu soruları cevaplayan ünlü bir kitap Andrew Tanenbaum'dan: Yapısal Bilgisayar Organizasyonu .

Bu kitap aslında masanızdaki fiziki bilgisayardan mantık geçitlerine ve boole cebirine kadar uzanıyor, daha sonra her şeyin böyle bir sistemde gerçekte nasıl gerçekleştiği konusunda size rehberlik edecek örnek bir mimari gösteriyor.

(Bir not: ~ 800 sayfalık olduğundan çok pahalıdır. Muhtemelen sadece ikinci el sürüm veya daha eski bir sürüm almak iyidir. Kavramlar değişmedi.)


2

Bunu söylemek ve sanırım sormak için çok top alır.

Neredeyse kod daha karmaşık ve daha düşük seviyeli kodlara indirgenmiştir. Push and move registerları ile Assembly seviye koduna kadar .. vs ...

Ardından donanım bu kodu alır ve ona göre hareket eder. Çoğu zaman, donanımın aslında işlerin nasıl yapılacağına ilişkin kendi talimatları olacaktır. Öyleyse, bir sicilin (hafıza konumu) 1 veya 2 gibi bir değer aldığı PUSH gibi basit bir talimat olabilir.

Bu kesinlikle bir bilgisayar sorusu. Ve ayrıca bir programlama. Bazı programcılar, kodunuzu alacak ve çok düşük düzeyde de olsa bir şeyler yapmasını sağlayacak donanımı programlamaktadır. Aynı zamanda elektronik bir soru.


1

Cihazlar var.

Sonra, bu aygıtlarla etkileşime giren aygıt sürücüleri var. C ile yazılmış kısım, tipik olarak montajda kısım.

İşletim sistemi bir uçta uygulama yazılımıyla, diğer uçta ise aygıt sürücüleri ile gerçek donanım ile iletişim kurar.

Gerçekten ilgileniyorsanız, neden bir Linux çekirdeğini daha fazla bilgi edinmek için hacklemiyorsunuz?


Cevabınız ve öneriniz için teşekkür ederiz. Bu harika bir fikir gibi geliyor!
Rob P.

1

Her şeyin özünde bu elektronik bir sorudur, ancak bunun temelleri, herhangi bir CS derecesi için anket kursunda ele alınmalıdır. Tüm donanım, bileşen düzeyinde programlanmış kapıları temel alır. Bunlar mantıksal işlemlerin en temelleri: NOT, VE, VEYA, XOR, NAND, NOR. Her geçidin belirli bir işlevi vardır:

Değil kapısı, bir 0 ya da 1 olur ve ters çıktılar, bir girdi değeri alır ve bir çıkış değerini üretmektedir.

Ve geçide, bir 1 verir olan iki olanlar dışında herhangi bir kombinasyonu için 0, 1 ve çıkışlar 0 herhangi bir kombinasyonu olur, iki giriş değerleri alır ve bir çıkış değerini üretmektedir.

YA geçidi çok VE kapısı gibi çalışır, ama bir 0 verir kendisi için iki sıfırı hariç, 0 ile 1 o alır her kombinasyon için 1 üretecektir.

XOR geçidi VE ve TD kapılar hem daha ucuz olmakla birlikte, her iki girdi aynı olduğunda ve 1 her iki giriş farklı olduğu zaman, bir 0 üretecektir.

NAND kapısı VE kapısının mantıksal tersidir ve NOR kapısı VEYA kapısının mantıksal tersidir.

Başka bir deyişle, donanım düzeyinde, her şey ikili mantıksal ifadelerin en temeline iner. Geriye kalan her şey bu son katmana ulaşana kadar daha yüksek bir programlama seviyesinden daha düşük bir programa geçiştir.


+1 Bir sonraki seviye, bu mantık kapıları ile sıralı bir davranış yapma. Anahtar bileşen flip-flop'tur . Bir ALU oluşturmak için mantık geçitlerini birleştirin, bazı kayıtlar için bir flip-flop, bir saat ve bir CPU edin.
mouviciel

@mouviciel Çoklayıcıları unuttun.
starblue


1

Birinin CS’de donanımı anlamadan bir kursu tamamlayabileceğini şaşırtıcı bulsam da, bir kursun mühendislik ve uygulama detaylarından ziyade sadece teoriye bir matematik dalı olarak odaklanabileceğini düşünüyorum. Saygıdeğer SICP dersleri (1980'lerde verildiği gibi) böyle görünüyordu.

CS kursumda, yirmi yıl önce, Bilgisayarların daha önceki bir baskısı : Mantıktan Mimariye ilk yıl okuması gerekiyordu.
Böyle bir şey boşlukları doldurmalıdır.

Alternatif olarak, MIT'in Açık Eğitim Yazılımında yardımcı olacak bir şey bulunmalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.