Ovladac blokoveho zarizeni FLOPPY
Stav ukolu: pracuje se
Hotova cast: Ovladac, ktery umi neco nacist, ulozit a reaguje na chyby a systemova volani (floppy.c)
Poznamka: Provedena dohoda s KERNEL a prijimani preruseni 06 a zaslani zpravy HARDWARE. To neni implementovane z hlediska predelavek a nemoznosti testovani. Ovladac posila preruseni a chyta bez ucasti KERNELu.
Podili se:
Jak predat pozadavek tasku FLOPPY ?
Pomoci systemoveho volani SEND(FLOPPY, message *)
Struktura cele zpravy:
typedef struct { int m_source; /* kdo zasila zpravu */ int m_type; /* jaky typ zpravy */ union { mess_1 m_m1; mess_2 m_m2; mess_3 m_m3; mess_4 m_m4; mess_5 m_m5; mess_6 m_m6; mess_devio m_dio; } m_u; } message;
Typy zprav:
#define DISK_READ 2 #define DISK_WRITE 3
Pouzijte prosim format zpravy mess_devio (viz PSEUDO/COMMON/type.c). Struktura zprávy mess_devio:
typedef struct { int device; /* minor dev nr */ int proc_nr; /* process requesting I/O */ unsigned int count; /* # of bytes required */ unsigned long position; /* starting position */ /* (TTY uses this for flags if needed) */ vir_bytes address; /* data buffer address in (proc_nr) space */ /* (TTY uses it as ptr to info structure for ioctl */ } mess_devio;
Zpravy pro floppy task budou konzistentni se zpravami RAMDisku. Device je minor cislo zarizeni tedy cislo drive (pouze floppy). proc_nr pozice procesu, ktery operaci pozadoval v tab. procesu. count pocet bloku jdoucich po sobe, se kterymi budete pracovat. position cislo pocatecniho bloku, se kterym budete pracovat. address je adresa v ramci procesu proc_nr, odkud se maji data vzit, resp. kam se maji dat.(buffer)