Systemy operacyjne 2 - pracownia specjalistyczna

Plan zajęć



1.  Wprowadzenie do narzędzi programisty (głównie make i gcc) oraz narzędzi diff i patch. Zapoznanie się z emulatorem Microsoft Virtual PC 2004.


2.  Konfiguracja i kompilacja jądra systemu, wprowadzanie prostych modyfikacji do jądra.

Jądro konfigurujemy poleceniem:
make menuconfig

Kompilacja jądra przy pomocy poleceń:
make depend
make bzImage
make modules
make modules_install

Instalacja jądra: z katalogu ./arch/i386/boot przegrać do katalogu plik bzImage. Uruchomić:
lilo

Przy starcie systemu z menu menadżera ładowania lilo należy wybrać opcję New.

Usunięcie plików tymczasowych, w celu wygenerownia patch'a
make distclean

Zadanie dla studentów.
Zmodyfikuj jądro tak aby przy starcie wypisywało komunikat to jest moje jądro. Odpowiednie wywołanie funkcji printk możesz umieścić np. w pliku ./drivers/block/ide.c (sterownik kontrolera dysku typu IDE) w funkcji ide_init. Skompiluj i uruchom zmodyfikowane jądro oraz wygeneruj (a następnie zaaplikuj) patch.

Praca domowa.
Umieść kod komunikatu w odzielnej funkcji, np void komunikat(void) znajdującej się w odrębnym pliku, np. komunikat.c. Funkcję tą należy wywołać z ide_init. Wskazówka: musisz zmodyfikować plik Makefile w katalogu ./drivers/block/


3.  Zmodyfikuj kod sterownika ring (patch do jądra znajduje się tutaj) przedstawiony na wykładzie, tak aby:
  1. Sterownik obsługiwał nie jeden, ale cztery niezależne bufory pierścieniowe, rozróżniane za pomocą numeru podrzędnego urządzenia.
  2. Sterownik obsługiwał polecenie ioctl, pozwalające zmienić dynamicznie długość bufora. Długość bufora może być dowolną liczbą z przedziału [256B-16KB]. Podanie innej długości jest błędem. Zmiana długości bufora powinna być poprawnie wykonana, nawet gdy znajdują się w nim jakieś znaki (uwaga na synchronizację: kmalloc może spowodować uśpienie procesu i przełączenie kontekstu).
  3. Inna komenda ioctl powinna pozwalać na odczyt długości bufora.
  4. Sterownik mógł zostać skompilowany jako moduł jądra.

4. Ciąg dalszy poprzedniego zadania. Rozdanie (ew. losowanie tematów projektu nr 1). Projekt ten dotyczy implementacji sterownika urządzenia blokowego lub znakowego.

5. Odbiór zadania. Początek realizacji projektu nr 1.

6. Projekt nr 1
.
7. Projekt nr 1.

8. Projekt nr 1. Rozdanie tematów projektu nr 2.

9. Odbiór projektu nr 1. Początek realizacji projektu nr 2.

10. Projekt nr 2.

11. Projekt nr 2.

12. Projekt nr 2.

13. Projekt nr 2.

14. Projekt nr 2.

15. Odbiór projektu nr 2



Uwagi:


Obydwa projekty są wykonywane w zespołach maksymalnie dwuosobowych. Po oddaniu projektu przewiduję rozmowę z każdym z zespołów. Wynik tej rozmowy może prowadzić do znacznej modyfikacji (niestety prawie zawsze na niekorzyść) liczby przyznanych punktów.

Ocenianie: Zadanie z zajęć nr 3:  15pkt, projekt 1: 37pkt, projekt 2: 48 punktów (punkty ujemne: nieusprawiedliowiona nieobecność, opóźnione oddanie zadania lub projektu). Łącznie 100 pkt. Przeliczenie na oceny:

[90pkt, 100pkt] => bdb
[80pkt, 90pkt) => db+
[70pkt, 80pkt) => db
[60pkt, 70pkt) => dst+
[50pkt, 60pkt) => dst

jednakże gwarantuję dst każdemu studentowi który odda oba projekty zrealizowane na dopuszczalne minimum.



Opracował: Wojciech Kwedlo