Programcı olarak bilgisayar mimarisini öğrenme [kapalı]


12

Ben genellikle SO ve diğer yerlerde (eğitmenler, kitap yazarları vb.) Hatlar "This will cause alignment issues"veya diğer düşük seviye tidbit boyunca bir şeyler söyleyebilirim guru rastlamak .

relevantProgramlamaya yönelik tüm bu bilgileri öğrenmek istiyorum . Şimdi genellikle düşük seviyeli kitaplar gördüğümde (örneğin bilgisayar mimarisi kitapları) çok düşük seviyelidirler ve birincil ilgi alanı yazılım tasarımı değil bilgisayar mimarisi olan insanlara yöneliktirler.

Programcılarla alakalı düşük düzeyli içeriklerden geçen kitaplar için önerileriniz var mı?


4
"Düşük seviyeli şeylerden geçen kitaplar" istiyorsun ama çok "düşük seviyeli" kitaplar istemiyor musun? Bazı programcılar için mimariyi öğrenmek son derece avantajlı olabilir. TCP / IP yığınını anlayan bir web geliştiricisine benzer. GERÇEKTEN ihtiyacınız olana kadar asla bu kadar yararlı değildir. \
Chris

1
@Chris: Demek istediğim "programcılar için düşük seviye" idi ... teknik olarak tam gelişmiş CPU mimarisine kadar gidebiliriz ve şüphesiz bir gün faydalı olacaktır, ancak hepimizin sınırlı bir zamanı olduğunu düşünürsek, bir kitap tüm programcıların bilmesi gereken düşük seviyeli şeyleri öğreten mükemmel olacaktır.
Samaursa

Bu durumda, herhangi bir tanıtım kitabı sizi doğru yöne götürecektir, burada bundan sonra aldığınız ihtiyaç veya arzuya göre seçiminizdir.
Chris

Otomatik şanzımanlı bir araba kullanan biri, sürüş sırasında ne olduğunu ve nasıl çalıştığını bilmekten yararlanır. Montaj dilini en az biraz programlamayı öğrenerek daha iyi bir programcı olduğunuza inanıyorum.
Warren P

Yanıtlar:


16

Tam olarak bu amaç için güzel bir kitap seti Randall Hyde'ın "Büyük Kod Yaz" dizisidir ( Cilt 1 Cilt 2 ): makine mimarisinin yüksek seviyeli dillerde verimli kod yazmak için bilmeniz gerekenler açısından açıkça tanımlanması .


Bu hangi üst düzey diller için geçerlidir? Örneğin Python, JavaScript, C #, Scala içerir mi?
İş

@Job - Kitapları okumadım, ancak çoklu iş parçacığı ve 64 bit işleme gibi şeylerden faydalanabilecek / yararlanabilecek her şey için geçerli olacağını söyleyebilirim. Bahsettiğiniz dilleri çalıştırmak muhtemelen bu bilgiyi yararlı hale getirecektir (özellikle de bir sunucu yöneticisiyseniz veya bu dilleri bir web ortamının dışında çalıştırıyorsanız).
Shauna

Hyde bir Meclis dili gurusu, bu yüzden onun için "üst düzey" çoğunlukla C anlamına geliyor. Ancak içeriği daha yüksek dilde kullanıcılar için de aynı derecede önemlidir; İster C, ister Python'da bildirilsin, dizeler, yordam çağrıları vb. Donanım düzeyinde gerçekten farklı değildir.
Kilian Foth

Biraz montaj diline de izin veren herhangi bir yerel derlenmiş dilin (C, C ++, Pascal, Objective-C) bu kitaptan en fazla fayda sağlayacağını düşünürdüm. Bununla birlikte, Python kullanan ve C için uzantılar yazan veya hatta java kullanan ve herhangi bir yerel yöntem kullanmayan kişiler, yaptıkları şeyin maliyeti hakkında biraz daha düşünmekle ve işlerini kullandıkları platformda nasıl verimli bir şekilde yapacaklarını.
Warren P

Henüz kitapları okumamış olsam da, bu cevabı kitabın incelemelerine / özetlerine göre doğru olarak seçeceğim.
Samaursa

6

