Wydział Informatyki - Informatyka (N1)
specjalność: Inżynieria oprogramowania
Sylabus przedmiotu Programowanie systemowe:
Informacje podstawowe
Kierunek studiów | Informatyka | ||
---|---|---|---|
Forma studiów | studia niestacjonarne | 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ść | przedmiot wspólny | ||
Jednostka prowadząca | Katedra Inżynierii Oprogramowania i Cyberbezpieczeństwa | ||
Nauczyciel odpowiedzialny | Witold Maćków <Witold.Mackow@zut.edu.pl> | ||
Inni nauczyciele | Sławomir Wernikowski <Slawomir.Wernikowski@zut.edu.pl> | ||
ECTS (planowane) | 2,0 | ECTS (formy) | 2,0 |
Forma zaliczenia | zaliczenie | Język | polski |
Blok obieralny | 7 | Grupa obieralna | 4 |
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) | 1 |
T-L-2 | Podstawy programowania w systemie Linux (biblioteki statyczne i dynamiczne) | 1 |
T-L-3 | Zarządzanie procesami (fork, exec, wait, waitpid, getpid, getppid). Obsługa sygnałów (kill, sigprocmask, sigaction). | 1 |
T-L-4 | Podstawowa obsługa systemu plików (opendir, closedir, readdir, rewinddir, ftw, stat, open, lseek, read, write, close) | 1 |
T-L-5 | Programowanie wątków z wykorzystaniem bibliotek pthread. Synchronizacja i komunikacja międzyprocesowa (semafory i pamięć współdzielona). | 1 |
T-L-6 | Komunikacja międzyprocesowa z wykorzystaniem gniazd. Elementy programowania sieciowego | 1 |
T-L-7 | Analiza struktury systemu plików EXT2. Programowanie ładowalnych modułów jądra LKM. | 1 |
T-L-8 | Proste sterowniki urządzeń znakowych | 1 |
T-L-9 | Podstawy programowania w RUST w systemie Linux. Elementy programowania systemowego w jezyku Rust. | 1 |
T-L-10 | Wykorzystanie XEN do wirtualizacji i parawirtualizacji | 1 |
10 | ||
wykłady | ||
T-W-1 | Podstawy programowania w systemie operacyjnym Linux (asm, gcc, GNU make, gdb, analiza statyczna i dynamiczna, tworzenie i wykorzystanie bibliotek) | 1 |
T-W-2 | Interfejs wywołań systemowych - koncepcja, wykorzystanie, przegląd funkcji | 1 |
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). | 1 |
T-W-4 | Elementy architektury jądra systemu Linux. Zarządzanie pamięcią i procesami | 1 |
T-W-5 | Elementy architektury jądra systemu Linux. Ładowalne moduły jądra LKM | 1 |
T-W-6 | Elementy architektury jądra systemu Linux. Urządzenia i sterowniki. Wirtualny system plików VFS, pseudosystemy plików, sieciowe systemy plików. | 2 |
T-W-7 | Struktura systemu plików na przykładzie EXT i ReiserFS, współpraca z VFS | 1 |
T-W-8 | Praktyczne aspekty wykorzystania wirtualizacji i parawierualizacji XEN w programowaniu systemowym. | 1 |
T-W-9 | Elementy programowania systemowego w języku Rust | 1 |
10 |
Obciążenie pracą studenta - formy aktywności
KOD | Forma aktywności | Godziny |
---|---|---|
laboratoria | ||
A-L-1 | Udział w zajęciach laboratoryjnych | 10 |
A-L-2 | Praca własna | 15 |
25 | ||
wykłady | ||
A-W-1 | Udział w wykładzie | 10 |
A-W-2 | Praca własna | 13 |
A-W-3 | Udział w konsultacjach | 2 |
25 |
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 |
---|---|---|---|---|---|---|---|
Itest_1A_C26.3_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 oraz potrafi zidentyfikować i wytłumaczyć działanie wybranych elementów składowych architektury jądra współczesnego systemu operacyjnego na przykładzie systemu Linux oraz 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_W02, I_1A_W03, I_1A_W04 | — | — | C-2, C-3 | T-L-6, T-L-7, T-L-8, T-L-3, T-L-5, T-L-4, T-L-1, T-L-2, T-L-9, T-L-10, T-W-8, T-W-4, T-W-6, T-W-2, T-W-3, T-W-5, T-W-7, T-W-1, T-W-9 | 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 |
---|---|---|---|---|---|---|---|
Itest_1A_C26.3_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) oraz 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 oraz 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_U05, I_1A_U07 | — | — | C-1, C-2, C-3 | T-L-6, T-L-8, T-L-3, T-L-5, T-L-4, T-L-1, T-L-2, T-L-9, T-W-6, T-W-2, T-W-3, T-W-5, T-W-9 | M-1, M-2 | S-1, S-2, S-3 |
Kryterium oceny - wiedza
Efekt uczenia się | Ocena | Kryterium oceny |
---|---|---|
Itest_1A_C26.3_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 oraz potrafi zidentyfikować i wytłumaczyć działanie wybranych elementów składowych architektury jądra współczesnego systemu operacyjnego na przykładzie systemu Linux oraz 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ć i wyjaśnić sposób użycia wybranych podstawowych mechanizmów systemowych (procesy, sygnały, system plików, biblioteki statyczne i dynamiczne) oraz potrafi wymienić wszystkie podstawowe elementy składowe architektury jądra systemu Linux i rozumie podstawowe interakcje między nimi | |
3,5 | potrafi wymienić i wyjaśnić sposób użycia większości podstawowych mechanizmów systemowych (wątki, potoki) oraz potrafi opisać budowę i działanie modułów jądra systemu Linux odpowiedzialnych za zarządzanie pamięcią i procesami | |
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ów, gniazda) oraz 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 objaśnić sposób tworzenia i użycia ładowalnego modułu jądra oraz prostego sterownika urządzenia znakowego oraz 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ć różnice koncepcji programowania systemowego z użyciem języków C oraz RUST a także 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 |
---|---|---|
Itest_1A_C26.3_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) oraz 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 oraz 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 efektywnie użyć wybrane podstawe mechanizmy systemowe (biblioteki statyczne i dynamiczne, procesy, sygnały, zarządzanie systemem plików) oraz potrafi w stopniu podstawowym posługiwać się dostępną w systemie dokumentacją dotyczącą funkcji systemowych oraz potrafi w stopniu podstawowym użyć kompilator gcc oraz debuger gdb | |
3,5 | potrafi efektywnie użyć wybrane podstawowe mechanizmy systemowe (wątki, potoki) oraz potrafi w stopniu zaawansowanym posługiwać sie dostępną w systemie dokumentacją dotyczącą funkcji systemowych oraz potrafi w stopniu zaawansowanym użyć kompilator gcc oraz stworzyć prosty plik projektu makefile | |
4,0 | potrafi efektywnie użyć podstawowe mechanizmy komunikacji międzyprocesowej (biblioteka IPC, gniazda) oraz potrafi instalować i aktualizować dokumentację dostępną w systemie dotczącą funkcji systemowych oraz potrafi w stopniu zaawansowanym użyć debugera gdb oraz stworzyć zaawansowany plik projektu makefile | |
4,5 | potrafi napisać i użyć prosty moduł ładowalny jądra LKM oraz potrafi w stopniu podstawowym wykorzystać dokumentację kodu źródłowego jądra systemu oraz potrafi użyć wybrany program do dynamicznej kontroli pamięci własnego kodu (przykładowo Valgrind) | |
5,0 | potrafi napisać i użyć prosty sterownik urządzenia znakowego oraz potrafi w stopniu zaawansowanym wykorzystać dokumentację kodu źródłowego jądra systemu oraz 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