Wykład jest elementarnym wprowadzeniem do budowy i zasad działania komputerów
z punktu widzenia programisty. Po zaliczeniu przedmiotu studenci powinni
rozumieć jaki wpływ ma architektura komputera na wydajność aplikacji, które
przyjdzie im implementować w praktyce zawodowej.
#### Program:
##### Programowanie niskopoziomowe [12h]
* reprezentacja danych w pamięci komputera,
* arytmetyka na liczbach binarnych w systemie uzupełnień do dwóch
* arytmetyka na liczbach zmiennopozycyjnych standardu IEEE754,
* problemy wynikające z ograniczeń reprezentacji maszynowych typów numerycznych,
* translacja programów z języka C do asemblera (wyrażenia, instrukcje sterujące, typy rekordowe i tablicowe)
* konwencja wołania procedur i organizacja stosu wywołań (ABI),
* proces kompilacji, konsolidacji i ładowania programów (sekcje, relokacje, układ pamięci)
* reprezentacja programów – format plików konsolidowalnych i wykonywalnych ELF.
##### Pamięć, peryferia i model systemowy [8h]
* organizacja pamięci operacyjnej (czasu dostępu, protokół DDR),
* dyski magnetyczne i półprzewodnikowe (multi-zone recording, buforowanie, odśmiecanie bloków),
* tryby pracy procesora (model użytkownika i systemowy, zasoby i instrukcje uprzywilejowane).
* przerwania i wyjątki (obsługa, wektor przerwań, priorytety, NMI, tryb krokowy),
* komunikacja procesora z urządzeniami peryferyjnymi (MMIO, DMA, szyna PCI),
* organizacja pamięci podręcznej procesora (polityka wymiany),
* analiza i optymalizacja programów pod kątem lokalności czasowej i przestrzennej,
* motywacje stojące z wprowadzeniem sprzętowego wsparcia dla pamięci wirtualnej,
* mechanizm translacji adresów (tablica stron, TLB),
* problemy na styku translacji adresów i pamięci podręcznej (homonimy, synonimy).
##### Od tranzystora do procesora [10h]
* zasada działania tranzystorów, konstrukcja bramek logicznych, szyny,
* układy kombinacyjne i sekwencyjne (w tym automaty Moore i Mealy),
* zegar i problemy z czasem w układach cyfrowych,
* języki opisu sprzętu (Verilog) i programowalne układy FPGA,
* wybrane bloki podstawowe (multiplekser, dekoder, rejestr, ALU),
* szybki układ sumatora z użyciem drzew prefiksowych,
* jednocyklowa implementacja procesor MIPS,
* potokowa implementacja procesor MIPS (zależności i hazardy),
* przewidywanie skoków (BHT, BTAC, przewidywanie lokalne i globalne).
* przetwarzanie superskalarne (procesory Out-of-Order, spekulacja, przemianowywanie rejestrów, SMT),
* systemy wieloprocesorowe (instrukcje atomowe, komunikacja międzyprocesorowa, cache snooping),
* przetwarzanie wektorowe (SIMD, procesory wektorowe, GPGPU).
#### **Literatura:**
* [Computer Organization and Design: The Hardware/Software Interface](http://store.elsevier.com/Computer-Organization-and-Design/David-Patterson/isbn-9780124077263/ "Computer Organization and Design: The Hardware/Software Interface"); piąte wydanie; Hennesy, Patterson
* [Computer Systems: A Programmer's Perspective](http://csapp.cs.cmu.edu/); trzecie wydanie; Randal E. Bryant, David R. O'Hallaron
#### Zajęcia:
Większość zajęć do przedmiotu będzie prowadzona w postaci ćwiczeń z
deklaracjami. Pozostałe to pracownie programistyczne (programowanie w
asemblerze, optymalizacja programów w języku C).