מימוש ב-XINU

מוגדרת טבלת התקנים. לכל התקן יש מציין שהוא האינדקס שלו בטבלת ההתקנים. בכל כניסה בטבלה ש מצביעים לאופרטורים הספציפיים לאותו התקן וכן נתונים נוספים הדרושים להתקן. לכל אופרטור מופשט מועבר מציין ההתקן כפרמטר. האופרטור המופשט משתמש בפרמטר זה על מנת לגשת אל הכניסה המתאימה בטבלת ההתקנים.

כניסה בטבלת ההתקנים מוגדרת כך:

/*------------------------------------------------------------------------

 * Format of each entry is:

 *

 * device number, device name,

 * init, open, close,

 * read, write, seek,

 * getc, putc, cntl,

 * port addr, device input vector, device output vector,

 * input interrupt routine, output interrupt routine,

 * device i/o block, minor device number

 *------------------------------------------------------------------------

 */

/* Device table declarations */

struct devsw  {                    /* device table entry             */

       int    dvnum;

       char   dvnam[8];

       int    (*dvinit)();

       int    (*dvopen)();

       int    (*dvclose)();

       int    (*dvread)();

       int    (*dvwrite)();

       int    (*dvseek)();

       int    (*dvgetc)();

       int    (*dvputc)();

       int    (*dvcntl)();

       int    dvport;

       int    dvivec;

       int    dvovec;

       int    (*dviint)();

       int    (*dvoint)();

       char   *dvioblk;

       int    dvminor;

       };

דוגמא - הפונקציה read:

read(descrp, buff, count)

int descrp, count;

char *buff;

{

       struct devsw  *devptr;

       if (isbaddev(descrp) )

              return(SYSERR);

       devptr = &devtab[descrp];

       return(       (*devptr->dvread)(devptr,buff,count) );

}

תגיות המסמך:

מאת: באסל

תודה

הסברתם את זה, כמו שאר הנושאים, באופן הכי ברור שיש.
שיתוף:
| עוד