Saya biasanya berlari melintasi guru di SO dan tempat-tempat lain (instruktur, penulis buku dll.) Yang akan mengatakan sesuatu di sepanjang baris "This will cause alignment issues"
atau informasi rahasia tingkat rendah lainnya.
Saya ingin belajar tentang semua informasi yang berkaitan relevant
dengan pemrograman. Sekarang biasanya ketika saya melihat buku tingkat rendah (buku arsitektur komputer misalnya) mereka terlalu rendah dan diarahkan kepada orang-orang yang bidang utamanya adalah arsitektur komputer dan bukan desain perangkat lunak.
Apakah Anda memiliki rekomendasi untuk buku yang membahas hal-hal tingkat rendah yang relevan bagi programmer?
low-level
computer-architecture
Samaursa
sumber
sumber
Jawaban:
Satu set buku yang bagus untuk tujuan ini tepatnya adalah seri "Write Great Code" karya Randall Hyde ( Vol.1 Vol. 2 ): deskripsi arsitektur mesin secara eksplisit dari perspektif apa yang perlu Anda ketahui untuk menulis kode efisien dalam bahasa tingkat tinggi .
sumber
Sayangnya saya tidak tahu setara modern dengan Microprocessors: A Programmer's View oleh R. Dewar. Yang paling dekat yang saya tahu adalah Organisasi dan Desain Komputer, Edisi Keempat: Antarmuka Perangkat Keras / Software oleh David A. Patterson dan John L. Hennessy, tetapi saya tidak yakin Anda tidak akan menganggapnya terlalu rendah; Anda pasti akan melakukannya untuk karya mereka yang lain, Arsitektur Komputer, pendekatan kuantitatif.
Online, http://www-uxsup.csx.cam.ac.uk/courses/Architecture/course.pdf ini mungkin akan memberi Anda apa yang Anda inginkan.
sumber
Untuk platform x86, ambil salinan manual prosesor IA-32 dan Intel 64 Intel . Manual referensi pengoptimalan membahas banyak masalah ini dari perspektif level rendah untuk CPU Intel x86. AMD juga memiliki manual serupa yang membahas masalah yang sama.
Sebagian besar arsitektur CPU lainnya memiliki manual serupa yang membahas masalah kinerja. ( Misalnya ARM dan PowerPC .)
sumber
Saya menemukan "Arsitektur Komputer: Pendekatan Kuantitatif" oleh Hennessy dan Patterson ( tautan Amazon ) sebagai pendekatan yang sangat kuat dan solid untuk arsitektur komputer, dengan beberapa studi kasus yang secara langsung relevan dengan pemrograman.
Ini digunakan untuk berbagai luasan di beberapa kursus arsitektur CS tingkat sarjana dan pascasarjana di AS.
Itu juga mendapat ulasan bagus tentang Ars Technica beberapa waktu lalu.
sumber
Inilah yang saya gunakan di kelas Sistem Komputer saya sekarang Sistem Komputer: Perspektif Programmer (Edisi ke-2) dan sementara kelas baru saja dimulai, saya telah melihatnya dan sangat menyukainya.
Berikut deskripsi buku:
sumber
Ini banyak pekerjaan, tetapi Memprogram Bahasa Pragmatik mungkin persis seperti yang Anda cari. Buku ini secara teoritis sebagian besar tentang parsing dan kompilasi (yang merupakan pengetahuan penting bagi mereka yang ingin benar-benar belajar pemrograman) dan dalam prosesnya Anda akan berakhir belajar bagaimana konsep bahasa diterjemahkan ke dalam apa yang terjadi pada level rendah. Lebih baik lagi Anda akan mempelajari ini untuk banyak bahasa sekaligus dan Anda akan dapat dengan cerdas membandingkan dan membedakan bagaimana bahasa yang berbeda sebenarnya bekerja.
Saya tidak bisa merekomendasikan itu kecuali Anda dapat mendedikasikan beberapa bulan untuk benar-benar mempelajari materi. Itu bukan hal-hal yang Anda hanya selip dan tiba-tiba tercerahkan. Tetapi jika Anda serius maka saya sangat merekomendasikannya.
sumber
Mungkin keliru dalam biologi, tetapi dalam ilmu komputer, "ontogeni merekapitulasi filogeni" hampir. Tinjauan historis arsitektur komputer sejak komputer pertama adalah cara yang bagus untuk memahami subjek arsitektur komputer dari perspektif programmer; desain komputer hampir semua merupakan penyempurnaan dari desain sebelumnya.
Yaitu, saya sarankan untuk mempelajari desain sistem lama yang sudah lengkap, insted buku "arsitektur komputer" teoritis yang mereka berikan kepada Anda dalam ilmu komputer. Untuk benar-benar memahami desain sistem, dan untuk melakukan pekerjaan yang sangat hebat dalam menulis perangkat lunak. Pemahaman intuitif arsitektur sistem komputer membutuhkan penguasaan banyak konsep. Saya pikir jika Anda memulai kembali ketika arsitektur komputer lebih mudah dikelola dalam ukuran dan ruang lingkup, Anda mungkin dapat membantu ayah dalam tujuan Anda untuk menulis kode yang lebih baik.
(Seri buku "tulis kode hebat" yang oleh orang lain sebutkan tampak hebat, omong-omong, dan saya telah mengedit pertanyaan saya untuk menghilangkan aspersi apa pun yang sebelumnya saya gambarkan untuk belajar dari buku, karena itu terlihat hebat! )
Beberapa hal yang mengajarkan arsitektur komputer dengan sangat baik:
Saya suka memilih mesin dari tahun 1980-an sebagai tempat awal untuk menjelaskan dan menunjukkan hal kepada orang-orang, karena saat itulah saya mulai menggunakan komputer. Saya telah menggunakan panduan referensi programmeromodore 64, untuk menunjukkan kepada orang-orang tempat melompat di mana pengetahuan pemrograman, dan pengetahuan arsitektur komputer bertemu satu sama lain. Dengan buku semacam itu, dan mungkin emulator komoditas yang berjalan di PC Anda sehingga Anda dapat mencoba berbagai hal, Anda akan belajar tentang bagaimana sistem komputer dalam inkarnasi arsitektur komputer era 1980-an klasik, benar-benar dibangun. Dalam pandangan saya, satu contoh konkret adalah tempat yang lebih baik untuk memulai, daripada selusin model teoretis yang tidak memiliki perincian dunia nyata yang membuat berbagai hal bekerja. Jika Anda tahu apa itu register, apa itu ALU, apa itu bus, dan apa jam itu, dan sistem pensinyalan apa yang digunakan dalam desain tahun 1980-an, yang akan memberi Anda dasar-dasar yang perlu Anda ketahui untuk memahami sesuatu yang baru-baru ini, seperti "arsitektur jembatan berpasir" Intel. Secara historis, lihat kembali aslinya, misalnya mencari arsitektur "Von neumann", di wikipedia.
Bergerak maju dari poin pertama saya beberapa tahun; Pelajari tentang arsitektur PC IBM asli, bahasa rakitan 8086, dan bus ISA. Dari sini, dan keterbatasannya, pemahaman tentang apa yang terkandung dalam CPU "Intel COre i7", dan apa yang dilakukan oleh PCI dan PCI-e bus dan mengapa Anda membutuhkannya, dapat berjalan lebih alami. Arsitektur PC saat ini masih memiliki sedikit "mabuk" dari desain PC IBM asli. Cara pemuatan program awal (sistem operasi) (boot-up) terjadi pada PC 2011 masih banyak berutang pada warisan PC IBM asli dan ROM BIOS-nya, dan pengaturan CMOS pada PC asli.
Gunakan dan modifikasi Linux yang telah dikonfigurasikan sebelumnya yang bekerja pada beberapa perangkat non-PC tertanam, dan Anda akan belajar banyak tentang arsitektur komputer tertanam, tidak hanya arsitektur teknis, tetapi mengapa beberapa fitur ada di sana. Contoh bagus yang tersedia murah adalah TS-7200, yang memiliki PC-104 yang bagus (ISA Bus, seperti pada PC asli). PC-104 (tertanam 16 bit ISA-bus yang pin kompatibel dengan komputer IBM PC / AT 80286 era) adalah cara yang bagus untuk desainer non-papan untuk membangun sistem tertanam, karena modul dapat ditumpuk. Ingin beberapa IO atau peripheral tambahan? Cukup susun beberapa modul. TS-7200 memiliki inti non-x86 (cpu ARM9) yang mampu menjalankan big-endian atau little-endian. Jika Anda belum mengalami "endianness" dalam perjalanan pembelajaran arsitektur Anda, itu adalah tempat yang bagus untuk menjumpainya.
sumber
Sebagian besar buku tentang bahasa rakitan akan membahas fitur arsitektur yang relevan, tetapi biasanya hanya untuk arsitektur yang ditargetkan buku. Jadi Anda akan mendapatkan informasi tentang tumpahan cache dan teknik pemetaan halaman MMU, tetapi mungkin tidak apa-apa tentang endianness.
sumber