Zachodniopomorski Uniwersytet Technologiczny w Szczecinie

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ść 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

Forma dydaktycznaKODSemestrGodzinyECTSWagaZaliczenie
wykładyW6 15 1,00,50zaliczenie
laboratoriaL6 15 1,00,50zaliczenie

Wymagania wstępne

KODWymaganie wstępne
W-1Programowanie 1
W-2Architektura systemów komputerowych
W-3Systemy operacyjne

Cele przedmiotu

KODCel modułu/przedmiotu
C-1zapoznanie studentów z wybranymi elementami składowymi architektury jądra współczesnego systemu operacyjnego na przykładzie systemu Linux
C-2zapoznanie studentów z podstawowymi mechanizmami udostępnianymi przez system operacyjny umożliwiającymi programowanie systemowe w przestrzeni użytkownika
C-3ukształ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ęć

KODTreść programowaGodziny
laboratoria
T-L-1Podstawy programowania w C i ASM w systemie Linux (asm, gcc, GNU make, gdb)1
T-L-2Podstawy programowania w systemie Linux (biblioteki statyczne i dynamiczne)1
T-L-3Zarządzanie procesami (fork, exec, wait, waitpid, getpid, getppid)1
T-L-4Obsługa sygnałów (kill, sigprocmask, sigaction)1
T-L-5Podstawowa obsługa systemu plików (opendir, closedir, readdir, rewinddir, ftw, stat, open, lseek, read, write, close)1
T-L-6Programowanie wątków z wykorzystaniem bibliotek pthread1
T-L-7Synchronizacja i komunikacja międzyprocesowa (semafory i pamięć współdzielona)1
T-L-8Komunikacja międzyprocesowa z wykorzystaniem gniazd. Elementy programowania sieciowego1
T-L-9Analiza struktury systemu plików EXT21
T-L-10Programowanie ładowalnych modułów jądra LKM1
T-L-11Proste sterowniki urządzeń znakowych1
T-L-12Podstawy programowania w RUST w systemie Linux1
T-L-13Elementy programowania systemowego w jezyku Rust2
T-L-14Wykorzystanie XEN do wirtualizacji i parawirtualizacji1
15
wykłady
T-W-1Podstawy programowania w systemie operacyjnym Linux (asm, gcc, GNU make, gdb, analiza statyczna i dynamiczna, tworzenie i wykorzystanie bibliotek)2
T-W-2Interfejs wywołań systemowych - koncepcja, wykorzystanie, przegląd funkcji1
T-W-3Podstawy programowania systemowego w przestrzeni użytkownika (procesy i mechanizmy IPC, sygnały, wątki poziomu jądra, pliki i katalogi, potoki, gniazda).2
T-W-4Elementy architektury jądra systemu Linux. Zarządzanie pamięcią i procesami2
T-W-5Elementy architektury jądra systemu Linux. Ładowalne moduły jądra LKM1
T-W-6Elementy architektury jądra systemu Linux. Urządzenia i sterowniki. Wirtualny system plików VFS, pseudosystemy plików, sieciowe systemy plików.3
T-W-7Struktura systemu plików na przykładzie EXT i ReiserFS, współpraca z VFS1
T-W-8Praktyczne aspekty wykorzystania wirtualizacji i parawierualizacji XEN w programowaniu systemowym.1
T-W-9Elementy programowania systemowego w języku Rust2
15

Obciążenie pracą studenta - formy aktywności

KODForma aktywnościGodziny
laboratoria
A-L-1Udział w zajęciach laboratoryjnych15
A-L-2Praca własna10
25
wykłady
A-W-1Udział w wykładzie15
A-W-2Praca własna8
A-W-3Udział w konsultacjach2
25

Metody nauczania / narzędzia dydaktyczne

KODMetoda nauczania / narzędzie dydaktyczne
M-1wykład informacyjny
M-2ćwiczenia laboratoryjne

Sposoby oceny

