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)