procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/so - curs 03 - procese.pdf · •un proces este...

58
Procese SO: Curs 3 1 SO: Curs 3: Procese

Upload: others

Post on 31-Aug-2019

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Procese

SO: Curs 3

1SO: Curs 3: Procese

Page 2: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Sisteme de fișiere

• De ce este nevoie de sisteme de fișiere?

• Ce este un fișier?

• Cu ce diferă un fișier obișnuit de un director?

• Ce este un descriptor de fișier?

• Ce poate fi referit printr-un descriptor de fișier?

• Ce informații conține o structură de fișier deschis?

• Ce operații (API C) pe fișier modifică cursorul de fișier?

• Ce operații (API C) pe fișier modifică câmpul size din metadatele fișierului?

• Ce se întâmplă cu tabela de descriptori la redirectare?

2SO: Curs 3: Procese

Page 3: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

De ce e nevoie de procese?

• Partajarea resurselor unui sistem de calcul• Partajarea resurselor unui sistem de calcul

– între mai mulți utilizatori

– între acțiunile diferite ale aceluiași utilizator

SO: Curs 3: Procese 3

Page 4: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Proprietăți necesare ale proceselor

• să grupeze resursele necesare pentru efectuarea unei acțiuni

– cod, date

– memorie folosită, registre procesor

– I/O– I/O

• să crească utilizarea resurselor sistemului

• să asigure izolare; un proces nu poate accesa

– memoria unui alt proces

– sockets ai altui proces

– fișierele altui proces

SO: Curs 3: Procese 4

Page 5: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Ce este un proces?

• Un program aflat în execuție

• Încapsularea/abstractizarea execuției în SO

• Abstractizare peste procesor, memorie, I/O

SO: Curs 3: Procese 5

Page 6: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Cuprins

• Rolul proceselor

• Atributele unui proces

• Planificarea proceselor• Planificarea proceselor

• Crearea unui proces

• Alte operații cu procese

• API pentru lucrul cu procese

SO: Curs 3: Procese 6

Page 7: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Suport de curs

• OSCE– Capitolul 3: Processes

• MOS– Capitolul 2: Processes and Threads (Secțiunea 1)– Capitolul 2: Processes and Threads (Secțiunea 1)

• LSP– Capitolul 5: Process Management

– Capitolul 6: Advanced Process Management

• WSP– Capitolul 6: Process Management

SO: Curs 3: Procese 7

Page 8: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

ROLUL PROCESELOR

SO: Curs 3: Procese 8

Page 9: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Proces 1 Proces 2 Proces 3

SO: Curs 3: Procese 9

Nucleul SO

MemorieProcesor

Time

I/O

Storage

Page 10: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

API folosit de procese

thread-urimemorievirtuală

descriptoride fișier

SO: Curs 3: Procese 10

procesor memorie I/O

virtuală de fișier

vom reveni în cursurile 5, 6 și 8

Page 11: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Proces și procesor

• Un proces are unul sau mai multe thread-uri

– Un thread rulează instrucțiuni pe un procesor

• De obicei procesele sistemului sunt mai multe decât procesoarele sistemului

– E nevoie de planificarea proceselor pe procesoare

SO: Curs 3: Procese 11

Page 12: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Proces și memorie

• Un proces are o memorie proprie (izolată de alte procese)

• Cod/instrucțiuni și date• Cod/instrucțiuni și date

• Instrucțiunile sunt aduse din memoria RAM în procesor și executate

– Spunem că procesul se execută pe procesor

SO: Curs 3: Procese 12

Page 13: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Spațiul (virtual) de adrese

SO: Curs 3: Procese 13

Page 14: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Spațiul (virtual) de adrese (2)

• Fiecare proces are un spațiu (virtual) de adrese

• Asigură izolarea față de alte procese

Procesul are impresia folosirii exclusive a • Procesul are impresia folosirii exclusive a memoriei

• Toate resursele de memorie (cod, date, biblioteci, stivă) sunt referite prin zone în spațiul virtual de adrese

SO: Curs 3: Procese 14

mai multe în cursul 5

Page 15: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Proces și I/O

• Un proces comunică cu exteriorul: disc, rețea, tastatură, monitor

• Comunicarea se face, de regulă, prin decriptori de fișier

• Un proces are o tabelă de descriptori de fișier• Un proces are o tabelă de descriptori de fișier• Un descriptor de fișier referă un fișier, socket,

terminal, dispozitiv etc.• Operațiile cu I/O blochează procesul– I/O este mai lent decât procesorul– procesul așteaptă încheierea operației

SO: Curs 3: Procese 15

Page 16: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Tabela de descriptori

• Proprie fiecărui proces

• Interfața pentru I/O a unui proces

