Sistemul de operare definește experiența noastră informatică. Este primul software pe care îl vedem atunci când pornim computerul și ultimul software pe care îl vedem atunci când acesta este oprit. Este software-ul care activează toate programele pe care le folosim. Sistemul de operare organizează și controlează hardware-ul de pe birourile și din mâinile noastre, însă majoritatea utilizatorilor nu pot spune cu certitudine ce anume face sistemul de operare.
În această ediție a emisiunii HowStuffWorks, vă vom spune ce trebuie să facă un software pentru a fi numit sistem de operare și vă vom arăta cum funcționează sistemul de operare pentru a transforma o colecție de hardware într-un instrument de calcul puternic!
The Bare Bones
Este important să vă dați seama că nu toate calculatoarele au sisteme de operare. Calculatorul care controlează cuptorul cu microunde din bucătăria dumneavoastră, de exemplu, nu are nevoie de un sistem de operare. Acesta are un set de sarcini relativ simple de îndeplinit, metode foarte simple de intrare și ieșire (o tastatură și un ecran LCD) și un hardware simplu, care nu se schimbă niciodată, pe care trebuie să-l controleze. Pentru un astfel de computer, un sistem de operare ar fi un bagaj inutil, adăugând complexitate acolo unde nu este necesar. În schimb, calculatorul dintr-un cuptor cu microunde rulează pur și simplu un singur program tot timpul.
Pentru sistemele de calculatoare care depășesc complexitatea cuptorului cu microunde, totuși, un sistem de operare poate fi cheia unei mai mari eficiențe de operare și a unei dezvoltări mai ușoare a aplicațiilor. Toate computerele desktop au sisteme de operare. Cele mai comune sunt familia de sisteme de operare Windows, familia de sisteme de operare UNIX și sistemele de operare Macintosh. Există sute de alte sisteme de operare disponibile pentru aplicații cu scop special, inclusiv specializări pentru mainframe-uri, robotică, producție, sisteme de control în timp real și așa mai departe.
La cel mai simplu nivel, un sistem de operare face două lucruri:
- El gestionează resursele hardware și software ale sistemului informatic. Aceste resurse includ lucruri precum procesorul, memoria, spațiul pe disc, etc.
- Acesta oferă o modalitate stabilă și coerentă pentru ca aplicațiile să se ocupe de hardware fără a fi nevoie să cunoască toate detaliile hardware-ului.
Prima sarcină, gestionarea resurselor hardware și software, este foarte importantă, deoarece diverse programe și metode de intrare concurează pentru atenția unității centrale de procesare (CPU) și cer memorie, stocare și lățime de bandă de intrare/ieșire (I/O) pentru propriile scopuri. În această calitate, sistemul de operare joacă rolul de părinte bun, asigurându-se că fiecare aplicație primește resursele necesare, jucându-se în același timp frumos cu toate celelalte aplicații, precum și gestionând capacitatea limitată a sistemului spre binele tuturor utilizatorilor și aplicațiilor.
Cea de-a doua sarcină, furnizarea unei interfețe consecvente a aplicațiilor, este deosebit de importantă în cazul în care vor exista mai multe calculatoare de un anumit tip care utilizează sistemul de operare sau dacă hardware-ul care compune calculatorul este vreodată deschis la schimbări. O interfață de program de aplicație (API) coerentă permite unui dezvoltator de software să scrie o aplicație pe un calculator și să aibă un nivel ridicat de încredere că aceasta va funcționa pe un alt calculator de același tip, chiar dacă cantitatea de memorie sau cantitatea de stocare este diferită pe cele două mașini. Chiar dacă un anumit calculator este unic, un sistem de operare poate garanta că aplicațiile continuă să funcționeze atunci când apar îmbunătățiri și actualizări hardware, deoarece sistemul de operare, și nu aplicația, este însărcinat cu gestionarea hardware-ului și cu distribuirea resurselor acestuia. Windows 98 este un exemplu excelent de flexibilitate pe care o oferă un sistem de operare. Windows 98 rulează pe hardware de la mii de furnizori. Acesta poate găzdui mii de imprimante, unități de disc și periferice speciale diferite în orice combinație posibilă.
În cadrul familiei largi de sisteme de operare, există, în general, patru tipuri, clasificate pe baza tipurilor de calculatoare pe care le controlează și a tipului de aplicații pe care le suportă. Categoriile mari sunt::
- Sistem de operare în timp real (RTOS) – Sistemele de operare în timp real sunt utilizate pentru a controla mașinile, instrumentele științifice și sistemele industriale. Un RTOS are, de obicei, foarte puține capacități de interfață cu utilizatorul și nu are utilități pentru utilizatorul final, deoarece sistemul va fi o „cutie sigilată” atunci când este livrat pentru utilizare. O parte foarte importantă a unui RTOS este gestionarea resurselor calculatorului, astfel încât o anumită operațiune să se execute exact în același timp de fiecare dată când are loc. Într-o mașină complexă, faptul că o piesă se mișcă mai repede doar pentru că resursele sistemului sunt disponibile poate fi la fel de catastrofal ca și faptul că nu se mișcă deloc pentru că sistemul este ocupat.
- Utilizator unic, sarcină unică – După cum sugerează și numele, acest sistem de operare este conceput pentru a gestiona calculatorul astfel încât un singur utilizator să poată face efectiv un singur lucru în același timp. Sistemul de operare Palm OS pentru computerele portabile Palm este un bun exemplu de sistem de operare modern cu un singur utilizator și o singură sarcină.
- Mono-utilizator, multi-tasking – Acesta este tipul de sistem de operare pe care majoritatea oamenilor îl folosesc astăzi pe computerele lor desktop și laptop. Windows 98 și MacOS sunt ambele exemple de sisteme de operare care permit unui singur utilizator să aibă mai multe programe în funcțiune în același timp. De exemplu, este perfect posibil ca un utilizator de Windows să scrie o notă într-un procesor de text în timp ce descarcă un fișier de pe Internet și în același timp imprimă textul unui mesaj de e-mail.
- Multiutilizator – Un sistem de operare multiutilizator permite mai multor utilizatori diferiți să profite simultan de resursele calculatorului. Sistemul de operare trebuie să se asigure că cerințele diferiților utilizatori sunt echilibrate și că fiecare dintre programele pe care aceștia le folosesc dispune de resurse suficiente și separate, astfel încât o problemă cu un utilizator să nu afecteze întreaga comunitate de utilizatori. Unix, VMS și sistemele de operare pentru mainframe, cum ar fi MVS, sunt exemple de sisteme de operare multiutilizator.
Este important să se facă aici o diferență între sistemele de operare multi-utilizator și sistemele de operare cu un singur utilizator care suportă lucrul în rețea. Windows 2000 și Novell Netware pot suporta fiecare sute sau mii de utilizatori conectați în rețea, dar sistemele de operare în sine nu sunt adevărate sisteme de operare multiutilizator. Administratorul de sistem este singurul „utilizator” pentru Windows 2000 sau Netware. Suportul de rețea și toate intrările la distanță ale utilizatorilor pe care le permite rețeaua sunt, în planul general al sistemului de operare, un program rulat de către utilizatorul administrativ.
După ce avem în vedere diferitele tipuri de sisteme de operare, este timpul să analizăm funcțiile de bază oferite de un sistem de operare.
Apel de trezire
Când este pornită alimentarea unui calculator, primul program care rulează este, de obicei, un set de instrucțiuni păstrate în memoria numai pentru citire (ROM) a calculatorului care examinează hardware-ul sistemului pentru a se asigura că totul funcționează corect. Acest test automat la pornire (POST) verifică dacă există erori la nivelul procesorului, al memoriei și al sistemelor de bază de intrare-ieșire (BIOS) și stochează rezultatul într-o locație specială din memorie. Odată ce POST s-a finalizat cu succes, software-ul încărcat în ROM (numit uneori firmware) va începe să activeze unitățile de disc ale computerului. La majoritatea computerelor moderne, atunci când calculatorul activează unitatea de disc dur, găsește prima piesă a sistemului de operare: încărcătorul bootstrap.
Încărcătorul bootstrap este un mic program care are o singură funcție: El încarcă sistemul de operare în memorie și îi permite să înceapă să funcționeze. În forma cea mai elementară, încărcătorul de bootstrap stabilește micile programe driver care realizează interfața cu diferitele subsisteme hardware ale calculatorului și le controlează. Acesta stabilește diviziunile de memorie care conțin sistemul de operare, informațiile utilizatorului și aplicațiile. Acesta stabilește structurile de date care vor conține nenumăratele semnale, stegulețe și semafoare care sunt utilizate pentru a comunica în interiorul și între subsistemele și aplicațiile computerului. Apoi transferă controlul calculatorului către sistemul de operare.
Sarcinile sistemului de operare, în sensul cel mai general, se împart în șase categorii:
- Gestionarea procesorului
- Gestionarea memoriei
- Gestionarea dispozitivelor
- Gestionarea memoriei
- Interfața aplicației
- Interfața cu utilizatorul
Chiar dacă există unii care susțin că un sistem de operare ar trebui să facă mai mult decât aceste șase sarcini, iar unii vânzători de sisteme de operare integrează în sistemele lor de operare mult mai multe programe utilitare și funcții auxiliare, aceste șase sarcini definesc nucleul aproape tuturor sistemelor de operare. Să analizăm instrumentele pe care sistemul de operare le utilizează pentru a îndeplini fiecare dintre aceste funcții.
Gestionarea procesorului
Centrul gestionării procesorului se reduce la două aspecte conexe:
- Asigurarea faptului că fiecare proces și aplicație primește suficient timp de la procesor pentru a funcționa corect
- Utilizarea cât mai multor cicluri de procesor pentru munca reală
Unitatea de bază a software-ului cu care se ocupă sistemul de operare în programarea muncii efectuate de procesor este fie un proces, fie un fir de execuție, în funcție de sistemul de operare.
Este tentant să ne gândim la un proces ca la o aplicație, dar acest lucru oferă o imagine incompletă a modului în care procesele se raportează la sistemul de operare și la hardware. Aplicația pe care o vedeți (procesor de text sau foaie de calcul sau joc) este, într-adevăr, un proces, dar acea aplicație poate determina începerea mai multor alte procese, pentru sarcini precum comunicarea cu alte dispozitive sau cu alte calculatoare. Există, de asemenea, numeroase procese care rulează fără a vă oferi dovezi directe că au existat vreodată. Prin urmare, un proces este un software care efectuează o anumită acțiune și care poate fi controlat – de către un utilizator, de către alte aplicații sau de către sistemul de operare.
Procesele, mai degrabă decât aplicațiile, sunt cele pe care sistemul de operare le controlează și le programează pentru execuție de către CPU. Într-un sistem cu o singură sarcină, programarea este simplă. Sistemul de operare permite aplicației să înceapă să ruleze, suspendând execuția doar suficient de mult timp pentru a se ocupa de întreruperi și de intrările utilizatorului. Întreruperile sunt semnale speciale trimise de hardware sau software către CPU. Este ca și cum o parte a computerului ar ridica brusc mâna pentru a cere atenția CPU-ului într-o ședință animată. Uneori, sistemul de operare va programa prioritatea proceselor astfel încât întreruperile să fie mascate – adică sistemul de operare va ignora întreruperile din anumite surse, astfel încât o anumită sarcină să poată fi terminată cât mai repede posibil. Există unele întreruperi (cum ar fi cele provenite din condiții de eroare sau probleme cu memoria) care sunt atât de importante încât nu pot fi ignorate. Aceste întreruperi care nu pot fi mascate (NMI) trebuie rezolvate imediat, indiferent de celelalte sarcini aflate în lucru.
În timp ce întreruperile adaugă unele complicații la execuția proceselor într-un sistem cu o singură sarcină, sarcina sistemului de operare devine mult mai complicată într-un sistem multitasking. Acum, sistemul de operare trebuie să organizeze execuția aplicațiilor astfel încât să credeți că se întâmplă mai multe lucruri în același timp. Acest lucru este complicat pentru că unitatea centrală de procesare nu poate face decât un singur lucru în același timp. Pentru a da impresia că se întâmplă o mulțime de lucruri în același timp, sistemul de operare trebuie să treacă de la un proces la altul de mii de ori pe secundă. Iată cum se întâmplă acest lucru.
- Un proces ocupă o anumită cantitate de memorie RAM. De asemenea, utilizează registrele, stivele și cozile de așteptare din CPU și din spațiul de memorie al sistemului de operare.
- Când două procese sunt multitasking, sistemul de operare alocă un anumit număr de cicluri de execuție din CPU unui program.
- După acel număr de cicluri, sistemul de operare face copii ale tuturor registrelor, stivelor și cozilor de așteptare utilizate de procese și notează punctul în care procesul a făcut o pauză în execuția sa.
- Apoi încarcă toate registrele, stivele și cozile de așteptare folosite de cel de-al doilea proces și îi permite un anumit număr de cicluri CPU.
- Când acestea sunt complete, face copii ale tuturor registrelor, stivei și cozilor de așteptare folosite de cel de-al doilea program și încarcă primul program.
Toate informațiile necesare pentru a ține evidența unui proces la comutare sunt păstrate într-un pachet de date numit bloc de control al procesului. Blocul de control al procesului conține de obicei:
- Un număr de identificare care identifică procesul
- Punctori către locațiile din program și datele sale unde a avut loc ultima procesare
- Contenutul registrelor
- Statele diferitelor stegulețe și comutatoare
- Punctori către partea superioară a și limitele inferioare ale memoriei necesare pentru proces
- O listă de fișiere deschise de proces
- Prioritatea procesului
- Starea tuturor dispozitivelor de intrare/ieșire necesare procesului
Când se schimbă starea procesului, de la în așteptare la activ, de exemplu, sau de la suspendat la în execuție, informațiile din blocul de control al procesului trebuie să fie utilizate ca și datele din orice alt program pentru a direcționa execuția părții de comutare a sarcinilor din sistemul de operare.
Acest schimb de procese are loc fără intervenția directă a utilizatorului, iar fiecare proces primește suficiente cicluri CPU pentru a-și îndeplini sarcina într-un timp rezonabil. Probleme pot apărea, totuși, dacă utilizatorul încearcă să aibă prea multe procese care funcționează în același timp. Sistemul de operare însuși are nevoie de câteva cicluri de procesor pentru a efectua salvarea și schimbarea tuturor registrelor, cozilor și stivei proceselor de aplicații. Dacă sunt pornite suficiente procese și dacă sistemul de operare nu a fost proiectat cu atenție, sistemul poate începe să utilizeze marea majoritate a ciclurilor CPU disponibile pentru a face swap între procese, mai degrabă decât pentru a rula procese. Când se întâmplă acest lucru, se numește thrashing și, de obicei, necesită un fel de intervenție directă a utilizatorului pentru a opri procesele și a readuce ordinea în sistem.
Un mod în care proiectanții de sisteme de operare reduc șansele de thrashing este prin reducerea nevoii de procese noi pentru a îndeplini diverse sarcini. Unele sisteme de operare permit existența unui „proces-uite”, numit thread, care se poate ocupa de toate activitățile intensive pentru CPU ale unui proces normal, dar care, în general, nu se ocupă de diferitele tipuri de I/O și nu stabilește structuri care necesită blocul de control al procesului extins al unui proces obișnuit. Un proces poate iniția mai multe fire sau alte procese, dar un fir nu poate iniția un proces.
Până acum, toată programarea pe care am discutat-o s-a referit la o singură unitate centrală de procesare. Într-un sistem cu două sau mai multe unități centrale de procesare, sistemul de operare trebuie să împartă volumul de lucru între unitățile centrale de procesare, încercând să echilibreze cererile proceselor necesare cu ciclurile disponibile pe diferitele unități centrale de procesare. Sistemele de operare asimetrice utilizează un CPU pentru propriile nevoi și împart procesele aplicațiilor între celelalte CPU-uri. Sistemele de operare simetrice se împart între diferitele unități centrale de procesare, echilibrând cererea în raport cu disponibilitatea unităților centrale de procesare chiar și atunci când sistemul de operare însuși este singurul care rulează.
Chiar dacă sistemul de operare este singurul software cu nevoi de execuție, CPU nu este singura resursă care trebuie programată. Gestionarea memoriei este următorul pas crucial pentru a se asigura că toate procesele rulează fără probleme.
Gestionarea memoriei și a stocării
Când un sistem de operare gestionează memoria calculatorului, există două sarcini generale care trebuie îndeplinite:
- Care proces trebuie să aibă suficientă memorie în care să se execute și nu poate intra în spațiul de memorie al unui alt proces și nici nu poate fi intrat de un alt proces.
- Diferitele tipuri de memorie din sistem trebuie să fie utilizate în mod corespunzător, astfel încât fiecare proces să poată funcționa cât mai eficient.
Prima sarcină necesită ca sistemul de operare să stabilească limite de memorie pentru tipurile de software și pentru aplicații individuale.
Ca exemplu, să ne uităm la un sistem imaginar cu 1 megabyte (1.000 kilobiți) de memorie RAM. În timpul procesului de pornire, sistemul de operare al computerului nostru imaginar este proiectat să meargă până în partea de sus a memoriei disponibile și apoi să „dea înapoi” suficient de mult pentru a satisface nevoile sistemului de operare însuși. Să spunem că sistemul de operare are nevoie de 300 de kilobiți pentru a funcționa. Acum, sistemul de operare se duce în partea de jos a bazinului de memorie RAM și începe să acumuleze diversele programe driver necesare pentru a controla subsistemele hardware ale computerului. În calculatorul nostru imaginar, driverele ocupă 200 de kilobiți. Astfel, după încărcarea completă a sistemului de operare, rămân 500 de kilobiți pentru procesele aplicațiilor.
Când aplicațiile încep să fie încărcate în memorie, acestea sunt încărcate în blocuri de dimensiuni determinate de sistemul de operare. Dacă dimensiunea blocului este de 2 kilobiți, atunci fiecare proces care este încărcat va primi o bucată de memorie care este un multiplu de 2 kilobiți în dimensiune. Aplicațiile vor fi încărcate în aceste blocuri de dimensiuni fixe, cu blocuri care încep și se termină pe limite stabilite de cuvinte de 4 sau 8 octeți. Aceste blocuri și aceste limite ajută la asigurarea faptului că aplicațiile nu vor fi încărcate una peste alta din cauza unui bit sau doi calculați greșit. Odată asigurat acest lucru, întrebarea cea mai importantă este ce trebuie făcut atunci când spațiul de 500 de kilobiți al aplicației este umplut.
În majoritatea calculatoarelor, este posibil să se adauge memorie peste capacitatea inițială. De exemplu, ați putea extinde memoria RAM de la 1 la 2 megaocteți. Acest lucru funcționează bine, dar tinde să fie relativ scump. De asemenea, ignoră un fapt fundamental al calculului – cea mai mare parte a informațiilor pe care o aplicație le stochează în memorie nu este utilizată la un moment dat. Un procesor poate accesa memoria doar o locație la un moment dat, astfel încât marea majoritate a memoriei RAM este neutilizată în orice moment. Deoarece spațiul pe disc este ieftin în comparație cu memoria RAM, atunci mutarea informațiilor din RAM pe hard disk poate extinde foarte mult spațiul RAM fără niciun cost. Această tehnică se numește gestionarea memoriei virtuale.
Stocarea pe disc este doar unul dintre tipurile de memorie care trebuie să fie gestionate de sistemul de operare și este cel mai lent. Ordonate în ordinea vitezei, tipurile de memorie dintr-un sistem de calculatoare sunt:
- Memoria cache de mare viteză – Este vorba de cantități rapide, relativ mici de memorie care sunt disponibile pentru unitatea centrală de procesare prin intermediul celor mai rapide conexiuni. Controlorii de memorie cache prezic care sunt bucățile de date de care CPU va avea nevoie în continuare și le extrag din memoria principală în memoria cache de mare viteză pentru a accelera performanța sistemului.
- Memorie principală – Aceasta este memoria RAM pe care o vedeți măsurată în megabytes atunci când cumpărați un computer.
- Memorie secundară – Aceasta este cel mai adesea un fel de stocare magnetică rotativă care păstrează aplicațiile și datele disponibile pentru a fi utilizate și servește ca memorie RAM virtuală sub controlul sistemului de operare.
Sistemul de operare trebuie să echilibreze nevoile diferitelor procese cu disponibilitatea diferitelor tipuri de memorie, mutând datele în blocuri (numite pagini) între memoriile disponibile, după cum dictează programul proceselor.
Gestionarea dispozitivelor
Calea dintre sistemul de operare și aproape toate componentele hardware care nu se află pe placa de bază a calculatorului trece printr-un program special numit driver. O mare parte din funcția unui driver este aceea de a fi traducătorul între semnalele electrice ale subsistemelor hardware și limbajele de programare de nivel înalt ale sistemului de operare și ale programelor de aplicații. Driverele preiau datele pe care sistemul de operare le-a definit ca un fișier și le traduc în fluxuri de biți plasate în locații specifice pe dispozitivele de stocare sau într-o serie de impulsuri laser într-o imprimantă.
Pentru că există diferențe atât de mari în ceea ce privește hardware-ul controlat prin intermediul driverelor, există diferențe în modul în care funcționează programele driver, dar majoritatea sunt rulate atunci când dispozitivul este solicitat și funcționează cam la fel ca orice alt proces. Sistemul de operare va atribui frecvent blocuri de înaltă prioritate driverelor, astfel încât resursa hardware să poată fi eliberată și pregătită pentru utilizare ulterioară cât mai repede posibil.
Unul dintre motivele pentru care driverele sunt separate de sistemul de operare este pentru ca noi funcții să poată fi adăugate la driver – și astfel la subsistemele hardware – fără a fi nevoie ca sistemul de operare însuși să fie modificat, recompilat și redistribuit. Prin dezvoltarea de noi drivere pentru dispozitive hardware, dezvoltare adesea realizată sau plătită de producătorul subsistemelor mai degrabă decât de editorul sistemului de operare, capacitățile de intrare/ieșire ale întregului sistem pot fi mult îmbunătățite.
Gestionarea intrărilor și ieșirilor este în mare parte o chestiune de gestionare a cozilor de așteptare și a tampoanelor, facilități speciale de stocare care preiau un flux de biți de la un dispozitiv, poate o tastatură sau un port serial, rețin acești biți și îi eliberează către procesor la o rată suficient de lentă pentru ca acesta să poată face față. Această funcție este deosebit de importantă atunci când mai multe procese sunt în curs de execuție și ocupă timpul procesorului. Sistemul de operare va instrui un buffer să continue să primească date de intrare de la dispozitiv, dar să nu mai trimită date către CPU în timp ce procesul care utilizează datele de intrare este suspendat. Apoi, atunci când procesul care are nevoie de intrare este activat din nou, sistemul de operare va comanda bufferului să trimită date. Acest proces permite unei tastaturi sau unui modem să se ocupe de utilizatorii externi sau de computere la o viteză mare, chiar dacă există momente în care unitatea centrală de procesare nu poate utiliza datele de intrare de la aceste surse.
Gestionarea tuturor resurselor sistemului informatic reprezintă o mare parte a funcției sistemului de operare și, în cazul sistemelor de operare în timp real, poate fi practic toată funcționalitatea necesară. Pentru alte sisteme de operare, însă, furnizarea unui mod relativ simplu și coerent pentru ca aplicațiile și oamenii să utilizeze puterea hardware-ului este o parte crucială a rațiunii lor de a exista.
Interfața cu lumea
Interfața de aplicație
La fel cum driverele oferă o modalitate prin care aplicațiile pot utiliza subsistemele hardware fără a fi nevoie să cunoască fiecare detaliu al funcționării hardware-ului, interfețele de program de aplicație (API) permit programatorilor de aplicații să utilizeze funcțiile calculatorului și ale sistemului de operare fără a fi nevoiți să urmărească direct toate detaliile din funcționarea procesorului. Să ne uităm la exemplul creării unui fișier pe hard disk pentru păstrarea datelor pentru a vedea de ce acest lucru poate fi important.
Un programator care scrie o aplicație pentru a înregistra date de la un instrument științific ar putea dori să permită cercetătorului să specifice numele fișierului creat. Sistemul de operare ar putea furniza o funcție API numită MakeFile pentru crearea de fișiere. La scrierea programului, programatorul ar trebui să insereze o linie care să arate astfel:
MakeFile
În acest exemplu, instrucțiunea spune sistemului de operare să creeze un fișier care va permite accesul aleatoriu la datele sale (1), va avea un nume tastat de utilizator (%Name) și va avea o dimensiune care variază în funcție de cantitatea de date stocate în fișier (2). Acum, să vedem ce face sistemul de operare pentru a transforma instrucțiunea în acțiune.
- Sistemul de operare trimite o interogare către unitatea de disc pentru a obține locația primei locații de stocare libere disponibile.
- Cu aceste informații, sistemul de operare creează o intrare în sistemul de fișiere care arată locațiile de început și de sfârșit ale fișierului, numele fișierului, tipul de fișier, dacă fișierul a fost arhivat, ce utilizatori au permisiunea de a se uita la fișier sau de a-l modifica, precum și data și ora creării fișierului.
- Sistemul de operare scrie informații la începutul fișierului care identifică fișierul, stabilește tipul de acces posibil și include alte informații care leagă fișierul de aplicație.
În toate aceste informații, interogările la unitatea de disc și adresele punctului de început și sfârșit al fișierului sunt în formate care depind foarte mult de producătorul și modelul unității de disc.
Pentru că programatoarea și-a scris programul pentru a utiliza API pentru stocarea pe disc, ea nu trebuie să țină pasul cu codurile de instrucțiuni, tipurile de date și codurile de răspuns pentru fiecare unitate de hard disk și de bandă posibilă. Sistemul de operare, conectat la driverele pentru diferitele subsisteme hardware, se ocupă de detaliile schimbătoare ale hardware-ului – programatorul trebuie pur și simplu să scrie cod pentru API și să aibă încredere că sistemul de operare se va ocupa de restul.
API-urile au devenit în ultimii ani unul dintre cele mai disputate domenii ale industriei de calculatoare. Companiile își dau seama că programatorii care le folosesc API-urile se vor traduce, în cele din urmă, în capacitatea de a controla și de a profita de o anumită parte a industriei. Acesta este unul dintre motivele pentru care atât de multe companii au fost dispuse să pună la dispoziția publicului aplicații precum cititoarele sau vizoarele, în mod gratuit. Acestea știu că consumatorii vor solicita ca programele să profite de cititoarele gratuite, iar companiile de aplicații vor fi gata să plătească redevențe pentru a permite software-ului lor să ofere funcțiile solicitate de consumatori.
Interfața cu utilizatorul
La fel cum API-ul oferă o modalitate coerentă pentru ca aplicațiile să utilizeze resursele sistemului informatic, o interfață cu utilizatorul (UI) aduce structură interacțiunii dintre un utilizator și calculator. În ultimul deceniu, aproape toate dezvoltările în materie de interfețe utilizator au avut loc în domeniul interfeței grafice cu utilizatorul (GUI), două modele, Macintosh de la Apple și Windows de la Microsoft, primind cea mai mare parte a atenției și câștigând cea mai mare parte a cotei de piață. Există și alte interfețe utilizator, unele grafice și altele nu, pentru alte sisteme de operare.
Unix, de exemplu, are interfețe utilizator numite shell-uri care prezintă o interfață utilizator mai flexibilă și mai puternică decât interfața standard bazată pe text a sistemului de operare. Programe precum Korn Shell și C Shell sunt interfețe bazate pe text care adaugă utilități importante, dar scopul lor principal este de a facilita manipularea de către utilizator a funcțiilor sistemului de operare. Există, de asemenea, interfețe grafice pentru utilizatori, cum ar fi X-Windows și Gnome, care fac ca Unix și Linux să semene mai mult cu computerele Windows și Macintosh din punctul de vedere al utilizatorului.
Este important de reținut că în toate aceste exemple, interfața cu utilizatorul este un program sau un set de programe care se află ca un strat deasupra sistemului de operare propriu-zis. Același lucru este valabil, cu mecanisme oarecum diferite, atât pentru sistemele de operare Windows, cât și pentru Macintosh. Funcțiile de bază ale sistemului de operare, gestionarea sistemului informatic, se află în nucleul sistemului de operare. Managerul de afișare este separat, deși poate fi strâns legat de nucleul de dedesubt. Legăturile dintre nucleul sistemului de operare și interfața cu utilizatorul, utilitarele și alte programe definesc multe dintre diferențele dintre sistemele de operare din prezent și le vor defini și mai mult în viitor.
Viitorul
O întrebare referitoare la viitorul sistemelor de operare se învârte în jurul capacității unei anumite filosofii de distribuție a software-ului de a crea un sistem de operare utilizabil de către corporații și consumatori împreună.
Linux, sistemul de operare creat și distribuit în conformitate cu principiile sursei deschise, ar putea avea un impact semnificativ asupra sistemului de operare în general. Cele mai multe sisteme de operare, drivere și programe utilitare sunt scrise de organizații comerciale care distribuie versiuni executabile ale software-ului lor – versiuni care nu pot fi studiate sau modificate. Sursa deschisă necesită distribuirea de materiale sursă originale care pot fi studiate, modificate și construite pe baza lor, iar rezultatele sunt din nou distribuite în mod liber.
Creșterea continuă a internetului și proliferarea computerelor care nu sunt desktop-uri sau laptop-uri standard înseamnă că sistemele de operare se vor schimba pentru a ține pasul, dar funcțiile de bază de gestionare și interfață vor continua, chiar dacă vor evolua.