Bir bilgisayar nasıl çalışır?


40

Uzun yıllardır bilgisayar meraklısıyım. Birkaç dilde programlayabilirim ve hatta onları bile oluşturabilirim. Geçen gün bir arkadaşıma oturdum ve bir bilgisayarın gerçekte nasıl elektrik aldığını ve onunla bir şey yaptığını sordum ve çözemedik ve Google da pek yardımcı olmadı.

Yani, bir bilgisayar nasıl sürekli bir elektrik akışı alıp onu 1 ve 0'lara dönüştürür ve sonra 1 ve 0'ların 15 saniye boyunca ışığı yakmasıyla bir şey yapar mı?

Anlıyorum kapıları (AND, OR, NOR, NAND DEĞİL) ve hakkında biraz diyotlar , dirençler ve transistörlerin , ama bu gerçek laymens açısından açıklanabilir için mükemmel bir yer olacağını düşündüm!

Herhangi biri beni doğru yöne işaret edebilir veya kısa bir açıklama yapabilir mi?


8
"Bakteriler nasıl çalışır?" Diye de sorabilirsiniz. Bu inanılmaz derecede geniş bir sorudur. Size basit bir işlemci mimarisine (örneğin MIPS ; bunu sınıfta öğretildik) bakmanızı ve aşağı ve yukarı doğru çalışmanızı öneririm . Yol boyunca karşılaştığınız sorular, Stack Exchange için muhtemelen bundan daha uygun.
Raphael

3
Bakterilerin nasıl çalıştığını biliyorum, bilgisayar ben lol alamıyorum
Christian

14
Elfler. Minik sihirli elfler.
JeffE


1
Bir bilgisayarın gerçekten en düşük seviyede nasıl çalıştığını öğrenmenin en iyi yolu, bir fpga üzerinde veya Nand kapılarından manuel olarak basit bir mikroişlemci tasarlamaktır. Bunu "Bilgisayar Mimarileri" sınıfında yaptım ve gerçekten bir göz açıcı oldu. Her şeyi en düşük seviyede tutarsanız ve toplama, bit işleme ve koşullu bir atlama ile 4 bitlik bir kontrol cihazı tasarlarsanız, yapmak bile zor değil. Daha da basit, basitleştirilmiş bir Turing makinesi uygulayan bir donanım. Hm, bu jut bana bir fikir verdi: bir Turing makinesinin nasıl çalıştığını öğrenin. Size iyi bir fikir verecektir.
vsz

Yanıtlar:


47

Bu kolay bir cevabı olmayan geniş bir sorudur; Bakır teller boyunca kaybolan elektronlardan Firefox'ta bir web sitesi oluşturmak için çok uzun bir yol. Size alttan üste bir genel bakış vermeye ve sizi aramak için doğru şeylere işaret etmeye çalışacağım.

Kodlama Numaraları

01

Ayrıca sayıları ikili olarak kodlamanın birden fazla yolu olduğunu unutmayın. İlk işlemcinizi kurduktan sonra, işleri belli şekillerde yapmanın avantajlarını fark edersiniz. Popüler örnekler, iki tamamlayıcı ve IEEE yüzerleridir . Başlangıç ​​olarak, kendinizi düz doğal sayılarla sınırlandırın.

kapıları

İkili kodlama kullandığımızı varsayalım. İlkokulda nasıl ekleyeceğinizi düşünün ve aynı sayıyı ikili sayılar için yazın. Görünüşe göre, Boole cebirinin yapı taşları zaten sizin için orada; mantık geçitlerini kullanarak basit bir toplayıcı (ve diğer aritmetik fonksiyonlar) oluşturmak kolaydır .

Bu kapıların nasıl inşa edileceği bilgisayar bilimi kapsamı dışındadır; Elektrik mühendisliği , örneğin tüpler veya transistörler kullanarak çok sayıda çözüm sağlamıştır . Bununla ilgili sorularınız için Elektrik Mühendisliği Yığın Borsasına gidin .

Saat ve devlet

Tüm kapılar eşit derecede hızlı değildir ve bir hesaplamanın tüm bölümlerinde aynı sayıda kapı yoktur. Bu nedenle, bireysel operasyonların birbirini sollamamasına özen göstermeliyiz. Küresel bir saat kullanmak yararlı oldu ; Belirli bir kapı ağının sonucu, devrin sonundaki çıkış tellerinin durumudur (kapılar kendi bireysel son durumlarına doğru basarken çılgınca değişebilir).