KODSposób oceny
S-1Ocena formująca: wejściówka (ocena przygotowania do zajęć)
S-2Ocena formująca: ocena wykonywanego zadania programistycznego (ocena pracy wykonywanej na zajęciach)
S-3Ocena podsumowująca: testowy egzamin pisemny (student może korzystać z dowolnych materiałów dydaktycznych)
S-4Ocena 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ówOdniesienie do efektów zdefiniowanych dla obszaru kształceniaOdniesienie do efektów uczenia się prowadzących do uzyskania tytułu zawodowego inżynieraCel przedmiotuTreści programoweMetody nauczaniaSposó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_W04, I_1A_W03, I_1A_W02C-2, C-3T-L-8, T-L-3, T-L-4, T-L-6, T-L-7, T-L-5, T-L-1, T-L-2, T-L-12, T-L-14, T-L-13, T-W-8, T-W-3, T-W-1, T-W-9, T-W-6, T-W-7, T-L-11, T-L-9, T-L-10, T-W-5, T-W-2, T-W-4M-1, M-2S-1, S-3

Zamierzone efekty uczenia się - umiejętności

Zamierzone efekty uczenia sięOdniesienie do efektów kształcenia dla kierunku studiówOdniesienie do efektów zdefiniowanych dla obszaru kształceniaOdniesienie do efektów uczenia się prowadzących do uzyskania tytułu zawodowego inżynieraCel przedmiotuTreści programoweMetody nauczaniaSposó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_U07C-1, C-2, C-3T-L-8, T-L-10, T-L-11, T-L-3, T-L-4, T-L-6, T-L-7, T-L-5, T-L-1, T-L-2, T-L-12, T-L-13, T-W-6, T-W-2, T-W-3, T-W-5, T-W-9M-1, M-2S-1, S-2, S-3

Kryterium oceny - wiedza

Efekt uczenia sięOcenaKryterium 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,0potrafi 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,5potrafi 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,0potrafi 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,5potrafi 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,0potrafi 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ęOcenaKryterium 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,0potrafi 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,5potrafi 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,0potrafi 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,5potrafi 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,0potrafi 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

  1. Robert Love, Linux System Programming. Talking Directly to the Kernel and C Library., 2013
  2. Daniel P. Bovet, Marco Cesati, Understanding the Linux Kernel, 2005

Literatura dodatkowa

  1. Zhirkov, Igor, Low-Level Programming C, Assembly, and Program Execution on Intel® 64 Architecture, 2017
  2. M. Mitchell, J. Oldham, A. Samuel, Advanced Linux Programming, 2001
  3. J. McKellar, A. Rubini, J. Corbet, G. Kroah-Hartm, Linux Device Drivers, 2005
  4. Michael Kerrisk, Linux Programming Interface, 2010

Treści programowe - laboratoria

KODTreść programowaGodziny
T-L-1Podstawy programowania w C i ASM w systemie Linux (asm, gcc, GNU make, gdb)1
T-L-2Podstawy programowania w systemie Linux (biblioteki statyczne i dynamiczne)1
T-L-3Zarządzanie procesami (fork, exec, wait, waitpid, getpid, getppid)1
T-L-4Obsługa sygnałów (kill, sigprocmask, sigaction)1
T-L-5Podstawowa obsługa systemu plików (opendir, closedir, readdir, rewinddir, ftw, stat, open, lseek, read, write, close)1
T-L-6Programowanie wątków z wykorzystaniem bibliotek pthread1
T-L-7Synchronizacja i komunikacja międzyprocesowa (semafory i pamięć współdzielona)1
T-L-8Komunikacja międzyprocesowa z wykorzystaniem gniazd. Elementy programowania sieciowego1
T-L-9Analiza struktury systemu plików EXT21
T-L-10Programowanie ładowalnych modułów jądra LKM1
T-L-11Proste sterowniki urządzeń znakowych1
T-L-12Podstawy programowania w RUST w systemie Linux1
T-L-13Elementy programowania systemowego w jezyku Rust2
T-L-14Wykorzystanie XEN do wirtualizacji i parawirtualizacji1
15

Treści programowe - wykłady

