Vstupně/výstupní podsystém
*** Vstup
Přerušení je zpracováváno funkcí keyboard_handler(). Ta přidá znak z
klávesnice do cyklické fronty klávesnice. Pokud je fronta plná, je znak
zahozen. Z této fronty pak čte funkce getc(). Při prázdné frontě se funkce
getc() zablokuje a odblokována je až s nově příchozím znakem.
Interface
int getc()
Čeká na stisk klávesy a vrátí znak, který reprezentuje.
Pozn: Ve skutečnosti jen vrátí první nezpracovaný znak z fronty
klávesnice, pokud je prázdná, počká na stisknutí klávesy.
int getc_try()
Funkce vrátí počet znaků, čekajících ve vstupní frontě.
Pozn: Je však nutné uvědomit si, že při neprázné frontě nemusí
nasledující voláni getc() vrátit znak, který tam byl před chvílí, neboť
tento již mohl být odebrán jiným vlaknem.
void gets(char *s, int len)
Načte řádek (včetně \n) do alokovaného pole, maximálně však 'len-1' znaků.
Pozn: Pokud čte víc vláken najednou, není zaručena 'spojitost' jednoho
řádku.
*** Výstup
Výstup je realizován zasíláním jednotlivých znaků na port tiskárny.
Interface
void putchar(char c)
Vypíše znak.
void puts(char *str)
Vypíše řetezec a ukončí řádek.
int write(char *str)
Vypíše řetezec a vráti počet vypsaných znaků.
int printf(const char *format, ...)
Vypíše řetezec a nahradí nalezené direktivy parametry přítomnými ve volání.
Implementované direktivy formátovacího řetezce:
%% - %
%c - znak reprezentovaný hodnotou proměnné
%s - řetezec nacházející se na dané adrese
%d - celé číslo v proměnné
Funkce vrací počet vypsaných znaků.
Jelikož funkce panic() má tytéž parametry jako printf(), je pro
zachování podobného kódu na jednom místě umístěna v tomto modulu.
void panic(const char *format, ...)
Vypíše hlášku podle formátovacího řetezce (a případných parametrů), poté
zastaví kernel s obligátní hláškou "Kernel panic".