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

Forma dydaktycznaKODSemestrGodzinyECTSWagaZaliczenie
laboratoriaL6 30 2,00,50zaliczenie
wykładyW6 30 2,00,50egzamin

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)2
T-L-2Podstawy programowania w systemie Linux (biblioteki statyczne i dynamiczne)2
T-L-3Zarządzanie procesami (fork, exec, wait, waitpid, getpid, getppid)2
T-L-4Obsługa sygnałów (kill, sigprocmask, sigaction)2
T-L-5Podstawowa obsługa systemu plików (opendir, closedir, readdir, rewinddir, ftw, stat, open, lseek, read, write, close)2
T-L-6Programowanie wątków z wykorzystaniem bibliotek pthread2
T-L-7Synchronizacja i komunikacja międzyprocesowa (semafory i pamięć współdzielona)2
T-L-8Komunikacja międzyprocesowa z wykorzystaniem gniazd. Elementy programowania sieciowego2
T-L-9Analiza struktury systemu plików EXT22
T-L-10Programowanie ładowalnych modułów jądra LKM2
T-L-11Proste sterowniki urządzeń znakowych4
T-L-12Podstawy programowania w RUST w systemie Linux2
T-L-13Elementy programowania systemowego w jezyku Rust2
T-L-14Wykorzystanie XEN do wirtualizacji i parawirtualizacji2
30
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 funkcji2
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).6
T-W-4Elementy architektury jądra systemu Linux. Zarządzanie pamięcią i procesami3
T-W-5Elementy architektury jądra systemu Linux. Ładowalne moduły jądra LKM2
T-W-6Elementy architektury jądra systemu Linux. Urządzenia i sterowniki3
T-W-7Elementy architektury jądra systemu Linux. Wirtualny system plików VFS, pseudosystemy plików, sieciowe systemy plików.3
T-W-8Struktura systemu plików na przykładzie EXT i ReiserFS, współpraca z VFS3
T-W-9Praktyczne aspekty wykorzystania wirtualizacji i parawierualizacji XEN w programowaniu systemowym.2
T-W-10Elementy programowania w języku RUST2
T-W-11Elementy programowania systemowego w języku Rust2
30

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

KODForma aktywnościGodziny
laboratoria
A-L-1Udział w zajęciach laboratoryjnych30
A-L-2Przygotowanie do zajęć laboratoryjnych18
A-L-3Udział w konsultajach i zaliczeniu formy zajęć2
50
wykłady
A-W-1Udział w wykładzie30
A-W-2Przygotowanie do egzaminu16
A-W-3Udział w konsultacjach2
A-W-4Udział w egzaminie2
50

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
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_W04C-2T-W-1, T-W-3, T-W-9, T-W-11, T-W-10, T-L-1, T-L-2, T-L-3, T-L-4, T-L-5, T-L-6, T-L-7, T-L-8, T-L-12, T-L-14, T-L-13M-1, M-2S-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_W10C-1, C-3T-W-4, T-W-5, T-W-6, T-W-7, T-W-8, T-L-9, T-L-10, T-L-11M-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
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_U10C-1, C-2, C-3T-W-2, T-W-3, T-W-5, T-W-6, T-W-11, T-W-10, T-L-1, T-L-2, T-L-3, T-L-4, T-L-5, T-L-6, T-L-7, T-L-8, T-L-10, T-L-11, T-L-12, T-L-13M-1, M-2S-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_U10C-2, C-3T-W-1, T-W-2, T-W-3, T-L-1, T-L-2, T-L-3, T-L-4, T-L-5, T-L-6, T-L-7, T-L-8M-1, M-2S-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_U10C-2, C-3T-W-1, T-W-10, T-L-1, T-L-2, T-L-12, T-L-14M-1, M-2S-2

Kryterium oceny - wiedza

