[SYS1] Systemes d’exploitation (4)

Contenu d’un process

Signaux

Gestion des erreurs

rc = write(...);
perror();
int handler() {
    open(...);
}

Valeur d’errno globale

Allocation de fd

struct file *fdtable[]; // fd est l'index dans fdtable

Redirections

Exemple : cat > file

Facon un peu nulle mais ca marche :

fork()
    close(1) //stdout
    open('file')
execvp

Meilleure facon :

fcntl permet de set des proprietes sur un fichier (dont O_CLOEXEC)

fork()
    dup(open("file"))
    close(1)
execvp

Redirection stdout

open("toto")
dup2(fd, 1)

Redirection stderr

open("toto")
dup2(fd, 2)

Pipe

On a un buffer, fd[0] ecrit et fd[1] lit

fork()
// p1
    fd[0]
    close(fd[1])
    dup2(fd[0], 1)
    fork()
        execvp('cat')

// p2
close(fd[0])
fd[1]
dup2(fd[1], 0)
execvp('cat2')//?

Etats des process

Le process peut etre dans 2 etats :







hierarchy



READY

READY



RUNNING

RUNNING



READY->RUNNING


Envoie autre process



RUNNING->READY


Arrete de tourner



WAITING

WAITING



RUNNING->WAITING


Syscall bloquant



DEAD

DEAD



RUNNING->DEAD


exit()



NEW

NEW



NEW->READY


Creation process



WAITING->READY





Syscall bloquants : sleep, wait, read, write, etc
Etat DEAD : Process termine mais un autre process a appele wait() dessus

init() (pid = 1) : cree un programme P1 a la racine de tous les autres

Process P1 et son child P2

Process orphelin : rattache a init

Uid / Gid d’un process

0777 : permission user / group / other
Bit setuid : Premier bit des permissions

Exemple :
17777 root : Lance le programme avec les permissions de root sudo v $user prg -> /etc/sudoers