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).
(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.
(vystup: velikost tabulky mproc (MM_GETMPROCOPT==MPROCSIZE) a errno)
#define MM_GETMPROCSIZE m1_i2
( vystup: errno:
EWHAT)
Chybove kody pro jednotlive funkce: errno.h.