Introducere in sistemele de
operare
Sistemele de operare sunt probabil una dintre cele mai
complexe abstractiuni inventate, proiectate si construite de fiinta
umana. Exista multe incercari de definire a acestui concept
foarte sofisticat in aparenta, dar simplu in esenta. Sistemele
de operare sunt masini virtuale construite cu ajutorul limbajelor de
programare (de asamblare sau de nivel inalt) care permit utilizatorului sa
controleze, programeze si sa extinda posibilitatile
masinii hardware pe care sunt implementate.
E stiut faptul
ca motorul unui sistem de operare este kernel-ul. El ofera
posibilitatea de a citi si scrie din si pe diferite
unitati, el se ocupa cu gestionarea memoriei etc. In MS-DOS kernel-ul
era s, iar in Windows de KERNEL32.DLL. La instalarea unui sistem Linux acesta
are kernel-ul in fisierul vmlinuz-x.x.x (x.x.x este versiunea kernel-ului,
exemplu: vmlinuz-2.4.2). Dar acesta nu este decat un nume standard. Se poate de
a modifica sau folosi un alt kernel.
Ce
este multitasking-ul? Posibilitatea unui sistem de a rula mai multe procese
(programe) in acelasi timp. Multi nu inteleg de ce se face atata
valva in jurul acestui lucru si prima imagine care le vine in minte
este un editor de texte si un player de mp3-uri ruland in acelasi
timp dar va asigur ca fara multitasking nu ar fi fost
posibila aparitia interfetelor grafice a sistemelor de operare.
Acestea exact pe acest lucru se bazeaza. De aceea Microsoft Windows 95 nu
putea rula pe procesoare 80286. Din acelasi motiv nici Linux-ul nu poate
rula decat pe procesoare 80386, 80486 sau Pentium. Microsoft Windows 3.1, rula
intr-adevar si pe procesoare 80286 dar acest lucru era o emulare si
acest lucru era vizibil, performantele lasand mult de dorit.
Toate sistemele
moderne ofera azi multitasking. Diferentele constau in algoritmii pe
care acestea le folosesc pentru a 'emula' multitasking-ul. Un
multitasking real se poate obtine doar pe un sistem care ar avea cate un
procesor pentru fiecare program in parte. Acest lucru nu este in totalitate
imposibil in teorie dar practic este inca de domeniul fantasticului.
Si asta pe piata mainfraim-urilor si a server-elor. La noi, in
piata SOHO (Small Office Home Office), se poate vorbi despre sisteme
uniprocesor sau dual procesor. De aceea un multitasking real este imposibil.
Dar ce ne ofera cele doua sisteme la acest capitol si mai ales ce
aduce nou Linux-ul in acest domeniu? Initial MS-DOS sau DR-DOS nu ofereau
posibilitatea multitasking-ului. Asta doar daca nu ne gandim la programele TSR
(Terminate and Stay Resident) care ar fi stramosii
multiprocesarii asa cum maimutele ne sunt noua
parinti. De la Microsoft Windows 3.x apare ideea multiprocesarii
pe sistemele Intel like. Acesta folosea un algoritm 'round robin' ce
oferea posibilitatea ca procesele ce erau rulate in paralel sa ocupe, unul
dupa altul, timp egal de procesor. Acest model se va pastra si
in versiunile ulterioare ale sistemelor Microsoft suferind doar
imbunatatiri. Din pacate, aceasta metoda, chiar
daca este simpla nu este nici pe departe economica. Sa luam
exemplul anterior cu procesorul de text si player-ul de mp3-uri.
Initial, la aparitia standardului mp3 procesoarele cele mai in
voga erau 486-uri. Pe sisteme bazate pe aceste procesoare decodarea
mp3-urilor lua in folosinta intreg procesorul. Pe un 486 DX4 100Mhz
era aproape imposibil sa asculti mp3-uri daca nu aveai un player
care sa aiba cod optimizat pentru acestea si posibilitate de
downsampling la 22Khz. Ce mai, se faceau zeci de teste la aceea vreme
pana reuseai sa asculti un mp3. Dar si asa
daca porneai un editor de text cat de cat mai pretentios ascultarea
si scrierea textului devenea o problema. Acest lucru era datorat
algoritmului 'round robin'. Acesta dadea timp de procesor
editorului chiar daca tu nu scriai nimic si editorul de text
astepta de la tine un input ce nu venea. Sa exageram putin
pentru a intelege mai bine. Daca algoritmul de multitasking ar aloca
cate o secunda fiecarui proces ce ruleaza atunci ar rezulta
ca o secunda ar decoda mp3-ul pentru ca apoi, in secunda
urmatoare, sa opreasca acest lucru si sa predea
controlul editorului de text ce asteapta ca dumneavoastra
sa scrieti. Si tot asa din secunda in secunda.
Bine inteles ca nici un algoritm 'round robin' nu
ofera timp de procesor o secunda cum nici un sistem de operare nu
ruleaza doar doua task-uri in acelasi timp.
Ce aduce nou Linux-ul in
acest domeniu? O abordare diferita a administrarii resurselor si
a timpilor de procesor prin folosirea a doua tipuri de algoritmi: cei
preluati din lumea UNIX si cei proprii optimizati pentru fiecare
platforma in parte. Acesti algoritmi sunt implementati in
kernel. Acesta este, in mare parte, o biblioteca de functii sau o
colectie de rutine pe care programele le folosesc. El nu este un task
(program) in sine chiar daca lanseaza mai multe task-uri. Codul sau
se executa in mod sistem (system mode) in timp ce restul programelor
folosesc modul utilizator (user mode). Aceste doua moduri corespund, pe
procesoarele Intel like, cu modul real si cel protejat. Din aceasta
cauza kernel-ul va avea acces direct la memorie fara a mai avea
nevoie de nici o translatare deci si o viteza de executie mult
mai mare in timp ce programele obisnuite vor folosi pagini de memorie
virtuala (virtual page memory). Acestea sunt alocari ale unor zone
din memoria fizica pentru fiecare program in parte conform unui tabel de
pagini (page table) ce este tinut de catre sistem. Acest lucru nu
inseamna ca programele nu pot imparti aceeasi zona de
memorie fizica. Din contra. De aceea, sistemele de operare moderne permit
rularea unor aplicatii pe sisteme cu memorie putina si de
aceea exista acel fisier/partitie de swap memory.