Efekt uczenia sięOcenaKryterium 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,0potrafi wymienić i wyjaśnić sposób użycia wybranych podstawowych mechanizmów systemowych (procesy, sygnały, system plików, biblioteki statyczne i dynamiczne)
3,5potrafi wymienić i wyjaśnić sposób użycia większości podstawowych mechanizmów systemowych (wątki, potoki)
4,0potrafi wymienić i wyjaśnić sposób użycia większości mechanizmów komunikacji międzyprocesowej (pamięć współdzielona, semafory, kolejki komunikatówgniazda)
4,5potrafi objaśnić sposób tworzenia i użycia ładowalnego modułu jądra oraz prostego sterownika urządzenia znakowego
5,0potrafi 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,0potrafi wymienić wszystkie podstawowe elementy składowe architektury jądra systemu Linux i rozumie podstawowe interakcje między nimi
3,5potrafi opisać budowę i działanie modułów jądra systemu Linux odpowiedzialnych za zarządzanie pamięcią i procesami
4,0potrafi 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 wytłumaczyć budowę oraz działanie prostego sterownika urządzenia znakowego wykorzystującego mechanizm ładowalnego modułu jądra
5,0potrafi 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
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,0potrafi efektywnie użyć wybrane podstawe mechanizmy systemowe (biblioteki statyczne i dynamiczne, proecsy, sygnały, zarządzanie systemem plików)
3,5potrafi efektywnie użyć wybrane podstawe mechanizmy systemowe (wątki, potoki)
4,0potrafi efektywnie użyć podstawowe mechanizmy komunikacji międzyprocesowej (biblioteka IPC, gniazda)
4,5potrafi napisać i użyć prosty moduł ładowalny jądra LKM
5,0potrafi 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,0potrafi w stopniu podstawowym posługiwać się dostępną w systemie dokumentacją dotyczącą funkcji systemowych
3,5potrafi w stopniu zaawansowanym posługiwać sie dostępną w systemie dokumentacją dotyczącą funkcji systemowych
4,0potrafi instalować i aktualizować dokumentację dostępną w systemie dotczącą funkcji systemowych
4,5potrafi w stopniu podstawowym wykorzystać dokumentację kodu źródłowego jądra systemu
5,0potrafi 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,0potrafi w stopniu podstawowym użyć kompilator gcc oraz debuger gdb
3,5potrafi w stopniu zaawansowanym użyć kompilator gcc oraz stworzyć prosty plik projektu makefile
4,0potrafi w stopniu zaawansowanym użyć debugera gdb oraz stworzyć zaawansowany plik projektu makefile
4,5potrafi użyć wybrany program do dynamicznej kontroli pamięci własnego kodu (przykładowo Valgrind)
5,0potrafi 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)2
T-L-2Podstawy programowania w systemie Linux (biblioteki statyczne i dynamiczne)2
T-L-3Zarządzanie procesami (fork, exec, wait, waitpid, getpid, getppid)2
T-L-4Obsługa sygnałów (kill, sigprocmask, sigaction)2
T-L-5Podstawowa obsługa systemu plików (opendir, closedir, readdir, rewinddir, ftw, stat, open, lseek, read, write, close)2
T-L-6Programowanie wątków z wykorzystaniem bibliotek pthread2
T-L-7Synchronizacja i komunikacja międzyprocesowa (semafory i pamięć współdzielona)2
T-L-8Komunikacja międzyprocesowa z wykorzystaniem gniazd. Elementy programowania sieciowego2
T-L-9Analiza struktury systemu plików EXT22
T-L-10Programowanie ładowalnych modułów jądra LKM2
T-L-11Proste sterowniki urządzeń znakowych4
T-L-12Podstawy programowania w RUST w systemie Linux2
T-L-13Elementy programowania systemowego w jezyku Rust2
T-L-14Wykorzystanie XEN do wirtualizacji i parawirtualizacji2
30

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 funkcji2
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).6
T-W-4Elementy architektury jądra systemu Linux. Zarządzanie pamięcią i procesami3
T-W-5Elementy architektury jądra systemu Linux. Ładowalne moduły jądra LKM2
T-W-6Elementy architektury jądra systemu Linux. Urządzenia i sterowniki3
T-W-7Elementy architektury jądra systemu Linux. Wirtualny system plików VFS, pseudosystemy plików, sieciowe systemy plików.3
T-W-8Struktura systemu plików na przykładzie EXT i ReiserFS, współpraca z VFS3
T-W-9Praktyczne aspekty wykorzystania wirtualizacji i parawierualizacji XEN w programowaniu systemowym.2
T-W-10Elementy programowania w języku RUST2
T-W-11Elementy programowania systemowego w języku Rust2
30

Formy aktywności - laboratoria

KODForma aktywnościGodziny
A-L-1Udział w zajęciach laboratoryjnych30
A-L-2Przygotowanie do zajęć laboratoryjnych18
A-L-3Udział w konsultajach i zaliczeniu formy zajęć2
50
(*) 1 punkt ECTS, odpowiada około 30 godzinom aktywności studenta

Formy aktywności - wykłady

