# Mimiker: Prace dyplomowe ###### tags: `mimiker` ## Lista tematów ### Infrastruktura `evdev` dla urządzeń wprowadzania :::info Student: ? ::: `evdev` to interfejs linuksowy unifikujący urządzenia wprowadzania, np.: mysz, klawiaturę, joystick, itp. Należałoby napisać sterownik myszy`PS/2`. Następnie udostępnić mysz i klawiaturę `atkbdc.c` jako urządzenia w `/dev/input`. * [Linux input drivers v1.0](https://www.kernel.org/doc/Documentation/input/input.txt) * [evdev.h](http://bxr.su/search?q=evdev.h&project=FreeBSD) * [PS/2 keyboard](https://wiki.osdev.org/PS2_Keyboard) @osdev.wiki * [Mouse](https://wiki.osdev.org/Mouse_Input) @osdev.wiki :::warning `libsdl2` wspiera `evdev`, ale wymaga jeszcze `libudev`. ::: ### Wersjonowanie przestrzeni adresowych :::info Student: ? ::: Z grubsza chodzi o uzupełnienie bieżącej implementacji przestrzeni adresowych o możliwość współdzielenia obszarów pamięci. W grę wchodzi również obsługa _copy-on-write_. Trzeba umożliwić tworzenie prywatnych odwzorowań plików z ramdysku i współdzielonych urządzenia karty graficznej. Dalej można usprawnić `fork` o leniwe klonowanie przestrzeni adresowej. ### Kernel Concurrency Sanitizer + Lock Dependency Analyzer :::info Student: Jakub Urbańczyk ::: Julian Pszczołowski dodał do Mimikera KASAN'a, który pomaga nam ze znajdowaniem błędów związanych z dostępami do pamięci. Zasadniczo mamy całe masy sanitizerów. Najtrudniejsze błędy do znajdowania mają związek z wyścigami. Dlatego powinniśmy do jądra dołożyć [KTSAN](https://github.com/google/ktsan/wiki). Łatwiejsza praca to dorobienie [KUBSAN](https://man.openbsd.org/kubsan.4), który też mógłby być użyteczny. ### Profiling jądra i zarządzanie czasem :::info Student: Wiktor Pilarczyk (?) ::: Nie mamy żadnych sensownych sposobów na pomiar wydajności jądra. Proponuję zacząć od zintegrowania [gprof](https://sourceware.org/binutils/docs/gprof/index.html) z jądrem Mimiker. Potem można się przyjrzeć innym rozwiązaniom: [Profiling and Debugging the FreeBSD* Kernel](https://people.freebsd.org/~vwe/files/321772.pdf). Przydałby się ktoś kto potrafi połączyć statystykę z rzeczywistością. :::warning `libsdl2` wymaga działającego `clock_gettime` albo `gettimeofday`. ::: ### Sterownik dysku twardego :::info Student: Tomasz Stachowski ::: Należy zacząć od sterownika szyny IDE i identyfikacji urządzeń wejścia-wyjścia. Żeby transfery miały sensowną wydajność będzie trzeba zbudować infrastrukturę dla DMA. * [ATAPI PIO](https://wiki.osdev.org/ATA_PIO_Mode) ### Sterownik hosta USB :::info Student: Michał Błaszczyk ::: Chcemy wykryć urządzenia podpięte do szyny, tj. przeczytać ich deskryptor. ### Sterownik karty sieciowej :::info Student: Mikołaj Kowalik ::: Trzeba znaleźć implementację stosu TCP/IP w user-space, która będzie współpracować ze sterownikiem TAP. * [TUN/TAP](https://en.wikipedia.org/wiki/TUN/TAP) @wikipedia * [Universal TUN/TAP device driver]( https://www.kernel.org/doc/Documentation/networking/tuntap.txt) * [Am79C970A](https://wiki.osdev.org/AMD_PCNET) @osdev.wiki ## Niski priorytet ### Szybki alokator pamięci jądra W chwili obecnej mamy _boundary tags_ i _segregated fit_. Można pokusić się o implementację [TLSF](http://www.gii.upv.es/tlsf/) z uwzględnieniem tego, że w przyszłości będziemy mieć jądro na wielordzeniowego _AArch64_. Trzeba byłoby zorganizować jakiś cache bloków per rdzeń. No i do tego dochodzi pomiar wydajności. ### (TODO) Sterownik karty graficznej * https://wiki.osdev.org/Bochs_VBE_Extensions * [fbio.h](http://bxr.su/FreeBSD/sys/sys/fbio.h) * [Linux Frame Buffer](https://www.kernel.org/doc/html/latest/fb/index.html) ### Sterownik karty dźwiękowej Przydałby się dźwięk do uruchamiania gier pod kontrolą Mimikera. Właściwie potrzebujemy tylko odtwarzania surowych próbek PCM. Na _Malcie_ pod `qemu` dysponujemy kartą Ensoniq 1370 wpiętą w szynę PCI. * [audio(4)](https://man.netbsd.org/audio.4) * [eap.c](http://bxr.su/NetBSD/sys/dev/pci/eap.c) :::warning `libsdl2` wspiera sterownik interfejs urządzeń audio z `NetBSD`! ::: ## Największe braki Nikt teraz się tym nie zajmuje: - dokumentacja :) - więcej sterowników: - mysz i klawiatura USB - framebuffer dla RPi3 - dopracowanie: - infrastruktury dla sterowników (pic, devfs+unit, ...) - obsługi sygnałów (siginfo, SIGPIPE, SIGALRM) - systemu budowania (?) - skrypty gdb - lepsza infrastruktura do testów: - oddzielenie testów user- od kernel-space - uruchamianie współbieżne - portowanie testów z LTP metodą clean-room - gruntowne przetestowanie potoków - select i poll albo kevent - blokady i referencje vnode'ów ## Plany na przyszłość - gniazda domeny uniksowej - konsolidator dynamiczny w przestrzeni użytkownika `ld.so` (**) - scheduler bazowany na kolejkach kalendarzowych - kernel [system call fuzzer](https://is.muni.cz/th/r82kv/final_thesis.pdf) - emulator terminala na podstawie suckless terminal - zastąpienie warstwy X-ów przy pomocy FB + evdev - OpenRC: jako system rozruchu + init - System plików ext2 Długofalowo MIPS -> RISC-V.