Vectori de pointeri către structuri de fișiere • Vectori de pointeri către structuri de fișiere deschise

• Structurile pot referi fișiere, sockeți, dispozitive speciale (terminale)

SO: Curs 3: Procese 16

Page 17: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Tipuri de procese

• CPU bound (CPU intensive)– rulează des pe procesor

• I/O bound (I/O intensive)– rulează rar pe procesor

fac operații de I/O -> se blocheazărulează rar pe procesor

– fac operații de I/O -> se blochează

• Interactive (foreground)– interacționează cu utilizatorul

• Neinteractive (batch, background)– servicii, daemoni

SO: Curs 3: Procese 17

Page 18: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

ATRIBUTELE UNUI PROCES

SO: Curs 3: Procese 18

Page 19: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Cum arată un proces la nivelul SO?

• O structură de date

– PCB (Process Control Block)

– Descrie un proces la nivelul SO

• Informații legate de resursele folosite• Informații legate de resursele folosite

• Un identificator (PID: process identifier)

• Legături cu celelalte structuri

• Informații de securitate, monitorizare, contabilizare

SO: Curs 3: Procese 19

Page 20: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Resursele unui proces

• Timp de rulare pe procesor

• Memorie (cod și date)• Memorie (cod și date)

• Tabelă de descriptori de fișier

• Unele resurse pot fi partajate cu alte procese

SO: Curs 3: Procese 20

Page 21: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Atribute ale unui proces

• PID

• parent PID

• pointeri către resurse• pointeri către resurse

• stare (de rulare, așteptare)

• cuantă de timp de rulare

• contabilizare resurse consumate

• utilizator, grup

SO: Curs 3: Procese 21

Page 22: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

PLANIFICAREA PROCESELOR

SO: Curs 3: Procese 22

mai multe în cursul 4

Page 23: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Procese și procesoare

• Pentru a rula un proces are nevoie de un procesor

• Procesorul rulează instrucțiunile procesului• Procesorul rulează instrucțiunile procesului

• Procesele într-un sistem sunt mai multe decat procesoarele

• Sistemul de operare asigură accesul echilibrat al proceselor la procesoare

SO: Curs 3: Procese 23

Page 24: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Multitasking

• SO schimbă rapid procesele pe procesoare• După un timp (cuantă, time slice) un proces este

