Rolul și funcțiile sistemului de operare, gestionarea resurselor unui calculator.
Sistemul de operare (SO) este programul care se interpune între hardware și aplicații. Are un dublu rol, iar ambele formulări apar în manuale:
Funcțiile principale, așa cum se cer enumerate:
Componenta centrală este nucleul (kernel), singura parte care rulează în mod nucleu (kernel mode), cu acces total la hardware. Aplicațiile obișnuite rulează în mod utilizator, restricționat, și cer serviciile nucleului prin apeluri de sistem (system calls). Această separare pe două moduri este exact motivul pentru care un program prost scris blochează, de regulă, doar propria fereastră, nu tot calculatorul.
Două confuzii de evitat: BIOS/UEFI nu este sistem de operare — este firmware-ul care pornește calculatorul și încarcă SO-ul; iar interfața grafică nu este sistemul de operare, ci doar un strat de deasupra lui (pe Linux poți schimba mediul grafic fără să schimbi sistemul).
După modul de utilizare, sistemele se clasifică în monotasking / multitasking, monouser / multiuser, de timp real (garantează timpi de răspuns, în industrie și medicină) și distribuite.
Distincția de la care pleacă totul: programul este un fișier pasiv pe disc, iar procesul este programul în execuție, cu spațiul lui de memorie, registrele și resursele proprii. Din același program se pot lansa mai multe procese independente (trei ferestre de browser).
Sistemul ține evidența fiecărui proces într-un bloc de control al procesului (PCB): identificatorul (PID), starea, contorul de program, conținutul registrelor, prioritatea, fișierele deschise.
Stările unui proces și trecerile dintre ele se cer explicit:
Aici se produce eroarea clasică: „blocat” și „pregătit” sunt confundate. Un proces blocat nu poate primi procesorul oricât ar fi el liber, fiindcă îi lipsește ceva (datele de pe disc); un proces pregătit ar putea rula imediat, doar că procesorul e ocupat de altcineva. Când operația de I/O se termină, procesul trece din blocat în pregătit, nu direct în execuție.
Multitaskingul pe un singur nucleu este o iluzie: procesorul comută foarte rapid între procese (comutare de context), dând impresia execuției simultane. Execuție cu adevărat paralelă există doar pe mai multe nuclee.
Planificatorul (scheduler) decide cine urmează. Algoritmi de reținut: FCFS (primul venit, primul servit — simplu, dar un proces lung întârzie tot ce urmează), SJF (cel mai scurt job primul — optim ca timp mediu de așteptare, dar poate înfometa procesele lungi), Round Robin (fiecare proces primește o cuantă de timp, apoi e întrerupt — echitabil, tipic sistemelor interactive) și cu priorități.
Firul de execuție (thread) este o unitate de execuție din interiorul unui proces: firele partajează memoria procesului, deci comută mai ieftin decât procesele, dar tocmai partajarea face necesară sincronizarea.
Ultima noțiune: interblocarea (deadlock) — două sau mai multe procese se blochează reciproc, fiecare așteptând o resursă deținută de celălalt. Se previne rupând una dintre condițiile care o fac posibilă, de exemplu impunând o ordine unică de cerere a resurselor.
Memoria RAM este o resursă limitată pe care mai multe procese o cer simultan. Sistemul de operare trebuie să o aloce, să o elibereze și, esențial, să protejeze procesele unul de altul: un proces nu trebuie să poată citi sau scrie în memoria altuia.
Tehnicile, în ordine istorică:
Din paginare decurge memoria virtuală: fiecare proces vede un spațiu de adrese propriu, continuu și mai mare decât RAM-ul fizic; paginile nefolosite sunt ținute pe disc, într-o zonă numită swap (Linux) sau fișier de paginare (Windows). Traducerea adresă virtuală → adresă fizică se face prin tabela de pagini, cu ajutorul unității hardware MMU.
Când un proces accesează o pagină care nu e în RAM apare o eroare de pagină (page fault): sistemul o aduce de pe disc, eventual evacuând alta, după un algoritm de înlocuire (FIFO, LRU — cea mai demult folosită, optimal, teoretic).
Costurile trebuie înțelese, nu memorate: discul e de ordine de mărime mai lent decât RAM-ul. Dacă memoria fizică e prea mică, sistemul ajunge să petreacă mai mult timp mutând pagini decât executând cod util — fenomen numit thrashing, și exact asta simți când calculatorul „se târăște” cu prea multe aplicații deschise.
Confuzia de evitat: memoria virtuală nu înlocuiește RAM-ul și nu îl face mai rapid; ea doar permite rularea a mai multor programe decât ar încăpea, cu prețul unei încetiniri.
Sistemul de fișiere este modul în care SO organizează datele pe suportul de stocare: cum sunt denumite fișierele, unde se rețin blocurile lor, ce metadate se păstrează.
Organizarea este ierarhică, sub formă de arbore: directoare care conțin fișiere și alte directoare. Pe Windows fiecare volum are propria rădăcină, identificată prin literă (`C:\`), iar separatorul este backslash; pe Linux există o rădăcină unică `/`, iar celelalte volume se montează ca directoare în interiorul ei, separatorul fiind slash.
Căile pot fi absolute (pornesc din rădăcină: `/home/ana/teme/lab1.cpp`) sau relative la directorul curent (`teme/lab1.cpp`), cu notațiile `.` pentru directorul curent și `..` pentru cel părinte.
Fiecare fișier are, pe lângă conținut, metadate: nume, dimensiune, dată de creare și modificare, proprietar, drepturi. Sisteme de fișiere uzuale: FAT32 (compatibil aproape peste tot, dar cu limita de 4 GB pe fișier), exFAT (pentru stickuri și carduri mari), NTFS (Windows: jurnalizare, drepturi, fișiere mari), ext4 (Linux), APFS (macOS). Jurnalizarea (journaling) înseamnă că sistemul notează operațiile înainte de a le efectua, ca să poată reface starea coerentă după o pană de curent.
Drepturile de acces pe Linux se cer aproape sigur. Există trei drepturi — r (citire), w (scriere), x (execuție) — atribuite pentru trei categorii: proprietar (u), grup (g) și ceilalți (o). Notația octală atribuie r=4, w=2, x=1, deci:
O subtilitate care încurcă: pentru un director, dreptul x nu înseamnă execuție, ci dreptul de a intra în el și de a accesa ceva dinăuntru; r înseamnă doar dreptul de a-i lista conținutul. De aceea un director cu r fără x este practic inutilizabil.
Utilizatorul comunică cu sistemul prin două tipuri de interfață, iar examenul cere argumentarea avantajelor fiecăreia.
Interfața grafică (GUI) folosește ferestre, pictograme, meniuri și indicator de mouse. Este intuitivă, ușor de învățat, potrivește lucrului cu imagini și documente, arată starea sistemului dintr-o privire. Dezavantaje: consumă mai multe resurse, iar operațiile repetitive devin obositoare — nu poți redenumi 2000 de fișiere dând clic de 2000 de ori.
Interfața în linie de comandă (CLI) presupune scrierea comenzilor într-un interpretor de comenzi (shell): `bash` sau `zsh` pe Linux, `cmd` și PowerShell pe Windows. Avantaje: consum minim de resurse (indispensabil pe servere fără mediu grafic), precizie, posibilitatea de a automatiza prin scripturi și de a administra la distanță prin SSH. Dezavantaj: curbă de învățare abruptă, comenzile trebuie știute.
Comenzi de bază, în paralel Linux / Windows:
Două mecanisme dau adevărata putere a liniei de comandă: redirectarea (`> fisier` scrie rezultatul în fișier, `>>` adaugă la sfârșit, `<` citește din fișier) și înlănțuirea prin pipe (`|`), care trimite ieșirea unei comenzi ca intrare pentru următoarea: `ls | grep .cpp` filtrează doar fișierele sursă.
Concluzia corectă, care se așteaptă la subiectul de sinteză: cele două interfețe nu se exclud — sistemele moderne le oferă pe amândouă, iar alegerea depinde de sarcină: GUI pentru lucrul vizual și ocazional, CLI pentru administrare, automatizare și servere.
Cele două familii de sisteme se compară pe criterii concrete, nu pe simpatii.
Licențiere și cost. Windows este software proprietar, comercial, cu cod sursă închis și licență plătită. Linux este software liber și open source, distribuit sub licența GPL: poate fi folosit, studiat, modificat și redistribuit. Atenție la o confuzie serioasă: „liber” nu înseamnă „gratuit” — sensul este libertatea de utilizare și modificare; există distribuții comerciale plătite (Red Hat Enterprise Linux), iar sprijinul tehnic se vinde.
Terminologie. Strict vorbind, Linux este nucleul; un sistem complet, cu utilitare și mediu grafic, se numește distribuție (Ubuntu, Debian, Fedora, Mint, Arch). Aceasta e nuanța pe care profesorii o punctează.
Fișiere și organizare. Windows: litere de unitate, `\`, sistem NTFS, extensia contează pentru asocierea cu aplicația. Linux: rădăcină unică `/`, `/`, ext4, numele fișierelor sunt sensibile la majuscule (`Tema.cpp` și `tema.cpp` sunt fișiere diferite — pe Windows nu).
Instalarea programelor. Pe Windows, tipic prin descărcarea unui program de instalare de pe site-ul producătorului. Pe Linux, prin manager de pachete din depozite (repositories) verificate: `apt`, `dnf`, `pacman`. Diferența are consecință directă de securitate: sursa e centralizată și semnată digital.
Utilizare și securitate. Windows domină pe calculatoarele personale și în jocuri, are cea mai largă compatibilitate cu aplicațiile comerciale, dar tocmai cota de piață îl face ținta principală a malware-ului. Linux domină pe servere, supercomputere și în cloud, este stabil, consumă puțin, funcționează bine pe hardware vechi și separă strict drepturile (contul obișnuit nu poate modifica sistemul fără sudo). macOS e a treia familie, bazată pe Unix, cu integrare strânsă hardware-software.
Concluzia echilibrată: nu există „cel mai bun sistem”, ci potrivirea cu scopul — compatibilitate și ușurință pe desktop, stabilitate, cost și control pe server.