Nauka architektury komputera jako programista [zamknięte]

12

Zwykle spotykam guru w SO i innych miejscach (instruktorzy, autorzy książek itp.), Którzy powiedzieliby coś w stylu "This will cause alignment issues"innych ciekawostek na niskim poziomie.

Chcę dowiedzieć się o tych wszystkich ciekawostkach związanych relevantz programowaniem. Teraz, kiedy widzę książki niskiego poziomu (na przykład książki o architekturze komputerowej), są one zbyt niskie i są skierowane do osób, których głównym obszarem zainteresowań jest architektura komputerowa, a nie projektowanie oprogramowania.

Czy masz zalecenia dotyczące książek, które przechodzą przez rzeczy niskiego poziomu, które są istotne dla programistów?

Samaursa
źródło
4
Chcesz „książek, które przechodzą przez rzeczy niskiego poziomu”, ale nie chcesz książek, które są zbyt „niskiego poziomu”? Nauka architektury dla niektórych programistów może być bardzo korzystna. Analogicznie do programisty WWW znającego stos TCP / IP. To nigdy nie jest tak przydatne, dopóki NAPRAWDĘ go nie potrzebujesz. \
Chris
1
@Chris: Miałem na myśli „niski poziom dla programistów” ... technicznie możemy posunąć się aż do pełnej architektury procesorów i bez wątpienia będzie to przydatne pewnego dnia, ale biorąc pod uwagę, że wszyscy mamy ograniczony czas, książka który uczy rzeczy niskiego poziomu, o których wszyscy programiści powinni wiedzieć, będą idealne.
Samaursa
W takim przypadku każda książka wprowadzająca poprowadzi cię we właściwym kierunku, a następnie wybierzesz ją na podstawie potrzeby lub pragnienia.
Chris
Ktoś, kto prowadzi samochód z automatyczną skrzynią biegów, czerpie korzyści ze znajomości tego, jak to jest i jak działa podczas jazdy. Wierzę, że stałeś się lepszym programistą, ucząc się co najmniej trochę programowania w języku asemblera, w taki sam sposób, w jaki myślę, że stajesz się lepszym kierowcą, kiedy uczysz się „prowadzić drążek”.
Warren P

Odpowiedzi:

16

Ładnym zestawem książek właśnie do tego celu jest seria Randall Hyde „Write Great Code” ( Vol.1 Vol. 2 ): opis architektury maszyn wyraźnie z perspektywy tego, co musisz wiedzieć, aby pisać efektywny kod w językach wysokiego poziomu .

Kilian Foth
źródło
Do jakich języków wysokiego poziomu miałoby to zastosowanie? Czy obejmuje to na przykład Python, JavaScript, C #, Scala?
Job
@Job - Nie czytałem książek, ale powiedziałbym, że dotyczyłby tych, które mogłyby / mogłyby skorzystać z takich rzeczy, jak wielowątkowość i przetwarzanie 64-bitowe. Uruchamianie wspomnianych języków prawdopodobnie sprawiłoby, że ta wiedza byłaby przydatna (szczególnie jeśli jesteś administratorem serwera lub używasz tych języków poza środowiskiem internetowym).
Shauna
Hyde jest guru języka asemblera, więc dla niego „wysoki poziom” oznacza głównie C. Ale jego treść jest równie ważna dla użytkowników jeszcze wyższych języków; Ciągi, wywołania procedur itp. Tak naprawdę nie różnią się tak bardzo na poziomie sprzętowym, niezależnie od tego, czy są zadeklarowane w C czy w Pythonie.
Kilian Foth
Sądzę, że każdy natywny język skompilowany (C, C ++, Pascal, Objective-C), który również pozwala na trochę języka asemblera, najbardziej skorzystałby na tej książce. Jednak ludzie, którzy używają Pythona i piszą dla niego rozszerzenia w C, a nawet ludzie, którzy używają java i nie używają żadnych natywnych metod, mogą zrobić trochę więcej myślenia o koszcie tego, co robią, i jak skutecznie wykonywać swoją pracę na używanej platformie.
Warren P
Chociaż jeszcze nie czytałem książek, wybiorę tę odpowiedź jako poprawną na podstawie recenzji / podsumowania książki.
Samaursa,
6