scos de pe procesor și pus altul în loc– se spune că “expiră cuanta”– acțiunea este numită “schimbare de context” (context – acțiunea este numită “schimbare de context” (context

switch)

• Cuantă de timp de ordinul milisecundelor– se schimbă foarte rapid procesele– impresia de rulare simultan

• Un proces poate fi întrerupt în momentul executării unei secvențe

SO: Curs 3: Procese 24

Page 25: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Starea unui proces

• rulare (RUNNING)– Procesul rulează pe un procesor

• așteptare (WAITING)– procesul a executat o acțiune blocantă (de exemplu citire – procesul a executat o acțiune blocantă (de exemplu citire

I/O) și așteaptă sosirea datelor; nu poate rula

• gata de execuție (READY)– procesul poate să ruleze pe procesor

• Câte procese se pot găsi în cele trei stări?

• Cum ați asigura gestiunea proceselor în cele trei stări?

SO: Curs 3: Procese 25

Page 26: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Tranziții între stările unui proces

SO: Curs 3: Procese 26

Page 27: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Tranziții între stările unui proces (2)

• RUNNING -> READY– procesului i-a expirat cuanta– există un alt proces în starea READY cu prioritate

superioară

• RUNNING -> WAITING• RUNNING -> WAITING– procesul a executat o operație blocantă

• WAITING -> READY– evenimentul așteptat de proces s-a produs

• READY -> RUNNING– s-a eliberat un procesor– procesul este primul din coada de procese READY

SO: Curs 3: Procese 27

Page 28: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Planificarea unui proces (scheduling)

• Un proces este adus din starea READY în starea RUNNING

• Este adus dacă există un procesor liber• Este adus dacă există un procesor liber

• Un procesor este liber dacă procesul de pe procesor l-a eliberat

• Se spune că are loc o schimbare de context (context switch)

SO: Curs 3: Procese 28

Page 29: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Schimbarea de context

SO: Curs 3: Procese 29

Page 30: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Schimbarea de context (2)

• Un proces este înlocuit pe procesor cu alt proces

• Se salvează procesul/contextul vechi

• Se restaurează procesul/contextul nou• Se restaurează procesul/contextul nou

• O schimbare de context înseamnă overhead– mai multe schimbări de context: mai mult

overhead

– mai puține schimbări de context: mai puțină interactivitate

SO: Curs 3: Procese 30

Page 31: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Planificatorul de procese

• Componentă a SO

• Responsabilă cu planificarea proceselor• Responsabilă cu planificarea proceselor

– asigurarea accesului proceselor la procesoare

– compromis (trade-off) între echitate și productivitate

SO: Curs 3: Procese 31

mai multe la cursul 4

Page 32: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

CREAREA UNUI PROCES

SO: Curs 3: Procese 32

Page 33: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Cum ia naștere un proces?

• Din cadrul unui executabil (program)

• Un alt proces (părinte) creează un proces (copil)(copil)

– noul proces (procesul copil) își populează memoria cu informații din executabil

• Acțiunea se mai cheamă loading, load time

– realizată de loader

SO: Curs 3: Procese 33

Page 34: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Ierarhia de procese

• Un proces poate crea unul sau mai multe procese copil

• Un proces poate avea un singur proces părinte

• În Unix, procesul init este în vârful ierarhiei de procese

– init este creat de sistemul de operare la boot

– init creează apoi procesele de startup

– procesele de startup creează alte procese etc.

SO: Curs 3: Procese 34

Page 35: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Procese și executabile

• Unul sau mai multe procese iau naștere dintr-un fișier executabil

• Fișierul executabil conține în mod esențial datele și codul viitorului procesdatele și codul viitorului proces

• Procesul are zone de memorie care nu sunt descrise în executabilul aferent– stiva

– heap-ul (malloc)

– zone pentru bibliotecile dinamice

SO: Curs 3: Procese 35

Page 36: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Funcționarea unui shell

• Se scrie la stdin un șir

• Șirul este interpretat de shell într-o cale de executabil (și argumente)

• Procesul shell creează un nou proces (copil)• Procesul shell creează un nou proces (copil)

• Procesul copil “încarcă” (load) datele și codul din executabil

• Procesul copil este planificat de SO

• Părintele procesului copil este procesul shell

SO: Curs 3: Procese 36

Page 37: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

fork și exec

• Separare între crearea unui nou proces și încărcarea datelor dintr-un executabil

• fork: creare nou proces (copil) (aproape • fork: creare nou proces (copil) (aproape identic procesului părinte)

• exec: încărcarea informațiilor dintr-un executabil în memoria procesul copil

SO: Curs 3: Procese 37

Page 38: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

fork, exec și shell-ul

shell

parent

shell

childfork()

SO: Curs 3: Procese 38

child

exec(“/bin/ls”)

ls

shell

parent

wait()

Page 39: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

fork, exec și redirectare

pid = fork();

if (pid == 0) { /* child process */

fd = open(“a.txt”, O_WRONLY|O_CREAT|O_TRUNC, 0644);

SO: Curs 3: Procese 39

fd = open(“a.txt”, O_WRONLY|O_CREAT|O_TRUNC, 0644);

dup2(fd, STDOUT_FILENO);

execl(“/bin/ls”, “/bin/ls”, NULL);

}

Page 40: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

ALTE OPERAȚII CU PROCESE

SO: Curs 3: Procese 40

Page 41: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Încheierea execuției unui proces

• Procesul își încheie execuția

– a ajuns la sfârșitul programului– a ajuns la sfârșitul programului

– a apelat exit()

• Decizia este a procesului

• În final, procesul nu mai există în sistem

SO: Curs 3: Procese 41

Page 42: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Terminarea unui proces

• Sistemul de operare încheie procesul

– la cererea altui proces (kill)

– procesul a efectuat o operație nevalidă – procesul a efectuat o operație nevalidă (segmentation fault)

• Se trimite un semnal (Unix) sau o excepție (Windows)

• În final, procesul nu mai există în sistem

SO: Curs 3: Procese 42

Page 43: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Așteptarea încheierii unui proces

• Sincronizarea acțiunii unor procese

– faci acțiunea X după acțiunea Y

– procesul care face acțiunea X așteaptă încheierea execuției procesului care face acțiunea Yexecuției procesului care face acțiunea Y

• Se cheamă “waiting for a process”

• Sunt utile informațiile legate de încheierea procesului

– valoarea de retur, în shell variabila $?

SO: Curs 3: Procese 43

Page 44: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Operatorul shell &

• În mod obișnuit shell-ul așteaptă încheierea proceselor create

• Operatorul &: shell-ul nu mai așteaptă • Operatorul &: shell-ul nu mai așteaptă încheierea procesului

– procesul rulează în background

– shell-ul controlează stdin

SO: Curs 3: Procese 44

Page 45: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Proces orfan

• Un proces al cărui părinte și-a terminat execuțiaexecuția

• Își pierde legătura în ierarhia de procese

• Este adoptat de un proces dedicat (init pe Unix)

SO: Curs 3: Procese 45

Page 46: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Proces zombie

• Un proces care s-a încheiat dar nu a fost așteptat

• Rămân informații reziduale care vor putea fi folosite de procesul părintefolosite de procesul părinte

• Dacă un proces zombie rămâne și orfan, este adoptat de init și apoi este încheiat

• Procesele zombie pe durată mai lungă ocupă (degeaba) resurse ale sistemului

SO: Curs 3: Procese 46

Page 47: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Comunicare interprocese

• Transfer de date între procese

• Partajare de date (de obicei memorie) între procese

• Comunicarea prin fișiere este modul cel mai • Comunicarea prin fișiere este modul cel mai simplu (și barbar)

• De avut în vedere sincronizarea proceselor– un proces citește dacă altul a scris

– un proces poate scrie dacă altul e pregătit să citească

– de obicei se folosesc buffere (zone de memorie intermediare)

SO: Curs 3: Procese 47

Page 48: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

pipe-uri

• Pipe-uri anonime (spre deosebire de FIFO-uri, pipe-uri cu nume)

• Buffere de comunicare între procese

• Expuse ca o “țeavă” între două procese• Expuse ca o “țeavă” între două procese– un capăt de scriere

– un capăt de citire

– cele două capete sunt descriptori de fișier

• Se folosesc operațiile de tip read și write

• Procesele trebuie să fie “înrudite”

SO: Curs 3: Procese 48

Page 49: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

API DE LUCRU CU PROCESE

SO: Curs 3: Procese 49

Page 50: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Lucrul cu procese în shell

• Se creează prin rularea de comenzi

• Se încheie la încheierea rulării comenzii• Se încheie la încheierea rulării comenzii

• Se termină folosind kill, pkill, Ctrl+c, Ctrl+\

• Shell-ul este procesul părinte al proceselor nou create

SO: Curs 3: Procese 50

Page 51: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Lucrul cu procese în ANSI C

system("ps -u student");

FILE *f = popen("ps -u student", "r");

pclose(f);

• nu e ANSI, e POSIX, dar are suport si pe Windows

SO: Curs 3: Procese 51

Page 52: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Lucrul cu procese în POSIX

pid = fork();

switch (pid) {

case -1: /* fork failed */

perror(“fork”);

SO: Curs 3: Procese 52

perror(“fork”);exit(EXIT_FAILURE);

case 0: /* child process */

execlp("/usr/bin/ps", "ps", "-u", "student", NULL);

default: /* parent process */

printf(“Created process with pid %d\n”, pid);}

pid = wait(&status);

Page 53: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Lucrul cu procese în Win32

PROCESS_INFORMATION pi;

SO: Curs 3: Procese 53

PROCESS_INFORMATION pi;

CreateProcess(NULL, “notepad”, NULL, NULL, ..., &pi);

WaitForSingleObject(pi.hProcess, INFINITE);

GetExitCodeProcess(pi.hProcess, &retValue);

Page 54: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Lucrul cu procese în Python

p = subprocess.Popen(["ps", "-u", "student"],

shell=True, bufsize=bufsize,

SO: Curs 3: Procese 54

shell=True, bufsize=bufsize,

stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)

(child_stdin,

child_stdout,

child_stderr) = (p.stdin, p.stdout, p.stderr)

Page 55: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Lucrul cu procese în Java

ProcessBuilder builder = new ProcessBuilder("ps","-u","student");

Process p = builder.start();

SO: Curs 3: Procese 55

Process p = builder.start();

InputStream is = p.getInputStream();

OutputStream os = p.getOutputStream();

Page 56: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Cuprins

• Rolul proceselor

• Atribute ale unui proces

• Planificarea proceselor• Planificarea proceselor

• Crearea unui proces

• Alte operații cu procese

• API pentru lucrul cu procese

SO: Curs 3: Procese 56

Page 57: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Recapitulare

• De ce este nevoie de procese?

• Ce resurse are un proces?

• Câte procese copil sau părinte are un proces?• Câte procese copil sau părinte are un proces?

• Ce este un proces zombie?

• Ce se întâmplă cu un proces orfan?

• Cu ce diferă implementarea pentru rularea “ls” față de rularea “ls &” într-un shell?

SO: Curs 3: Procese 57

Page 58: Procese - elf.cs.pub.roelf.cs.pub.ro/so/res/cursuri/SO - Curs 03 - Procese.pdf · •Un proces este adus din starea READY în starea RUNNING •Este adus dacă există un procesor

Cuvinte cheie

• proces

• procesor

• memorie

• I/O

• CPU bound

• READY, RUNNING, WAITING

• schimbare de context

• planificare

• cuantă de timp

• ierarhie de procese• CPU bound

• I/O bound

• PCB

• PID

• spațiu virtual de adrese

• multitasking

• stare proces

• ierarhie de procese

• fork, exec

• terminare proces

• așteptare proces

• zombie

• orfan

• pipe

SO: Curs 3: Procese 58