Bu, bir döngü sonuçlarının, örneğin döngü bağlarsanız, bir sonraki döngü başlamadan önce saklanması gerekebileceği anlamına gelir. Değişen etki için kullanabileceğiniz birkaç temel unsur vardır, hepsi kapılardan oluşur; bazılarına parmak arası terlik denir . Bunlar, kayıtları oluşturmak için de kullanılır , gereken sayıda saat döngüsü için sayıları saklayan öğeler.

Mimarlık ve Komutlar

Şimdi yapacak çok sayıda tasarım seçeneğiniz var. İşlemciniz hangi aritmetik işlemleri sağlıyor? Komutların neye benziyor? Diğer tasarımlara göre erken formları kolay olan MIPS mimarisine bakmak eğitici olabilir . Planlara bir göz atın :

MIPS tek kademeli
Http://ube.ege.edu.tr/~erciyes/CENG311 adresinden orijinal

Temel olarak, komutları, bir dizi kayıt, bir ALU ve kontrolün getirilmesi ve sökülmesidir . Komutlar, hangi ALU işleminin hangi işleçlerde (tutuldukları kayıt sayısına göre), program sayacının ² nasıl işleneceğini ya da belleğe / belleğe yüklenmek / depolamak için nasıl kayıt yapılacağını gerçekleştirmek üzere kodlar.

Diğer Hususlar

Şimdiye kadar, modern anlamda çalışan bir işlemciniz var, bir hafızanın nasıl oluşturulacağını ve onu komutları beslemenin bir yolunu bulduğunuzu varsayarsınız. Modern bir makineye giderken, birçok seçim yapılması gerekiyor. İşte bazıları:

Alternatifler

Yukarıdakiler, tarihin nasıl ortaya çıktığından büyük ölçüde etkilenmiştir. Farklı zihinlere sahip farklı bir dünyada, bilgisayarlar farklı şekilde çalışabilir. Aslında, çoğu durumda gerçek makineler için soyutlama olarak faydalı olmasını sağlayan avantajları olan birçok hesaplama modeli vardır . Beyinlerimizin çalışma şeklini, sinirsel hesaplamayı mümkün kılmak veya daha genel olarak en belirgin şekilde DNA ve kuantum hesaplamak için doğada gözlemlenen problem çözme ve bilgi saklama stratejilerinden yararlanmak için taklit etme girişimleri vardır .

Öyleyse belki (umarım?) Yukarıdaki bilgiler bundan böyle 50 ya da 100 yıl önceki tüm antik tarihlerdir.


  1. Bugün bilgisayarlarla yaptığımız tüm süslü şeyler, işlemcinin tek tek yürüttüğü birçok küçük aritmetik işlere bölünüyor.
  2. Modeliniz programın kontrol akışını değiştirmesine izin veriyorsa, bu işlemcinin bir sonraki talimatı aldığı hafıza adresi olacaktır. Ayrıca, yalnızca belirli bir talimat setini, örneğin bir kasetten okuyan makineleri de düşünebilirsiniz. Aslında, erken uygulamalar bunu yaptı. Hiçbir sıçrama, hiçbir döngü anlamına gelmez; bir program verilere bağlı olarak tamamen açılmış / açılmış bir dizi talimattı. Açıkçası, aynı programı çoklu giriş verileri için kullanabilmek daha güçlü.
  3. Hafızanın olduğunu varsayarsak; İşlemciniz sorunsuz çalışıyor ancak bir kerede yalnızca bu kadar çok değerle başa çıkabiliyor. İlk bilgisayarlar tüm verilerini bantlardan okudular ve kayıtlara koydular. Bugün bildiğimiz kadarıyla yazılabilir, kalıcı bir depolama alanı bırakmadan, hiçbir bellek yoktu.

Vaov! Bu bir alkış hak ediyor. Güzel Okuma oldu. Paylaşım için teşekkürler. Kesinlikle bir şey öğrendim. Buna rağmen, okuduktan sonra, bilmek istediğim şeyin, elektriği fiziksel olarak nasıl kontrol ettiği konusunda elektrik mühendisliğinin temelleri olduğunu düşünüyorum. Aynı soruyu bugün biraz sonra o gruba göndereceğim. Teşekkür ederim!
Hıristiyan

