Documente Academic
Documente Profesional
Documente Cultură
Procese Si Fire de Executie-Tema5
Procese Si Fire de Executie-Tema5
PROCESE SI
FIRE DE
EXECUTIE
Proiect SO
Autori:
Dobroiu Madalina 431A;Fratila Dragos Sorin 433A;Petrache Victor
431A;Petrescu Mihai
Cristian 433A;Ra Bogdan 431A; Stoian Adriana 431A
11
Cuprins
1.1.Notiuni introductive.............................................................................................. 4
1.2.Fire de executie.............................................................................................. 4
1.3.Functionalitatea unui fir de executie..........................................................................6
1.4.Starile proceselor................................................................................................. 7
1.5.Comunicarea intre procese..................................................................................... 7
1.6.Semofarizare si monitorizare................................................................................... 8
1.7.Modelele de threading suportate de sistemele win32.....................................................8
1.8.Calculul performantelor......................................................................................... 9
Capitolul 2 Apelurile de sistem de gestiune a proceselor n Linux- Petrescu Mihai Cristian
(433A) 10
2.1.Sistemul de operare Linux.................................................................................... 10
2.1.1.Nucleul...................................................................................................... 10
2.1.2.Shell-ul...................................................................................................... 14
2.1.3.Sistemul de fisiere........................................................................................ 14
2.1.4.Gestiunea proceselor..................................................................................... 15
2.1.5.Crearea unui proces...................................................................................... 16
2.1.6.Comenzi pentru gestiunea proceselor UNIX Linux................................................17
Capitolul 3: Apelurile API pentru gestionarea job-urilor si ale proceselor - Victor Petrache
(431A) 19
3.1 Ce este un API?................................................................................................. 19
3.2 WINDOWS API................................................................................................ 19
3.3 LINUX Kernell API........................................................................................... 20
Capitolul 4: Comparatie intre implementarea proceselor si firelor de executie la Linux si
Windows- Madalina Dobroiu(431A) 22
4.1.Procese n Linux................................................................................................ 22
4.1.1 Implementarea in Linux.................................................................................22
4.1.2.Crearea proceselor :...................................................................................... 24
4.1.3.Rularea unui program executabil......................................................................26
4.1.4.Afia unui copac de procese............................................................................ 26
4.1.5. nlocuirea imaginii unui proces.......................................................................27
4.1.6.Ateptarea terminrii unui proces......................................................................27
4.1.7.Terminarea unui proces..................................................................................29
4.1.8.Copierea descriptorilor de fiier........................................................................29
4.1.9.Motenirea descriptorilor de fiier dup operaii fork/exec.......................................29
4.1.10. Variabile de mediu..................................................................................... 30
Procese n Windows....................................................................................... 31
4.2.1.Implementarea in Windows............................................................................. 31
4.2.2.Crearea unui proces :..................................................................................... 32
4.2.3.Ateptarea terminrii unui proces......................................................................34
4.2.4.Terminarea unui proces..................................................................................35
4.2.5.Variabile de mediu........................................................................................ 36
Capitolul 5. Emularea programelor MS DOS- Adriana Stoian(431A)
37
unei resurse, desenarea componentelor unei aplicatii GUI, etc. De multe ori ori, firele isi
desfasoara activitatea in fundal insa, evident, acest lucru nu este obligatoriu.
In Linux procesul init este parintele
tuturor proceselor ce ruleaza pe acel sistem.
Toate procesele care au rezultat dintr-un
parinte se numesc procese fiu.
Fiecare proces din sistem are un
proces care l-a creat, numit proces parinte
(sau tata) si de la care "mosteneste" un
anumit ansamblu de caracteristici (cum ar fi
proprietarul, drepturile de acces, s.a.), si
poate crea, la randul lui, unul sau mai multe
procese fii.
Fiecare proces are asignat un PID
(process identification), ce este un numar
intreg pozitiv si care este unic pe durata
vietii acelui proces (In orice moment, nu
exista In sistem doua procese cu acelasi
PID).
In UNIX pentru a afla PID-ul unui
proces fiu utilizata functia fork() care ii este adresata procesului parinte.
In programe, de regula parinte, PID-ul poate fi folosit ca atribut de catre functii de
control (waitpid() sau kill()) pentru a executa anumite actiuni asupra procesului specificat.
Daca sistemul de operare are implementat suport pentru procfs, atunci in fisierul /proc/pid se
gasesc informatii despre procese.
In Linux procesul idle denota ca un process nu se mai termina niciodata avand un PID
0 iar init process nu va mai face nimic asteptand terminarea procesului fiu sa i se dea KILL
avand un PID 1 din acest process se trag toate procesele din acel sistem. In Windows folosim
procese echivalente numite System Idle Process si System.
Un aspect foarte important al proceselor este ca acestea au intotdeauna spatii de adresa
distincte, fiecare dintre ele ruland ca si cum toata memoria ar fi a sa. Din aceasta rezulta ca
procesele sunt izolate intre ele si nu se pot accesa unul pe celalalt in mod direct. Totusi exista
comunicare intre ele prin mecanisme IPC (Inter-Process Communication) precum: memorie
partajata, socketuri, coada de mesaje sau semafoare.
Pentru a se folosii eficient un procesor, acesta trebuie sa execute concomitent mai
multe procese. Deoarece un procesor nu poate sa execute la un moment dat decat un singur
proces, fiecarui proces activ in acel moment ii este alocata o bucata de timp (time slice) prin
intermediul unui planificator (scheduler). Daca un proces, de exemplu, foloseste o operatie
I/O pentru o perioada indelungata si nu pune procesorul in mod idle intr-un anumit interval, se
porneste un cronometru care, atunci cand expira, intrerupe procesul consumator de resurse si
aloca resursele unui nou proces. Astfel este asigurat faptul ca un proces nu poate sa detina
monopol asupra procesorului.
Din ce am zis mai sus rezulta doua idei fundamentale despre procese:
Ruleaza independent pentru ca au zone de cod, stiva si date distinct
Trebuie sa fie planificate la executie astfel ca ele sa ruleze in paralel la nivelul
aplicatiei
eficienta maxima, deoarece sarcinile se vor executa una dupa alta. Corespunde din punct de
vedere conceptual multiprogramarii.
3. Modelul Multithread Apartment (Free Thread Apartment Model FTA). Modelul
Multithread Apartment presupune existenta unui singur apartament. Nu este nevoie de
ordonare, deoarece toate thread-urile apartin aceluiasi apartament si pot partaje resursele.
Aceste aplicatii se executa mai rapid decat cele care implementeaza modelul unic sau STA,
deoarece sistemul este mai putin solicitat si poate fi optimizat sa elimine timpii morti.
Corespunde din punct de vedere conceptual diviziunii In timp (time sharing).Aceste tipuri de
aplicatii sunt foarte complexe, deoarece trebuie sa se asigure ca thread-urile nu acceseaza
simultan aceleasi resurse (principiul pipeline). Este, astfel, absolut necesar sa se furnizeze un
sistem de blocare a resurselor. Acesta trebuie implementat cu atentie, deoarece poate conduce
la blocarea totala a sistemului.
1.8.Calculul performantelor
Utilizand de n ori mai multe resurse In paralel, un algoritm nu va rula de n ori mai
repede, datorita fenomenului de timp suplimentar (overhead), indus prin aplicarea
paralelismului. Acest timp suplimentar apare din urmatoarele cauze:
interactiunea Intre procese (transmiterea rezultatelor intermediare sau partiale) si
sincronizarea proceselor;
inactivitatea temporara (idling), care Inseamna ca exista procese inactive pe anumite
perioade de timp, datorita Incarcarii inegale si a asteptarii sincronizarii;
calculele suplimentare, care nu apar In formularea seriala a algoritmului.
Parametrii de intrare care contribuie la calculul performantelor sunt:
timpul de executie secvential sau serial, TS (timpul masurat de la Inceputul si pana la
sfarsitul executiei algoritmului pe un calculator secvential);
timpul de executie paralel, TP (timpul masurat de la Inceputul executiei si pana la
terminarea ultimului subtask paralel);
numarul de procesoare, p.
Cu ajutorul acestora, se pot calcula urmatorii parametri de iesire:
suprasarcina, TO (Total Parallel Overhead) = diferenta dintre timpul total de lucru
Insumat al tuturor procesoarelor si timpul necesar celui mai rapid algoritm secvential;
accelerarea, S (Speedup) = raportul dintre timpul necesar rezolvarii unei probleme pe
un procesor si timpul necesar rezolvarii aceleiasi problem In paralel pe p procesoare
identice;
eficienta utilizarii calculatorului paralel, E = S / p;
costul, C = TP *p, care reflecta timpul total de lucru Insumat al procesoarelor.
2.1.1.Nucleul
Nucleul este partea centrala a sistemului de operare, care asigura servicii catre programele
de aplicatii pentru realizarea gestiunii proceselor, a memoriei, a intrarilor, a iesirilor si a
timpului. Kernel-ul se afla cel mai aproape de CPU si hardware. Este un fisier executabil care
se incarca atunci cand porneste calculatorul. Nucleul (Kernel) este un intermediar intre
interfata furnizata de apelurile sistem si echipamentele fizice din sistemul de calcul.Nucleul
(Kernel) este componenta care asigura servicii de sistem pentru programele de aplicatii
asigurand gestiunea proceselor, a memoriei, a intrarilor/iesirilor si a timpului.2
Kernelul este inima sistemului de operare. El se ocupa cu gestionarea fisierelor de pe disk,
porneste programele si le ruleaza concurent, aloca memorie sau alte resurse diferitelor
procese, primeste si trimite packete de date din respectiv la alte calculatoare.Kernelul face
foarte putine el insusi dar pune la dispozitie unelte cu care pot fi construite diferite servicii.
De asemenea nu permite accesarea directa a harware-ului, fortand folosirea uneltelor pe care
le pune la dispozitie. Astfel kernelul furnizeaza o anumitaprotectie pentru useri. Uneltele puse
la dispozitie de kernel sunt utilizate prin intermediul apelurilor sistem. Programele de sisteme,
si celelalte programe ruleaza deasupra kernelului.
Kernelul este compus din cateva parti importante: managementul
proceselor,managementul memoriei, drivele pentru componentele hardware, drivele pentru
sistemul de fisiere, managementul retelei, si altele.
1
2
Spatiul Swap Este o parte rezervata de pe hard disk pentru kernel, acesta utilizand-o in
timpul procesarii. Portiuni de programe care ruleaza pot fi aruncate hard disk-ului si apoi,
la nevoie, aduse inapoi. Acest spatiu swap se afla in realitate pe hard disk, insa seamana cu o
memorie aditionala sau RAM additional, uneori fiind numit memorie virtuala.
Demonii - Programe sau procese care realizeaza o sarcina particulara sau monitorizeaza
discurile sau executia programelor. Demonii sunt procese speciale care pornesc dupa ce se
3
4
incarca sistemul de operare. Demonii asteapta apoi sa faca ceva in sprijinul SO. Pot fi porniti
sau opriti daca este necesar. Un exemplu este cel al demonului imprimantei, lpsched (line
printer scheduler). Acesta se lanseaza cand sistemul porneste si apoi asteapta in fundal pana
cand cineva are nevoie sa tipareasca ceva. Demonii din lumea Linuxului sunt similari cu
Serviciile din Windows NT/2000 sau cu NetWare Loadable Modules (NLMs) din Novell
NetWar.5
Nucleul este alcatuit din urmatoarele componente:6
1. interfata cu procesele utilizator - care se realizeaza exclusiv prin intermediul apelurilor
de sistem;
2. subsistemul de control al operatiilor de intrare iesire - care controleaza modul de lucru
cu dispozitivele periferice, aloca spatiu pentru fisiere, gestioneaza spatiul liber din
memoria externa, etc.
3. subsistemul de control al proceselor - care realizeaza planificarea, sincronizarea si
comunicarea intre procese, precum si gestionarea memoriei;
4. interfata cu hardware-ul realizeaza tratarea intreruperilor si comunicarea directa cu
componentele fizice ale sistemului electronic de calcul.
Un proces sub sistemul Linux este caracterizat de toate operatiile ce trebuie sa se
desfasoare in timp pentru a satisface cerintele unui program ce a fost lansat in executie. In
cazul unui program aflat in executie, la un moment dat pot exista mai multe procese. Ele se
numesc instante ale acestui program.
Sistemul de operare Linux foloseste un sistem de procese numit multitasking pentru a
aloca timpul de lucru al procesorului mai multor utilizatori in acelasi timp. In realitate nu este
vorba de procese care se ruleaza in acelasi timp ci unele dupa altele la intervale de timp de
ordinul milisecundelor. Sistemul de operare aloca timpul in asa fel incat sa lase impresia de
continuitate pentru fiecare utilizator. In timp ce unul dintre acestia lucreaza la terminalul
sau,el imparte cu ceilalti resursele de calcul.
Intr-un sistem de operare multiutilizator, se pot executa mai multe programe
simultan.Existand o singura CPU, in realitate un singur program se executa efectiv la un
moment dat, iar celelalte se vor executa atunci cand CPU le va acorda cuante de timp. In
timpul executiei unui program, celelalte programe sunt rezidente in RAM, cu conditia ca nici
unul sa nu solicite toata memoria. De aici decurg 2 sarcini ale nucleului :7
planificarea proceselor ;
impartirea in cuante de timp intre procese;
gestiunea memoriei;
atribuirea de zone de memorie libera la procese si eventuala evacuare sau incarcare a
unui proces in/din disc.
Linux este un sistem foarte dinamic. Procesele pot fi de scurta durata (executarea unei
comenzi de la linia de comanda) sau de lunga durata (un serviciu de retea). Din acest motiv, in
general managementul proceselor si programarea lor este foarte importanta. Practic,
5
6
7
procesorul executa un timp instructiunile unuia dintre procese, apoi sistemul de operare va
impune ca procesorul sa execute pentru un timp instructiunile altui proces si asa mai departe.
Acest mod de executie a proceselor, care simuleaza paralelismul, se numeste executie
concurenta. In implementarea concurentei trebuie rezolvate urmatoarele probleme:8
un proces ale carui instructiuni sunt executate de procesor sa poata fi eliminat din
aceasta pozitie privilegiata si inlocuit cu altul;
procesul astfel eliminat sa poata fi executat din nou, la un moment ulterior, fara ca
intreruperea executiei sale sa-l afecteze in vreun fel;
sa se decida, pentru fiecare proces, cat timp vor fi executate instructiunile acestuia;
sa se asigure accesul tuturor proceselor la resursele comune puse la dispozitie de
calculator.
Fiecare proces se afla, in orice moment, intr-una din urmatoarele stari:
10
2.1.2.Shell-ul
Shell-ul reprezinta interpretorul de comenzi al sistemului de operare care are rolul de a
interpreta comenzile date de utilizator, realizand o interfata intre acesta si sistemul de operare
si de asemenea ofera facilitati de programare intr-un limbaj propriu avand caracteristicile
asemanatoare cu ale limbajelor de nivel inalt, permitand scrierea si utilizarea de programe.In
concluzie,un shell este o interfata intre utilizator si kernel. Actioneaza ca un interpretor sau ca
un translator. Cu alte cuvinte, shell-ul accepta comenzi scrise de utilizator, le interpreteaza, si
apoi executa programele corespunzatoare. Shell-urile pot fi linie de comanda sau grafice.
Pentru a verifica ce shell utilizezi la un moment dat se poate folosi comanda ps (process
status).11
Shell-ul citeste si interpreteaza cererile introduse de utilizator. Apoi comunica instructiuni
kernel-ului care duce la indeplinire cererile formulate de utilizator. Shell-ul este deci legatura
directa, interfata directa a utilizatorului cu sistemul de operare. De obicei, cele mai multe
cereri sunt pentru a rula programe.
2.1.3.Sistemul de fisiere
Sistemul de fisiere cuprinde ansamblul fisierelor memorate sub forma de comenzi,
programe traducatoare, programe utilitare, sisteme pentru lucrul cu colectii dedate, programe
aplicative, precum si fisiere de date asociate organizate intr-o structura standard de directoare
si subdirectoare.
Sistemul de fisiere asigura o modalitate de a separa si de a organiza informatia pe un hard
disk. Structura de fisiere a sistemului Linux este o ierarhie de directoare, subdirectoare si
fisiere care sunt grupate in functie de anumite scopuri. Sistemul de fisiere este integrat cu
Kernel-ul in scopul asigurarii unei structuri organizatorice pentru software-ul si pentru datele
utilizatorilor. Structura de fisiere subdivide hard disk-urile, facandu-le mai usor de administrat
si usurandu-ne localizarea fisierelor. Hard disk-urile pot fi divizate in sisteme de fisiere,
directoare, subdirectoare si fisiere. Sistemul de fisiere organizeaza datele intr-un mod similar
11
unui dulap. Sistemul de fisiere este dulapul, directoarele sunt asemenea sertarelor,
subdirectoarele asemenea dosarelor isr fisierele pot fi asemanate u foile prinse in dosar.
Un fisier este o colectie de informatii (date, o aplicatie, sau documente). In Linux un fisier
poate cuprinde orice. Cand se creeaza un fisier, Linux-ul ii atribuie acestuia un numar de
identificare intern unic. Acest numar de index este utilizat pentru a putea localiza fisierul pe
hard disk.12
Deci, un sistem de fisiere este un ansamblu de fisiere si directoare. Sistemele de fisiere
sunt dependente de dimensiunea si structura discului, precum si de structura interna a
Linuxului. Intr-un sistem multiuser (multi utilizator), poate exista la un moment dat un numar
mare de fisiere stocate. Din aceasta cauza, utilizatorii au nevoie de un sistem care sa le
permita identificarea rapida si simpla a fisierelor.
De obicei, directoarele si fisierele utilizatorilor se afla stocate pe un alt sistem de fisiere
decat cel pe care se afla directoarele si fisierele sistemului de operare. Daca exista un numar
mare de utilizatori atunci fisierele utilizatorilor se pot intinde pe mai mult de un sistem de
fisiere.
Sistemul de fisiere se refera la modul in care Linuxul implementeaza fisierele si
directoarele.
2.1.4.Gestiunea proceselor
Un proces se desfasoara in timp si are un caracter dinamic. Initierea unui proces poate fi
efectuata numai de catre un alt proces activ. Cand este conectat primul utilizator, Kernel-ul
asigura o copie a Shell-ului ce se ruleaza doar pentru el, ivindu-se existenta unei alte structuri
ierarhice de procese create printr-un mecanism numit bifurcatie (fork) prin care Kernel
inlocuieste un proces existent prin 2 procese:13
procesul initial(parinte);
procesul initiat de procesul initial (fiu) care imparte(partajeaza) toate fisierele cu
procesul parinte. Dupa bifurcatie, ambele procese se executa independent
(exceptie:cand solicitam explicit ca procesul parinte sa astepte terminarea procesului
fiu prin directiva WAIT, in continuare procesul fiu poate general la randul lui o noua
bifurcatie).
Explicand mai pe larg,fiecare proces din sistem are un proces care l-a creat, numit proces
parinte, (sau tata) si de la care "mosteneste" un anumit ansamblu de caracteristici (cum ar fi
proprietarul
sau
drepturile
de
acces).
Fiecare proces are asignat un PID (process identification=identificator de proces), ce este
un numar intreg pozitiv si care este unic pe durata vietii acelui proces (in orice moment, nu
exista in sistem doua procese cu acelasi PID). Aceste numere sunt alocate proceselor in mod
crescator, incepand cu 0 in momentul cand se creeaza procesul.Exista un proces special, cel
cu PID = 0, care este creat atunci cind este initializat (boot-at) sistemul pe calculatorul
respectiv. Acesta nu are proces tata, fiind radacina arborelui de procese ce se vor crea pe
12
13
parcursul timpului (pina la oprirea calculatorului). Celelalte procese sunt create cu ajutorul
functiei sistem fork.14
Un program executabil este incarcat in memorie prin functia de sistem exec. In termenii
kernel-ului Linux, un proces este reprezentat de o structura destul de mare,numita
task_struct.Aceasta structura contine toate datele necesare pentru a reprezenta un proces si de
a intretine relatii cu alte procese (parinti si copii).
De la user-space, procesele sunt reprezentate prin procesul de identificare (PIDs). Din
perspectiva utilizatorului, un PID este o valoare numerica, care identifica in mod unic un
proces. PIDs pot fi refolosite, dupa ce un proces moare. In spatiul de utilizator, puteti creea
procese in mai multe moduri.Puteti executa un program (care duce la crearea unui nou proces)
sau, puteti invoca un fork sau exec sistem de apel. Un apel exec inlocuieste procesul actual cu
noul program.15
14
http://www.scribd.com/doc/11400920/sisteme-de-operare
http://tldp.org/LDP/intro-linux/html/sect_04_03.html
16
http://polishlinux.org/console/managing-processes-in-linux/
15
17
http://polishlinux.org/console/managing-processes-in-linux/
18
http://polishlinux.org/console/managing-processes-in-linux/
19
http://www.scribd.com/doc/11400920/sisteme-de-operare
http://articles.techrepublic.com.com/5100-10878_11-5025322.html
http://articles.techrepublic.com.com/5100-10878_11-5025322.html
3. sleep
functia:suspenda temporar executia unui proces
sintaxa:sleep (timp)
Timpul este dat in secunde
4. time
functia:furnizeaza timpul de executi al unei comenzi
sintaxa:time (comanda)
Se lanseaza in executie (comanda), iar la sfirsitul executiei se afiseaza timpul de executie
si timpul sistem, in secunde.22
5. sh
functia: lanseaza in executie interpretorul Shell
sintaxa: sh (fisier)
Executa un fisier de comenzi Shell.
22
23
http://articles.techrepublic.com.com/5100-10878_11-5025322.html
http://www.scribd.com/doc/11400920/sisteme-de-operare
Generale - un set complet de API, care este ncorporat in bibliotecile unui limbaj
de programare, de exemplu: Standard Template Library in C++ sau Java API
Specifice - menite sa abordeze o problema specifica, de exemplu Google Maps
API sau API Java pentru Servicii Web XML.
Dependente de limbaj - ceea ce inseamna ca este disponibil doar prin utilizarea
elementelor de sintaxa ale unui anumit limbaj, ceea ce face API-ul mai usor de
utilizat.
Independente de limbaj scris, astfel incat sa poata fi apelat din mai multe
limbaje de programare diferite. Aceasta este o caracteristica de dorit pentru APIurile orientate pe servicii care nu sunt legate de un process specific sau de sistem si
pot fi furnizate ca apeluri de procedura la distanta sau ca servicii web.24
24
25
http://en.wikipedia.org/wiki/Application_programming_interface
http://en.wikipedia.org/wiki/Windows_api
Acestea reprezinta o parte din API-urile Windows pentru gestionarea proceselor, setul
intreg de functii se poate gasi in cadrul documentatie oferite de catre compania Microsoft
pentru sistemele de operare Windows. 26
26
http://msdn.microsoft.com/en-us/library/ms684847%28v=VS.85%29.aspx#process_functions
Datorita faptului ca LINUX este un sistem aflat in continua dezvoltare, aceasta lista de APIuri poate fi modificata intr-un mod constant, lucru ce duce la imbunatatirea kernel-lui
sistemului si implicit la imbunatatirea sistemului de operare LINUX. 27
27
http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html
Capitolul 4:
Comparatie intre implementarea
proceselor si firelor de executie la Linux si WindowsMadalina Dobroiu(431A)
Toate sistemele de operate moderne se bazeaz pe nite concepte de baz precum
procesele, memoria, fiierele etc. Nu este necesar ca un utilizator normal a unui sistem de
operare s cunoasc aceste concepte dar un programator ar trebui s le cunoasc pentru a
putea dezvolta aplicaii ct mai eficiente, care utilizeaz corect toate resursele sistemului de
calcul, de preferin portabile de pe un sistem de operare pe altul.
Cea mai simpla definiie a unui proces este: Un proces este un program aflat n curs
de execuie.
Un sistem de operare modern are sarcina de a crea i termina procese, suspenda i
continua procese, sincroniza procese prin metode specifice, asigura comunicarea ntre
procese, rezolva situaiile de impas etc. Pentru a realiza aplicaii, programatorul se va folosii
de aceste funcii ale sistemului de operare. Problema este ca sistemele de operare abordeaz
diferit aceste funcii, fiecare abordare avnd unele avantaje dar i unele dezavantaje.
Cele mai utilizate sisteme de operare n prezent sunt cele bazate pe UNIX i diferitele
versiuni ale sistemelor Windows. Prerile despre aceste dou feluri de sisteme difer, unii
spunnd ca sistemele bazate pe UNIX au un avantaj fa de sistemele Windows pentru c
ofer o flexibilitate, stabilitate i securitate mai mare, pe de alt parte alii pretind c sistemele
Windows au un avantaj deoarece sunt mai uor de folosit. n timp diferenele ntre aceste dou
sisteme s-au micorat.
4.1.Procese n Linux
4.1.1 Implementarea in Linux
In Linux nu exista o diferenta precisa intre procese si fire de executie.Un proces parinte
poate crea mai multe procese copil care acceseaza acelasi spatiu de memorie alocat
procesului parinte.Atunci cand unul dintre copii incearca sa modifice(sa scrie) o zona de
memorie a procesului parinte,este creata o copie a acelei zone de memorie pe care va opera in
continuare procesul copil,nefiind astfel nevoie sa fie creata o copie a intreg spatiului de
memorie al procesului parinte pentru fiecare copil (se folosest emecanismul copy-onwrite).Procesele copil pot fi asemanate cu firele de executie28.
Pentru gestionarea proceselor in Linux,kernelul aloca fiecarui proces o structura de date
numita task_struct(definita in fisierul linux/include/linux/sched.h din codul sursa al
kernelului).Rezulta o colectie de structuri de date task_struct care va fi reprezentata sub doua
forme:
sub forma de vector(tabel de cautare) de structuri task_struct;
sub forma de lista circulara dublu-inlantuita de structuri task_struct.
28
29
4.1.2.Crearea proceselor :
http://ebooks.unibuc.ro/informatica/Seiso/4.2_files/text.htm
Andrew S. Tanenbaum, Sisteme de operare moderne, Byblos, 2004;
Pentru a intoarce PID-ul procesului parinte avem functia: chestii interesante. Pentru a
astepta terminarea unui anumit proces , se foloseste waitpid: pid_t waitpid(pid_t pid,int
*status,int options); care asteapta terminarea procesului cu PID-ul pid.
Pentru a intoarce PID-ul procesului curent avem functia:
pid_t getpid(void);
pid_t getppid(void);
Observatie:
Din cauza faptului ca dupa apelul fork se copiaza sectiunea de date a procesului parinte in
procesul fiu , orice modificare asupra unei variabile declarata inainte de fork() intr-un proces
nu va fi sesizata in celalalt proces.
4.1.3.Rularea unui program executabil
Cel mai simplu mod prin care se poate rula un proces este prin folosirea funciei de
bibliotec system :
int system(const char*command);
Apelarea acestei funcii are ca efect execuia sub forma unei comenzi shell comanda
reprezentat prin stringul de caractere command.
Implementarea system: este creat un nou process cu fork; procesul copil rezultat execut
prin intermediul exec programul sh cu argumentele c command, timp n care printele
ateapt terminarea procesului copil. 32
4.1.4.Afia unui copac de procese
pstree arat procesele care ruleaz ca un copac. Copacul este nrdcinat fie la pid sau la
iniializare dac PID este omis. n cazul n care un nume de utilizator este specificat, toate
procesele copaci deinute de utilizator sunt afiate.
$ pstree
32
Procesul apelant va fi blocat pn cnd procesul cu PID-ul pid se va termina sau va fi oprit i
el la rndul lui.
Valoarea argumentului pid poate fi:
>0 atunci cand reprezint PID-ul unui proces;
0 (WAIT_MYGRP) i atunci identific orice proces copil din grupul de procese din
care
face parte procesul apelant;
-1 (WAIT_ANY) orice proces copil.
Parametrul options poate fi setat cu unul sau mai multe din urmtoarele flaguri
(combinate prin SAU pe bii):
WNOHANG dac nici unul din procesele specificate nu este terminat, se va iei
imediat
din apelul waitpid (procesul care apelase waitpid nu se blocheaz);
WUNTRACED waitpid se ntoarce i dac unul dintre procesele specificate s-a
oprit, iarinformaiile despre aceast oprire nu au fost nc raportate; dac acest flag
este setat,waitpid se ntoarce i pentru procesele copil care s-au oprit, dar care nu se
afl ntreprocesele urmrite de procesul apelant; informaiile despre copii urmrii
suntfurnizate chiar dac acest flag nu este precizat.35
Funcia va ntoarce PID-ul procesului a crui stare este raportat; informaiile de stare sunt
depuse n locaia ctre care indic status. Funcia se va bloca dac nici unul din procesele
specificate nu este nc terminat (sau dac nici unul din ele nu este oprit i s-a
setatWUNTRACED), mai puin atunci cnd este setat WNOHANG, caz n care funcia
ntoarce 0.
Atunci cnd este eroare se va ntoarce -1, iar errno este setat pe:
EINTR apelul a fost ntrerupt de un semnal
ECHILD nu s-a specificat un PID de proces copil valid
EINVAL este specificat un flag invalid pentru options
Starea procesului interogat se poate afla prin examinarea statusului cu urmtoarele
macrodefiniii:
WIFEXITED(status) ntoarce o valoare diferit de 0 dac procesul interogat s-a
terminat prin exit
WEXITSTATUS(status), dac WIFEXITED(status) e diferit de 0, arat codul de
terminare a procesului
WIFSIGNALED(status) ntoarce o valoare diferit de 0 dac procesul interogat sa terminat datorit unui semnal netratat
WTERMSIG(status), dac WIFSIGNALED(status) e diferit de 0, arat numrul
semnalului datorit cruia procesul s-a terminat
WCOREDUMP(status) ntoarce o valoare diferit de 0 dac procesul interogat a
generat un core
WIFSTOPPED(status) ntoarce o valoare diferit de 0 dac procesul interogat este
oprit
WSTOPSIG(status), dac WIFSTOPPED(status) e diferit de 0, ntoarce numrul
semnalului care a oprit procesul
Observaie
35
Aceste macrodefiniii primesc ca argument buffer-ul n care se afl informaia de stare (adic
un int), i nu un pointer ctre acest buffer.
pid_t wait(int *status);
Varianta simplificat care ateapt orice proces copil s fie terminat. Este echivalent cu:
waitpid(-1, &status, 0);
Pentru a folosi wait sau waitpid trebuie incluse header-ele sys/types.h i sys/wait.h. 36
4.1.7.Terminarea unui proces
Pentru terminarea procesului curent LINUX pune la dispoziie apelul de sistem exit (al crui
antet este descris n stdlib.h).
void exit(int status);
Procesul apelant va fi terminat imediat. Toi descriptorii de fiier ai procesului sunt nchii,
copii procesului sunt infiai de procesul init, iar printelui procesului i va fi trimis un
semnal SIGCHLD. Procesului printe i va fi ntoars variabila status ca rezultat al unei
funcii de ateptare (wait sau waitpid).
Pentru terminarea unui alt proces din sistem, se va trimite un semnal ctre procesul respectiv
prin intermediul apelului de sistem kill.[4]
4.1.8.Copierea descriptorilor de fiier
int dup(int oldfd);
Duplic descriptorul de fiier oldfd i ntoarce noul descriptor de fiier sau -1 n caz de
eroare.
int dup2(int oldfd, int newfd);
Duplic descriptorul de fiier oldfd n descriptorul de fiier newfd; dac newfd exist,
mai nti va fi nchis fiierul asociat. ntoarce noul descriptor de fiier sau -1 n caz de eroare.
Descriptorii de fiier sunt de fapt un index n tabela de fiiere deschise, ce conine
pointeri ctre o structur ce conine informaii despre fiier. Duplicarea unui descriptor de
fiier nseamn duplicarea intrrii din tabela de fiiere deschise (adica un pointer). Din acest
motiv, toate informaiile asociate unui fiier (lock-uri, poziia n fiier, flagurile) sunt partajate
de cei doi file descriptori. Ceea ce nseamn c operaiile ce modific aceste informaii pe
unul din file descriptori (de ex. lseek) sunt vizibile i pentru cellat file descriptor (duplicat) i
invers.
Observatie: Exist i o excepie: flagul CLOSE_ON_EXEC nu este partajat (acest flag nu
este inut n structura menionat mai sus).
Pentru a putea folosi dup i dup2 trebuie inclus header-ul unistd.h. [8]
4.1.9.Motenirea descriptorilor de fiier dup operaii fork/exec
Descriptorii de fiier ai procesului printe se motenesc n procesul copil n urma apelului
fork. Dup un apel exec descriptorii de fiier sunt pstrai de asemenea, mai puin aceia dintre
ei care au setat flagul CLOSE_ON_EXEC.
Pentru a seta flagul CLOSE_ON_EXEC se folosete funcia fcntl cu un apel de genul:
fcntl(file_descriptor, F_SETFD, FD_CLOEXEC);
36
Pentru a putea folosi funcia fcntl trebuie incluse header-ele unistd.h i fcntl.h.
Trei dintre descriptorii de fiier sunt mai importani:
STDIN_FILENO toate programele obinuite conin acest file descriptor care are valoarea
0; el reprezint intrarea standard; tot ce utilizatorul scrie la terminal, programul va putea citi
din acest file descriptor
STDOUT_FILENO toate programele obinuite au acest file descriptor care are valoarea 1;
el reprezint ieirea standard; toate apelurile de genul printf vor genera output la terminal
STDERR_FILENO
toate programele obinuite au acest file descriptor care are valoarea 2; el reprezint ieirea
standard de eroare.37
4.1.10. Variabile de mediu
char **environ;
Un vector de pointeri la iruri de caractere, ce conin variabilele de mediu i valorile lor.
Vectorul e terminat cu NULL. irurile de caractere sunt de forma
VARIABILA=VALOARE.
char* getenv(const char *name);
ntoarce valoarea variabilei de mediu denumite name, sau NULL dac nu exist o variabil de
mediu denumit astfel.
int setenv(const char *name, const char *value, int replace);
Adaug n mediu variabila cu numele name (dac nu exist deja) i i seteaz valoarea la
value. Dac variabila exist i replace e 0, aciunea de setare a valorii variabilei e ignorat;
dac replace e diferit de 0, valoarea variabilei devine value.
int unsetenv(const char *name);
terge variabila denumit name din mediu. 38
4.1.11. Depanarea unui proces
Pe majoritatea sistemelor de operare pe care a fost portat, gdb nu poate detecta cnd un
proces realizeaz o operaie fork(). Atunci cnd programul este pornit, depanarea are loc
exclusiv n procesul iniial, procesele copii nefiind ataate debugger-ului. n acest caz, singura
soluie este introducerea unor ntrzieri n executia procesului nou creat (de exemplu, prin
apelul de sistem sleep()), care s ofere programatorului suficient timp pentru a ataa manual
gdb-ul la respectivul proces, presupunnd c i-a aflat PID-ul n prealabil. Pentru a ataa
debugger-ul la un proces deja existent, se folosete comanda attach, n felul urmtor:
(gdb) attach PID
Aceast metod este destul de incomod i poate cauza chiar o funcionare anormal a
aplicaiei depanate, n cazul n care necesitile de sincronizare ntre procese sunt stricte (de
exemplu operaii cu time-out).
Din fericire, pe un numr limitat de sisteme, printre care i Linux, gdb permite depanarea
comod a programelor care creeaz mai multe procese prin fork() i vfork(). Pentru ca gdb s
urmreasc activitatea proceselor create ulterior, se poate folosi comanda set followforkmode, n felul urmtor:
(gdb) set follow-fork-mode mode
unde mode poate lua valoarea parent, caz n care debugger-ul continu depanarea procesului
printe, sau valoarea child, i atunci noul proces creat va fi depanat n continuare. Se poate
37
38
observa c n aceast manier debugger-ul este ataat la un moment dat doar la un singur
proces, neputnd urmri mai multe simultan.
Cu toate acestea, gdb poate ine evidena tuturor proceselor create de ctre programul
depanat, dei n continuare numai un singur proces poate fi rulat prin debugger la un moment
dat. Comanda set detach-on-fork realizeaz acest lucru:
(gdb) set detach-on-fork mode
unde mode poate fi on, atunci cnd gdb se va ataa unui singur proces la un moment dat
(comportament implicit), sau off, caz n care gdb se ataeaz la toate procesele create n
timpul execuiei, i le suspend pe acelea care nu sunt urmrite, n funcie de valoarea setrii
followfork-mode.
Comanda info forks afieaz informaii legate de toate procesele aflate sub controlul gdb
la un moment dat:
(gdb) info forks
De asemenea, comanda fork poate fi utilizat pentru a seta unul din procesele din list drept
cel activ (care este urmrit de debugger).
(gdb) fork fork-id
unde fork-id este identificatorul asociat procesului, aa cum apare n lista afiat de comanda
info forks.
Atunci cnd un anumit proces nu mai trebuie urmrit, el poate fi nlaturat din list folosind
comenzile detach fork i delete fork:
(gdb) detach fork fork-id
(gdb) delete fork fork-id
Diferena dintre cele dou comenzi este c detach fork las procesul s ruleze independent, n
continuare, n timp ce delete fork l ncheie. 39
4.2 Procese n Windows
Cel mai utilizat sistem de operare n prezent este Windows XP ocupnd n jur de 73% din
piaa sistemelor de operare. Asta nsemnnd c i majoritatea programelor sunt scrise n aa
fel nct s poate fi rulate pe acest sistem de operare.
4.2.1.Implementarea in Windows
La cel mai inalt nivel de abstractie,un proces Windows consta in urmatoarele elemente :
Un spatiu virtual de adrese privat(memoria pe care o are procesul la dispozitie);
Un program executabil care contine instructiunile programului si care va fi incarcat in
spatiul virtal de adrese;
lista de legaturi spre resurse de sistem,porturi de comunicatie,fisiere;
Un context de securitate reprezentat de un nume de utilizator,o lista de grupuri din
care face parte utilizatorul,privilegiile de care are parte procesul;
Un identificator de proces unic(intern se mai numeste si identificator de client);
Cel putin un fir de executie .
Un proces Windows mai contine si un pointer catre procesul parinte(din care a fost
lansat).Acest pointer poate fi nul. Firul de executie este componenta fundamentala a unui
proces.Un proces fara fire de executie nu se poate executa.Un fir de executie din Windows
poate fi descris de urmatoarele componente 40
39
40
Fisierul executabil este analizat.Daca este un fisier executabil Windows pe 16 biti sau
MS-DOS atunci este creat un mediu special de executie pentru acesta;daca fisierul este
un executabil Windows pe 32 de biti se verifica registrul pentru a vedea daca are vreo
cerinta speciala.Operatiile de la acest pas se fac in modul utilizator.
. Se creeaza un obiect proces gol cu apelul de sistem NtCreateProcess si se adauga in
spatiul de nume al managerului de obiecte. Mai sunt create un obiect nucleu si unul
executiv. Managerul de proiecte creeaza un bloc de control al procesului pentru acest
obiect si il initializeaza cu Idul procesului si cu alte campuri.Este creat un obiect
sectiune pentru a urmari spatiul de adrese al procesului.
kernel32.dll preia controlul,efectueaza apelul de sistem NtCreateThread pentru a crea
un fir de executie initial.Se creeaza stivele utilizator si nucleu.Dimensiunea stivei este
data de antetul fisierului executabil.
kernel32.dll trimite subsistemului de mediu Win32 referintele catre proces si catre
firul de executie care sunt adaugate in niste tabele.
Este apelata o procedura de sistem care termina initializarea iar firul de executie
incepe sa ruleze.
Edition, Microsoft Press, 2005 (face parte din Windows Research Kernel)
41
Andrew S. Tanenbaum, Sisteme de operare moderne, Byblos, 2004;
Sistemul de operare poate crea procese sau poate desfiina procese.n timpul execuiei,
un proces poate crea unul sau mai multe procese noi. Procesele create sunt numite copii iar
procesul care le creaza este numit printe.
Procesul nou creat are i el nevoie de resurse, pe care le ia direct de la sistemul de
operare sau de la procesul printe.
Procesul printe poate aloca spre utilizare numai o parte a resurselor, cum ar fi
memoria sau fiierele, prevenind astfel suprancrcarea sistemului din cauza crerii prea
multor procese copii. 43
Funcia CreateProcess-Creeaz un proces nou.Noul proces ruleaz n contextul de
securitate oferit de procesulapelat. Daca procesul apelat ine loc de un alt user, procesul nou
utilizeaz semnul procesului apelat, nu semnul celui care ine loc userului. Pentru a rula noul
process n contextul de securitate al userului reprezentat de semnul nlocuitor, se folosete
funcia CreateProcessAsUser sau funcia CreateProcessWithLogonW.
Sintaxa:
BOOL WINAPI CreateProcess(
__in_opt LPCTSTR lpApplicationName,
__inout_opt LPTSTR lpCommandLine,
__in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes,
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in BOOL bInheritHandles,
__in DWORD dwCreationFlags,
__in_opt LPVOID lpEnvironment,
__in_opt LPCTSTR lpCurrentDirectory,
__in LPSTARTUPINFO lpStartupInfo,
__out LPPROCESS_INFORMATION lpProcessInformation
);
Parametrii:
1)lpApplicationName Numele modulului care va fi executat.Acest modul poate fi o aplicaie
proprie Windows.Poate fi i alt tip de modul(de exemplu, MS-Dos sau OS/2), dac
subsistemul potrivit este disponibil pe calculator. Parametrul lpApplicationName poate fi
NULL. n acest caz numele modulului trebuie s fie primul semn delimitat de un spaiu, la
sfritul i la nceputului
argumentului.
2) lpCommandLine -Linia de comand poate fi executat. Lungimea maxim a acestui ir este
32 mii caractere. Daca parametrul lpCommandLine este NULL , atunci avem o limitare de
caractere
la
MAX_PATH.
Versiunea
Unicod
a
acestei
funcii,
CreateProcessWithLogonW poate modifica coninutul acestui ir.Drept urmare aceti
parametrii nu pot fi pointeri la
memoria read-only pentru c s-ar realiza o violare a accesului.
3) lpProcessAttributes-Un pointer la structura SECURITY_ATTRIBUTES care determin
daca ceea ce returneaz procesul poate fi motenit la noul proces provenit din acesta. Dac
acest paramentru este NULL atunci rezultatul returnat de process nu poate fi motenit.
42
43
46
4.2.5.Variabile de mediu
Funcia GetEnvironmentStrings-ntoarce variabilele mediului corespunztor pentru procesul
curent.
Sintaxa:
LPTCH WINAPI GetEnvironmentStrings(void);
Daca funcia compileaz atunci rspunsul este un pointer ctre environment block al
procesului curet, dac nu atunci rspunsul este NULL.49
49
n ciuda utilizrii comune, niciunul dintre acestea sisteme nu a fost pur i simplu numit
"DOS". Un numr de sisteme de operare microcalculator non-x86 independente au avut
"DOS" n numele lor, i sunt adesea denumite simplu "DOS" atunci cnd se discut despre
microcalculatorul care le utilizeaz (de exemplu AmigaDOS, AMSDOS, ANDOS, Apple
DOS, Atari DOS, DOS Commodore, CSI-DOS, ProDOS, i TRS-DOS). Oferind n acelai
timp multe dintre funciile acelai sistem de operare pentru sistemul lor informatic, programe
care ruleaz n unul dintre aceste sisteme operare nu ar rula n altele.
"Emulation for Digital Preservation in Practice: The Results." The International Journal of Digital Curation
2.2 (2007): 123-132, van der Hoeven, Jeffrey, Bram Lohman, and Remco Verdegem
Este posibil a rula aplicaii DOS sub Microsoft Virtual PC, care permit o compatibilitate mai
bun dect emulatoarele DOS. O versiune legitim a MS-DOS poate fi instalata, care ar trebui
s permit tuturor, cu exceptia aplicaiilor celor mai ncpnate s ruleze.
http://www.dosbox.com/information.php
52
http://www.dosbox.com/wiki/Main_Page
DOSBox nu conine sau necesit fiiere reale DOS, astfel nct poate fi utilizat n mod liber,
fr
licen.
Ce se ntmpl n interiorul consolei poate fi capturat ca imagine i nregistrat ca video.
Acesta accept chiar lucrul n reea pentru a permite multiplayer LAN peste moderne. Setarile
sunt salvate n folderul de profil al utilizatorului53.
2. RealSpec v0.96.16
Emuleaz: 16K / 48k / 128K / 2 / 2 A / 3 Spectrums ZX. Didaktik Pentagon i clone Scorpion.
Formate disc: Z80 (cu extensii Scorpion), .sna, .slt, .sp, .tap, .tzx, .rzx, .wav, .csw, .mgt, .img
(DISCiPLE/+D), .trd, .scl (TR-DOS), .mbd (MB-02+), .opd, .dsk, .d80, .mdr, .wdr, .air, .pok
si .rom
Cerine: 200 MHz Pentium / AMD echivalent. 8MB RAM sau mai mult. MS-DOS Windows
9x Me 2000 sau XP
Creat de: RamSoft
Ultima actualizare: 10 septembrie 2002
Fr ndoial cel mai cuprinzator emulator disponibil RealSpec ar fi, de asemenea, considerat
de muli a fi cel mai exact. Toate caracteristicile nedocumentate procesorului Z80A sunt exact
emulate, cum ar fi comportamentul registrului de fanioane. Modurile video reproduse fidel si
poate fi configurat extensiv.
De asemenea, emuleaz Multiprint, Multiface 1 / 128, MGT DISCIPLE interfa disc, Opus
Discovery, Rotronics Wafadrive, ZX Interface I (cu suport de reea), Microdrives, interfata
53
http://www.rarst.net/software/dosbox/
disc Beta 128, Mouse Kempston si mai multe interfee audio diferite, etc. Fisierele audio sunt
bine emulate si pot fi configurate extensiv. n plus, fa de formatele de fiiere listate,
RealSpec poate ncrca i / sau a salva audio video si imagini.
O documentatie extinsa este inclusa, cu informaii de referin suplimentare pentru emulator,
hardware-uri i formate de fiier acceptate si disponibile pe site-ul RamSoft. Versiuni
adecvate pentru utilizarea cu procesoare AMD sau Intel Pentium sunt disponibile. Versiunea
MS-DOS va rula sub emulare MS-DOS pe Microsoft Windows 2000 / XP platforme cu
limitri (fr sunet)54.
54
http://www.worldofspectrum.org/faq/emulators/msdos.htm
3) Seteaza ceasul sistemului n functie de setarile din BIOS precum si realizeaza alte
setari (setarea timpului, setarea zonei), stabilite si configurate pe parcursul instalarii Linuxului.
4) Porneste memoria virtuala a sistemului, activnd si montnd partitia swap,
identificata n fisierul /etc/fstab (File System table).
5) Seteaza numele de identificare (system's host name) pentru retea si mecanismul de
autentificare al sistemului (system wide authentication), cum ar fi NIS (the Network
Information Service,), NIS + (o versiune mbunatatita de NIS), si asa mai departe.
6) Verifica sistemul de fisiere al root-ului si daca nu sunt probleme, l monteaza.
6.1.4.Directorul /etc/rc.d/init.d
Directorul /etc/rc.d/init.d contine toate comenzile care pornesc si opresc serviciile
care sunt asociate cu toate nivelele de executie. Toate fisierele de comenzi din
directorul /etc/rc.d/init.d au un scurt nume care descrie serviciul cu care sunt asociate. De
multi-utilizator cu suport pentru retea. Atentie, pentru ca in acest moment se pot inchide fortat
daemoni care sunt folositi in acel moment.
Apoi va procesa toate intrarile din /etc/rc.d/rc1.d care n acel moment nu ruleaza. n
acest exemplu este numai una singura:
/etc/rc.d/rc1.d/S00single
6.2.2.Windows 3.x/9x
In Windows 3.x si 95/98/ME faza de boot este prelucrata de MS DOS . In timpul
pornirii , fisierele Autoexec.bat si Config.sys sunt executate , impreuna cu fisierele de
configurare WIN.INI si SYSTEM.INI .
Cand toate fisierele de configurare si toate driverele dispozitivelor au fost incarcate ,
modulele de 16 biti krnl386.exe , gdi.exe si user.exe sunt incarcate si apoi sunt incarcate
DLL-urile pe 32 biti (kernel32.dll , gdi32.dll si user32.dll) . Serverul de mesaje pe 32 bit VxD
(Msgsvr32) lanseaza in executie Mprexe.exe care este responsabil cu incarcarea clientului de
login pe retea . Cand un utilizator se logheaza in Windows , sunetul de inceput este lansat ,
Explorer.exe este incarcat din sectiunea de boot a fisierului SYSTEM.INI si elementele de start
sunt incarcate .
In toate versiunile de Windows bazate pe DOS (exceptie face Windows ME) este de
asemenea posibil incarcarea sistemului de operare prin scrierea win intr-un prompt de
DOS . Exista o serie de comenzi care pot fi folosite impreuna cu comanda win cum ar fii :
/d switch (sistemul de operare porneste in modul Safe mode) sau /d:m switch(sistemul de
operare porneste in modul Safe mode folosind putand insa folosi si reteaua) .
acestuia sunt facute prin modul 8086 virtual, intrucat BIOS-ul nu poate fi accesat direct in
modul protected. Boot loader-ul citeste apoi continutul fisierului boot.ini pentru a localiza
informatia pe system volume. Daca fisierul respectiv lipseste, boot loader-ul ca incerca sa
localizeze informatia din directorul standard de instalare.
In acest moment, ecranul este eliberat, si in Windows 2000 sau in versiunile mai tarzii
ale lui NTLDR si IA62ldr care suporta system hibernation, default volume din directorul
radacina, asa cum e definit in boot.ini este cautat pentru un fisier de hibernare, hiberfil.sys.
Daca fisierul e gasit si o memorie activa setata este gasita in el, continutul fisierului este
incarcat in memorie iar transferul este transferat catre Windows kernel intr-un punct in care
hibernarea poate fi reluata. Fisierul e apoi imediat marcat ca non-activ.
Daca boot.ini contine mai mult de o intrare a unui sistem de operare, un meniu de boot
este afisat userului, permitand acestuia sa aleaga ce sistem de operare este incarcat. Daca un
sistem de operare care nu e bazat pe NT, cum ar fi Windows 98, este selectat, atunci NTLDR
incarca fisierul boot sector asociat listat in boot.ini si paseaza controlul executiei acestuia.
Daca un SO bazat pe NT este selectat, NTLDR ruleaza ntdetect.com, care aduna informatia de
baza despre componentele computerului raportate de BIOS.
In acest moment, NTLDR elibereaza ecranul si afiseaza o bara de progres (care
deseori nu este vazuta pe sistemele XP sau 2003 datorita vitezei lor de initializare). Daca
utilizatorul apasa F8 in acest moment, este afisat meniul avansat de boot, care contine diferite
moduri speciale de boot, incluzand Safe mode. Dupa ce se selecteaza optiunea dorita,
bootarea continua. Sistemul porneste in modul 16-bit real si apoi trece in modul 32-bit
protected. Daca o versiune x64 de Windows este bootata, procesorul este setat in long mode,
activand adresarea pe 64 de biti. Apoi Windows kernel Ntoskrnl.exe si Hardware Abstraction
Layer hal.dll sunt incarcate in memorie. Daca vreunul din ele nu se poate incarca, va aparea
mesajul message "Windows could not start because the following file was missing or corrupt"
si procesul de bootare se opreste.
Odata ce se incarca kernel in memorie, sunt incarcate driverele dispozitivelor boottime. Aceasta informatie este stocata in portiunea de registru HKLM\SYSTEM, intr-un set de
chei de registru numite colectiv, Control Set. Cand un Control Set e ales, cheia Current se
seteaza dupa caz. Cheia Failed este de asemenea setata precum Current pana la sfarsitul
procesului de bootare. LastKnownGood este de asemenea setata la Current daca procesul de
bootare se termina cu succes.
In scopul bootarii, un driver este fie un driver Boot, care este incarcat de NTLDR
sau IA64ldr inainte de startarea kernel-ului si inceput inainte de driverele de sistem de catre
kernel, fie un driver System, care e incarcat atunci cand porneste ntoskrnl.exe dupa
driverele boot, fie un driver Automatic, care e incarcat mult mai tarziu, cand GUI deja a
inceput. Driverele Boot sunt aporape exclusiv drivere pentru controllere hard-drive si file
systems, cu alte cuvinte, sunt minimul necesar pe care ntoskrnl.exe va fi nevoit sa porneasca
cu incarcarea altor drivere, si restul sistmului de operare. Drivelere System acopera o gama
mai larga de functionalitati nucleu, incluzand driverul de display, suport CD-ROM si stiva
TCP/IP.
In final, controlul este transmis de NTLDR sau IA64ldr catre kernel. In acest moment,
Windows NT afiseaza celebrul ecran albastru ce afiseaza numarul de procesoare si cantitatea
de memoria instalata, in timp ce Windows 2000, XP si 2003 trec intr-un mod de display grafic
pentru a afisa logo-ul Windows, in cazul in care in boot.ini nu sunt prezente /noguiboot sau
/sos. Porneste WINLOGON.EXE care la randul sau porneste LSASS.EXE, acesta este
programul care afiseaza ecranul Logon astfel incat userul se poate loga.
6.2.4.Windows Vista/Server 2008/Windows 7
Secventa de pornire a Windows Vista , Windows Server 2008 sau Windows 7 difera
fata de versiunile anterioare de Windows care folosesc kernel-ul de NT . In prima faza , cand
computerul este aprins , fie BIOS-ul sau EFI-ul sunt incarcate . In cazul unui sistem BIOS ,
MBR-ul boot disk-ului , care pot fie un hard drive sau un dispozitiv de stocare externa este
accesat , urmat de sectorul de boot al drive-ului . Sectorul de boot apoi incarca restul
blocurilor de boot . Pentru Windows Vista , sectoru de boot incarca Windows Boot Managerul (BOOTMGR) care prima data cauta o partitie activa , apoi acceseaza configuratia de date
de boot si foloseste informatia sa incarce ultimul lucru si anume sistem de operare .
Windows Boot Manager-ul (BOOTMGR) citeste configuratia de boot si afiseaza
meniul de selectare a sistemului de operare si este intr-o oarecare masura echivalentul functiei
de selectare a meniu de boot a NTLDR ce se gaseste in cadrul versiunilor de windows bazate
pe kernelul de NT . O schimbare notabila este aceea ca Windows Boot Manager-ul este apelat
prin apasarea space bar-ului in locul taster F8 . Aceasta din urma ramane in continuare
asociata pentru optiunile avansate de boot indata ce apare Windows Boot Manager-ul . Pentru
a mentine o consistenta a procesului de boot in cadrul sistemelor EFI care de asemenea au un
boot manager al lor , Windows Boot Manager-ul , asadar dintre toate sistemele de operare
Windows care pot fi bootate folosindu-l , apar ca o singura aparitie in meniu de boot al EFIului .
Configuratie de pornire (Boot Configuration Data) este o baza de date independenta
de firmware pentru datele din timpul procesului de pornire a sistemului de operare .
Inlocuieste fisierul boot.ini ce era folosit de NTLDR si este folosit si de noul Windows Boot
Manager al Windows-ului . Configuratia de pornire este stocata intr-un fisier care este aflat
fie in partitia de sistem EFI in cadrul masinilor ce folosesc EFI sau in \Boot\Bcd locat in
partitia sistem in cadrul masinilor IBM PC .
Configuratia de boot contine optiunile disponibile ce sunt prezentate de Windows Boot
Manager , la fel cum boot.ini continea optiunile ce erau prezentate de NTLDR . Aceste
optiuni pot contine :