Ne yazık ki Mikroişlemcilerle modern bir eşdeğer bilmiyorum: R. Dewar'ın Programcı Görüşü. Bildiğim en yakın şey Bilgisayar Organizasyonu ve Tasarımı, Dördüncü Baskı: David A. Patterson ve John L. Hennessy'nin Donanım / Yazılım Arayüzü, ancak çok düşük seviyede düşünmeyeceğinizden emin değilim; diğer opusları için de yapacaksınız, Bilgisayar Mimarisi, nicel bir yaklaşım.

Çevrimiçi, bu http://www-uxsup.csx.cam.ac.uk/courses/Architecture/course.pdf belki de size ne istediğinizi verecektir.


PDF bağlantısı kesildi.
ajay


3

Hennessy ve Patterson'un ( Amazon link ) "Bilgisayar Mimarisi: Nicel Bir Yaklaşım" ı bilgisayar mimarisine çok güçlü ve sağlam bir yaklaşım olarak görüyorum ve programlama ile doğrudan ilgili birkaç örnek olay var.

ABD'de çeşitli lisans ve yüksek lisans düzeyinde CS mimarisi derslerinde çeşitli kapsamlarda kullanılır.

Ayrıca Ars Technica bir süre önce büyük bir inceleme var .


1
Bu kitabı sevsem de - dört basımın sahibiyim - programcı değil, bilgisayar mimarı olarak yönlendiriliyor.
AProgrammer

3

Bilgisayar Sistemleri dersimde şu an kullandığım şey şu: Bilgisayar Sistemleri: Bir Programcı'nın Perspektifi (2. Baskı) ve sınıf yeni başlarken buna baktım ve gerçekten beğendim.

Kitabın açıklaması:

Bilgisayar bilimi veya bilgisayar mühendisliği okuyan az sayıda öğrenci, bir bilgisayar sistemi oluşturma fırsatına sahip olacaktır. Öte yandan, çoğu öğrencinin günlük olarak bilgisayar kullanması ve programlaması istenecektir. Bilgisayar Sistemleri: Bir Programcının Perspektifi, bu fikirlerin uygulama programlarının doğruluğunu, performansını ve kullanışlılığını nasıl etkilediğini göstererek bilgisayar sistemlerinin temelini oluşturan önemli ve kalıcı kavramları sunar. Metnin uygulamalı yaklaşımı (kapsamlı bir laboratuvar seti dahil) öğrencilerin modern bir bilgisayar sisteminin “kaput altı” çalışmasını anlamalarına ve derleyiciler, bilgisayar mimarisi, işletim sistemleri, ve ağ oluşturma.


Bu inanılmaz bir kitap !!
Armando

2

Çok iş, ama Programlama Dili Edimbilim tam olarak aradığınız şey olabilir. Kitap teorik olarak çoğunlukla ayrıştırma ve derleme ile ilgilidir (bu, gerçekten programlamayı öğrenmek isteyenler için temel bilgidir ) ve bu süreçte dil kavramlarının düşük seviyede olanlara nasıl dönüştüğünü öğreneceksiniz. Daha da iyisi, bunu aynı anda birçok dil için öğreneceksiniz ve farklı dillerin gerçekte nasıl çalıştığını akıllıca karşılaştırabileceksiniz.

Materyali gerçekten öğrenmeye birkaç ay ayıramadığınız sürece bunu tavsiye edemem. Sadece gözden kaçırdığınız ve aniden aydınlandığınız şeyler değil. Ama ciddi iseniz o zaman kesinlikle tavsiye ederim.


2

Biyolojide yanlış olabilir, ancak bilgisayar biliminde, "ontogeni filogeni tekrar eder" neredeyse. İlk bilgisayarlardan bu yana bilgisayar mimarilerine tarihsel bir bakış, bilgisayar mimarisinin konusunu bir programcının bakış açısından anlamanın harika bir yoludur; bilgisayar tasarımları, önceki tasarımların neredeyse tüm ayrıntılandırmalarıdır.

Yani, size bilgisayar bilimlerinde verdikleri teorik "bilgisayar mimarisi" kitaplarına dayanan tam çalışan eski sistem tasarımlarını incelemenizi öneririm. Sistem tasarımını gerçekten anlamak ve yazılım yazmada gerçekten harika bir iş yapmak. Bilgisayar sistemlerinin mimarisinin sezgisel kavranması, birçok kavramın ustalığını gerektirir. Bilgisayar mimarileri boyut ve kapsam olarak daha yönetilebilir olduğunda yeniden başlarsanız, daha iyi kod yazma amacınız doğrultusunda babanla birlikte olabilirsiniz.