1
Sanırım, muhtemelen "makine parçasıyla konuşma" yı eklemeliydim. Bu, bir dili tasarlamanın, verimli bir şekilde çalışabileceği ve (derleyici ile) belirttiğiniz komut setine çevirebileceği anlamına gelir. Bunlar benim bilgisayar biliminin temel konularıyken, cevabımdaki materyal çoğunlukla bilgisayar mühendisliği .
Raphael

Bunun hızlı bir cevap olmadığını düşünüyorum. Bir gün anakartların veya cep telefonlarının hoşuna giden bazı bilgisayar mühendislerine para ödeyeceğim. Başka bir deyişle, bir bilgisayarın 5 saniye boyunca ışığı nasıl hesapladığını veya açtığını ve sonra kapattığını söylemek gerekir. Anahtarlar ve kapasitörler ile ilgili olduğunu düşünüyorum.
Hristiyan

@Hristiyan Biraz para kazanmak istiyorsanız, transistörleri içeren bir EE deneme kutusu (çocuklar için olanlar gibi) satın almayı düşünün. Işıkları açmak veya küçük bir toplayıcı inşa etmek tipik olarak dahildir, afaik. (Yine, Elektrik Mühendisliği insanlar muhtemelen daha fazla bilgi edinin.)
Raphael

25

Tüm resim oldukça karmaşık. Birbiri üzerine inşa edilen ve elektriksel gerilimlerin üzerine yüksek seviye soyutlamalar topluca yapan birçok katman vardır. Her şeyin nasıl bir araya getirildiğine dair basit bir açıklama yok, özellikle de bilgisayar donanımı ve yazılımının son elli yılda çarpıcı bir şekilde geliştiğini düşünün.

Her şeyin nasıl bir araya getirildiğini görmekle ilgileniyorsanız, NAND kapılarıyla başlayan ve aşamalı olarak Tetris'in çalışan bir uygulamasını derleyici ve işletim sistemi üzerine inşa eden bir kitap olan The Computing Computers Sistemlerini incelemek isteyebilirsiniz. ayrıca inşa et. Bilgisayarın her parçası bir öncekinin üzerine kuruludur, bu da her şeyin nasıl çalıştığını görmenize yardımcı olabilir.


Mükemmel bir başlangıç ​​yeri gibi geliyor. Orada başlayacak. Çok teşekkür ederim :)
Christian

2
Ayrıca Charles Petzold'un KOD'unu okumanızı tavsiye ederim.
ybakos

7

Podcast Güvenliği Şimdi! Temel prensiplerden başlayarak, bilgisayarların nasıl çalıştığı hakkında bir dizi yaptım.

  • 233 - Bilgisayar Tasarlayalım (bölüm 1)
  • 235 - Makine Dili
  • 237 - Dolaylı: İşaretçilerin Gücü (teknik olarak serinin bir parçası değil)
  • 239 - Yığınlar, Kayıtlar ve Özyineleme
  • 241 - Donanım Kesintileri
  • 247 - “Çoklu”
  • 250 - İşletim Sistemleri
  • 252 - RISCy İşletmesi
  • 254 - Hız İçin Ne Yapacağız

Rakamlardaki boşluklar, diğer bölümlerin bir Dinleyici Geribildirimi bölümü olması nedeniyle onları da izlemek isteyebilirsiniz. Ayrıca 241 ve 247 yılları arasında, CA'yı kendilerine kök salma vermeye zorlayan ülkeler hakkındaki son dakika haberleri nedeniyle SSL hakkında birkaç bölüm yaptılar.

Ayrıca EP. 248 köpekleri öldürmeyen "Taşınabilir Köpek Katili" dır, ancak Steve'in komşu bir köpeğe çit hattına kadar koşmamalarını ve kaldırıma insanlara saldırmamalarını öğretmek için çocukken kendi başına yaptığı sonik ışın silahıdır. .


ilginç! Paylaşım için teşekkürler. Bir göz atarım.
Hristiyan

4

Bir bilgisayar enerji gradyanlarını (daha sonra 1 ve 0 olarak yorumladığımız) tutarlı ve tanımlanmış bir şekilde manipüle ederek çalışır . Bu var tutarlılık öyle ise, bir bilgisayar tanımlayan tanım farklı işlemcileri ayırır.

