Dokumentace Memory Manager:

 

Interface pro funkce MM:

 

errno...pro vsechny funkce systemu

#define MM_ERRORNO m1_i1

 

C_EXIT: ukonci bezny proces

( vstup: char exit_status )

#define MM_EXITSTATUS m1_i1

( vystup: nic )

C_FORK: vytvori detsky proces

( vstup: nic )

( vystup: pid noveho detskeho procesu ve MM_FORKEDCHILD a

errno:

EAGAIN - nemuze alokovat…

ENOMEM)

#define MM_FORKEDCHILD m1_i2

C_EXEC: vymeni obraz procesu (vytvoren volanim C_FORK) za kod nacteny ze zadaneho souboru

( vstup: ukazatel na jmeno spousteneho souboru a jeho velikost, ukazatel na predvytvoreny zasobnik a jeho velikost.)

#define MM_EXECFNAME m1_p2

#define MM_PATHSIZE m1_i2

#define MM_EXECSTACK m1_p1

#define MM_EXECSIZE m1_i1

Zásobník obsahuje tyto informace (odspoda nahoru):

( vystup: errno:

EAGAIN

ENOMEM

EACCES = ErrBadStack (EACCES The file is not a regular file.)

ENOENT = ErrMissingFilename

ENOEXEC = ErrNotExecutable

EACCES = ErrTextSizeTooBig

EACCES = ErrDataSizeTooBig

EACCES = ErrBssSizeTooBig

EACCES = ErrDataBssSizeTooBig

EACCES = ErrTotalSizeTooBig

EACCES = ErrNotStackPlace)

C_BRK: zmeni velikost datoveho segmentu

( vstup: relativni adresa o kolik posunout hranici gapu (nahoru nebo dolu))

#define MM_BRKINCR m1_i1

( vystup: adresa kde je konec segmentu dat a zacatek GAPu (od zacatku zjisteneho prvnim volanim break funkce) a

errno:

ENOMEM = EBREAK)

#define MM_BRKADDR m1_p1

C_WAITPID: ceka na ukonceni procesu

( vstup:pid na koho cekat, options)

#define MM_WAITFOR m1_i1

#define MM_WAITOPT m1_i2

( vystup: navratovy kod ukonceneho procesu a "terminate status" + proces id, ktery skoncil a

errno:

ECHALIVE = ErrChildStillAlive

ECHILD)

#define MM_EXITVALUE m1_i2 ... dolni byte obsahuje exitstatus (mp_exitstatus z mproc[]), horni obsahuje termination status (mp_sigstatus z mproc[]). Pro ziskani EXITSTATUS (Parametr exit): msg.MM_EXITVALUE&255. (resp. pouzit union).

#define MM_EXITEDPID m1_i3

C_GETPID vraci identifikaci procesu

(vstup: nic .. mohu se ptat pouze na svuj pid ).

(vystup: pid a

errno:

ESRCH = EInvalidPID

EPERM = ENORIGHTS

EINVAL).

#define MM_GPID m1_i2

C_GETPGRP vraci identifikaci skupiny zadaneho procesu

(vstup: ktereho procesu GROUP Vas zajima)

#define MM_GPGRPPID m1_i1(==0 .. zadajici proces ).

(vystup: GROUP a

errno:

viz C_GETPID)

#define MM_PGRP m1_i2

C_SETPGRP nastavi danemu procesu skupinu

(vstup: kteremu procesu menit GROUP a na jakou hodnotu)

Efektivni UID procesu zadajiciho o zmenu musi byt SUPER_USER, nebo stejny jako procesu, jehoz GROUP chceme zmenit, nebo musi byt rodicem dotycneho procesu!!!!

#define MM_SPGRPPID m1_i1 // afektovany process (==0 .. zadajici process)

#define MM_SPGRPVALUE m1_i2 // nova hodnota GROUP

(vystup: errno: viz C_GETPID)

C_GETUID, C_GETGID poskytne identitu uzivatele, skupiny

(vstup:pid procesu, na ktery se dotazujeme)

#define MM_GETIDPID m1_i1 (==0 svuj)

(vystup:

pro UID: efektivni i realne,

#define MM_RUID m1_i2 - realne USER ID

#define MM_EUID m1_i3 - efektivni USER ID

pro GID:efektivni i realne.

#define MM_RGID m1_i2 - realne GROUP ID

#define MM_EGID m1_i3 - efektivni GROUP ID)

C_SETUID, C_SETGID nastavi identitu uzivatele, skupiny

(vstup:na co zmenit UID(resp. GID) zadajiciho procesu)

Efektivni UID procesu zadajiciho o zmenu musi byt SUPER_USER:

#define MM_SUID m1_i1

(resp. #define MM_SGID m1_i1)

(vystup: errno: viz C_GETPID).

C_SIGNAL:

(vstup: cislo signalu (viz definice v signal.h ) a co se ma nastavit:

SIG_IGN, SIG_DFL nebo ukazatel na uzivatelskou fci)

#define MM_SIGNAL m6_i1

#define MM_PTRFUNC m6_f1

(vystup:

errno:

EINVAL = ErrSigOutRange).

C_KILL: ukonci proces

(vstup: ID procesu, cislo signalu)

#define MM_PID m6_i2

#define MM_SIGNAL m6_i1

(vystup:

errno:

ESRCH = ErrProcNotFind).

C_ALARM: nastavi aktualnimu procesu alarm

(vstup: pocet sekund do prichodu alarmu)

#define MM_ALARMSECOND m6_i1

C_PAUSE: ceka na signal (zadny vstup)

 _ C_KSIG: zpracovani signalu zadaneho procesu

(vstup: ID procesu, bitmapa signalu)

#define MM_PID m6_i2

#define MM_SIGBMP m6_i1

(vystup: errno:

ESRCH = ErrProcNotFind

EPRNUSE = ErrProcNotUse

EPNFSKR = ErrProcNotFSorKERNEL (or SYSTASK)).

C_GETPROCTBL: kopiruje tabulku MPROC nebo vraci jeji velikost (podle volby v OPTIONS)

(vstup: ukazatel na misto v pameti procesu (DATA), kde zkopirovat tabulku MPROC, a OPTIONS)

#define MM_GETMPROCPTR m1_p1

#define MM_GETMPROCOPT m1_i1 .........

(MPROCCPY (v mm.h) .. kopiruj, nebo MPROCSIZE (v mm.h) .. velikost tabulky MPROC v bajtech).

Tato sluzba bude vyuzita procesem ps. Prozatim se neuvazuje nutnost mit SUPER_USER efektivni prava pro volani teto sluzby.

Struktura tabulky mproc[]

(vystup: velikost tabulky mproc (MM_GETMPROCOPT==MPROCSIZE) a errno)

#define MM_GETMPROCSIZE m1_i2

( vystup: errno:

EWHAT)

 

Chybove kody pro jednotlive funkce: errno.h.