KODTreść programowaGodziny
T-W-1Podstawy programowania w systemie operacyjnym Linux (asm, gcc, GNU make, gdb, analiza statyczna i dynamiczna, tworzenie i wykorzystanie bibliotek)2
T-W-2Interfejs wywołań systemowych - koncepcja, wykorzystanie, przegląd funkcji1
T-W-3Podstawy programowania systemowego w przestrzeni użytkownika (procesy i mechanizmy IPC, sygnały, wątki poziomu jądra, pliki i katalogi, potoki, gniazda).2
T-W-4Elementy architektury jądra systemu Linux. Zarządzanie pamięcią i procesami2
T-W-5Elementy architektury jądra systemu Linux. Ładowalne moduły jądra LKM1
T-W-6Elementy architektury jądra systemu Linux. Urządzenia i sterowniki. Wirtualny system plików VFS, pseudosystemy plików, sieciowe systemy plików.3
T-W-7Struktura systemu plików na przykładzie EXT i ReiserFS, współpraca z VFS1
T-W-8Praktyczne aspekty wykorzystania wirtualizacji i parawierualizacji XEN w programowaniu systemowym.1
T-W-9Elementy programowania systemowego w języku Rust2
15

Formy aktywności - laboratoria

KODForma aktywnościGodziny
A-L-1Udział w zajęciach laboratoryjnych15
A-L-2Praca własna10
25
(*) 1 punkt ECTS, odpowiada około 30 godzinom aktywności studenta

Formy aktywności - wykłady

