Systemy komputerowe 2019
Plan tygodniowy
-
Elementarny wykład z architektury komputerów i struktury systemów operacyjnych, ze szczególnym uwzględnieniem interakcji pomiędzy tymi dwoma komponentami systemów komputerowych. Oprócz zrozumienia najważniejszych idei, studenci nabędą praktyczne umiejętności niezbędne współczesnemu programiście: podstawy programowania niskopoziomowego (na przykładzie asemblera x86-64), programowania systemowego (obsługa plików, procesów, komunikacji międzyprocesowej) i współbieżnego (synchronizacja, współdzielenie zasobów). Zrozumieją, jak używane przez nich konstrukty językowe wpływają na wydajność programów. Wykładowi towarzyszy ćwiczenio-pracownia.
Studenci będą zachęcani do kontynuowania przygody z budową i organizacją systemów komputerowych na bardziej zaawansowanych wykładach: “Architektury systemów komputerowych”,“Systemy operacyjne” (uwaga: za te dwa przedmioty nie będzie można wtedy uzyskać punktów ECTS), “Struktura jądra systemu UNIX”, “Projekt: System operacyjny Mimiker“.
Wymagania
- Elementarna znajomość języka C
- Umiejętność obsługi systemu komputerowego
Zasady zaliczania
Zajęcia pomocnicze to ćwiczenia tablicowe i pracownie. Te dwa typy zajęć podlegają osobnej ocenie. Pozytywne zaliczenie obydwu jest warunkiem dopuszczenia do egzaminu końcowego.
- Odbędzie się 15. ćwiczeń tablicowych oraz 3 - 5 pracowni.
- Każde ćwiczenia to lista zadań wartych około 10. punktów.
- Orientacyjne progi punktowe dla obydwu typów zajęć: 50% -- 3.0, 60% -- 3.5, 70% -- 4.0, 80% -- 4.5, 90% -- 5.0
Wykład kończy się egzaminem pisemnym.
Literatura podstawowa:
- Computer Systems: A Programmer's Perspective; 3rd Edition; Randal E. Bryant, David R. O'Hallaron
- Systemy operacyjne (Wydanie IV) Andrew S. Tanenbaum, Herbert Bos. Tytuł oryginału:
Modern Operating Systems (4th Edition) - Systemy operacyjne. Architektura, funkcjonowanie i projektowanie. (Wydanie IX) William Stallings. Tytuł oryginału: Operating Systems: Internals and Design Principles (9th Edition)
- ...
Literatura dodatkowa:
- Uczta programistów; Henry S. Warren. Tytuł oryginału: Hackers Delight
- Memory Systems: Cache, DRAM, Disk Bruce Jacob, Spencer Ng, David Wang
- ...
Zasady prowadzenia zajęć
Ćwiczenia
- Warunkiem koniecznym do uzyskania punktów za zrobienie zadań jest uczestnictwo w zajęciach.
- Obowiązuje system deklaracji znany z innych przedmiotów.
- Jeśli nie jest to określone, zadanie jest warte jeden punkt.
- Student zobowiązuje się przygotować starannie rozwiązania zadeklarowanych zadań. W przypadku zbędnego przeciągania prezentacji prowadzący zajęcia może skreślić zadanie.
- W przypadku błędnego rozwiązania, zadanie zostaje skreślone z deklaracji.
- Jeśli student zadeklarował zadanie, którego w oczywisty sposób nie potrafi rozwiązać, przewiduje się karę w postaci wykreślenia pewnej ilości punktów z deklaracji.
- Jeśli dodatkowo student wykazuje brak znajomości podstawowych pojęć pojawiających się na liście, to przewidywana jest kara w postaci punktów ujemnych.
- Student nie otrzymuje punktów za zadanie, jeśli nie był na sali w trakcie losowania osoby prezentującej rozwiązanie.
Egzaminy
- egzamin połówkowy odbędzie się 17 maja o g. 16 w sali 25
- egzamin końcowy odbędzie się 15 czerwca o g. 11 w sali 25
- egzamin poprawkowy --- t.b.a.
-
Wykład 1: Reprezentacja danych
Rozdział 2. CSAPP3e.
-
Wykład 2: Programowanie niskopoziomowe (część I)
Rozdziały 3.1 -- 3.5 CSAPP3e.
-
Programowanie niskopoziomowe: flagi operacji arytmetycznych, skoki, tłumaczenie struktur sterujących języka C na asembler, unikanie skoków za pomocą instrukcji cmov, stos i jego zastosowanie w implementacji procedur rekurencyjnych, struktura ramki stosu. Konwencja przekazywania argumentów i zachowywania rejestrów (x86-64 System V ABI).
-
Programowanie niskopoziomowe: struktura przestrzeni adresowej procesu, niebezpieczeństwa związane z przepełnieniem bufora i zapobieganie im. Niskopoziomowa optymalizacja programów: co potrafi a czego nie potrafi kompilator. Blokery optymalizacji. Rzut oka na mikroarchitekturę współczesnych procesorów (do slajdu 29).
-
Optymalizacja cd.: wpływ mikroarchitektury na wydajność programów (hasła: superskalarność, instruction-level parallelism, out-of-order execution, przetwarzanie potokowe, register renaming, przetwarzanie spekulatywne, przewidywanie skoków). Eliminowanie zależności przez rozwijanie pętli, akumulowanie kilku wyników pośrednich, zmianę kolejności ewaluacji podwyrażeń. Łączenie kodu: rola linkera, łączenie plików w formacie ELF (mechanizmy i problemy).
-