Niestety nie znam współczesnego odpowiednika Microprocessors: A Programmer's View autorstwa R. Dewara. Najbliższe, jakie znam, to organizacja i projektowanie komputerów, czwarta edycja: interfejs sprzętowo-programowy autorstwa Davida A. Pattersona i Johna L. Hennessy'ego, ale nie jestem pewien, czy nie uznasz tego za zbyt niski; na pewno zrobisz to dla ich innej pracy, Architektura Komputerowa, podejście ilościowe.

Online http://www.uxsup.csx.cam.ac.uk/courses/Architecture/course.pdf prawdopodobnie da ci to, czego chcesz.

AProgrammer
źródło
Link do pliku pdf jest martwy.
ajay
3

Uważam, że „Architektura komputerów: podejście ilościowe” Hennessy i Pattersona ( łącze Amazon ) to bardzo mocne i solidne podejście do architektury komputerów, z kilkoma studiami przypadków, które są bezpośrednio związane z programowaniem.

Jest on używany w różnym stopniu na kilku kursach architektury CS na poziomie licencjackim i magisterskim w USA.

Niedawno otrzymał także świetną recenzję na temat Ars Technica .

Bitgarden
źródło
1
Chociaż podoba mi się ta książka - jestem właścicielem czterech wydań - jest ona skierowana do architektów komputerowych, a nie programistów.
AProgrammer
3

Tego właśnie używam w mojej klasie Computer Systems: Computer Systems: A Programmer's Perspective (2nd Edition) i kiedy klasa właśnie się rozpoczęła, przyjrzałem się jej i naprawdę mi się podobała.

Oto opis książki:

Niewielu studentów studiujących informatykę lub inżynierię komputerową kiedykolwiek będzie miało możliwość zbudowania systemu komputerowego. Z drugiej strony większość uczniów będzie musiała używać i programować komputery niemal codziennie. Systemy komputerowe: Perspektywa programisty wprowadza ważne i trwałe koncepcje leżące u podstaw systemów komputerowych, pokazując, w jaki sposób te pomysły wpływają na poprawność, wydajność i użyteczność programów użytkowych. Praktyczne podejście zawarte w tekście (w tym obszerny zestaw laboratoriów) pomaga uczniom zrozumieć funkcjonowanie nowoczesnego systemu komputerowego „pod maską” i przygotowuje je do przyszłych kursów na tematy systemowe, takie jak kompilatory, architektura komputera, systemy operacyjne, i tworzenie sieci.

Jetti
źródło
To niesamowita książka !!
Armando
2

To dużo pracy, ale Pragmatyka języka programowania może być dokładnie tym, czego szukasz. Książka teoretycznie dotyczy głównie analizowania składni i kompilacji (co jest niezbędną wiedzą dla tych, którzy chcą naprawdę nauczyć się programowania), a w trakcie tego procesu skończysz na uczeniu się, w jaki sposób pojęcia językowe przekładają się na to, co dzieje się na niskim poziomie. Jeszcze lepiej, jeśli nauczysz się tego dla wielu języków jednocześnie i będziesz w stanie inteligentnie porównać i skontrolować sposób działania różnych języków.

Nie mogę tego polecić, chyba że poświęcisz kilka miesięcy na naukę materiału. To nie jest coś, co po prostu przeglądasz i nagle zostajesz oświecony. Ale jeśli mówisz poważnie, gorąco polecam.

btilly
źródło
2

W biologii może to być fałsz, ale w informatyce prawie ontogeny „podsumowuje filogenezę”. Historyczny przegląd architektur komputerowych od pierwszych komputerów to świetny sposób na zrozumienie tematu architektury komputerowej z perspektywy programisty; projekty komputerowe są prawie wszystkimi udoskonaleniami wcześniejszych projektów.

To znaczy, polecam przestudiować kompletne działające starsze projekty systemów, zamiast teoretycznych książek o „architekturze komputerowej”, które ci dają w dziedzinie informatyki. Aby naprawdę zrozumieć projektowanie systemów i wykonać naprawdę świetną robotę w pisaniu oprogramowania. Intuicyjne opanowanie architektury systemów komputerowych wymaga opanowania wielu koncepcji. Myślę, że jeśli zaczniesz od nowa, kiedy architektury komputerów będą łatwiejsze w zarządzaniu pod względem wielkości i zakresu, możesz pomóc ojcu w tworzeniu lepszego kodu.