KODForma aktywnościGodziny
A-W-1Udział w wykładzie15
A-W-2Praca własna8
A-W-3Udział w konsultacjach2
25
(*) 1 punkt ECTS, odpowiada około 30 godzinom aktywności studenta
PoleKODZnaczenie kodu
Zamierzone efekty uczenia sięItest_1A_C26.3_W01posiada 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
Odniesienie do efektów kształcenia dla kierunku studiówI_1A_W04Ma wiedzę o stanie obecnym i kierunkach rozwoju kluczowych obszarów informatyki i wybranych aspektów dyscyplin z otoczenia informatyki.
I_1A_W03Ma szczegółową wiedzę w zakresie wybranych specjalności informatyki technicznej.
I_1A_W02Ma zaawansowaną i uporządkowaną, podbudowaną teoretycznie wiedzę ogólną obejmującą kluczowe zagadnienia z zakresu fundamentalnych obszarów informatyki.
Cel przedmiotuC-2zapoznanie studentów z podstawowymi mechanizmami udostępnianymi przez system operacyjny umożliwiającymi programowanie systemowe w przestrzeni użytkownika
C-3ukształ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 programoweT-L-8Komunikacja międzyprocesowa z wykorzystaniem gniazd. Elementy programowania sieciowego
T-L-3Zarządzanie procesami (fork, exec, wait, waitpid, getpid, getppid)
T-L-4Obsługa sygnałów (kill, sigprocmask, sigaction)
T-L-6Programowanie wątków z wykorzystaniem bibliotek pthread
T-L-7Synchronizacja i komunikacja międzyprocesowa (semafory i pamięć współdzielona)
T-L-5Podstawowa obsługa systemu plików (opendir, closedir, readdir, rewinddir, ftw, stat, open, lseek, read, write, close)
T-L-1Podstawy programowania w C i ASM w systemie Linux (asm, gcc, GNU make, gdb)
T-L-2Podstawy programowania w systemie Linux (biblioteki statyczne i dynamiczne)
T-L-12Podstawy programowania w RUST w systemie Linux
T-L-14Wykorzystanie XEN do wirtualizacji i parawirtualizacji
T-L-13Elementy programowania systemowego w jezyku Rust
T-W-8Praktyczne aspekty wykorzystania wirtualizacji i parawierualizacji XEN w programowaniu systemowym.
T-W-3Podstawy programowania systemowego w przestrzeni użytkownika (procesy i mechanizmy IPC, sygnały, wątki poziomu jądra, pliki i katalogi, potoki, gniazda).
T-W-1Podstawy programowania w systemie operacyjnym Linux (asm, gcc, GNU make, gdb, analiza statyczna i dynamiczna, tworzenie i wykorzystanie bibliotek)
T-W-9Elementy programowania systemowego w języku Rust
T-W-6Elementy architektury jądra systemu Linux. Urządzenia i sterowniki. Wirtualny system plików VFS, pseudosystemy plików, sieciowe systemy plików.
T-W-7Struktura systemu plików na przykładzie EXT i ReiserFS, współpraca z VFS
T-L-11Proste sterowniki urządzeń znakowych
T-L-9Analiza struktury systemu plików EXT2
T-L-10Programowanie ładowalnych modułów jądra LKM
T-W-5Elementy architektury jądra systemu Linux. Ładowalne moduły jądra LKM
T-W-2Interfejs wywołań systemowych - koncepcja, wykorzystanie, przegląd funkcji
T-W-4Elementy architektury jądra systemu Linux. Zarządzanie pamięcią i procesami
Metody nauczaniaM-1wykład informacyjny
M-2ćwiczenia laboratoryjne
Sposób ocenyS-1Ocena formująca: wejściówka (ocena przygotowania do zajęć)
S-3Ocena podsumowująca: testowy egzamin pisemny (student może korzystać z dowolnych materiałów dydaktycznych)
Kryteria ocenyOcenaKryterium oceny
2,0
3,0potrafi 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,5potrafi 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,0potrafi 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,5potrafi 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,0potrafi 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
PoleKODZnaczenie kodu
Zamierzone efekty uczenia sięItest_1A_C26.3_U01potrafi 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
Odniesienie do efektów kształcenia dla kierunku studiówI_1A_U05Potrafi zaplanować i zrealizować eksperymenty w zakresie oceny wydajności, złożoności, efektywności systemów informatycznych i ich składowych.
I_1A_U07Potrafi samodzielnie posługiwać się materiałami źródłowymi w zakresie analizy i syntezy zawartych w nich informacji oraz poddawać je krytycznej ocenie w odniesieniu do problemów informatycznych.
Cel przedmiotuC-1zapoznanie studentów z wybranymi elementami składowymi architektury jądra współczesnego systemu operacyjnego na przykładzie systemu Linux
C-2zapoznanie studentów z podstawowymi mechanizmami udostępnianymi przez system operacyjny umożliwiającymi programowanie systemowe w przestrzeni użytkownika
C-3ukształ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 programoweT-L-8Komunikacja międzyprocesowa z wykorzystaniem gniazd. Elementy programowania sieciowego
T-L-10Programowanie ładowalnych modułów jądra LKM
T-L-11Proste sterowniki urządzeń znakowych
T-L-3Zarządzanie procesami (fork, exec, wait, waitpid, getpid, getppid)
T-L-4Obsługa sygnałów (kill, sigprocmask, sigaction)
T-L-6Programowanie wątków z wykorzystaniem bibliotek pthread
T-L-7Synchronizacja i komunikacja międzyprocesowa (semafory i pamięć współdzielona)
T-L-5Podstawowa obsługa systemu plików (opendir, closedir, readdir, rewinddir, ftw, stat, open, lseek, read, write, close)
T-L-1Podstawy programowania w C i ASM w systemie Linux (asm, gcc, GNU make, gdb)
T-L-2Podstawy programowania w systemie Linux (biblioteki statyczne i dynamiczne)
T-L-12Podstawy programowania w RUST w systemie Linux
T-L-13Elementy programowania systemowego w jezyku Rust
T-W-6Elementy architektury jądra systemu Linux. Urządzenia i sterowniki. Wirtualny system plików VFS, pseudosystemy plików, sieciowe systemy plików.
T-W-2Interfejs wywołań systemowych - koncepcja, wykorzystanie, przegląd funkcji
T-W-3Podstawy programowania systemowego w przestrzeni użytkownika (procesy i mechanizmy IPC, sygnały, wątki poziomu jądra, pliki i katalogi, potoki, gniazda).
T-W-5Elementy architektury jądra systemu Linux. Ładowalne moduły jądra LKM
T-W-9Elementy programowania systemowego w języku Rust
Metody nauczaniaM-1wykład informacyjny
M-2ćwiczenia laboratoryjne
Sposób ocenyS-1Ocena formująca: wejściówka (ocena przygotowania do zajęć)
S-2Ocena formująca: ocena wykonywanego zadania programistycznego (ocena pracy wykonywanej na zajęciach)
S-3Ocena podsumowująca: testowy egzamin pisemny (student może korzystać z dowolnych materiałów dydaktycznych)
Kryteria ocenyOcenaKryterium oceny
2,0
3,0potrafi 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,5potrafi 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,0potrafi 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,5potrafi 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,0potrafi 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