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 relevant
z 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?
low-level
computer-architecture
Samaursa
źródło
źródło
Odpowiedzi:
Ł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 .
źródło
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.
źródło
W przypadku platform x86 pobierz kopię instrukcji procesorów Intel IA-32 i Intel 64 . Podręcznik referencyjny optymalizacji omawia wiele z tych problemów z niskiego poziomu dla procesorów Intel x86. AMD ma również podobne podręczniki dotyczące tych samych problemów.
Większość innych architektur procesorów ma podobne instrukcje omawiające problemy z wydajnością. ( Np. ARM i PowerPC .)
źródło
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 .
źródło
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:
źródło
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.
źródło
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:
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.
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.
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.
źródło
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.
źródło