next up previous contents
Next: További hasznos tanácsok Up: A STREAMS driverek Previous: Kritikus szakaszok védelme

Fontosabb adatszerkezetek

A következokben ismertetett adatstrukturák általában minden STREAMS driverben megvannak. Azért fontosak, mert a kernel ezek alapján találja meg a driver különféle szolgáltatásait végzo eljárásait.

--- - A modul információs struktura - ---

Ez a struktura az egyes stream sorok jellemzoit tartalmazza. A felépítése a következo (ISC UNIX 3.2 alapján) :

  struct module_info {
    ushort mi_idnum;
    char *mi_idname;
    short mi_minpsz;
    short mi_maxpsz;
    ushort mi_hiwat;
    ushort mi_lowat;
  };
Az mi_idnum mezo tartalmazza a modul azonosítószámát. A mi_idname mezo tartalmazhatja a modul nevére (egy stringre) mutató pointert (a kernel ez alapján a név alapján meg tudja találni). A mi_minpsz és a mi_maxpsz mezok a modul által elfogadott üzenetek minimális illetve maximális méretét szabják meg. Ezek a mezok mindig csak a stream-fejhez legközelebb levo STREAMS modulnál érdekesek, mert a STREAM-fej úgy fogja a lefelé küldött adatokat üzenetekre szétvágni, hogy az egyes üzenetek mérete a megadott minimális és maximális üzenetméret közé essen. A legfelso modul alatti modulokban megadott maximális és minimális üzenetméretet a STREAMS rendszer nem használja semmire, a programozó maga dönti el, hogy valamire akarja-e azt használni. A maradék két mezo a low ill. high water mark értékeket tartalmazzák. Ezeknek az értékeknek a kiválasztásakor figyelembe kell venni azt, hogy a stream-fej a 64 bytenál rövidebb üzeneteknek is 64 byteot foglal le, nehogy a STREAMS rendszer rendelkezésére álló memória túlságosan feldarabolódjon.

--- - A qinit struktura - ---

Ebben a strukturában kell tárolni azt, hogy az egyes soroknak a szolgáltatásait melyik eljárásokban kódoltuk. A struktura felépítése a következo :

  struct qinit {
    int   (*qi_putp)();         /* put eljarasra mutat */
    int   (*qi_srvp)();         /* service eljarasra mutat */
    int   (*qi_qopen)();        /* open ill I_PUSH eseten meghivva */
    int   (*qi_qclose)();       /* lezarasnal meghivva */
    int   (*qi_admin)();        /* 3bnet admin funkcioja */
    struct module_info *qi_minfo;  /* module_info struktura */
    struct module_stat *qi_mstat;  /* statisztikai struktura */
  };
Ezt a strukturát a driveren belül nem szabad megváltoztatni (mivel ez másokra is kihatással lenne). Az open és close rutinokra mutató pointerek a read qinit strukturában legyenek, mivel a rendszer mindenképpen azokat hajtja végre. (Érdemes a write oldalra a könnyebb olvashatóság érdekében ugyanezeket az eljárásokat bejegyezni.)

--- - A streamtab struktura - ---

Ez a struktura tartalmazza a driverek read ill. write queue-jainak a qinit strukturáira mutató pointert. Felépítése :

  struct streamtab {
    struct qinit *st_rdinit;     /* Felso read queue */
    struct qinit *st_wrinit;     /* Felso write queue */
    struct qinit *st_muxrinit;   /* Also read queue */
    struct qinit *st_muxwinit;   /* Also write queue */
  };
Az alsó soroknak csak a multiplexer drivereknél van szerepük.



next up previous contents
Next: További hasznos tanácsok Up: A STREAMS driverek Previous: Kritikus szakaszok védelme



Csizmazia Balazs
Tue Apr 2 00:06:27 MET DST 1996