Ayrıca, yalnızca iki mantık kapısının (OR ve ve AND) herhangi bir genel amaçlı bilgisayarı oluşturmak için yeterli yapı taşı olduğunu öğrenin. Ayrıca bakınız, Danny Hillis ve Tinkertoy bilgisayarı.


TinkerToy hakkında, özellikle de her zaman kazandığı gerçeği hakkında ilginç bir okuma oldu! ( Science20.com/brain_candyfeed_your_mind/… )
Christian

Bununla birlikte, bana bir bilgisayarın nasıl düşündüğü hakkında iyi bir fikir vermesine rağmen, bir önceki cevabı bulması için her kombinasyonu ve mekaniği vererek, aslında bir bilgisayarın nasıl inşa edileceği konusundaki orijinal sorumu cevaplamıyor. Temel bitleri (dönüştürücüler, dirençler, kapasitörler, kapılar, vb.) Satın almak ve bunları yapılandırmak için yerel elektrik donanım mağazama (herşeye sahip) yöneldiğimi ve son derece temel bir bilgisayara sahip olduğumu varsayalım. Ne de olsa, ilk bilgisayar bit ve kablolu bir deponun büyüklüğüydü, bu yüzden mümkün olmalı!
Hıristiyan

@Hristian: haha, tamam, temel bellek depolaması için bazı temel mantık kapıları (VE / VEYA / DEĞİL) bazı parmak arası terlikler oluşturun ve iki adet 4 bitlik sayı ekleyebilirsiniz.

Parmak arası terlik var! Aslında iki çift.
Christian,

3

Bilgisayar, büyük, senkronize bir mantıksal sistemdir ;

  • 0/1
  • (çok hızlı) bir saatle çalışır, böylece tutarlılığı sağlamak için tüm sinyaller belirli anlarda örneklenir.

0/1

Bilgisayar çalıştığı sürece bilgiyi korumak için özel devrelere sahiptir (RAM, büyük miktarlarda). İkili aritmetik işlem yapmak için özel devrelere sahiptir (aslında bitler, toplu olarak bir tam sayıyı temsil eden gruplar halinde (tipik olarak 8'in katları olarak ele alınır). Ve tamsayılardan başka bir şey olmayan bellek adreslerine dayalı özel yönlendirme yeteneklerine sahiptir.

Son fakat en az değil, modern bir bilgisayarda RAM'de depolanan, tamsayı olarak kodlanan, genellikle bellekten veri alan, bazı aritmetik işlem yapan ve sonuçları belleğe geri gönderen bir komut listesi olan bir program vardır.

Senaryonuzda, geçen zamanın RAM'de bir yerde depolandığı ve programın talimat verdiği bir uygulama düşünebilirsiniz.

  • geçen zaman değerini getir,
  • bir toplayıcı ile arttırmak,
  • Karşılaştırıcı ile önceden tanımlanmış bir gecikmeyle karşılaştırmak,
  • eşitsizlik durumunda başlangıç ​​program adresine dönmek (örneğin, "döngüler"),
  • aksi halde RAM yerine harici bir anahtara giden özel bir sinyal ayarlayın.

Tüm bu unsurların günümüzde yüksek derecede gelişmişliğe ulaştığını ve bu çok kısa genel bakıştaki her cümlenin birkaç açıklama kitabını hak ettiğini unutmayın .


-1

Gecikme işlevi yapmanın veya ikili verileri ondalık veriye veya sinyal gücüne dönüştürmenin birkaç yolu vardır. "15" değerini girdiğinizde, bilgisayar ekranda 15 sayısının bitmap görüntüsünü görüntüler. Bu aslında ikili değerdir, şu anda klavyenizin ikili kodu da cpu'ya gönderilir. Verileri ayrıştırır ve ardından kodu bir DAC yongasına dönüştürmek için kodu ALU (aritmetik mantık birimi) işlem birimine dönüştürür. Analog sinyal şimdi bir flip-flop devresinin frekansını (khz'den hz'ye frekans) kontrol ediyor. Şimdi frekans çıkışı RAM'e yönlendirilecek ve cpu verileri "1111" ise eşleşecek şekilde RAM okuyacak. Yani bu 4 saniye.


Bunun soruyu nasıl cevapladığından emin değilim.
Yuval Filmus,

Bilgisayarın 15 saniye boyunca nasıl yanıp söndüğünü sorduğunu görebilirsiniz ve bilgisayarın döngüde kullanmak için ikinci değeri nasıl yarattığını açıklarım.
Lan ...
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.