Wydział Informatyki - Informatyka (S1)
Sylabus przedmiotu Programowanie systemowe:
Informacje podstawowe
Kierunek studiów | Informatyka | ||
---|---|---|---|
Forma studiów | studia stacjonarne | Poziom | pierwszego stopnia |
Tytuł zawodowy absolwenta | inżynier | ||
Obszary studiów | charakterystyki PRK, kompetencje inżynierskie PRK | ||
Profil | ogólnoakademicki | ||
Moduł | — | ||
Przedmiot | Programowanie systemowe | ||
Specjalność | Inżynieria oprogramowania | ||
Jednostka prowadząca | Katedra Inżynierii Oprogramowania | ||
Nauczyciel odpowiedzialny | Witold Maćków <Witold.Mackow@zut.edu.pl> | ||
Inni nauczyciele | Sławomir Wernikowski <Slawomir.Wernikowski@zut.edu.pl> | ||
ECTS (planowane) | 4,0 | ECTS (formy) | 4,0 |
Forma zaliczenia | egzamin | Język | polski |
Blok obieralny | — | Grupa obieralna | — |
Formy dydaktyczne
Wymagania wstępne
KOD | Wymaganie wstępne |
---|---|
W-1 | Programowanie 1 |
W-2 | Architektura systemów komputerowych |
W-3 | Systemy operacyjne |
Cele przedmiotu
KOD | Cel modułu/przedmiotu |
---|---|
C-1 | zapoznanie studentów z wybranymi elementami składowymi architektury jądra współczesnego systemu operacyjnego na przykładzie systemu Linux |
C-2 | zapoznanie studentów z podstawowymi mechanizmami udostępnianymi przez system operacyjny umożliwiającymi programowanie systemowe w przestrzeni użytkownika |
C-3 | ukształtowanie umiejętności z zakresu tworzenia elementów rozszerzających funkcjonalność jądra współczesnego systemu operacyjnego na przykładzie systemu Linux (LKM, sterowniki urządzeń) i pozwalajaych na programowanie systemowe w przestrzeni jądra |
Treści programowe z podziałem na formy zajęć
KOD | Treść programowa | Godziny |
---|---|---|
laboratoria | ||
T-L-1 | Podstawy programowania w C i ASM w systemie Linux (asm, gcc, GNU make, gdb) | 2 |
T-L-2 | Podstawy programowania w systemie Linux (biblioteki statyczne i dynamiczne) | 2 |
T-L-3 | Zarządzanie procesami (fork, exec, wait, waitpid, getpid, getppid) | 2 |
T-L-4 | Obsługa sygnałów (kill, sigprocmask, sigaction) | 2 |
T-L-5 | Podstawowa obsługa systemu plików (opendir, closedir, readdir, rewinddir, ftw, stat, open, lseek, read, write, close) | 2 |
T-L-6 | Programowanie wątków z wykorzystaniem bibliotek pthread | 2 |
T-L-7 | Synchronizacja i komunikacja międzyprocesowa (semafory i pamięć współdzielona) | 2 |
T-L-8 | Komunikacja międzyprocesowa z wykorzystaniem gniazd. Elementy programowania sieciowego | 2 |
T-L-9 | Analiza struktury systemu plików EXT2 | 2 |
T-L-10 | Programowanie ładowalnych modułów jądra LKM | 2 |
T-L-11 | Proste sterowniki urządzeń znakowych | 4 |
T-L-12 | Podstawy programowania w RUST w systemie Linux | 2 |
T-L-13 | Elementy programowania systemowego w jezyku Rust | 2 |
T-L-14 | Wykorzystanie XEN do wirtualizacji i parawirtualizacji | 2 |
30 | ||
wykłady | ||
T-W-1 | Podstawy programowania w systemie operacyjnym Linux (asm, gcc, GNU make, gdb, analiza statyczna i dynamiczna, tworzenie i wykorzystanie bibliotek) | 2 |
T-W-2 | Interfejs wywołań systemowych - koncepcja, wykorzystanie, przegląd funkcji | 2 |
T-W-3 | Podstawy programowania systemowego w przestrzeni użytkownika (procesy i mechanizmy IPC, sygnały, wątki poziomu jądra, pliki i katalogi, potoki, gniazda). | 6 |
T-W-4 | Elementy architektury jądra systemu Linux. Zarządzanie pamięcią i procesami | 3 |
T-W-5 | Elementy architektury jądra systemu Linux. Ładowalne moduły jądra LKM | 2 |
T-W-6 | Elementy architektury jądra systemu Linux. Urządzenia i sterowniki | 3 |
T-W-7 | Elementy architektury jądra systemu Linux. Wirtualny system plików VFS, pseudosystemy plików, sieciowe systemy plików. | 3 |
T-W-8 | Struktura systemu plików na przykładzie EXT i ReiserFS, współpraca z VFS | 3 |
T-W-9 | Praktyczne aspekty wykorzystania wirtualizacji i parawierualizacji XEN w programowaniu systemowym. | 2 |
T-W-10 | Elementy programowania w języku RUST | 2 |
T-W-11 | Elementy programowania systemowego w języku Rust | 2 |
30 |
Obciążenie pracą studenta - formy aktywności
KOD | Forma aktywności | Godziny |
---|---|---|
laboratoria | ||
A-L-1 | Udział w zajęciach laboratoryjnych | 30 |
A-L-2 | Przygotowanie do zajęć laboratoryjnych | 18 |
A-L-3 | Udział w konsultajach i zaliczeniu formy zajęć | 2 |
50 | ||
wykłady | ||
A-W-1 | Udział w wykładzie | 30 |
A-W-2 | Przygotowanie do egzaminu | 16 |
A-W-3 | Udział w konsultacjach | 2 |
A-W-4 | Udział w egzaminie | 2 |
50 |
Metody nauczania / narzędzia dydaktyczne
KOD | Metoda nauczania / narzędzie dydaktyczne |
---|---|
M-1 | wykład informacyjny |
M-2 | ćwiczenia laboratoryjne |
Sposoby oceny
KOD | Sposób oceny |
---|---|
S-1 | Ocena formująca: wejściówka (ocena przygotowania do zajęć) |
S-2 | Ocena formująca: ocena wykonywanego zadania programistycznego (ocena pracy wykonywanej na zajęciach) |
S-3 | Ocena podsumowująca: testowy egzamin pisemny (student może korzystać z dowolnych materiałów dydaktycznych) |
S-4 | Ocena podsumowująca: semestralne sprawozdanie dotyczące używanych podczas rozwiązywania zadań programistycznych środowisk, bibliotek i narzędzi |
Zamierzone efekty uczenia się - wiedza
Zamierzone efekty uczenia się | Odniesienie do efektów kształcenia dla kierunku studiów | Odniesienie do efektów zdefiniowanych dla obszaru kształcenia | Odniesienie do efektów uczenia się prowadzących do uzyskania tytułu zawodowego inżyniera | Cel przedmiotu | Treści programowe | Metody nauczania | Sposób oceny |
---|---|---|---|---|---|---|---|
I_1A_D02.05_W01 posiada wiedzę dotyczącą technik użycia wybrnyach języków (C, ASM, RUST) i ich bibliotek w celu uzyskania dostępu do wybranych mechanizmów systemu operacyjnego Linux | I_1A_W04 | — | — | C-2 | T-W-10, T-W-3, T-W-11, T-W-9, T-W-1, T-L-3, T-L-4, T-L-6, T-L-7, T-L-8, T-L-14, T-L-5, T-L-13, T-L-1, T-L-2, T-L-12 | M-1, M-2 | S-1, S-3 |
I_1A_D02.05_W02 potrafi zidentyfikować i wytłumaczyć działanie wybranych elementów składowych architektury jądra współczesnego systemu operacyjnego na przykładzie systemu Linux | I_1A_W10 | — | — | C-1, C-3 | T-W-4, T-W-6, T-W-5, T-W-7, T-W-8, T-L-9, T-L-10, T-L-11 | M-1, M-2 | S-1, S-3 |
Zamierzone efekty uczenia się - umiejętności
Zamierzone efekty uczenia się | Odniesienie do efektów kształcenia dla kierunku studiów | Odniesienie do efektów zdefiniowanych dla obszaru kształcenia | Odniesienie do efektów uczenia się prowadzących do uzyskania tytułu zawodowego inżyniera | Cel przedmiotu | Treści programowe | Metody nauczania | Sposób oceny |
---|---|---|---|---|---|---|---|
I_1A_D02.05_U01 potrafi napisać poprawny kod w języku C (elementy ASM i RUST) przy użyciu niskopoziomowych funkcji systemu Linux, który wykorzystuje wybrane mechanizmy systemu operacyjnego i/lub rozszerza funkcjonalność systemu (moduły ładowalne) | I_1A_U10 | — | — | C-1, C-2, C-3 | T-W-6, T-W-10, T-W-2, T-W-3, T-W-11, T-W-5, T-L-3, T-L-4, T-L-6, T-L-7, T-L-8, T-L-10, T-L-11, T-L-5, T-L-13, T-L-1, T-L-2, T-L-12 | M-1, M-2 | S-1, S-2, S-3 |
I_1A_D02.05_U02 potrafi w sposób efektywny wykorzystać do rozwiazywania zadań programistycznych dokumentację opisującą działanie wybranych elementów systemu operacyjnego Linux na poziomie jądra, odwołań systemowych i funkcji bibliotecznych | I_1A_U10 | — | — | C-2, C-3 | T-W-2, T-W-3, T-W-1, T-L-3, T-L-4, T-L-6, T-L-7, T-L-8, T-L-5, T-L-1, T-L-2 | M-1, M-2 | S-2 |
I_1A_D02.05_U03 potrafi skonfigurować środowisko programistyczne i posłużyć się dostępnymi narzędziami programistycznymi (kompilator, makefile, debuger, programy kontrolujące zarządzanie pamięcią i wykonujące analizę statyczną kodu, wirtualizacja i parawirtualizacja) w celu efektywnego rozwiązania problemów programistycznych | I_1A_U10 | — | — | C-2, C-3 | T-W-10, T-W-1, T-L-14, T-L-1, T-L-2, T-L-12 | M-1, M-2 | S-2 |
Kryterium oceny - wiedza
Efekt uczenia się | Ocena | Kryterium oceny |
---|---|---|
I_1A_D02.05_W01 posiada wiedzę dotyczącą technik użycia wybrnyach języków (C, ASM, RUST) i ich bibliotek w celu uzyskania dostępu do wybranych mechanizmów systemu operacyjnego Linux | 2,0 | |
3,0 | potrafi wymienić i wyjaśnić sposób użycia wybranych podstawowych mechanizmów systemowych (procesy, sygnały, system plików, biblioteki statyczne i dynamiczne) | |
3,5 | potrafi wymienić i wyjaśnić sposób użycia większości podstawowych mechanizmów systemowych (wątki, potoki) | |
4,0 | potrafi wymienić i wyjaśnić sposób użycia większości mechanizmów komunikacji międzyprocesowej (pamięć współdzielona, semafory, kolejki komunikatówgniazda) | |
4,5 | potrafi objaśnić sposób tworzenia i użycia ładowalnego modułu jądra oraz prostego sterownika urządzenia znakowego | |
5,0 | potrafi wyjaśnić różnice koncepcji programowania systemowego z użyciem języków C oraz RUST | |
I_1A_D02.05_W02 potrafi zidentyfikować i wytłumaczyć działanie wybranych elementów składowych architektury jądra współczesnego systemu operacyjnego na przykładzie systemu Linux | 2,0 | |
3,0 | potrafi wymienić wszystkie podstawowe elementy składowe architektury jądra systemu Linux i rozumie podstawowe interakcje między nimi | |
3,5 | potrafi opisać budowę i działanie modułów jądra systemu Linux odpowiedzialnych za zarządzanie pamięcią i procesami | |
4,0 | potrafi opisać budowę i działanie modułu VFS oraz wybranych systemów plików np. EXT2 (również na poziomie współpracy z VFS) | |
4,5 | potrafi wytłumaczyć budowę oraz działanie prostego sterownika urządzenia znakowego wykorzystującego mechanizm ładowalnego modułu jądra | |
5,0 | potrafi wyjaśnić podstawy działania wirtualizacji i parawirtualizacji XEN z punktu widzenia działania systemu operacyjnego |
Kryterium oceny - umiejętności
Efekt uczenia się | Ocena | Kryterium oceny |
---|---|---|
I_1A_D02.05_U01 potrafi napisać poprawny kod w języku C (elementy ASM i RUST) przy użyciu niskopoziomowych funkcji systemu Linux, który wykorzystuje wybrane mechanizmy systemu operacyjnego i/lub rozszerza funkcjonalność systemu (moduły ładowalne) | 2,0 | |
3,0 | potrafi efektywnie użyć wybrane podstawe mechanizmy systemowe (biblioteki statyczne i dynamiczne, proecsy, sygnały, zarządzanie systemem plików) | |
3,5 | potrafi efektywnie użyć wybrane podstawe mechanizmy systemowe (wątki, potoki) | |
4,0 | potrafi efektywnie użyć podstawowe mechanizmy komunikacji międzyprocesowej (biblioteka IPC, gniazda) | |
4,5 | potrafi napisać i użyć prosty moduł ładowalny jądra LKM | |
5,0 | potrafi napisać i użyć prosty sterownik urządzenia znakowego | |
I_1A_D02.05_U02 potrafi w sposób efektywny wykorzystać do rozwiazywania zadań programistycznych dokumentację opisującą działanie wybranych elementów systemu operacyjnego Linux na poziomie jądra, odwołań systemowych i funkcji bibliotecznych | 2,0 | |
3,0 | potrafi w stopniu podstawowym posługiwać się dostępną w systemie dokumentacją dotyczącą funkcji systemowych | |
3,5 | potrafi w stopniu zaawansowanym posługiwać sie dostępną w systemie dokumentacją dotyczącą funkcji systemowych | |
4,0 | potrafi instalować i aktualizować dokumentację dostępną w systemie dotczącą funkcji systemowych | |
4,5 | potrafi w stopniu podstawowym wykorzystać dokumentację kodu źródłowego jądra systemu | |
5,0 | potrafi w stopniu zaawansowanym wykorzystać dokumentację kodu źródłowego jądra systemu | |
I_1A_D02.05_U03 potrafi skonfigurować środowisko programistyczne i posłużyć się dostępnymi narzędziami programistycznymi (kompilator, makefile, debuger, programy kontrolujące zarządzanie pamięcią i wykonujące analizę statyczną kodu, wirtualizacja i parawirtualizacja) w celu efektywnego rozwiązania problemów programistycznych | 2,0 | |
3,0 | potrafi w stopniu podstawowym użyć kompilator gcc oraz debuger gdb | |
3,5 | potrafi w stopniu zaawansowanym użyć kompilator gcc oraz stworzyć prosty plik projektu makefile | |
4,0 | potrafi w stopniu zaawansowanym użyć debugera gdb oraz stworzyć zaawansowany plik projektu makefile | |
4,5 | potrafi użyć wybrany program do dynamicznej kontroli pamięci własnego kodu (przykładowo Valgrind) | |
5,0 | potrafi przygotować środowisko developerskie wykorzystując wirtualizacjęXEN |
Literatura podstawowa
- Robert Love, Linux System Programming. Talking Directly to the Kernel and C Library., 2013
- Daniel P. Bovet, Marco Cesati, Understanding the Linux Kernel, 2005
Literatura dodatkowa
- Zhirkov, Igor, Low-Level Programming C, Assembly, and Program Execution on Intel® 64 Architecture, 2017
- M. Mitchell, J. Oldham, A. Samuel, Advanced Linux Programming, 2001
- J. McKellar, A. Rubini, J. Corbet, G. Kroah-Hartm, Linux Device Drivers, 2005
- Michael Kerrisk, Linux Programming Interface, 2010