KODForma aktywnościGodziny
A-W-1Udział w wykładzie30
A-W-2Przygotowanie do egzaminu16
A-W-3Udział w konsultacjach2
A-W-4Udział w egzaminie2
50
(*) 1 punkt ECTS, odpowiada około 30 godzinom aktywności studenta
PoleKODZnaczenie kodu
Zamierzone efekty uczenia sięI_1A_D02.05_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
Odniesienie do efektów kształcenia dla kierunku studiówI_1A_W04Ma wiedzę w zakresie programowania systemów komputerowych, zna podstawowe paradygmaty programowania i wiodące języki programowania.
Cel przedmiotuC-2zapoznanie studentów z podstawowymi mechanizmami udostępnianymi przez system operacyjny umożliwiającymi programowanie systemowe w przestrzeni użytkownika
Treści programoweT-W-1Podstawy programowania w systemie operacyjnym Linux (asm, gcc, GNU make, gdb, analiza statyczna i dynamiczna, tworzenie i wykorzystanie bibliotek)
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-9Praktyczne aspekty wykorzystania wirtualizacji i parawierualizacji XEN w programowaniu systemowym.
T-W-11Elementy programowania systemowego w języku Rust
T-W-10Elementy programowania w języku RUST
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-3Zarządzanie procesami (fork, exec, wait, waitpid, getpid, getppid)
T-L-4Obsługa sygnałów (kill, sigprocmask, sigaction)
T-L-5Podstawowa obsługa systemu plików (opendir, closedir, readdir, rewinddir, ftw, stat, open, lseek, read, write, close)
T-L-6Programowanie wątków z wykorzystaniem bibliotek pthread
T-L-7Synchronizacja i komunikacja międzyprocesowa (semafory i pamięć współdzielona)
T-L-8Komunikacja międzyprocesowa z wykorzystaniem gniazd. Elementy programowania sieciowego
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
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)
3,5potrafi wymienić i wyjaśnić sposób użycia większości podstawowych mechanizmów systemowych (wątki, potoki)
4,0potrafi wymienić i wyjaśnić sposób użycia większości mechanizmów komunikacji międzyprocesowej (pamięć współdzielona, semafory, kolejki komunikatówgniazda)
4,5potrafi objaśnić sposób tworzenia i użycia ładowalnego modułu jądra oraz prostego sterownika urządzenia znakowego
5,0potrafi wyjaśnić różnice koncepcji programowania systemowego z użyciem języków C oraz RUST
PoleKODZnaczenie kodu
Zamierzone efekty uczenia sięI_1A_D02.05_W02potrafi 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_W10Posiada uporządkowaną i pogłębioną wiedzę z zakresu architektury systemów komputerowych, uwzględniającą współczesne kierunki rozwoju sprzętu komputerowego.
Cel przedmiotuC-1zapoznanie studentów z wybranymi elementami składowymi architektury jądra współczesnego systemu operacyjnego na przykładzie systemu Linux
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-W-4Elementy architektury jądra systemu Linux. Zarządzanie pamięcią i procesami
T-W-5Elementy architektury jądra systemu Linux. Ładowalne moduły jądra LKM
T-W-6Elementy architektury jądra systemu Linux. Urządzenia i sterowniki
T-W-7Elementy architektury jądra systemu Linux. Wirtualny system plików VFS, pseudosystemy plików, sieciowe systemy plików.
T-W-8Struktura systemu plików na przykładzie EXT i ReiserFS, współpraca z VFS
T-L-9Analiza struktury systemu plików EXT2
T-L-10Programowanie ładowalnych modułów jądra LKM
T-L-11Proste sterowniki urządzeń znakowych
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ć wszystkie podstawowe elementy składowe architektury jądra systemu Linux i rozumie podstawowe interakcje między nimi
3,5potrafi opisać budowę i działanie modułów jądra systemu Linux odpowiedzialnych za zarządzanie pamięcią i procesami
4,0potrafi 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 wytłumaczyć budowę oraz działanie prostego sterownika urządzenia znakowego wykorzystującego mechanizm ładowalnego modułu jądra
5,0potrafi wyjaśnić podstawy działania wirtualizacji i parawirtualizacji XEN z punktu widzenia działania systemu operacyjnego
PoleKODZnaczenie kodu
Zamierzone efekty uczenia sięI_1A_D02.05_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)
Odniesienie do efektów kształcenia dla kierunku studiówI_1A_U10Potrafi projektować i implementować systemy informatyczne posługując się narzędziami wspomagającymi proces wytwarzania oprogramowania na różnych jego etapach.
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-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-6Elementy architektury jądra systemu Linux. Urządzenia i sterowniki
T-W-11Elementy programowania systemowego w języku Rust
T-W-10Elementy programowania w języku RUST
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-3Zarządzanie procesami (fork, exec, wait, waitpid, getpid, getppid)
T-L-4Obsługa sygnałów (kill, sigprocmask, sigaction)
T-L-5Podstawowa obsługa systemu plików (opendir, closedir, readdir, rewinddir, ftw, stat, open, lseek, read, write, close)
T-L-6Programowanie wątków z wykorzystaniem bibliotek pthread
T-L-7Synchronizacja i komunikacja międzyprocesowa (semafory i pamięć współdzielona)
T-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-12Podstawy programowania w RUST w systemie Linux
T-L-13Elementy programowania systemowego w jezyku 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, proecsy, sygnały, zarządzanie systemem plików)
3,5potrafi efektywnie użyć wybrane podstawe mechanizmy systemowe (wątki, potoki)
4,0potrafi efektywnie użyć podstawowe mechanizmy komunikacji międzyprocesowej (biblioteka IPC, gniazda)
4,5potrafi napisać i użyć prosty moduł ładowalny jądra LKM
5,0potrafi napisać i użyć prosty sterownik urządzenia znakowego
PoleKODZnaczenie kodu
Zamierzone efekty uczenia sięI_1A_D02.05_U02potrafi 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
Odniesienie do efektów kształcenia dla kierunku studiówI_1A_U10Potrafi projektować i implementować systemy informatyczne posługując się narzędziami wspomagającymi proces wytwarzania oprogramowania na różnych jego etapach.
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-W-1Podstawy programowania w systemie operacyjnym Linux (asm, gcc, GNU make, gdb, analiza statyczna i dynamiczna, tworzenie i wykorzystanie bibliotek)
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-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-3Zarządzanie procesami (fork, exec, wait, waitpid, getpid, getppid)
T-L-4Obsługa sygnałów (kill, sigprocmask, sigaction)
T-L-5Podstawowa obsługa systemu plików (opendir, closedir, readdir, rewinddir, ftw, stat, open, lseek, read, write, close)
T-L-6Programowanie wątków z wykorzystaniem bibliotek pthread
T-L-7Synchronizacja i komunikacja międzyprocesowa (semafory i pamięć współdzielona)
T-L-8Komunikacja międzyprocesowa z wykorzystaniem gniazd. Elementy programowania sieciowego
Metody nauczaniaM-1wykład informacyjny
M-2ćwiczenia laboratoryjne
Sposób ocenyS-2Ocena formująca: ocena wykonywanego zadania programistycznego (ocena pracy wykonywanej na zajęciach)
Kryteria ocenyOcenaKryterium oceny
2,0
3,0potrafi w stopniu podstawowym posługiwać się dostępną w systemie dokumentacją dotyczącą funkcji systemowych
3,5potrafi w stopniu zaawansowanym posługiwać sie dostępną w systemie dokumentacją dotyczącą funkcji systemowych
4,0potrafi instalować i aktualizować dokumentację dostępną w systemie dotczącą funkcji systemowych
4,5potrafi w stopniu podstawowym wykorzystać dokumentację kodu źródłowego jądra systemu
5,0potrafi w stopniu zaawansowanym wykorzystać dokumentację kodu źródłowego jądra systemu
PoleKODZnaczenie kodu
Zamierzone efekty uczenia sięI_1A_D02.05_U03potrafi 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_U10Potrafi projektować i implementować systemy informatyczne posługując się narzędziami wspomagającymi proces wytwarzania oprogramowania na różnych jego etapach.
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-W-1Podstawy programowania w systemie operacyjnym Linux (asm, gcc, GNU make, gdb, analiza statyczna i dynamiczna, tworzenie i wykorzystanie bibliotek)
T-W-10Elementy programowania w języku RUST
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
Metody nauczaniaM-1wykład informacyjny
M-2ćwiczenia laboratoryjne
Sposób ocenyS-2Ocena formująca: ocena wykonywanego zadania programistycznego (ocena pracy wykonywanej na zajęciach)
Kryteria ocenyOcenaKryterium oceny
2,0
3,0potrafi w stopniu podstawowym użyć kompilator gcc oraz debuger gdb
3,5potrafi w stopniu zaawansowanym użyć kompilator gcc oraz stworzyć prosty plik projektu makefile
4,0potrafi w stopniu zaawansowanym użyć debugera gdb oraz stworzyć zaawansowany plik projektu makefile
4,5potrafi użyć wybrany program do dynamicznej kontroli pamięci własnego kodu (przykładowo Valgrind)
5,0potrafi przygotować środowisko developerskie wykorzystując wirtualizacjęXEN