(Nawiasem mówiąc, ta seria książek „napisz świetny kod”, o której wspominał inny facet, wygląda świetnie, a ja zredagowałem moje pytanie, aby usunąć wszelkie aspiracje, które wcześniej rzuciłem na uczenie się z książki, ponieważ wygląda świetnie! )

Niektóre rzeczy, które naprawdę dobrze uczą architektury komputerów:

  1. Lubię wybierać maszyny z lat 80. jako miejsca początkowe do wyjaśniania i demonstrowania ludziom rzeczy, ponieważ wtedy zacząłem używać komputerów. Skorzystałem z przewodnika programisty Commodore 64, aby pokazać ludziom odskakujące miejsce, w którym wiedza o programowaniu i architektura komputera spotykają się. Z taką książką i być może emulatorem Commodore 64 działającym na twoim komputerze, abyś mógł wypróbować różne rzeczy, dowiesz się, jak zbudowane są systemy komputerowe w klasycznej inkarnacji architektury komputerowej z lat 80. Moim zdaniem, jeden konkretny przykład jest lepszym miejscem do rozpoczęcia, niż tuzin modeli teoretycznych, w których brakuje prawdziwych szczegółów świata, które sprawiają, że wszystko działa. Jeśli wiesz, czym jest rejestr, czym jest ALU, czym jest autobus i czym jest zegar, oraz jakie systemy sygnalizacyjne są używane w starym projekcie z lat 80., które dadzą Ci podstawy, które musisz wiedzieć, aby zrozumieć coś nowego, na przykład „architekturę piaskowego mostu” Intela. Historycznie, spójrz wstecz na oryginały, na przykład spójrz na architekturę „Von neumann” na wikipedii.

  2. Przechodząc od pierwszego punktu do kilku lat; Dowiedz się o oryginalnej architekturze IBM PC, języku asemblera 8086 i magistrali ISA. Z tego i jego ograniczeń zrozumienie, co zawiera procesor „Intel COre i7” oraz co robią szyny PCI i PCI-e i dlaczego ich potrzebujesz, może przebiegać bardziej naturalnie. Architektura komputerów PC wciąż ma trochę „kaca” z oryginalnego projektu IBM PC. Sposób, w jaki początkowe ładowanie programu (systemu operacyjnego) odbywa się na komputerze PC z 2011 r., Wciąż wiele zawdzięcza dziedzictwu oryginalnego komputera IBM i jego ROM ROM oraz ustawieniom CMOS na oryginalnym komputerze.

  3. Użyj i zmodyfikuj wstępnie skonfigurowaną kompilację Linuksa, która działa na niektórych wbudowanych urządzeniach innych niż komputery PC, a dowiesz się dużo o architekturze komputera wbudowanego, nie tylko architekturze technicznej, ale także o tym, dlaczego niektóre funkcje są dostępne. Dobrym przykładem, który jest dostępny tanio, jest TS-7200, który ma niezły PC-104 (ISA Bus, jak w oryginalnym PC). Komputery PC-104 (wbudowana 16-bitowa magistrala ISA, która jest pinowo kompatybilna z komputerami PC z epoki IBM PC / AT 80286) to świetny sposób na zbudowanie wbudowanego systemu dla osób niebędących projektantami, ponieważ moduły można ustawiać jeden na drugim. Chcesz dodatkowe IO lub urządzenia peryferyjne? Po prostu ułóż kilka modułów. TS-7200 ma rdzeń inny niż x86 (procesor ARM9), który może obsługiwać zarówno Big-Endian, jak i Little-Endian. Jeśli nie spotkałeś się jeszcze z „endianizmem” w swojej podróży do nauki architektury, jest to dobre miejsce na spotkanie.

Warren P.
źródło
0

Większość książek na temat asemblera omawia istotne cechy architektury, ale zwykle tylko dla architektury, na którą jest skierowana książka. Otrzymasz więc informacje o wyciekach z pamięci podręcznej i technikach mapowania stron MMU, ale prawdopodobnie nic o endianice.

TMN
źródło