(Bu arada başka bir adamın bahsettiği "harika kod yaz" kitap serisi ve daha önce bir kitaptan öğrenmeye attığım herhangi bir engeli kaldırmak için sorumu düzenledim, çünkü harika görünüyor! )

Bilgisayar mimarisini gerçekten iyi öğreten bazı şeyler:

  1. 1980'lerden insanlara bir şeyler açıklamak ve göstermek için başlangıç ​​yerleri olarak makineler seçmeyi seviyorum, çünkü o zaman bilgisayar kullanmaya başladım. Commodore 64 programcısının referans kılavuzunu, programlama bilgisinin ve bilgisayar mimarisi bilgisinin birbiriyle buluştuğu bir atlama yeri göstermek için kullandım. Böyle bir kitap ve belki de PC'nizde çalışan bir meta 64 emülatörü ile bir şeyler deneyebilirsiniz, klasik 1980'lerin bilgisayar mimarisinin enkarnasyonundaki bilgisayar sistemlerinin gerçekten nasıl inşa edildiğini öğreneceksiniz. Bana göre, somut bir örnek, işe yarayan gerçek dünya ayrıntılarını eksik olan bir düzine teorik modelden daha iyi bir başlangıç ​​noktasıdır. Bir kaydın ne olduğunu, bir ALU'nun ne olduğunu, bir otobüsün ne olduğunu ve bir saatin ne olduğunu biliyorsanız, ve Intel'in "kumlu köprü mimarisi" gibi yeni bir şeyi anlamak için bilmeniz gereken temelleri verecek olan 1980'lerin eski bir tasarımında hangi sinyal sistemlerinin kullanıldığı. Tarihsel olarak, orijinallere bakın, örneğin wikipedia'da "Von neumann" mimarisine bakın.

  2. Birkaç yıl içinde ilk noktamdan ilerlerken; Orijinal IBM PC mimarisi, 8086 montaj dili ve ISA veri yolu hakkında bilgi edinin. Bundan ve sınırlamalarından, bir "Intel COre i7" CPU'nun neler olduğunu ve PCI ve PCI-e veri yollarının ne yaptığını ve neden bunlara ihtiyacınız olduğunu anlamak daha doğal bir şekilde ilerleyebilir. PC mimarisi bugün hala orijinal IBM PC tasarımından biraz "akşamdan kalma" a sahiptir. İlk programın (işletim sistemi) yüklenmesinin (önyükleme) 2011 PC'de gerçekleşme şekli, orijinal IBM PC'nin ve ROM BIOS'unun mirasına ve orijinal bir PC'deki CMOS ayarlarına hala çok şey borçludur.

  3. Bazı yerleşik PC olmayan aygıtlarda çalışan önceden yapılandırılmış bir Linux yapısını kullanın ve değiştirin; yalnızca teknik mimari değil, bazı özelliklerin neden orada bulunduğuna katıştırılmış bilgisayar mimarisi hakkında çok şey öğreneceksiniz. Ucuz olan güzel bir örnek TS-7200, güzel bir PC-104 (orijinal PC'de olduğu gibi) ISA Bus'a sahiptir. PC-104 (IBM PC / AT 80286 dönemi PC'leri ile pim uyumlu yerleşik 16 bit ISA-bus) bilgisayarlar, modüller istiflenebilir olduğu için kart tasarımcısının yerleşik bir sistem oluşturması için harika bir yoldur. Fazladan IO veya çevre birimleri mi istiyorsunuz? Sadece birkaç modül biriktirin. TS-7200, big-endian veya little-endian çalıştırabilen x86 olmayan bir çekirdeğe (ARM9 işlemci) sahiptir. Henüz mimarlık öğrenme yolculuğunuzda "endianness" ile karşılaşmadıysanız, bu onunla karşılaşmak için iyi bir yerdir.


0

Montaj dili hakkındaki çoğu kitap ilgili mimari özellikleri tartışır, ancak genellikle yalnızca kitabın hedeflediği mimari için. Böylece, önbellek dökülmeleri ve MMU sayfa haritalama teknikleri hakkında bilgi alırsınız, ancak muhtemelen endianness hakkında hiçbir şey almazsınız.

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.