Acasă Sfaturi utile Cum funcționează o cameră web. Tema 3.5 Structura și principiul de funcționare a camerelor web. Caracteristici și funcții suplimentare ale camerei web

Cum funcționează o cameră web. Tema 3.5 Structura și principiul de funcționare a camerelor web. Caracteristici și funcții suplimentare ale camerei web

UNIX are o istorie lungă și interesantă. Pornind ca un proiect frivol și aproape de „jucărie” al tinerilor cercetători, UNIX a devenit o industrie de milioane de dolari, incluzând universități, corporații multinaționale, guverne și organizații internaționale de standardizare pe orbita sa.

UNIX a apărut în laboratoarele Bell de la AT&T cu mai bine de 20 de ani în urmă. La acea vreme, Bell Labs dezvolta un sistem multi-utilizator de partajare a timpului, MULTICS (Multiplexed Information and Computing Service), cu MIT și General Electric, dar acest sistem a eșuat, parțial din cauza unor obiective prea ambițioase care nu corespundeau nivelului de computerele din acea vreme, și parțial datorită faptului că a fost dezvoltat în PL/1, iar compilatorul PL/1 a fost întârziat și nu a funcționat bine după apariția sa întârziată. Prin urmare, Bell Labs a refuzat deloc să participe la proiectul MULTICS, ceea ce a făcut posibil ca unul dintre cercetătorii săi, Ken Thompson, să facă lucrări de cercetare pentru îmbunătățirea mediului de operare al Bell Labs. Thompson, împreună cu angajatul Bell Labs, Denis Ritchie și alții, dezvoltau un nou sistem de fișiere, multe dintre ale cărui caracteristici erau derivate din MULTICS. Pentru a testa noul sistem de fișiere, Thompson a scris nucleul OS și câteva programe pentru computerul GE-645, care rula sistemul de partajare a timpului multiprogram GECOS. Ken Thompson a avut un joc pe care l-a scris în timp ce lucra la MULTICS, numit „Space Travel”. L-a rulat pe un computer GE-645, dar nu a funcționat foarte bine la el din cauza eficienței slabe a timpului în comun. În plus, timpul de lucru al mașinii GE-645 a fost prea scump. Drept urmare, Thompson și Ritchie au decis să port jocul la o mașină DEC PDP-7 care stă inactiv în colț, care are 4.096 de cuvinte pe 18 biți, o telemașină și un afișaj grafic bun. Dar PDP-7 avea un software slab, iar după ce a terminat de portat jocul, Thompson a decis să implementeze pe PDP-7 sistemul de fișiere la care lucrase pe GE-645. Din această lucrare a apărut prima versiune a UNIX, deși nu avea un nume la acea vreme. Dar includea deja sistemul de fișiere tipic UNIX bazat pe inode, avea un subsistem de gestionare a proceselor și a memoriei și permitea doi utilizatori să lucreze în modul de partajare a timpului. Sistemul a fost scris în asamblator. Numele UNIX (Uniplex Information and Computing Services) i-a fost dat de un alt angajat al Bell Labs, Brian Kernighan, care l-a numit inițial UNICS, subliniind diferența față de MULTICS multi-utilizator. Curând, UNICS a început să fie numit UNIX.

Primii utilizatori ai UNIX au fost angajații departamentului de brevete Bell Labs, care l-au considerat un mediu convenabil pentru crearea de texte.

O mare influență asupra soartei UNIX a fost recensământul său în limbajul de nivel înalt C, dezvoltat de Denis Ritchie special în acest scop. Acest lucru s-a întâmplat în 1973, moment în care UNIX avea 25 de instalări, iar un grup special de suport UNIX a fost creat la Bell Labs.

UNIX a fost utilizat pe scară largă încă din 1974, după descrierea acestui sistem de către Thompson și Ritchie în revista de calculatoare CACM. UNIX a fost adoptat pe scară largă de universități, deoarece le-a fost furnizat gratuit împreună cu codurile sursă C. Utilizarea pe scară largă a compilatoarelor eficiente C a făcut UNIX unic la acea vreme ca sistem de operare datorită portabilității sale pe diferite computere. Universitățile au adus o contribuție semnificativă la îmbunătățirea UNIX și la popularizarea ulterioară a acestuia. Un alt pas către obținerea recunoașterii pentru UNIX ca mediu standardizat a fost dezvoltarea bibliotecii I/O stdio de către Denis Ritchie. Prin utilizarea acestei biblioteci pentru compilatorul C, programele UNIX au devenit extrem de portabile.

Orez. 5.1. Istoria dezvoltării UNIX

Utilizarea pe scară largă a UNIX a dat naștere la problema incompatibilității între numeroasele sale versiuni. Evident, este foarte frustrant pentru utilizator faptul că un pachet achiziționat pentru o versiune de UNIX refuză să funcționeze pe o altă versiune de UNIX. Periodic, s-au făcut și se fac încercări de standardizare a UNIX, dar până acum au avut un succes limitat. Procesul de convergență a diferitelor versiuni de UNIX și divergența lor este ciclic. În fața unei noi amenințări din partea unui alt sistem de operare, diverși furnizori UNIX își converg produsele, dar apoi concurența îi obligă să facă îmbunătățiri originale și versiunile diverge din nou. Există, de asemenea, o latură pozitivă a acestui proces - apariția de noi idei și instrumente care îmbunătățesc atât UNIX, cât și multe alte sisteme de operare care au adoptat o mulțime de lucruri utile din acesta de-a lungul anilor lungi de existență.

Figura 5.1 prezintă o imagine simplificată a dezvoltării UNIX, care ia în considerare succesiunea diferitelor versiuni și influența standardelor adoptate asupra acestora. Două linii de versiuni UNIX extrem de incompatibile sunt utilizate pe scară largă: linia AT&T-UNIX System V și linia Berkeley-BSD a universității. Multe companii și-au dezvoltat și întreținut versiunile UNIX pe baza acestor versiuni: SunOS și Solaris de la Sun Microsystems, UX de la Hewlett-Packard, XENIX de la Microsoft, AIX de la IBM, UnixWare de la Novell (acum vândut către SCO), iar lista continuă.

Standarde precum SVID de la AT&T, POSIX de la IEEE și XPG4 al consorțiului X/Open au avut cea mai mare influență asupra unificării versiunilor UNIX. Aceste standarde definesc cerințele pentru o interfață între aplicații și sistemul de operare pentru a permite aplicațiilor să ruleze cu succes pe diferite versiuni de UNIX.

Indiferent de versiune, caracteristicile comune pentru UNIX sunt:

  • modul multi-utilizator cu mijloace de protejare a datelor împotriva accesului neautorizat,
  • implementarea procesării multiprogram în modul de partajare a timpului, bazată pe utilizarea algoritmilor de multitasking preventiv,
  • utilizarea memoriei virtuale și a mecanismelor de schimb pentru a crește nivelul de multiprogramare,
  • unificarea operațiunilor I/O bazată pe utilizarea extinsă a conceptului de „fișier”,
  • un sistem de fișiere ierarhic care formează un singur arbore de directoare, indiferent de numărul de dispozitive fizice utilizate pentru a plasa fișiere,
  • portabilitatea sistemului prin scrierea părții sale principale în C,
  • diverse mijloace de interacțiune între procese, inclusiv prin intermediul rețelei,
  • stocarea în cache pe disc pentru a reduce timpul mediu de acces la fișiere.

UNIX System V Release 4 este o versiune comercială neterminată a sistemului de operare. codurilor sale lipsesc multe dintre utilitățile de sistem necesare pentru funcționarea cu succes a sistemului de operare, cum ar fi utilitățile de administrare sau un manager GUI. Versiunea SVR4 este mai mult o implementare standard a codului kernelului, încorporând cele mai populare și eficiente soluții din diferite versiuni ale nucleului UNIX, cum ar fi sistemul de fișiere virtual VFS, fișiere mapate în memorie și așa mai departe. Codul SVR4 (modificat parțial) a stat la baza multor versiuni comerciale moderne ale UNIX, cum ar fi HP-UX, Solaris, AIX și așa mai departe.

Sistemul de operare UNIX, precursorul multor sisteme de operare moderne precum Linux, Android, Mac OS X și multe altele, a fost creat în pereții centrului de cercetare Bell Labs, o divizie a AT&T. În general, Bell Labs este un adevărat teren propice pentru oamenii de știință care au făcut descoperiri care au schimbat literalmente tehnologia. De exemplu, la Bell Labs au lucrat oameni de știință precum William Shockley, John Bardeen și Walter Brattain, care au creat pentru prima dată tranzistorul bipolar în 1947. Putem spune că la Bell Labs a fost inventat laserul, deși până atunci maserele fuseseră deja create. Claude Shannon, fondatorul teoriei informației, a lucrat și la Bell Labs. Acolo au lucrat creatorii limbajului C Ken Thompson și Denis Ritchie (le vom aminti mai târziu), precum și autorul cărții C++ - Bjarne Stroustrup.

În drum spre UNIX

Înainte de a vorbi despre UNIX în sine, să ne amintim acele sisteme de operare care au fost create înaintea lui și care au determinat în mare măsură ce este UNIX și, prin intermediul lui, multe alte sisteme de operare moderne.

Dezvoltarea UNIX nu a fost prima lucrare în domeniul sistemelor de operare întreprinsă la Bell Labs. În 1957, laboratorul a început să dezvolte un sistem de operare, care se numea BESYS (prescurtare de la Bell Operating System). Managerul de proiect a fost Viktor Vysotsky, fiul unui astronom rus care a emigrat în America. BESYS a fost un proiect intern care nu a fost lansat ca produs comercial finit, deși BESYS a fost distribuit tuturor pe benzi magnetice. Acest sistem a fost proiectat pentru a rula pe computerele din seria IBM 704 - 709x (IBM 7090, 7094). Aș vrea să numesc aceste lucruri cuvântul antediluvian al computerului, dar, pentru a nu tăia urechea, vom continua să le numim computere până la urmă.

IBM 704

În primul rând, BESYS a fost destinat execuției în lot a unui număr mare de programe, adică în așa fel când se oferă o listă de programe, iar execuția acestora este programată astfel încât să ocupe maximum de resurse posibile, astfel încât computerul nu sta inactiv. În același timp, BESYS avea deja rudimentele unui sistem de operare time-sharing - adică, în esență, ceea ce se numește acum multitasking. Când au apărut sisteme cu drepturi depline de partajare a timpului, această oportunitate a fost folosită pentru ca mai multe persoane să poată lucra cu un computer în același timp, fiecare de pe propriul terminal.

În 1964, Bell Labs a suferit o actualizare a calculatoarelor, în urma căreia BESYS nu a mai putut fi lansat pe calculatoare noi de la IBM, iar atunci nu s-a mai pus problema de cross-platform. Computerele la acea vreme erau furnizate de IBM fără sisteme de operare. Dezvoltatorii de la Bell Labs ar fi putut începe să scrie un nou sistem de operare, dar au acționat diferit - s-au alăturat dezvoltării sistemului de operare Multics.

Proiectul Multics (prescurtare de la Multiplexed Information and Computing Service) a fost propus de profesorul MIT Jack Dennis. El, împreună cu studenții săi, în 1963, a elaborat o specificație pentru un nou sistem de operare și a reușit să-i intereseze pe reprezentanți ai companiei General Electric în proiect. Ca rezultat, Bell Labs s-a alăturat MIT și General Electric în dezvoltarea unui nou sistem de operare.

Iar ideile proiectului au fost foarte ambițioase. În primul rând, trebuia să fie un sistem de operare cu partajare cu normă întreagă. În al doilea rând, Multics nu a fost scris în asamblator, ci într-una dintre primele limbaje de nivel înalt - PL / 1, care a fost dezvoltat în 1964. În al treilea rând, Multics ar putea rula pe computere cu multiprocesor. Același sistem de operare avea un sistem de fișiere ierarhic, numele fișierelor puteau conține orice caractere și pot fi destul de lungi, iar în sistemul de fișiere erau furnizate și legături simbolice către directoare.

Din păcate, munca la Multics a durat mult timp, programatorii Bell Labs nu au așteptat lansarea acestui produs și în aprilie 1969 au părăsit proiectul. Iar lansarea a avut loc în luna octombrie a aceluiași an, dar, spun ei, prima versiune a fost teribil de erori, iar pentru încă un an, dezvoltatorii rămași au remediat erorile pe care le-au raportat utilizatorii, deși un an mai târziu Multics era deja o versiune mai fiabilă. sistem.

Multics a fost în dezvoltare de destul de mult timp, ultima lansare a fost în 1992 și era versiunea 12.5, deși aceasta este o poveste complet diferită, dar Multics a avut un impact uriaș asupra viitorului UNIX.

Nașterea UNIX

UNIX a apărut aproape întâmplător, iar de vină a fost jocul pe calculator „Space Travel”, un joc de zbor în spațiu scris de Ken Thompson. Era un 1969 îndepărtat, jocul Space Travel a fost conceput pentru același sistem de operare Multics, iar după ce Bell Labs a fost întrerupt accesul la noile versiuni de Multics, Ken a rescris jocul în Fortran și l-a portat pe sistemul de operare GECOS, că a venit cu computerul GE-635. Dar aici s-au strecurat două probleme. În primul rând, acest computer nu avea un sistem de afișare foarte bun și, în al doilea rând, era scump să joci pe acest computer - ceva de genul 50-75 USD pe oră.

Dar într-o zi, Ken Thompson a dat peste un computer DEC PDP-7 care a fost rar folosit și ar putea fi potrivit pentru a rula Space Travel, plus că avea un procesor video mai bun.

Portarea jocului pe PDP-7 nu a fost ușoară, de fapt, a necesitat scrierea unui nou sistem de operare pentru a-l rula. Nu a fost cazul, la care programatorii nu vor merge de dragul jucăriei lor preferate. Așa s-a născut UNIX, sau mai degrabă Unics. Numele sugerat de Brian Kernighan este prescurtarea pentru Uniplexat Sistem informatic și de calcul. Permiteți-mi să vă reamintesc că numele Multics provine din cuvinte multiplexat Serviciul de informare și calcul, astfel, Unics s-a opus oarecum Multics în ceea ce privește simplitatea. Într-adevăr, Multics era deja atacat cu privire la complexitatea sa. Pentru comparație, primele versiuni ale nucleului Unics au ocupat doar 12 kB de RAM față de 135 kB pentru Multics.

Ken Thompson

De data aceasta, dezvoltatorii nu au experimentat (încă) cu limbaje de nivel înalt, iar prima versiune a Unics a fost scrisă în asamblator. Thompson însuși, Denis Ritchie, a luat parte la dezvoltarea Unics, mai târziu Douglas McIlroy, Joey Ossanna și Rad Kennedy li s-au alăturat. La început, Kernighan, care a propus numele OS, a oferit doar sprijin moral.

Puțin mai târziu, în 1970, când a fost implementat multitasking, sistemul de operare a fost redenumit UNIX și nu mai era considerat o abreviere. Anul acesta este considerat anul oficial al nașterii UNIX și de la 1 ianuarie 1970 se numără timpul sistemului (numărul de secunde începând de la această dată). Aceeași dată este numită mai jalnic - începutul erei UNIX (în engleză - Epoca UNIX). Îți amintești, ne-am speriat cu toții problema anului 2000? Așadar, o problemă similară ne așteaptă încă din 2038, când numerele întregi pe 32 de biți, care sunt adesea folosite pentru a determina data, nu vor fi suficiente pentru a reprezenta ora, iar ora cu data va deveni negativă. Aș dori să cred că până în acest moment toate programele esențiale vor folosi variabile pe 64 de biți în acest scop pentru a împinge această dată groaznică cu încă 292 de milioane de ani, iar apoi vom veni cu ceva. 🙂

Până în 1971, UNIX era deja un sistem de operare cu drepturi depline, iar Bell Labs și-a propus chiar și marca UNIX. În același an, UNIX a fost rescris pentru a rula pe computerul mai puternic PDP-11 și în acest an a fost lansată prima versiune oficială a UNIX (numită și Prima Ediție).

În paralel cu dezvoltarea Unics / UNIX, Ken Thompson și Denis Ritchie, începând din 1969, au dezvoltat un nou limbaj B (B), care s-a bazat pe limbajul BCPL, care, la rândul său, poate fi considerat un descendent al Algol. -60 de limbă. Ritchie a propus rescrierea UNIX în B, care era portabil, deși interpretat, după care a continuat să modifice acest limbaj pentru noi nevoi. În 1972, a apărut cea de-a doua ediție a UNIX, care a fost scrisă aproape în întregime în B, lăsând un modul destul de mic de aproximativ 1000 de linii în asamblare, așa că portarea UNIX pe alte computere era acum relativ ușoară. Așa a devenit UNIX portabil.

Ken Thompson și Dennis Ritchie

Limbajul B a evoluat apoi împreună cu UNIX până când a dat naștere limbajului C, unul dintre cele mai cunoscute limbaje de programare, care este acum larg calomniat sau lăudat ca un ideal. În 1973, a treia ediție a UNIX a fost lansată cu un compilator încorporat pentru limbajul C și, începând cu cea de-a 5-a versiune, care s-a născut în 1974, se crede că UNIX a fost complet rescris în C. Apropo, este a fost în UNIX în 1973 că un astfel de concept a apărut ca țevi (țevi).

Începând din 1974-1975, UNIX a început să se răspândească în afara Bell Labs. Thompson și Ritchie publică o descriere a UNIX în Comunicațiile ACM, iar AT&T oferă UNIX instituțiilor de învățământ ca instrument de învățare. În 1976, putem spune că primul UNIX a fost portat pe un alt sistem - pe computerul Interdata 8/32. În plus, în 1975, a fost lansată cea de-a 6-a versiune a UNIX, începând cu care au apărut diverse implementări ale acestui sistem de operare.

Sistemul de operare UNIX a avut atât de mult succes încât începând cu sfârșitul anilor 70, alți dezvoltatori au început să creeze sisteme similare. Să trecem acum de la UNIX original la clonele sale și să vedem ce alte sisteme de operare au apărut din el.

Apariția BSD

Reproducerea acestui sistem de operare a fost în mare măsură facilitată de oficialii americani, chiar înainte de nașterea UNIX, în 1956, care au impus restricții AT&T, care deținea Bell Labs. Cert este că la acea vreme Departamentul de Justiție a forțat AT&T să semneze un acord care interzicea companiei să se angajeze în activități care nu erau legate de rețelele și echipamentele de telefonie și telegraf, dar prin anii 70, AT & T își dăduse deja seama ce un proiect de succes a apărut de la UNIX și a vrut să-l facă comercial. Pentru ca oficialii să le permită să facă acest lucru, AT&T a donat surse UNIX unor universități americane.

Una dintre aceste universități care au avut acces la corpul codului sursă a fost Universitatea din California din Berkeley, iar dacă există coduri sursă ale altor oameni, atunci involuntar există dorința de a corecta ceva în program pentru ei înșiși, mai ales că licența nu a interzis acest lucru. Astfel, câțiva ani mai târziu (în 1978), a apărut primul sistem care nu este compatibil AT&T UNIX. Era BSD UNIX.

UC Berkeley

BSD este prescurtarea de la Berkeley Software Distribution, un sistem special de distribuire a software-ului în cod sursă cu o licență foarte soft. Licența BSD a fost creată doar pentru a distribui un nou sistem compatibil UNIX. Această licență permite reutilizarea codului sursă distribuit sub ea și, în plus, spre deosebire de GPL (care nu exista încă), nu impune nicio restricție asupra programelor derivate. În plus, este foarte scurt și nu funcționează cu o mulțime de termeni juridici plictisitori.

Prima versiune de BSD (1BSD) a fost mai mult o adăugare la versiunea originală UNIX 6 decât un sistem de sine stătător. 1BSD a adăugat un compilator Pascal și un editor de text ex. A doua versiune a BSD, lansată în 1979, includea programe cunoscute precum vi și C Shell.

De la apariția BSD UNIX, numărul de sisteme compatibile UNIX a crescut exponențial. Deja de la BSD UNIX, au început să apară ramuri separate de sisteme de operare, diferite sisteme de operare au schimbat cod între ele, împletirea a devenit destul de confuză, așa că în viitor nu ne vom opri asupra fiecărei versiuni a tuturor sistemelor UNIX, dar să vedem cum au apărut cele mai faimoase dintre ele.

Poate că cei mai cunoscuți descendenți direcți ai BSD UNIX sunt FreeBSD, OpenBSD și, într-o măsură mai mică, NetBSD. Toți sunt descendenți din așa-numitul 386BSD, lansat în 1992. 386BSD, după cum sugerează și numele, a fost un port al BSD UNIX pentru procesorul Intel 80386. Acest sistem a fost creat și de absolvenți ai Universității din Berkeley. Autorii au considerat că codul sursă UNIX primit de la AT&T a fost modificat suficient de prost pentru a obține un scor pe licența AT&T, cu toate acestea, AT&T în sine nu a considerat acest lucru, așa că se desfășura litigiu în jurul acestui sistem de operare. Judecând după faptul că 386BSD însuși a devenit părintele multor alte sisteme de operare, totul s-a terminat cu bine pentru el.

Proiectul FreeBSD (la început nu avea propriul nume) a apărut ca un set de patch-uri pentru 386BSD, cu toate acestea, aceste patch-uri nu au fost acceptate din anumite motive, iar apoi, când a devenit clar că 386BSD nu va mai fi dezvoltat, în 1993 proiectul a fost implementat în direcția creării unui sistem de operare cu drepturi depline, numit FreeBSD.

Beastie. Mascota FreeBSD

În același timp, dezvoltatorii 386BSD înșiși au creat un nou proiect, NetBSD, din care, la rândul său, s-a ramificat OpenBSD. După cum puteți vedea, se dovedește un arbore destul de extins de sisteme de operare. Scopul proiectului NetBSD a fost de a crea un sistem UNIX care să poată rula pe cât mai multe arhitecturi posibil, adică să atingă portabilitatea maximă. Chiar și driverele NetBSD trebuie să fie multiplatforme.

Logo NetBSD

Solaris

Cu toate acestea, sistemul de operare SunOS a fost primul care s-a desprins de la BSD, creația, după cum înțelegeți din nume, a Sun Microsystems, din păcate, acum decedată. Acest lucru s-a întâmplat în 1983. SunOS este sistemul de operare care a venit cu computerele construite chiar de Sun. În general, Sun a avut cu un an înainte, în 1982, sistemul de operare Sun UNIX, care se baza pe baza de cod Unisoft Unix v7 (Unisoft este o companie fondată în 1981 și era angajată în portarea Unix pe diverse hardware), dar SunOS 1.0 este bazat pe codul 4.1 BSD. SunOS a fost actualizat în mod regulat până în 1994, când a fost lansată versiunea 4.1.4, iar apoi a fost redenumit Solaris 2. De unde a venit deuce? Aceasta este o poveste puțin confuză, deoarece Solaris a fost numit pentru prima dată SunOS versiunile 4.1.1 - 4.1.4, dezvoltate între 1990 și 1994. Luați în considerare că a fost un fel de rebranding care a prins rădăcini abia începând cu versiunea Solaris 2. Apoi, până în 1997, a apărut Solaris 2.1, 2.2 etc. la 2.6, iar în loc de Solaris 2.7 în 1998, a fost lansat doar Solaris 7, apoi doar această cifră a început să crească. În prezent, cea mai recentă versiune de Solaris este 11, care a fost lansată pe 9 noiembrie 2011.

Logo OpenSolaris

Istoria Solaris este și ea destul de complicată, până în 2005 Solaris a fost un sistem de operare complet comercial, dar în 2005 Sun a decis să deschidă o parte din codul sursă Solaris 10 și să creeze proiectul OpenSolaris. De asemenea, pe vremea când Sun era în viață, Solaris 10 era fie liber de utilizat, fie puteai cumpăra asistență oficială. Apoi, la începutul lui 2010, când Oracle a preluat Sun, a făcut din Solaris 10 un sistem plătit. Din fericire, Oracle nu a reușit încă să omoare OpenSolaris.

linux. Unde esti fara el?

Și acum a venit rândul să vorbim despre cea mai faimoasă dintre implementările UNIX - Linux. Istoria Linux este remarcabilă prin faptul că trei proiecte interesante au convergit în el deodată. Dar înainte de a vorbi despre creatorul Linux - Linus Torvalds, trebuie să menționăm încă doi programatori, dintre care unul - Andrew Tanenbaum, fără să știe, l-a împins pe Linus să creeze Linux, iar al doilea - Richard Stallman, ale cărui instrumente le-a folosit Linus pentru a crea. sistemul lui de operare.

Andrew Tanenbaum este profesor la Universitatea Liberă din Amsterdam și se concentrează în primul rând pe dezvoltarea sistemelor de operare. El a fost coautor, împreună cu Albert Woodhull, a unei cărți atât de cunoscute precum Operating Systems: Design and Implementation, care l-a inspirat pe Torvalds să înceapă să scrie Linux. Această carte tratează un sistem asemănător UNIX, cum ar fi Minix. Din păcate, multă vreme Tanenbaum a considerat Minix doar ca un proiect pentru a învăța cum să creeze sisteme de operare, dar nu ca un sistem de operare cu drepturi depline. Sursele Minix aveau o licență destul de limitată, când puteai să-i studiezi codul, dar nu puteai distribui versiunile tale modificate de Minix, iar multă vreme autorul însuși nu a vrut să aplice patch-urile care i-au fost trimise.

Andrew Tanenbaum

Prima versiune a Minix a apărut cu prima ediție a cărții în 1987, a doua și a treia versiune ulterioară a Minix au apărut cu edițiile corespunzătoare ale cărții despre sistemele de operare. A treia versiune de Minix, lansată în 2005, poate fi folosită deja ca sistem de operare autonom pentru un computer (există versiuni LiveCD ale Minix care nu necesită instalare pe un hard disk) și ca sistem de operare încorporat pentru microcontrolere. Cea mai recentă versiune a Minix 3.2.0 a fost lansată în iulie 2011.

Acum să ne gândim la Richard Stallman. Recent, el a fost perceput doar ca un propagandist al software-ului liber, deși multe programe cunoscute acum au apărut datorită lui, iar Torvalds la un moment dat proiectul său i-a făcut viața mult mai ușoară. Cel mai interesant lucru este că atât Linus, cât și Richard au abordat crearea sistemului de operare din unghiuri diferite și, ca urmare, proiectele au fuzionat în GNU/Linux. Aici este necesar să dam câteva explicații despre ce este GNU și de unde a venit.

Richard Stallman

Puteți vorbi despre Stallman de ceva timp, de exemplu, că a primit o diplomă cu onoare în fizică de la Universitatea Harvard. În plus, Stallman a lucrat la Institutul de Tehnologie din Massachusetts, unde a început să scrie celebrul său editor EMACS în anii 1970. În același timp, codurile sursă ale editorului erau la îndemâna oricui, ceea ce nu era un fel de caracteristică la MIT, unde multă vreme s-a ținut o anarhie prietenească într-un anumit sens sau, după cum Stephen Levy, autorul minunatului cartea „Hackeri. Eroii revoluției computerelor”, „etica hackerilor”. Dar puțin mai târziu, MIT a început să se ocupe de securitatea computerelor, utilizatorilor li s-au dat parole, utilizatorii neautorizați nu au putut accesa computerul. Stallman a fost ferm împotriva acestei practici, a creat un program care ar putea permite oricui să afle orice parolă a oricărui utilizator, el a susținut să lase parola goală. De exemplu, le-a trimis utilizatorilor mesaje de genul acesta: „Văd că ați ales o parolă [astfel și așa]. Presupun că puteți trece la o parolă de „retur de cărucior”. Este mult mai ușor de tastat și este în conformitate cu principiul că aici nu ar trebui să existe parole.” Dar eforturile lui au rămas în nimic. Mai mult decât atât, noilor oameni care au venit la MIT au început deja să le pese de drepturile asupra programului lor, de drepturile de autor și de alte abominații asemănătoare.

Stallman a spus mai târziu (citând din aceeași carte a lui Levy): „Nu pot să cred că software-ul ar trebui să aibă proprietari. Ceea ce s-a întâmplat a sabotat întreaga umanitate în ansamblu. A împiedicat oamenii să profite la maximum de programe.” Sau iată un alt citat din el: „Mașinile au început să se strice, și nu era cine să le repare. Nimeni nu a făcut modificările necesare în software. Non-hackerii au reacționat la acest lucru simplu - au început să folosească sisteme comerciale achiziționate, aducând cu ei fascism și acorduri de licență.

Drept urmare, Richard Stallman a părăsit MIT și a decis să creeze propria sa implementare gratuită a unui sistem de operare compatibil UNIX. Așa că pe 27 septembrie 1983 a apărut proiectul GNU, care se traduce prin „Gnu nu este UNIX”. Primul program legat de GNU a fost EMACS. Ca parte a proiectului GNU, în 1988, a fost dezvoltată propria sa licență GNU GPL, GNU General Public License, care obligă autorii programelor bazate pe coduri sursă distribuite sub această licență să deschidă și coduri sursă sub licența GPL.

Până în 1990, diverse programe software pentru viitorul sistem de operare au fost scrise în cadrul GNU (nu numai de Stallman), dar acest sistem de operare nu avea propriul nucleu. Nucleul a fost preluat abia în 1990, era un proiect numit GNU Hurd, dar „nu a filmat”, ultima sa versiune a fost lansată în 2009. Dar a „demis” Linux, de care ne-am apropiat în cele din urmă.

Și apoi intră în acțiune băiatul finlandez Linus Torvalds. În timp ce studia la Universitatea din Helsinki, Linus avea cursuri în limbajul C și sistemul UNIX, în așteptarea acestui subiect, a cumpărat chiar cartea Tanenbaum care descria Minix. Mai mult, s-a descris, Minix în sine trebuia cumpărat separat pe 16 dischete, iar apoi a costat 169 USD (oh, Gorbushka noastră nu exista atunci în Finlanda, dar ce puteți face, sălbatici 🙂). În plus, Torvalds a trebuit să cumpere pe credit cu 3500 de dolari computerul însuși cu procesorul 80386, pentru că înainte avea doar un computer vechi pe procesorul 68008, pe care Minix nu putea rula (din fericire, când făcuse deja primul versiunea Linux, utilizatorii recunoscători au participat și au plătit împrumutul pentru computer).

Linus Torvalds

În ciuda faptului că lui Torvalds îi plăcea în general Minix, dar treptat a început să înțeleagă care sunt limitările și dezavantajele acestuia. L-a enervat mai ales programul de emulare a terminalului care a venit împreună cu sistemul de operare. Drept urmare, a decis să scrie propriul emulator de terminal și, în același timp, să înțeleagă funcționarea procesorului 386. Torvalds a scris emulatorul la un nivel scăzut, adică a început cu un bootloader BIOS, treptat emulatorul a dobândit noi funcții, apoi, pentru a descărca fișiere, Linus a trebuit să scrie o unitate de dischetă și un driver de sistem de fișiere, și pornim. . Așa a apărut sistemul de operare Linux (pe atunci nu avea încă niciun nume).

Când sistemul de operare a început să apară mai mult sau mai puțin, primul program pe care l-a rulat Linus a fost bash. Ar fi chiar mai corect să spunem că și-a ajustat sistemul de operare astfel încât bash să poată funcționa în sfârșit. După aceea, a început să lanseze treptat alte programe sub sistemul său de operare. Iar sistemul de operare nu trebuia să se numească deloc Linux. Iată un citat din autobiografia lui Torvalds, care a fost publicată sub titlul „Doar pentru distracție”: „În interior, l-am numit Linux. Sincer, nu am intenționat niciodată să-l lansez sub numele de Linux, pentru că mi s-a părut prea nemodest. Ce nume am pregătit pentru versiunea finală? freax. (Ați înțeles? Freaks – fani – și la sfârșitul lui x din Unix)”.

Pe 25 august 1991, în conferința comp.os.minix a apărut următorul mesaj istoric: „Bună ziua tuturor utilizatorilor minix! Scriu aici un sistem de operare (gratuit) (versiune pentru amatori - nu va fi la fel de mare și profesional ca gnu) pentru 386 și 486 AT. M-am jucat cu asta din aprilie și se pare că va fi gata în curând. Spuneți-mi ce vă place/nu vă place la minix, deoarece sistemul meu de operare este similar cu acesta (printre altele, are - din motive practice - aceeași aspect fizic al sistemului de fișiere). Până acum, am portat bash (1.08) și gcc (1.40) la el și totul pare să funcționeze. Deci, în următoarele luni, voi avea ceva care funcționează deja și aș dori să știu de ce caracteristici au nevoie majoritatea oamenilor. Toate aplicațiile sunt acceptate, dar execuția nu este garantată :-)"

Vă rugăm să rețineți că GNU și programul gcc sunt deja menționate aici (la acea vreme această abreviere reprezenta GNU C Compiler). Și amintiți-vă de Stallman și GNU-ul său, care au început să dezvolte sistemul de operare de la celălalt capăt. În cele din urmă, fuziunea a avut loc. Prin urmare, Stallman este jignit când sistemul de operare se numește pur și simplu Linux, și nu GNU/Linux, la urma urmei, Linux este exact nucleul, iar multe dintre skin-uri au fost preluate din proiectul GNU.

Pe 17 septembrie 1991, Linus Torvalds și-a postat pentru prima dată sistemul de operare pe un server FTP public, care la acea vreme avea versiunea 0.01. De atunci, toată omenirea progresistă a sărbătorit această zi ca ziua de naștere a Linux. Oamenii deosebit de nerăbdători încep să-l sărbătorească pe 25 august, când Linus a recunoscut la conferință că scrie un OS. Apoi, dezvoltarea Linux a continuat, iar numele Linux însuși a devenit mai puternic, deoarece adresa unde era așezat sistemul de operare arăta ca ftp.funet.fi/pub/OS/Linux. Cert este că Ari Lemke, profesorul care i-a alocat lui Linus un loc pe server, a crezut că Freax nu arăta prea prezentabil și a numit directorul „Linux” - ca un amestec de numele autorului și „x” la sfârşitul UNIX.

Tux. Sigla Linux

Există, de asemenea, un astfel de punct încât, deși Torvalds a scris Linux sub influența lui Minix, există o diferență fundamentală între Linux și Minix în ceea ce privește programarea. Cert este că Tanenbaum este un susținător al sistemelor de operare microkernel, adică acelea când sistemul de operare are un nucleu mic cu un număr mic de funcții, iar toate driverele și serviciile sistemului de operare acționează ca module independente separate, în timp ce Linux are un nucleu monolitic, sunt incluse multe caracteristici ale sistemului de operare, așa că sub Linux, dacă aveți nevoie de o caracteristică specială, poate fi necesar să recompilați nucleul, făcând unele modificări acolo. Pe de o parte, arhitectura microkernel-ului are avantaje - este fiabilitate și simplitate, în același timp, cu designul neatent al microkernel-ului, nucleul monolitic va funcționa mai repede, deoarece nu este nevoie să facă schimb de cantități mari de date cu terți- module de petrecere. După apariția Linux, în 1992, o dispută virtuală a izbucnit între Torvalds și Tanenbaum, precum și susținătorii acestora, la conferința comp.os.minix, care arhitectură este mai bună - microkernel sau monolitică. Tanenbaum a susținut că arhitectura microkernel-ului era viitorul, iar Linux era învechit la momentul apariției sale. Au trecut aproape 20 de ani de la acea zi... Apropo, GNU Hurd, care trebuia să devină nucleul sistemului de operare GNU, a fost dezvoltat și ca microkernel.

Linux mobil

Deci, din 1991, Linux s-a dezvoltat treptat și, deși ponderea Linux nu este încă mare pe computerele utilizatorilor obișnuiți, a fost mult timp popular pe servere și supercomputere, iar Windows încearcă să-și reducă ponderea în acest domeniu. În plus, Linux este acum bine poziționat pe telefoane și tablete, deoarece Android este și Linux.

Sigla Android

Istoria Androidului a început cu Android Inc, care a apărut în 2003 și părea să fie angajat în dezvoltarea de aplicații mobile (dezvoltările specifice acestei companii în primii ani de existență nu sunt încă deosebit de promovate). Dar la mai puțin de doi ani mai târziu, Android Inc este preluat de Google. Nu a fost posibil să se găsească detalii oficiale despre ce făceau exact dezvoltatorii Android Inc înainte de preluare, deși deja în 2005, după ce a fost cumpărat de Google, se zvonea că aceștia dezvoltau deja un nou sistem de operare pentru telefoane. Cu toate acestea, prima lansare a Android a avut loc pe 22 octombrie 2008, după care noi versiuni au început să fie lansate în mod regulat. Una dintre caracteristicile dezvoltării Android ar putea fi numită faptul că acest sistem a început să fie atacat din cauza brevetelor presupuse încălcate, iar implementarea Java nu este clară din punct de vedere legal, dar să nu intrăm în aceste dispute non-tehnice. .

Dar Android nu este singurul reprezentant mobil al Linux, pe lângă acesta există și sistemul de operare MeeGo. Dacă în spatele Androidului există o corporație atât de puternică precum Google, atunci MeeGo nu are un administrator puternic, este dezvoltat de comunitate sub auspiciile Fundației Linux, care este susținută de companii precum Intel, Nokia, AMD, Novell, ASUS, Acer, MSI și altele. În momentul de față, principalul ajutor vine de la Intel, ceea ce nu este surprinzător, deoarece proiectul MeeGo în sine a apărut din proiectul Moblin, care a fost inițiat de Intel. Moblin este o distribuție Linux care a fost menită să ruleze pe dispozitive portabile alimentate de procesorul Intel Atom. Să menționăm un alt Linux mobil - Openmoko. Linux încearcă destul de vioi să pună un punct pe telefoane și tablete, Google a luat Android în serios, perspectivele pentru alte versiuni mobile de Linux sunt încă vagi.

După cum puteți vedea, în acest moment Linux poate rula pe multe sisteme controlate de diferite procesoare, cu toate acestea, la începutul anilor 1990, Torvalds nu credea că Linux ar putea fi portat în altă parte decât procesorul 386.

Mac OS X

Acum să trecem la un alt sistem de operare care este și compatibil UNIX - Mac OS X. Primele versiuni de Mac OS, până la a 9-a, nu erau bazate pe UNIX, așa că nu ne vom opri asupra lor. Cel mai interesant pentru noi a început după expulzarea lui Steve Jobs de la Apple în 1985, după care a fondat compania NeXT, care a dezvoltat computere și software pentru ei. NeXT l-a primit pe programatorul Avetis Tevanyan, care anterior dezvoltase microkernel-ul Mach pentru un sistem de operare compatibil UNIX dezvoltat la Universitatea Carnegie Mellon. Nucleul Mach urma să înlocuiască nucleul BSD UNIX.

Sigla companiei NeXT

Avetis Tevanian a fost liderul unei echipe care dezvolta un nou sistem de operare compatibil UNIX numit NeXTSTEP. Pentru a nu reinventa roata, NeXTSTEP s-a bazat pe același nucleu Mach. În ceea ce privește programarea, NeXTSTEP, spre deosebire de multe alte sisteme de operare, a fost orientat pe obiecte, un rol uriaș în acesta a fost jucat de limbajul de programare Objective-C, care este acum utilizat pe scară largă în Mac OS X. Prima versiune a NeXTSTEP a fost lansată. în 1989. În ciuda faptului că NeXTSTEP a fost proiectat inițial pentru procesoarele Motorola 68000, dar la începutul anilor 1990, sistemul de operare a fost portat la procesoare 80386 și 80486. Lucrurile nu mergeau bine pentru NeXT, iar în 1996 Apple ia oferit lui Jobs să cumpere NeXT pentru a utiliza NeXTSTEP în loc de Mac OS. Aici s-ar mai putea vorbi despre rivalitatea dintre sistemele de operare NeXTSTEP și BeOS, care s-a încheiat cu victoria lui NeXTSTEP, dar nu vom prelungi povestea deja lungă, în plus, BeOS nu are nicio legătură cu UNIX, așa că în acest moment nu ne interesează, deși în sine, acest sistem de operare a fost foarte interesant și este păcat că dezvoltarea lui a fost întreruptă.

Un an mai târziu, când Jobs s-a întors la Apple, a continuat politica de adaptare a NeXTSTEP pentru computerele Apple, iar câțiva ani mai târziu acest sistem de operare a fost portat pe procesoarele PowerPC și Intel. Astfel, versiunea de server a Mac OS X (Mac OS X Server 1.0) a fost lansată în 1999, iar în 2001 a fost lansat sistemul de operare pentru utilizatorii finali, Mac OS X (10.0).

Ulterior, pe baza Mac OS X, a fost dezvoltat un sistem de operare pentru telefoanele iPhone, care s-a numit Apple iOS. Prima versiune de iOS a fost lansată în 2007. iPad-ul rulează și pe același sistem de operare.

Concluzie

După toate cele de mai sus, este posibil să aveți o întrebare, ce fel de sistem de operare poate fi considerat UNIX? Nu există un răspuns cert la aceasta. Din punct de vedere formal, există o Specificație UNIX UNIX - un standard pe care un sistem de operare trebuie să-l îndeplinească pentru a fi numit UNIX. Nu confundați cu standardul POSIX, care poate fi îndeplinit de un sistem de operare non-UNIX. Apropo, numele POSIX a fost propus de același Richard Stallman, iar în mod oficial standardul POSIX are numărul ISO / IEC 9945. Obținerea unei singure specificații este o afacere costisitoare și consumatoare de timp, așa că nu sunt asociate multe sisteme de operare. . Sistemele de operare care au primit această certificare includ Mac OS X, Solaris, SCO și alte câteva sisteme de operare mai puțin cunoscute. Aceasta nu include Linux sau *BSD, dar nimeni nu se îndoiește de „unixness” lor. Prin urmare, de exemplu, programatorul și scriitorul Eric Raymond a mai propus două semne pentru a determina dacă acest sau acel sistem de operare este asemănător UNIX. Prima dintre aceste caracteristici este „incoerența” codului sursă din UNIX original dezvoltat la AT&T și Bell Labs. Aceasta include sistemele BSD. Al doilea semn este „UNIX în funcționalitate”. Acestea includ sisteme de operare care se comportă aproape de ceea ce este descris în specificația UNIX, dar nu au primit un certificat oficial și, în plus, nu sunt legate în niciun fel de sursele UNIX-ului original. Aceasta include Linux, Minix, QNX.

Pe asta, poate, ne vom opri, altfel s-a dovedit și deci sunt prea multe litere. Această recenzie a acoperit în principal istoria apariției celor mai faimoase sisteme de operare - au rămas în urmă variații ale BSD, Linux, Mac OS X, Solaris, mai multe UNIX, precum QNX, Plan 9, Plan B și altele. Cine știe, poate pe viitor ne vom aminti din nou de ele.

MINISTERUL EDUCAŢIEI ŞI ŞTIINŢEI RUSULUI

FEDERAŢIE

AGENȚIA FEDERALĂ PENTRU EDUCAȚIE

INSTITUȚIE DE ÎNVĂȚĂMÂNT DE STAT

ÎNVĂŢĂMÂNT PROFESIONAL SUPERIOR

Universitatea de Stat de Inginerie Radio Taganrog

Disciplina "informatica"

„Sistem de operare UNIX”

Completat de: Orda-Zhigulina D.V., gr. E-25

Verificat: Vishnevetsky V.Yu.

Taganrog 2006


Introducere

Ce este Unix 3

De unde să obțineți Unix 7 gratuit

Parte principală. (Descrierea Unix)

1. Concepte de bază ale Unix 8

2. Sistem de fișiere 9

2.1 Tipuri de fișiere 9

3. Interpret de comenzi 11

4. Nucleul UNIX 12

4.1 Organizarea generală a nucleului UNIX tradițional 13

4.2 Funcțiile principale ale nucleului 14

4.3 Principiile interacțiunii cu nucleul 15

4.4 Principii de gestionare a întreruperilor 17

5. Control I/O 18

5.1 Principiile sistemului I/O Buffering 19

5. 2 Apeluri de sistem pentru controlul I/O 21

6. Interfețele și punctele de intrare ale driverelor 23

6.1 Blocați driverele 23

6.2 Drivere de caractere 24

6. 3 Drivere de flux 25

7. Comenzi și utilitare 25

7. 1 Organizarea echipei în UNIX OS 26

7.2 Redirecționarea I/O și conducte 26

7. 3 Comenzi încorporate, bibliotecă și utilizator 26

7.4 Programare în limbajul de comandă 27

8. Instrumente GUI 27

8.1 ID-uri de utilizator și grupuri de utilizatori 30

8.2 Protecția fișierelor 32

8.3 Sisteme de operare promițătoare care acceptă mediul UNIX OS 33

Concluzie

Principalele diferențe dintre Unix și alte sisteme de operare 36

Aplicații ale Unix 37


Introducere

Ce este Unix

Termenul Unix și UNIX nu chiar echivalent sunt folosiți cu semnificații diferite. Să începem cu al doilea dintre termeni, ca fiind cel mai simplu. Pe scurt, UNIX (sub această formă) este o marcă înregistrată deținută inițial de AT&T Corporation, care și-a schimbat mâinile de-a lungul anilor și este acum proprietatea unei organizații numită Open Group. Dreptul de a folosi numele UNIX se realizează printr-un fel de „verificare pentru păduchi” – trecerea testelor de conformitate cu specificațiile unor sisteme de operare de referință (Single Unix Standard – care în acest caz poate fi tradus ca Standardul Unic pe Unix). Această procedură nu este doar complicată, ci și foarte costisitoare și, prin urmare, doar câteva dintre sistemele de operare actuale au fost supuse acesteia și toate sunt proprietare, adică sunt proprietatea anumitor corporații.

Printre corporațiile care și-au câștigat dreptul la numele UNIX apoi dezvoltatori/testeri și sângele (mai precis, dolarul) proprietarilor, putem numi următoarele:

Sun cu SunOS-ul său (mai bine cunoscut lumii sub numele de Solaris);

IBM, care a dezvoltat sistemul AIX;

Hewlett-Packard este proprietarul sistemului HP-UX;

IRIX este sistemul de operare al SGI.

În plus, numele UNIX adecvat se aplică sistemelor:

True64 Unix, dezvoltat de DEC, cu lichidarea căruia a trecut la Compaq, iar acum, împreună cu acesta din urmă, a devenit proprietatea aceluiași Hewlett-Packard;

UnixWare este deținut de SCO (un produs al fuziunii dintre Caldera și Santa Cruz Operation).

Fiind proprietare, toate aceste sisteme sunt vândute pentru o mulțime de bani (chiar și după standardele americane). Cu toate acestea, acesta nu este principalul obstacol în calea răspândirii UNIX în sine, deoarece caracteristica lor comună este legarea de anumite platforme hardware: AIX rulează pe servere și stații de lucru IBM cu procesoare Power, HP-UX pe propriul HP-PA (Arhitectură de precizie) mașini , IRIX - pe stații grafice de la SGI, care poartă procesoare MIPS, True64 Unix - conceput pentru procesoare Alpha (din păcate, în decedatul Bose) Doar UnixWare este concentrat pe platforma PC "democratică", iar Solaris există în versiuni pentru două arhitecturi - propriul său, Sparc, și încă același PC, care, totuși, nu a contribuit foarte mult la prevalența lor - din cauza suportului relativ slab pentru noile periferice PC.

Astfel, UNIX este în primul rând un concept legal. Dar termenul Unix are o interpretare tehnologică. Acesta este denumirea comună folosită de industria IT pentru întreaga familie de sisteme de operare, fie derivate din compania „originală” UNIX AT&T, fie reproducând funcțiile acesteia „de la zero”, inclusiv sisteme de operare gratuite precum Linux, FreeBSD și alte BSD-uri, nicio verificare a conformității cu Standardul Unix Unix nu a fost niciodată expusă. De aceea, ele sunt adesea numite asemănătoare Unix.

De asemenea, este utilizat pe scară largă termenul „sisteme compatibile cu POSIX”, care este apropiat ca înțeles, care reunește o familie de sisteme de operare care corespund setului de standarde cu același nume. Standardele POSIX (Portable Operation System Interface based on uniX) în sine au fost dezvoltate pe baza practicilor adoptate în sistemele Unix și, prin urmare, acestea din urmă sunt toate, prin definiție, compatibile cu POSIX. Cu toate acestea, acestea nu sunt complet sinonime: compatibilitatea cu standardele POSIX este revendicată de sistemele de operare care sunt doar indirect legate de Unix (QNX, Syllab), sau deloc legate (până la Windows NT/2000/XP).

Pentru a clarifica problema relației dintre UNIX, Unix și POSIX, trebuie să ne adâncim puțin în istorie. De fapt, istoria acestei probleme este discutată în detaliu în capitolul corespunzător al cărții „Free Unix: Linux, FreeBSD and Others” (în curând de BHV-Petersburg) și în articole despre istoria sistemelor Linux și BSD.

Sistemul de operare Unix (mai precis, prima sa versiune) a fost dezvoltat de angajații Bell Labs (o divizie a AT&T) în 1969-1971. Primii săi autori - Ken Thompson și Dennis Ritchie - au făcut-o doar în scopurile lor, în special, pentru a se putea distra cu jocul lor StarTravel preferat. Și din mai multe motive legale, compania însăși nu l-a putut folosi ca produs comercial. Cu toate acestea, aplicarea practică a Unix a fost găsită destul de repede. În primul rând, a fost folosit la Bell Labs pentru a pregăti diverse tipuri de documentație tehnică (inclusiv brevet). Și în al doilea rând, sistemul de comunicare UUCP (Unix to Unix Copy Program) era bazat pe Unix.

Un alt domeniu în care Unix a fost folosit în anii 70 și începutul anilor 80 ai secolului trecut s-a dovedit a fi destul de neobișnuit. Și anume, în textele sursă, acesta a fost distribuit între instituțiile științifice care desfășoară activități în domeniul Informaticii. Scopul unei astfel de diseminare (nu era complet gratuită în sensul actual, dar de fapt s-a dovedit a fi foarte liberală) a fost: educația și cercetarea în domeniul de cunoaștere de mai sus.

Cel mai faimos este sistemul BSD Unix, creat la Universitatea din Berkeley, California. Care, eliberându-se treptat de codul proprietar al Unix-ului original, în cele din urmă, după suișuri și coborâșuri dramatice (descrise în detaliu aici), a dat naștere unor sisteme BSD gratuite moderne - FreeBSD, NetBSD și altele.

Unul dintre cele mai importante rezultate ale muncii hackerilor universitari a fost (1983) introducerea suportului pentru protocolul TCP/IP în Unix, pe care s-a bazat ARPANET-ul de atunci (și care a devenit fundamentul internetului modern). Aceasta a fost o condiție prealabilă pentru dominația Unix în toate domeniile legate de World Wide Web. Și aceasta s-a dovedit a fi următoarea aplicație practică a acestei familii de sisteme de operare - până atunci nu mai era nevoie să vorbim despre un singur Unix. Pentru că, așa cum am menționat mai devreme, și-a separat cele două ramuri - originare din UNIX original (de-a lungul timpului, a primit numele System V) și sistemul de origine Berkeley. Pe de altă parte, System V a stat la baza acelor diverse UNIX-uri proprietare care, de fapt, aveau dreptul legal de a revendica acest nume.

Această din urmă împrejurare - ramificarea sistemului de operare odată unic în mai multe linii care își pierd treptat compatibilitatea - a intrat în conflict cu una dintre pietrele de temelie ale ideologiei Unix: portabilitatea sistemului între diferite platforme și aplicațiile sale de la un sistem Unix la un alt. Ceea ce a adus la viață activitățile diferitelor tipuri de organizații de standardizare, care s-au încheiat în final cu crearea setului de standarde POSIX, despre care a fost menționat mai devreme.

Linus Torvalds s-a bazat pe standardele POSIX, creându-și „de la zero” (adică fără a folosi codul preexistent) sistemul său de operare – Linux. Și ea, după ce a stăpânit rapid și cu succes domeniile tradiționale de aplicare a sistemelor Unix (dezvoltare software, comunicații, Internet), în cele din urmă a deschis unul nou pentru ei - platforme de utilizator desktop de uz general. Acesta este ceea ce l-a făcut popular în rândul oamenilor - o popularitate care o depășește pe cea a tuturor celorlalte sisteme Unix combinate, atât proprietare, cât și gratuite.

Mai departe, vom vorbi despre lucrul pe sisteme Unix în cel mai larg sens al cuvântului, fără a ține cont de orice fel de mărci comerciale și alte probleme legale. Deși principalele exemple legate de metodele de lucru vor fi preluate din domeniul implementărilor gratuite - Linux, într-o măsură mai mică FreeBSD, și cu atât mai puțin - din alte sisteme BSD.

De unde să obțineți Unix gratuit?

Baza de date FreeBSD - www.freebsd.org;

Puteți accesa www.sco.com


Parte principală. (Descrierea Unix)

1. Concepte de bază ale Unix

Unix se bazează pe două concepte de bază: „proces” și „fișier”. Procesele sunt latura dinamică a sistemului, sunt subiecte; și fișiere - static, acestea sunt obiectele proceselor. Aproape întreaga interfață dintre procesele care interacționează cu nucleul și unele cu altele arată ca scrierea / citirea fișierelor. Deși trebuie să adăugați lucruri precum semnale, memorie partajată și semafoare.

Procesele pot fi împărțite aproximativ în două tipuri - sarcini și demoni. O sarcină este un proces care își face treaba, încercând să o termine cât mai curând posibil și să o finalizeze. Daemonul așteaptă evenimentele pe care trebuie să le proceseze, procesează evenimentele care au avut loc și așteaptă din nou; de obicei se termină în ordinea unui alt proces, cel mai adesea este ucis de utilizator dând comanda „kill process_number”. În acest sens, se dovedește că o sarcină interactivă care procesează intrarea utilizatorului este mai mult ca un demon decât o sarcină.

2. Sistem de fișiere

În vechile "-uri" Unix, numelui i-au fost atribuite 14 litere, în cele noi această restricție a fost eliminată. Pe lângă numele fișierului, directorul conține identificatorul său de inod - un număr întreg care determină numărul blocului în care se inregistreaza atributele fisierului Printre acestea: numarul utilizatorului - proprietarul fisierului, grupurile de numere Numarul referirilor la fisier (vezi mai jos) Data si ora crearii, ultima modificare si ultimul acces la fisier Atribute de acces Atributele de acces contin fisierul tip (a se vedea mai jos), drepturile modifică atributele la pornire (a se vedea mai jos) și permisiunile de acces la acesta pentru proprietar, coleg de clasă și alții pentru citire, scriere și executare. Dreptul de a șterge un fișier este determinat de dreptul de a scrie pe suprafața director.

Fiecare fișier (dar nu un director) poate fi cunoscut sub mai multe nume, dar trebuie să fie pe aceeași partiție. Toate linkurile către fișier sunt egale; fișierul este șters atunci când ultima legătură către fișier este eliminată. Dacă fișierul este deschis (pentru citire și/sau scriere), atunci numărul de link-uri către acesta crește cu încă una; iată câte programe care deschid un fișier temporar îl șterg imediat, astfel încât, dacă se blochează, atunci când sistemul de operare închide fișierele deschise de proces, acest fișier temporar va fi șters de sistemul de operare.

Există o altă caracteristică interesantă a sistemului de fișiere: dacă, după crearea unui fișier, scrierea în acesta nu a fost pe rând, ci la intervale mari, atunci nu este alocat spațiu pe disc pentru aceste intervale. Astfel, volumul total de fișiere dintr-o partiție poate fi mai mare decât volumul partiției, iar atunci când un astfel de fișier este șters, este eliberat mai puțin spațiu decât dimensiunea acestuia.

2.1 Tipuri de fișiere

Fișierele sunt de următoarele tipuri:

fișier obișnuit cu acces direct;

director (fișier care conține numele și identificatorii altor fișiere);

link simbolic (șir cu numele altui fișier);

dispozitiv de blocare (disc sau bandă magnetică);

dispozitiv serial (terminale, porturi seriale și paralele; discurile și benzile au, de asemenea, o interfață pentru dispozitive seriale)

canal numit.

Fișierele speciale concepute pentru a funcționa cu dispozitive sunt de obicei localizate în directorul „/dev”. Iată câteva dintre ele (în nominalizarea FreeBSD):

tty* - terminale, inclusiv: ttyv - consolă virtuală;

ttyd - terminal DialIn (de obicei un port serial);

cuaa - linie DialOut

ttyp - pseudo-terminal de rețea;

tty - terminalul cu care este asociată sarcina;

wd* - hard disk-uri și subsecțiunile acestora, inclusiv: wd - hard disk;

wds - partiția acestui disc (numită aici „slice”);

wds - secțiune de partiție;

fd - dischetă;

rwd*, rfd* - la fel ca wd* și fd*, dar cu acces secvenţial;

Uneori se cere ca un program lansat de un utilizator să nu aibă drepturile utilizatorului care l-a lansat, ci altul. În acest caz, atributul de modificare a drepturilor este setat la drepturile utilizatorului - proprietarul programului. (De exemplu, voi da un program care citește un fișier cu întrebări și răspunsuri și, pe baza a ceea ce citește, testează studentul care a lansat acest program. Programul trebuie să aibă dreptul de a citi fișierul cu răspunsuri, dar elevul cine l-a lansat nu ar trebui.) De exemplu, funcționează programul passwd, cu ajutorul căruia utilizatorul își poate schimba parola. Utilizatorul poate rula programul passwd, poate face modificări în baza de date a sistemului - dar utilizatorul nu poate.

Spre deosebire de DOS, care are un nume de fișier complet calificat ca „drive:pathname”, și RISC-OS, care îl are ca „-filesystem-drive:$.path.name” (care are în general avantajele sale), Unix folosește notația transparentă în forma „/cale/nume”. Rădăcina este măsurată din partiția din care a fost încărcat nucleul Unix. Dacă trebuie utilizată o altă partiție (și partiția de boot conține de obicei doar ceea ce este necesar pentru pornire), se folosește comanda `mount /dev/partitionfile dir`. În același timp, fișierele și subdirectoarele care se aflau anterior în acest director devin inaccesibile până când partiția este demontată (în mod firesc, toți oamenii normali folosesc directoare goale pentru a monta partițiile). Numai supraveghetorul are dreptul de a monta și de a demonta.

La pornire, fiecare proces se poate aștepta să aibă trei fișiere deschise pentru el, pe care le cunoaște ca standard de intrare standard la descriptorul 0; ieșire standard stdout pe descriptorul 1; și standard de ieșire stderr la descriptorul 2. Când este conectat, când utilizatorul introduce un nume de utilizator și o parolă și shell-ul este pornit, toate trei sunt direcționate către /dev/tty; mai târziu, oricare dintre ele poate fi redirecționat către orice fișier.

3. Interpret de comandă

Unix vine aproape întotdeauna cu două shell-uri, sh (shell) și csh (un shell asemănător C). Pe lângă ele, există și bash (Bourne), ksh (Korn) și altele. Fără a intra în detalii, iată principiile generale:

Toate comenzile, cu excepția schimbării directorului curent, setarea variabilelor de mediu (mediu) și instrucțiunile de programare structurată sunt programe externe. Aceste programe sunt de obicei localizate în directoarele /bin și /usr/bin. Programe de administrare a sistemului - în directoarele /sbin și /usr/sbin.

Comanda constă din numele programului de pornit și argumente. Argumentele sunt separate de numele comenzii și unele de altele prin spații și file. Unele caractere speciale sunt interpretate de către shell în sine. Caracterele speciale sunt " " ` ! $ ^ * ? | & ; (ce altceva?).

Puteți da mai multe comenzi pe aceeași linie de comandă. Echipele pot fi împărțite; (execuție secvențială a comenzii), & (execuția comenzii simultane asincrone), | (execuție sincronă, stdout-ul primei comenzi va fi alimentat stdin-ul celui de-al doilea).

De asemenea, puteți prelua intrarea standard dintr-un fișier incluzând „fișier” (fișierul va fi eliminat) sau „>>fișier” (intrarea va fi scrisă la sfârșitul fișierului) ca unul dintre argumente.

Dacă aveți nevoie de informații despre orice comandă, lansați comanda „man command_name”. Aceasta va fi afișată pe ecran prin programul „mai mult” - vezi cum să-l gestionezi pe Unix cu comanda „man more”.

4. Nucleul UNIX

Ca orice alt sistem de operare multi-utilizator care protejează utilizatorii unul de celălalt și protejează datele sistemului de orice utilizator neprivilegiat, UNIX are un nucleu securizat care gestionează resursele computerului și oferă utilizatorilor un set de bază de servicii.

Comoditatea și eficiența versiunilor moderne ale sistemului de operare UNIX nu înseamnă că întregul sistem, inclusiv nucleul, este proiectat și structurat în cel mai bun mod posibil. Sistemul de operare UNIX a evoluat de-a lungul anilor (este primul sistem de operare din istorie care continuă să câștige popularitate la o vârstă atât de matură - de mai bine de 25 de ani). Desigur, capacitățile sistemului au crescut și, așa cum se întâmplă adesea în sistemele mari, îmbunătățirile calitative ale structurii sistemului de operare UNIX nu au ținut pasul cu creșterea capabilităților sale.

Ca rezultat, nucleul celor mai moderne versiuni comerciale ale sistemului de operare UNIX este un monolit mare, nu foarte bine structurat. Din acest motiv, programarea la nivelul nucleului UNIX continuă să fie o artă (cu excepția tehnologiei bine stabilite și ușor de înțeles pentru dezvoltarea driverelor de dispozitive externe). Această lipsă de fabricabilitate în organizarea nucleului UNIX nu îi satisface pe mulți. De aici și dorința pentru o reproducere completă a mediului UNIX OS cu o organizare complet diferită a sistemului.

Datorită celei mai mari prevalențe, nucleul UNIX System V este adesea discutat (poate fi considerat tradițional).

4.1 Organizarea generală a nucleului UNIX tradițional

Una dintre principalele realizări ale sistemului de operare UNIX este că sistemul are proprietatea de mobilitate ridicată. Semnificația acestei calități este că întregul sistem de operare, inclusiv nucleul său, este relativ ușor de transferat pe diferite platforme hardware. Toate părțile sistemului, cu excepția nucleului, sunt complet independente de mașină. Aceste componente sunt scrise cu grijă în C, iar portarea lor pe o nouă platformă (cel puțin în clasa de computere pe 32 de biți) necesită doar recompilarea codurilor sursă în codurile computerului țintă.

Desigur, cele mai mari probleme sunt asociate cu nucleul de sistem, care ascunde complet specificul computerului utilizat, dar însuși depinde de aceste specificități. Ca urmare a unei separări atentă a componentelor dependente de mașină și independente de mașină ale nucleului (aparent, din punctul de vedere al dezvoltatorilor de sisteme de operare, aceasta este cea mai mare realizare a dezvoltatorilor nucleului UNIX OS tradițional), a fost posibil să se realizeze ca partea principală a nucleului să nu depindă de caracteristicile arhitecturale ale platformei țintă, să fie scrisă în întregime în C și să aibă nevoie doar de recompilare pentru a fi portată pe o nouă platformă.

Cu toate acestea, o parte relativ mică a nucleului este dependentă de mașină și este scrisă într-un amestec de C și limbajul de asamblare al procesorului țintă. La transferul sistemului pe o nouă platformă, această parte a nucleului trebuie rescrisă folosind limbajul de asamblare și ținând cont de caracteristicile specifice ale hardware-ului țintă. Părțile dependente de mașină ale nucleului sunt bine izolate de partea principală independentă de mașină și, cu o bună înțelegere a scopului fiecărei componente dependente de mașină, rescrierea părții specifice mașinii este în mare parte o sarcină tehnică (deși necesită un abilități de programare).

Partea specifică mașinii a nucleului tradițional UNIX include următoarele componente:

promovarea și inițializarea sistemului la un nivel scăzut (depinde până acum de caracteristicile hardware-ului);

procesarea primară a întreruperilor interne și externe;

gestionarea memoriei (în partea care se referă la caracteristicile suportului hardware pentru memorie virtuală);

schimbarea contextului procesului între modurile utilizator și kernel;

părți specifice platformei țintă ale driverelor de dispozitiv.

4.2 Funcțiile principale ale nucleului

Principalele funcții ale nucleului UNIX OS includ următoarele:

(a) Inițializarea sistemului - funcția de pornire și pornire. Nucleul oferă un instrument de bootstrap care încarcă întregul nucleu în memoria computerului și pornește nucleul.

(b) Gestionarea proceselor și a firelor de execuție - funcția de a crea, de a termina și de a urmări procesele și firele de execuție existente („procese” care rulează pe memoria virtuală partajată). Deoarece UNIX este un sistem de operare cu mai multe procese, nucleul asigură partajarea timpului procesorului (sau a procesoarelor în sistemele cu mai multe procesoare) și a altor resurse computerizate între procesele care rulează, pentru a da impresia că procesele rulează de fapt în paralel.

(c) Managementul memoriei este funcția de a mapa memoria virtuală virtuală nelimitată a proceselor în memoria RAM fizică a computerului, care este limitată ca dimensiune. Componenta nucleului corespunzătoare asigură utilizarea partajată a acelorași zone de RAM de către mai multe procese care utilizează memorie externă.

(d) Gestionarea fișierelor - o funcție care implementează abstractizarea sistemului de fișiere - ierarhii de directoare și fișiere. Sistemele de fișiere UNIX acceptă mai multe tipuri de fișiere. Unele fișiere pot conține date ASCII, altele vor corespunde dispozitivelor externe. Sistemul de fișiere stochează fișiere obiect, fișiere executabile și așa mai departe. Fișierele sunt de obicei stocate pe dispozitive de stocare externe; accesul la acestea este asigurat prin intermediul nucleului. Există mai multe tipuri de organizare a sistemelor de fișiere în lumea UNIX. Versiunile moderne ale sistemului de operare UNIX acceptă simultan majoritatea tipurilor de sisteme de fișiere.

(e) Mijloace de comunicare - o funcție care oferă posibilitatea de a face schimb de date între procese care rulează în interiorul aceluiași computer (IPC - Inter-Process Communications), între procese care rulează în diferite noduri ale unei rețele de date locale sau extinse, precum și între procese și drivere de dispozitive externe.

(f) Interfață de programare - o funcție care oferă acces la capacitățile nucleului din partea proceselor utilizatorului pe baza mecanismului apelurilor de sistem, aranjate sub forma unei biblioteci de funcții.

4.3 Principiile interacțiunii cu nucleul

În orice sistem de operare, este acceptat un mecanism care permite programelor utilizatorului să acceseze serviciile nucleului OS. În sistemele de operare ale celui mai faimos computer sovietic BESM-6, mijloacele corespunzătoare de comunicare cu nucleul au fost numite extracoduri, în sistemele de operare IBM au fost numite macrocomenzi de sistem și așa mai departe. Pe UNIX, aceste facilități sunt numite apeluri de sistem.

Numele nu schimbă semnificația, și anume că pentru a accesa funcțiile kernel-ului OS se folosesc „instrucțiuni speciale” ale procesorului, atunci când sunt executate, apare un tip special de întrerupere internă a procesorului, transferându-l în modul kernel (în cele mai moderne OS acest tip de întrerupere se numește trap - trap). Atunci când procesează astfel de întreruperi (decriptare), nucleul sistemului de operare recunoaște că întreruperea este de fapt o solicitare către nucleu din programul utilizatorului de a efectua anumite acțiuni, selectează parametrii apelului și îl procesează, apoi efectuează o „întoarcere de la întrerupere. „, reluând execuția normală a programului utilizator .

Este clar că mecanismele specifice pentru ridicarea întreruperilor interne inițiate de programul utilizator diferă în diferite arhitecturi hardware. Deoarece sistemul de operare UNIX se străduiește să ofere un mediu în care programele utilizatorului să poată fi pe deplin mobile, a fost necesar un strat suplimentar pentru a ascunde specificul mecanismului specific de apariție a întreruperilor interne. Acest mecanism este asigurat de așa-numita bibliotecă de apeluri de sistem.

Pentru utilizator, biblioteca de apeluri de sistem este o bibliotecă obișnuită de funcții pre-implementate ale sistemului de programare C. Când programați în limbajul C, utilizarea oricărei funcții din biblioteca de apeluri de sistem nu este diferită de utilizarea oricărei funcții C native sau din bibliotecă. Cu toate acestea, în interiorul oricărei funcții a unei anumite biblioteci de apeluri de sistem conține cod care este, în general, specific unei anumite platforme hardware.

4.4 Principii de gestionare a întreruperilor

Desigur, mecanismul de gestionare a întreruperilor interne și externe utilizate în sistemele de operare depinde în principal de ce fel de suport hardware pentru gestionarea întreruperilor este oferit de o anumită platformă hardware. Din fericire, până acum (și de ceva timp) marii producători de computere au convenit de facto asupra mecanismelor de întrerupere de bază.

Vorbind nu foarte precis și specific, esența mecanismului adoptat astăzi este că fiecărei posibile întreruperi a procesorului (fie că este o întrerupere internă sau externă) corespunde unei adrese fixe a memoriei RAM fizice. În momentul în care procesorului i se permite să întrerupă din cauza prezenței unei solicitări de întrerupere interne sau externe, are loc un transfer hardware de control către celula RAM fizică cu adresa corespunzătoare - de obicei adresa acestei celule se numește „întrerupere vector" (de obicei, cererile de întrerupere internă, adică cererile care vin direct de la procesor sunt satisfăcute imediat).

Afacerea sistemului de operare este să plaseze în celulele corespunzătoare ale memoriei RAM codul programului care asigură procesarea inițială a întreruperii și inițiază procesarea completă.

Practic, sistemul de operare UNIX are o abordare generală. În vectorul de întrerupere corespunzător întreruperii externe, adică. întrerupere de la un dispozitiv extern, conține instrucțiuni care stabilesc nivelul de rulare al procesorului (nivelul de rulare determină la ce întreruperi externe ar trebui să răspundă procesorul imediat) și săriți la gestionarea completă a întreruperilor din driverul de dispozitiv corespunzător. Pentru o întrerupere internă (de exemplu, o întrerupere inițiată de programul utilizator atunci când pagina de memorie virtuală necesară lipsește din memoria principală, când apare o excepție în programul utilizator etc.) sau o întrerupere a temporizatorului, vectorul de întrerupere conține un săriți la programul nucleu UNIX corespunzător.

5. Control I/O

În mod tradițional, sistemul de operare UNIX distinge trei tipuri de organizare I/O și, în consecință, trei tipuri de drivere. Block I/O este destinat în principal lucrului cu directoare și fișiere obișnuite ale sistemului de fișiere, care la nivel de bază au o structură de bloc. La nivel de utilizator, acum este posibil să lucrați cu fișiere prin maparea directă a acestora la segmente de memorie virtuală. Această caracteristică este considerată nivelul superior al blocului I/O. La nivelul inferior, bloc I/O este acceptat de driverele bloc. Bloc I/O este, de asemenea, suportat de buffering de sistem.

Intrarea/ieșirea caracterelor este utilizată pentru schimburi directe (fără tamponare) între spațiul de adrese al utilizatorului și dispozitivul corespunzător. Suportul kernelului comun tuturor driverelor de caractere este furnizarea de funcții pentru transferul de date între spațiile de adrese utilizator și kernel.

În cele din urmă, stream I/O este similar cu caracterul I/O, dar datorită posibilității de a include module intermediare de procesare în flux, are mult mai multă flexibilitate.

5.1 Principiile sistemului I/O Buffering

Modul tradițional de reducere a supraîncărcării atunci când se efectuează schimburi cu dispozitive de memorie externe care au o structură bloc este blocarea I/O în tampon. Aceasta înseamnă că orice bloc al unui dispozitiv de memorie extern este citit în primul rând într-un buffer din zona de memorie principală, numit cache de sistem în sistemul de operare UNIX, și de acolo este copiat complet sau parțial (în funcție de tipul de schimb) în spațiul utilizatorului corespunzător.

Principiile organizării mecanismului tradițional de buffering sunt, în primul rând, ca o copie a conținutului blocului să fie păstrată în buffer-ul de sistem până când devine necesară înlocuirea acestuia din cauza lipsei de buffere (se folosește o variație a algoritmului LRU pentru organizarea politicii de înlocuire). În al doilea rând, la scrierea oricărui bloc al unui dispozitiv de memorie extern, se realizează de fapt doar o actualizare (sau formarea și umplerea) a bufferului cache. Schimbul propriu-zis cu dispozitivul se face fie prin deschiderea buffer-ului din cauza înlocuirii conținutului său, fie prin emiterea unui apel de sistem special de sincronizare (sau fsync), acceptat special pentru împingerea forțată a bufferelor cache actualizate în memoria externă.

Această schemă tradițională de buffering a intrat în conflict cu instrumentele de gestionare a memoriei virtuale dezvoltate în versiunile moderne ale sistemului de operare UNIX și, în special, cu mecanismul de mapare a fișierelor la segmentele de memorie virtuală. Prin urmare, System V Release 4 a introdus o nouă schemă de tamponare, care este utilizată în prezent în paralel cu vechea schemă.

Esența noii scheme este că, la nivel de kernel, mecanismul de mapare a fișierelor la segmentele de memorie virtuală este de fapt reprodus. În primul rând, amintiți-vă că nucleul UNIX rulează într-adevăr în propria sa memorie virtuală. Această memorie are o structură mai complexă, dar fundamental aceeași ca memoria virtuală a utilizatorului. Cu alte cuvinte, memoria virtuală a nucleului este un segment de pagină și, împreună cu memoria virtuală a proceselor utilizatorului, este susținută de un subsistem comun de gestionare a memoriei virtuale. Rezultă, în al doilea rând, că practic orice funcție furnizată de nucleu utilizatorilor poate fi furnizată de unele componente ale nucleului altor componente ale nucleului. În special, acest lucru se aplică și capacității de a mapa fișiere la segmente de memorie virtuală.

Noua schemă de buffering din nucleul UNIX se bazează în principal pe faptul că nu puteți face aproape nimic special pentru a organiza buffering. Când unul dintre procesele utilizatorului deschide un fișier care nu a fost deschis până atunci, nucleul formează un nou segment și conectează fișierul care se deschide la acest segment. După aceea (indiferent dacă procesul utilizatorului va lucra cu fișierul în modul tradițional folosind apelurile de sistem de citire și scriere sau va conecta fișierul la segmentul său de memorie virtuală), la nivel de kernel, se va lucra cu segmentul de kernel la care fișierul este atașat la nivelul nucleelor. Ideea principală a noii abordări este că decalajul dintre gestionarea memoriei virtuale și tamponarea la nivel de sistem este eliminată (acest lucru ar fi trebuit să se facă cu mult timp în urmă, deoarece este evident că tamponarea principală în sistemul de operare ar trebui să fie efectuată de către componenta de gestionare a memoriei virtuale).

De ce să nu renunți la vechiul mecanism de tamponare? Chestia este că noua schemă presupune prezența unei adrese continue în interiorul obiectului de memorie externă (trebuie să existe un izomorfism între obiectele mapate și cele mapate). Cu toate acestea, atunci când organizați sisteme de fișiere, sistemul de operare UNIX este destul de dificil de alocat memorie externă, ceea ce este valabil mai ales pentru i-nodes. Prin urmare, unele blocuri de memorie externă trebuie considerate izolate, iar pentru ele se dovedește a fi mai benefic să folosești vechea schemă de buffering (deși ar putea fi posibilă în versiunile de mâine ale UNIX să treci complet la o nouă schemă unificată).

5. 2 Apeluri de sistem pentru controlul I/O

Pentru a accesa (adică pentru a putea efectua operațiuni I/O ulterioare) pe orice tip de fișier (inclusiv fișiere speciale), un proces utilizator trebuie mai întâi să se conecteze la fișier folosind unul dintre sistemele deschise, create, dup sau pipe. apeluri.

Secvența de acțiuni ale apelului de sistem deschis (nume cale, mod) este următoarea:

este analizată consistența parametrilor de intrare (referiți în principal de steaguri ale modului de acces la fișiere);

alocați sau localizați spațiu pentru un descriptor de fișier în zona de date a procesului de sistem (zona u);

în zona la nivelul întregului sistem, spațiul existent este alocat sau localizat pentru a găzdui descriptorul fișierului de sistem (structura fișierului);

arhiva sistemului de fișiere este căutată pentru un obiect numit „pathname” și este generat sau găsit un descriptor de fișier la nivel de sistem de fișiere (vnode în termenii UNIX V System 4);

vnode este legat de structura de fișiere formată anterior.

Apelurile de sistem deschise și create sunt (aproape) echivalente din punct de vedere funcțional. Orice fișier existent poate fi deschis cu apelul de sistem creat și orice fișier nou poate fi creat cu apelul de sistem deschis. Cu toate acestea, în ceea ce privește apelul de sistem creat, este important de subliniat că, în utilizarea sa naturală (pentru a crea un fișier), acest apel de sistem creează o nouă intrare în directorul corespunzător (în funcție de calea dată) și, de asemenea, creează și inițializează în mod corespunzător un nou i-node.

În cele din urmă, apelul de sistem dup (duplicare - copiere) duce la formarea unui nou descriptor pentru un fișier deja deschis. Acest apel de sistem specific UNIX are unicul scop al redirecționării I/O.) Execuția sa constă în crearea unui nou descriptor de fișier deschis în regiunea u a spațiului de sistem al procesului utilizatorului, care conține descriptorul de fișier nou format (întreg), dar care se referă la structura de fișiere deja existentă la nivelul întregului sistem și care conține aceleași semne și steaguri. care corespund fișierului eșantion deschis.

Alte apeluri de sistem importante sunt apelurile de sistem de citire și scriere. Apelul de sistem de citire se execută după cum urmează:

descriptorul fișierului specificat se află în tabelul de fișiere la nivel de sistem și se determină dacă accesul din procesul dat la fișierul dat în modul specificat este legal;

pentru o perioadă (de scurtă) timp, pe nodul v al acestui fișier este setată o blocare de sincronizare (conținutul descriptorului nu ar trebui să se schimbe în momentele critice ale operației de citire);

citirea efectivă este efectuată folosind mecanismul de buffering vechi sau nou, după care datele sunt copiate pentru a deveni disponibile în spațiul de adrese al utilizatorului.

Operația de scriere funcționează în același mod, dar modifică conținutul tamponului pool-ului de buffer.

Apelul de sistem de închidere determină șoferul să renunțe la procesul asociat utilizatorului și (în cazul închiderii celei mai recente dispozitive) setează indicatorul „driver liber” la nivelul întregului sistem.

În cele din urmă, un alt apel de sistem „special” ioctl este acceptat pentru fișierele speciale. Acesta este singurul apel de sistem care este furnizat pentru fișiere speciale și nu este furnizat pentru alte tipuri de fișiere. De fapt, apelul de sistem ioctl vă permite să extindeți în mod arbitrar interfața oricărui driver. Parametrii ioctl includ un cod operațional și un indicator către o anumită zonă a memoriei procesului utilizatorului. Toată interpretarea codului operațional și a parametrilor specifici asociați este gestionată de șofer.

Desigur, deoarece driverele sunt concepute în primul rând pentru a controla dispozitivele externe, codul driverului trebuie să conțină mijloacele adecvate pentru gestionarea întreruperilor de la dispozitiv. Apelul către handlerul individual de întrerupere din driver vine din nucleul sistemului de operare. În mod similar, un driver poate declara o intrare „timeout” pe care o accesează nucleul când expiră timpul comandat anterior de driver (un astfel de control al temporizării este necesar atunci când se administrează dispozitive mai puțin inteligente).

Schema generală a organizării interfeței driverelor este prezentată în Figura 3.5. După cum arată această figură, în ceea ce privește interfețele și managementul la nivel de sistem, există două tipuri de drivere - caracter și bloc. Din punct de vedere al organizării interne, se evidențiază un alt tip de șoferi - șoferii stream. Cu toate acestea, în ceea ce privește interfața lor externă, driverele de flux nu diferă de driverele de caractere.

6. Interfețele și punctele de intrare ale driverelor

6.1 Blocați driverele

Driverele de bloc sunt concepute pentru a servi dispozitivelor externe cu o structură de bloc (discuri magnetice, benzi etc.) și diferă de altele prin faptul că sunt dezvoltate și executate utilizând tamponarea sistemului. Cu alte cuvinte, astfel de drivere funcționează întotdeauna prin pool-ul de buffer de sistem. După cum puteți vedea în Figura 3.5, orice acces de citire sau scriere la un driver de bloc trece întotdeauna prin preprocesare, care este să încerce să găsească o copie a blocului dorit în pool-ul de buffer.

Dacă o copie a blocului necesar nu se află în pool-ul de buffer, sau dacă din anumite motive este necesară înlocuirea conținutului unui buffer actualizat, nucleul UNIX apelează procedura de strategie a driverului de bloc corespunzător. Strategy oferă o interfață standard între nucleu și driver. Cu utilizarea subrutinelor de bibliotecă destinate scrierii driverelor, procedura de strategie poate organiza cozi de schimburi cu dispozitivul, de exemplu, pentru a optimiza mișcarea capetelor magnetice pe disc. Toate schimburile efectuate de driverul de bloc sunt efectuate cu memorie tampon. Rescrierea informațiilor necesare în memoria procesului utilizatorului corespunzător este efectuată de programele kernel care gestionează bufferele

6.2 Drivere de caractere

Driverele de caractere sunt proiectate în primul rând pentru a servi dispozitive care comunică caracter cu caracter sau șiruri de caractere de lungime variabilă. Un exemplu tipic de dispozitiv de caractere este o imprimantă simplă care acceptă un caracter pe schimb.

Driverele de caractere nu folosesc buffering de sistem. Ei copiază direct datele din memoria de procesare a utilizatorului pentru operațiuni de scriere sau în memoria de procesare a utilizatorului pentru operațiuni de citire, folosind propriile buffer-uri.

Trebuie remarcat faptul că este posibil să se furnizeze o interfață de caractere pentru un dispozitiv bloc. În acest caz, driverul de bloc utilizează caracteristicile suplimentare ale procedurii de strategie, care permite ca schimbul să fie efectuat fără utilizarea tamponării sistemului. Pentru un driver care are atât interfețe bloc, cât și interfețe de caractere, în sistemul de fișiere sunt create două fișiere speciale, bloc și caracter. La fiecare apel, șoferul primește informații despre modul în care este utilizat.

6. 3 Drivere de flux

Scopul principal al mecanismului de fluxuri este de a crește nivelul de modularitate și flexibilitate al driverelor cu logică internă complexă (acest lucru se aplică mai ales driverelor care implementează protocoale de rețea avansate). Specificul acestor drivere este că majoritatea codului programului nu depinde de caracteristicile dispozitivului hardware. Mai mult decât atât, este adesea avantajos să combinați părți din codul programului în moduri diferite.

Toate acestea au dus la apariția unei arhitecturi de streaming a driverelor, care sunt o conductă bidirecțională de module de procesare. La începutul conductei (cel mai apropiat de procesul utilizatorului) se află antetul fluxului, care este accesat în principal de utilizator. La capătul conductei (cel mai apropiat de dispozitiv) se află driverul de dispozitiv normal. Un număr arbitrar de module de procesare poate fi amplasat în spațiu, fiecare dintre acestea fiind proiectat în conformitate cu interfața de streaming necesară.

7. Comenzi și utilitare

Când lucrează interactiv într-un mediu de operare UNIX, aceștia folosesc diverse utilitare sau comenzi externe ale limbajului shell. Multe dintre aceste utilitare sunt la fel de complexe ca și shell-ul în sine (și apropo, shell-ul în sine este unul dintre utilitarele pe care le puteți apela din linia de comandă).

7. 1 Organizarea echipei în sistemul de operare UNIX

Pentru a crea o nouă comandă, trebuie doar să urmați regulile de programare C. Fiecare program C bine format își începe execuția cu funcția principală. Această funcție „semi-sistem” are o interfață standard, care stă la baza organizării comenzilor care pot fi apelate în mediul shell. Comenzile externe sunt executate de interpretul shell folosind o grămadă de apeluri de sistem fork și una dintre opțiunile exec. Parametrii apelului de sistem exec includ un set de șiruri de text. Acest set de șiruri de text este transmis ca intrare la funcția principală a programului rulat.

Mai precis, funcția principală ia doi parametri - argc (numărul de șiruri de text de transmis) și argv (un pointer către o matrice de pointeri către șiruri de text). Un program care pretinde a fi folosit ca o comandă shell trebuie să aibă o interfață externă bine definită (parametrii sunt introduși de obicei din terminal) și trebuie să controleze și să analizeze corect parametrii de intrare.

De asemenea, pentru a se conforma stilului shell, un astfel de program nu ar trebui să suprascrie fișierele corespunzătoare intrării standard, ieșirii standard și erorii standard. Comanda poate fi apoi redirecționată I/O în mod obișnuit și poate fi inclusă în conducte.

7.2 Redirecționare I/O și conducte

După cum puteți vedea din ultima propoziție a paragrafului anterior, nu trebuie să faceți nimic special pentru a activa redirecționarea I/O și pipelining atunci când programați instrucțiuni. Este suficient să lăsați pur și simplu cei trei descriptori de fișier inițial neatins și să lucrați corect cu aceste fișiere, și anume, să ieșiți într-un fișier cu un descriptor stdout, să introduceți date din fișierul stdin și să tipăriți mesajele de eroare în fișierul stderror.

7. 3 Comenzi încorporate, bibliotecă și utilizator

Comenzile încorporate fac parte din codul programului shell. Acestea rulează ca subrutine de interpret și nu pot fi înlocuite sau redefinite. Sintaxa și semantica comenzilor încorporate sunt definite în limbajul de comandă corespunzător.

Comenzile bibliotecii fac parte din software-ul de sistem. Acesta este un set de programe executabile (utilități) furnizate împreună cu sistemul de operare. Majoritatea acestor programe (cum ar fi vi, emacs, grep, find, make etc.) sunt extrem de utile în practică, dar discuția lor depășește scopul acestui curs (există cărți groase separate).

O comandă de utilizator este orice program executabil organizat în conformitate cu cerințele stabilite în. Astfel, orice utilizator UNIX OS poate extinde repertoriul de comenzi externe ale limbajului său de comandă la nesfârșit (de exemplu, vă puteți scrie propriul interpret de comandă).

7.4 Programare în limbajul de comandă

Oricare dintre variantele menționate ale limbajului shell poate fi, în principiu, folosită ca limbaj de programare. Printre utilizatorii UNIX, există mulți oameni care scriu programe destul de serioase pe shell. Pentru programare, este mai bine să folosiți limbaje de programare (C, C++, Pascal etc.) decât limbaje de comandă.


8. Instrumente GUI

Deși mulți programatori profesioniști UNIX astăzi preferă să folosească mijloacele tradiționale bazate pe linie de interacțiune cu sistemul, utilizarea pe scară largă a terminalelor grafice color relativ ieftine, de înaltă rezoluție, a condus la faptul că toate versiunile moderne ale sistemului de operare UNIX acceptă utilizatorul grafic. interfețe cu sistemul, iar utilizatorilor li se oferă instrumente pentru dezvoltarea interfețelor grafice cu programele pe care le dezvoltă. Din punctul de vedere al utilizatorului final, instrumentele de interfață grafică acceptate în diferite versiuni ale sistemului de operare UNIX și în alte sisteme (de exemplu, MS Windows sau Windows NT), sunt aproximativ aceleași ca stil.

În primul rând, în toate cazurile, este acceptat un mod de operare cu mai multe ferestre cu un ecran de terminal. În orice moment, utilizatorul poate crea o nouă fereastră și o poate asocia cu programul dorit care funcționează cu această fereastră ca și cu un terminal separat. Ferestrele pot fi mutate, redimensionate, închise temporar etc.

În al doilea rând, în toate variantele moderne de interfață grafică, controlul mouse-ului este acceptat. În cazul UNIX, se dovedește adesea că tastatura terminală normală este utilizată numai atunci când treceți la interfața tradițională de linie (deși în cele mai multe cazuri cel puțin o fereastră de terminal rulează unul dintre shell-urile familiei shell).

În al treilea rând, o astfel de răspândire a stilului de lucru „mouse” este posibilă prin utilizarea instrumentelor de interfață bazate pe pictograme (pictograme) și meniuri. În cele mai multe cazuri, un program care rulează într-o anumită fereastră solicită utilizatorului să selecteze orice funcție care urmează să fie îndeplinită de acesta, fie prin afișarea unui set de imagini simbolice cu posibile funcții (pictograme) în fereastră, fie prin oferirea unui meniu cu mai multe niveluri . În orice caz, pentru o selecție ulterioară, este suficient să controlați cursorul ferestrei corespunzătoare cu mouse-ul.

În cele din urmă, interfețele grafice moderne sunt „foarte ușor de utilizat”, oferind posibilitatea de a obține imediat ajutor interactiv pentru orice ocazie. (Poate că ar fi mai corect să spunem că un stil bun de programare GUI este unul care oferă de fapt astfel de indicii.)

După enumerarea tuturor acestor proprietăți generale ale instrumentelor GUI moderne, poate apărea o întrebare firească: dacă există o astfel de uniformitate în domeniul interfețelor grafice, ce este special la interfețele grafice în mediul UNIX? Răspunsul este destul de simplu. Da, utilizatorul final într-adevăr în orice sistem de astăzi se ocupă cu aproximativ același set de caracteristici de interfață, dar în sisteme diferite aceste caracteristici sunt realizate în moduri diferite. Ca de obicei, avantajul UNIX este disponibilitatea tehnologiilor standardizate care vă permit să creați aplicații mobile cu interfețe grafice.

8. Principii de protecție

Din moment ce sistemul de operare UNIX de la începuturile sale a fost conceput ca un sistem de operare multi-utilizator, problema autorizării accesului diferiților utilizatori la fișierele sistemului de fișiere a fost întotdeauna relevantă în el. Autorizarea de acces se referă la acțiunile sistemului care permit sau interzice unui anumit utilizator accesul la un anumit fișier, în funcție de drepturile de acces ale utilizatorului și restricțiile de acces setate pentru fișier. Schema de autorizare a accesului folosită în sistemul de operare UNIX este atât de simplă și convenabilă și în același timp atât de puternică încât a devenit standardul de facto al sistemelor de operare moderne (care nu pretind a fi sisteme cu protecție pe mai multe niveluri).

8.1 ID-uri de utilizator și grupuri de utilizatori

Fiecare proces care rulează în UNIX este asociat cu un ID de utilizator real, un ID de utilizator efectiv și un ID de utilizator salvat. Toți acești identificatori sunt setati folosind apelul de sistem setuid, care poate fi executat numai în modul superutilizator. În mod similar, fiecare proces are asociate trei ID-uri de grup de utilizatori - ID-ul de grup real, ID-ul efectiv de grup și ID-ul de grup salvat. Acești identificatori sunt setați de apelul de sistem privilegiat setgid.

Când un utilizator se conectează, programul de conectare verifică dacă utilizatorul este autentificat și cunoaște parola corectă (dacă este setată una), creează un nou proces și pornește shell-ul necesar acestui utilizator în el. Dar înainte de a face acest lucru, autentificarea setează ID-urile utilizatorului și grupului pentru procesul nou creat folosind informațiile stocate în fișierele /etc/passwd și /etc/group. Odată ce ID-urile utilizatorului și grupului sunt asociate unui proces, restricțiile de acces la fișiere se aplică procesului respectiv. Un proces poate accesa sau executa un fișier (dacă fișierul conține un program executabil) numai dacă restricțiile de acces ale fișierului îi permit să facă acest lucru. Identificatorii asociați unui proces sunt trecuți proceselor pe care le creează, supuși acelorași restricții. Cu toate acestea, în unele cazuri, un proces își poate schimba permisiunile folosind apelurile de sistem setuid și setgid, iar uneori sistemul poate schimba permisiunile unui proces automat.

Luați în considerare, de exemplu, următoarea situație. Fișierul /etc/passwd nu poate fi scris de nimeni, cu excepția superutilizatorului (superutilizatorul poate scrie în orice fișier). Acest fișier, printre altele, conține parole de utilizator și fiecărui utilizator îi este permis să-și schimbe parola. Există un program special /bin/passwd care schimbă parolele. Cu toate acestea, utilizatorul nu poate face acest lucru nici măcar cu acest program, deoarece fișierul /etc/passwd nu este permis să fie scris. Pe un sistem UNIX, această problemă este rezolvată după cum urmează. Un fișier executabil poate specifica că atunci când este rulat, identificatorii de utilizator și/sau de grup ar trebui setati. Dacă un utilizator solicită executarea unui astfel de program (folosind apelul de sistem exec), atunci ID-ul de utilizator al procesului corespunzător este setat la cel al proprietarului executabilului și/sau ID-ul grupului acelui proprietar. În special, atunci când programul /bin/passwd este rulat, procesul va avea un ID rădăcină, iar programul va putea scrie în fișierul /etc/passwd.

Atât pentru ID-ul utilizatorului, cât și pentru ID-ul grupului, ID-ul real este ID-ul adevărat, iar ID-ul efectiv este ID-ul execuției curente. Dacă id-ul utilizatorului curent se potrivește cu superutilizatorul, atunci acel id și id-ul grupului pot fi resetate la orice valoare cu apelurile de sistem setuid și setgid. Dacă ID-ul utilizatorului curent este diferit de ID-ul superutilizatorului, atunci executarea apelurilor de sistem setuid și setgid face ca ID-ul curent să fie înlocuit cu ID-ul adevărat (utilizator sau, respectiv, grup).

8.2 Protejarea fișierelor

După cum este obișnuit într-un sistem de operare multiutilizator, UNIX menține un mecanism uniform pentru controlul accesului la fișiere și directoare ale sistemului de fișiere. Orice proces poate accesa un anumit fișier dacă și numai dacă drepturile de acces descrise cu fișierul corespund capacităților acestui proces.

Protejarea fișierelor împotriva accesului neautorizat în UNIX se bazează pe trei fapte. În primul rând, orice proces care creează un fișier (sau director) este asociat cu un identificator unic de utilizator (UID - User Identifier) ​​în sistem, care poate fi tratat în continuare ca identificatorul proprietarului fișierului nou creat. În al doilea rând, fiecare proces care încearcă să acceseze un fișier are asociate o pereche de identificatori, utilizatorul curent și identificatorii de grup. În al treilea rând, fiecare fișier corespunde în mod unic descriptorului său - i-node.

Orice i-nod utilizat în sistemul de fișiere corespunde întotdeauna în mod unic unui singur fișier. Nodul I conține o mulțime de informații diferite (majoritatea sunt disponibile utilizatorilor prin apelurile de sistem stat și fstat), iar printre aceste informații există o parte care permite sistemului de fișiere să evalueze drepturile de acces ale unui proces dat. la un fișier dat în modul necesar.

Principiile generale de protecție sunt aceleași pentru toate variantele existente ale sistemului: Informațiile i-node includ UID-ul și GID-ul proprietarului actual al fișierului (imediat după crearea fișierului, identificatorii proprietarului actual sunt setate la identificatorul curent corespunzător al procesului de creație, dar poate fi schimbat ulterior prin apelurile de sistem chown și chgrp) . În plus, nodul i al fișierului conține o scară care indică ce poate face utilizatorul - proprietarul acestuia cu fișierul, ce pot face utilizatorii care aparțin aceluiași grup de utilizatori ca și proprietarul cu fișierul și ce pot face alții cu fișierul. utilizatorii de fișiere. Detaliile mici ale implementării în diferite versiuni ale sistemului diferă.

8.3 Viitoarele sisteme de operare care acceptă mediul UNIX OS

Un microkernel este cea mai mică parte de bază a unui sistem de operare, servind drept bază pentru extensii modulare și portabile. Se pare că majoritatea sistemelor de operare de ultimă generație vor avea microkernel-uri. Cu toate acestea, există multe opinii diferite despre modul în care serviciile sistemului de operare ar trebui să fie organizate în raport cu microkernel-ul: cum să proiectați driverele de dispozitiv pentru a fi cât mai eficiente, dar să păstrați funcțiile driverului cât mai independente de hardware; dacă operațiunile non-kernel ar trebui efectuate în spațiul kernel sau în spațiul utilizatorului; dacă merită să păstrezi programele subsistemelor existente (de exemplu, UNIX) sau este mai bine să renunți la tot și să începi de la zero.

Conceptul de microkernel a fost introdus în uz pe scară largă de către Next, al cărui sistem de operare folosea microkernel-ul Mach. Miezul mic, privilegiat al acestui sistem de operare, în jurul căruia rulau subsistemele în modul utilizator, se presupunea teoretic să ofere o flexibilitate și modularitate fără precedent a sistemului. Dar, în practică, acest avantaj a fost oarecum redus de prezența unui server monolitic care implementează sistemul de operare UNIX BSD 4.3, pe care Next a ales să încapsuleze microkernel-ul Mach. Cu toate acestea, baza pe Mach a făcut posibilă includerea instrumentelor de mesagerie și a unui număr de funcții de serviciu orientate pe obiecte în sistem, pe baza cărora a fost posibilă crearea unei interfețe elegante pentru utilizatorul final cu instrumente grafice pentru configurarea rețelei, administrarea sistemului. și dezvoltare software.

Următorul sistem de operare cu microkernel a fost Microsoft Windows NT, unde avantajul cheie al utilizării unui microkernel a fost nu numai modularitatea, ci și portabilitatea. (Rețineți că nu există un consens cu privire la faptul dacă NT ar trebui să fie de fapt considerat un sistem de operare microkernel.) NT a fost creat pentru a fi utilizat pe sisteme cu un singur procesor și cu mai multe procesoare bazate pe procesoare Intel, Mips și Alpha (și pe cei care vin după ele). . Deoarece programele scrise pentru DOS, Windows, OS/2 și sisteme compatibile cu Posix trebuiau să ruleze pe NT, Microsoft a folosit modularitatea inerentă a abordării microkernel pentru a crea o structură generală NT care nu imita niciun sistem de operare existent. Fiecare sistem de operare este emulat ca un modul sau subsistem separat.

Mai recent, arhitecturile sistemelor de operare microkernel au fost anunțate de Novell/USL, Open Software Foundation (OSF), IBM, Apple și alții. Unul dintre principalii competitori ai NT în sistemele de operare microkernel este Mach 3.0, un sistem creat la Universitatea Carnegie Mellon pe care atât IBM, cât și OSF s-au angajat să îl comercializeze. (Next folosește în prezent Mach 2.5 ca bază pentru NextStep, dar se uită îndeaproape și la Mach 3.0.) Un alt concurent este microkernel-ul Chorus 3.0 al Chorus Systems, ales de USL ca bază pentru noile implementări UNIX. Unele microkernel vor fi folosite în SpringOS de la Sun, succesorul orientat pe obiecte al Solaris (dacă, desigur, Sun completează SpringOS). Există o tendință evidentă de trecere de la sistemele monolitice la sistemele microkernel (acest proces nu este simplu: IBM a făcut un pas înapoi și a abandonat tranziția la tehnologia microkernel). Apropo, aceasta nu este deloc o știre pentru QNX Software Systems și Unisys, care lansează sisteme de operare microkernel de succes de câțiva ani. QNX OS este solicitat pe piața în timp real, iar CTOS de la Unisys este popular în domeniul bancar. Ambele sisteme folosesc cu succes modularitatea inerentă sistemelor de operare microkernel.


Concluzie

Principalele diferențe dintre Unix și alte sisteme de operare

Unix constă dintr-un nucleu cu drivere și utilitare incluse (programe externe nucleului). Dacă trebuie să modificați configurația (adăugați un dispozitiv, schimbați un port sau întrerupeți), atunci nucleul este reconstruit (reconectat) din modulele obiect sau (de exemplu, în FreeBSD) din surse. Acest lucru nu este în întregime adevărat. Unii parametri pot fi corectați fără reconstrucție. Există, de asemenea, module de nucleu care se pot încărca.

Spre deosebire de Unix, în Windows (dacă nu este specificat care dintre ele, atunci ne referim la 3.11, 95 și NT) și OS / 2, la încărcare, acestea leagă de fapt driverele din mers. În același timp, compactitatea nucleul asamblat și reutilizarea codului comun sunt cu un ordin de mărime mai mici decât În plus, dacă configurația sistemului rămâne neschimbată, nucleul Unix poate fi scris în ROM și executat _not_booted_ în RAM fără modificare (va fi necesar să se schimbe doar nucleul de pornire). parte a BIOS-ului). Memoria nu este schimbată pe disc.

Unix este cel mai multiplatform OS. WindowsNT încearcă să-l imite, dar până acum nu a avut succes - după ce a abandonat MIPS și POWER-PC, W "NT a rămas pe doar două platforme - tradiționalul i * 86 și DEC Alpha. Portabilitatea programelor dintr-o singură versiune de Unix la altul este limitat. Un program scris neglijent, care nu ține cont de diferențele dintre implementările Unix, face presupuneri nerezonabile precum „întregul trebuie să aibă o lungime de patru octeți” ar putea necesita o reelaborare majoră, dar este totuși multe ordine de mărime mai ușoară decât portarea din OS/2 la NT, de exemplu.

Aplicații Unix

Unix este folosit atât ca server, cât și ca stație de lucru. În nominalizarea serverului, MS WindowsNT, Novell Netware, IBM OS/2 Warp Connect, DEC VMS și sistemele de operare mainframe concurează cu acesta. Fiecare sistem are propriul său domeniu de aplicare în care este mai bun decât altele.

WindowsNT este pentru administratorii care preferă o interfață ușor de utilizat decât economiile de resurse și performanța ridicată.

Netware - pentru rețele în care sunt necesare servicii de fișiere și imprimantă de înaltă performanță, iar alte servicii nu sunt atât de importante. Principalul dezavantaj este că este dificil să rulezi aplicații pe un server Netware.

OS / 2 este bun acolo unde aveți nevoie de un server de aplicații „ușor”. Necesită mai puține resurse decât NT, este mai flexibil în management (deși poate fi mai dificil de configurat), iar multitasking-ul este foarte bun. Autorizarea și diferențierea drepturilor de acces nu sunt implementate la nivelul sistemului de operare, ceea ce este mai mult decât răsplătit prin implementarea la nivelul serverelor de aplicații. (Cu toate acestea, de multe ori alte sisteme de operare fac același lucru). Multe stații FIDOnet și BBS sunt bazate pe OS/2.

VMS este un server de aplicații puternic, deloc inferior celui de la Unix (și în multe privințe superior acestuia), ci doar pentru platformele VAX și Alpha ale DEC.

Mainframe - pentru a deservi un număr foarte mare de utilizatori (de ordinul a câteva mii). Dar munca acestor utilizatori este de obicei organizată nu sub forma unei interacțiuni client-server, ci sub forma uneia gazdă-terminal. Terminalul din această pereche nu este mai degrabă un client, ci un server (Internet World, N3 pentru 1996). Avantajele mainframe-urilor includ securitate mai mare și toleranță la erori, iar dezavantajele sunt prețul corespunzător acestor calități.

Unix este bun pentru administratorul calificat (sau care vrea să fie), deoarece necesită cunoașterea principiilor de funcționare a proceselor care au loc în acesta. Multitasking real și partajarea memoriei hard asigură o fiabilitate ridicată a sistemului, deși performanța Unix a serviciilor de fișiere și imprimare este inferioară Netware.

Lipsa flexibilității în acordarea drepturilor de acces utilizatorilor la fișiere în comparație cu WindowsNT face dificilă organizarea accesului de grup la date (mai precis, la fișiere), la nivel de sistem de fișiere, ceea ce, în opinia mea, este compensat de ușurința de implementare, ceea ce înseamnă mai puțin hardware. cerințe. Cu toate acestea, aplicații precum SQL Server rezolvă problema accesului de grup la date pe cont propriu, așa că lipsa capacității Unix de a refuza accesul la un _fișier_ unui anumit utilizator, în opinia mea, este în mod clar redundantă.

Aproape toate protocoalele pe care se bazează Internetul au fost dezvoltate sub Unix, în special stiva de protocoale TCP/IP a fost inventată la Universitatea Berkeley.

Securitatea Unix, atunci când este administrată corect (și când nu este?), nu este în niciun fel inferioară nici Novell, nici WindowsNT.

O caracteristică importantă a Unix care îl aduce mai aproape de mainframe este multi-terminalitatea, mulți utilizatori putând rula simultan programe pe aceeași mașină Unix. Dacă nu aveți nevoie să utilizați grafică, vă puteți descurca cu terminale text ieftine (specializate sau ieftine bazate pe PC) conectate prin linii lente. În acest sens, doar VMS concurează cu acesta. Terminalele grafice X pot fi utilizate și atunci când pe același ecran sunt prezente ferestre ale proceselor care rulează pe mașini diferite.

În nominalizarea stației de lucru, Unix concurează cu MS Windows*, IBM OS/2, Macintosh și Acorn RISC-OS.

Windows - pentru cei care prețuiesc compatibilitatea în detrimentul eficienței; pentru cei care sunt gata să cumpere o cantitate mare de memorie, spațiu pe disc și megaherți; pentru cei cărora le place să nu se adâncească în esență, faceți clic pe butoanele din fereastră. Adevărat, mai devreme sau mai târziu mai trebuie să studiezi principiile sistemului și protocoalelor, dar atunci va fi prea târziu - alegerea a fost făcută. Un avantaj important al Windows trebuie, de asemenea, recunoscut ca fiind capacitatea de a fura o grămadă de software.

OS/2 - pentru fanii OS/2. :-) Deși, conform unor rapoarte, OS/2 interacționează mai bine decât altele cu mainframe și rețele IBM.

Macintosh - pentru lucrări grafice, editoriale și muzicale, precum și pentru cei care iubesc o interfață clară, frumoasă și nu doresc (nu pot) înțelege detaliile sistemului.

RISC-OS, flashat în ROM, vă permite să nu pierdeți timpul instalând sistemul de operare și restabilindu-l după defecțiuni. În plus, aproape toate programele din cadrul acestuia utilizează resurse foarte economic, deci nu necesită schimbare și funcționează foarte rapid.

Unix funcționează atât pe computere, cât și pe stații de lucru puternice cu procesoare RISC; sistemele CAD și sistemele de informații geografice foarte puternice sunt scrise sub Unix. Scalabilitatea Unix, datorită naturii sale multiplatforme, este cu un ordin de mărime superioară oricărui alt sistem de operare, potrivit unor autori.


Bibliografie

1. Manual Kuznetsova S.D. „Sistem de operare UNIX” 2003;

2. Polyakov A.D. „UNIX Ediția a 5-a pe x86, sau nu uitați de istorie”;

3. Karpov D.Yu. „UNIX” 2005;

4. Fedorchuk A.V. Unix Mastery, 2006

5. Materiale site http://www.citforum.ru/operating_systems/1-16;

MINISTERUL EDUCAȚIEI ȘI ȘTIINȚEI AL FEDERATIEI RUSE AGENȚIA FEDERALĂ PENTRU ÎNVĂȚĂMÂNT INSTITUȚIA DE ÎNVĂȚĂMÂNT DE STAT DE ÎNVĂȚĂMUL PROFESIONAL SUPERIOR

Va prezint atentiei un articol despre camere web. Acest dispozitiv, desigur, nu mai este nou în lumea modernă și mulți oameni folosesc acest dispozitiv minunat, datorită căruia nu numai că poți să vezi persoana de care ești interesat în cealaltă parte a lumii, ci și să urmărești orice colț. a planetei noastre unde se află camera web. Dar mai întâi lucrurile. Asa de…

Cameră web , sau Cameră web , sau cameră web (Engleză) cameră web ) - o cameră video digitală de dimensiuni mici, capabilă să capteze imagini în timp real pentru transmiterea ulterioară prin Internet (în programe precum Skype, Instant Messenger sau în orice altă aplicație video care permite comunicarea video). Recent, puteți chiar să comunicați folosind o cameră web în unele rețele sociale, de exemplu, Odnoklassniki.

Istoria camerelor web

Totul a început într-unul dintre laboratoarele de calculatoare din Cambridge, la începutul anilor 90 ai secolului trecut, când Global Web (Internetul) tocmai începea marșul său victorios pe întreaga planetă.

Un grup de oameni de știință, 15-20 de persoane, a lucrat la un proiect în domeniul tehnologiilor de rețea. Condițiile de lucru au fost spartane - întreaga echipă avea doar o singură cafetieră, care nu putea satisface nevoile întregii echipe. Lucrarea principală a fost efectuată în laborator, personalul locuia în aceeași clădire, dar într-o altă parte a acesteia. Pentru a încuraja procesul de gândire cu o ceașcă de băutură revigorantă, participanții la proiectul științific au fost nevoiți să frecventeze coridorul situat la etajul de deasupra, unde se afla aparatul de cafea. Adesea astfel de călătorii au eșuat, întrucât unii colegi reușiseră deja să golească râvnitul container. Situația a necesitat o soluție nestandard și s-a găsit.

Unul dintre calculatoarele din laborator avea un dispozitiv de supraveghere video (frame grabber). La el era conectată o cameră, care era îndreptată către obiectul de observație. Același computer a jucat rolul unui server web printr-un software special scris. Cei care voiau să știe dacă există cafea au trebuit să ruleze software-ul client pe computerul lor care se conectează la server. Ca urmare, o imagine alb-negru a fost afișată într-o fereastră mică de pe computerul de la distanță, actualizându-se de trei ori pe minut. O notă despre acest complex interesant a fost publicată în revista Comm-Week pe 27 ianuarie 1992.

Nu a trecut mult timp de la apariția primelor prototipuri de camere IP, dar acestea s-au transformat deja într-o clasă separată de dispozitive complet formată, care face viața de zi cu zi mai ușoară, mai convenabilă și mai distractivă.

Senzorul de lumină este inima oricărei camere digitale. El este cel care vă permite să convertiți lumina în semnale electrice disponibile pentru procesarea electronică ulterioară.

Principiul de bază de funcționare al senzorilor CCD și CMOS este același: sub influența luminii, purtătorii de sarcină se nasc în materiale semiconductoare, care sunt ulterior transformate în tensiune.

Diferența dintre senzorii CCD și CMOS constă în primul rând în modul în care încărcarea este stocată și transferată, precum și în tehnologia de transformare a acesteia într-o tensiune analogică. Fără a intra în detalii despre designul diferitelor tipuri de senzori, observăm doar că senzorii CMOS sunt mult mai ieftini de fabricat, dar și mai „zgomotoși”.

Principiul de funcționare a unei camere web este similar cu principiul de funcționare a oricărei camere sau. Pe lângă o lentilă optică și un senzor fotosensibil CCD sau CMOS, este obligatoriu să existe un convertor analog-digital (ADC), al cărui scop principal este de a converti semnalele analogice ale senzorului fotosensibil, adică tensiunea. , într-un cod digital. În plus, este necesar un sistem de formare a culorii. Un alt element important al camerei este circuitul responsabil cu compresia datelor și pregătirea pentru transmiterea în formatul dorit. În camerele Web, datele video sunt transmise către un computer printr-o interfață USB, adică circuitul final al camerei trebuie să fie un controler de interfață USB.

Convertorul A/D este preocupat de eșantionarea unui semnal analogic continuu. Astfel de convertoare se caracterizează atât prin frecvența de eșantionare, care determină intervalele de timp la care este măsurat semnalul analogic, cât și prin adâncimea lor de biți. Lățimea de biți a unui ADC este numărul de biți utilizați pentru a reprezenta un semnal. De exemplu, dacă este utilizat un ADC de 8 biți, atunci există 8 biți pentru a reprezenta semnalul, care vă permit să setați 256 de valori diferite. Când utilizați un ADC pe 10 biți, este posibil să setați discret 1024 de niveluri de semnal diferite.

Având în vedere lățimea de bandă redusă a magistralei USB (doar 12 Mbps, din care camera web nu folosește mai mult de 8 Mbps), datele trebuie comprimate înainte de a fi transferate direct pe un computer. Dovada acestui lucru rezultă dintr-un calcul simplu. Cu o rezoluție a cadrului de 320×240 pixeli și o adâncime de culoare de 24 de biți, dimensiunea cadrului necomprimat va fi de 1,76 Mbit. Cu o lățime de bandă USB de 8 Mbps necomprimată, cadrele pot fi transmise la o rată maximă de 4,5 fps. Cu toate acestea, este necesară o rată de biți de 24 fps sau mai mult pentru a obține videoclipuri de înaltă calitate. Astfel, devine clar că fără compresia hardware a informațiilor transmise, funcționarea camerei ar fi imposibilă. Prin urmare, orice controler de cameră trebuie să ofere compresia necesară a datelor pentru a le transfera prin interfața USB. Compresia în sine este scopul principal al controlerului USB. Oferind compresia necesară în timp real, controlerul, de regulă, vă permite să transmiteți un flux video la o rată de 10-15 cadre/s la o rezoluție de 640×480 și la o rată de 30 de cadre/s la o viteză de 30 cadre/s. rezoluție de 320×240 și mai puțin.

Camere web pentru amatori. Acest tip de cameră web este concepută în principal pentru comunicații video, conferințe video, înregistrare video și fotografie. Aceste camere sunt relativ ieftine și ușor de utilizat. Cu caracteristicile detaliate ale camerelor web de amatori, vă vom cunoaște puțin mai târziu.

Camere web profesionale(Camere web de rețea sau camere IP). Acest tip de cameră web este utilizat în principal pentru supravegherea video a unităților protejate sau în alte scopuri similare. O cameră IP modernă este un dispozitiv digital care captează video, digitizează, comprimă și transmite imagini video printr-o rețea de calculatoare. Spre deosebire de o cameră web obișnuită, o cameră de rețea funcționează ca un server web și are propria sa adresă IP. Astfel, este posibilă conectarea directă a camerei la Internet, fără un computer, ceea ce vă permite să primiți semnale video și audio și să controlați camera prin internet printr-un browser.

Acum am aflat, dragi cititori, ce este o cameră web, principiul ei de funcționare, istorie, tipuri. Să trecem la problema alegerii unei camere web. Asa de, La ce ar trebui să fiu atent când cumpăr o cameră web?

Tip senzor

În primul rând, trebuie să acordați atenție acestui parametru dacă alegeți pentru dvs. o cameră web fără buget, de exemplu, în scopuri comerciale. Acest lucru se datorează faptului că, practic, toate camerele web de amatori au unul dintre cele două tipuri principale de matrice - CMOS. Această matrice nu este costisitoare de fabricat, are un consum redus de energie și principalele caracteristici tehnice necesare pentru utilizarea confortabilă a camerei web.

Un alt tip de matrice este CCD. Are caracteristici îmbunătățite în ceea ce privește calitatea imaginii video și, în consecință, camerele web pe o matrice CCD au un preț mai mare.

În ceea ce mă privește, puteți lua o cameră CMOS și vă puteți bucura de viață fără a plăti în plus o sută doi dolari în plus. Deși, dacă nu ai unde să le pui, atunci mergi înainte!

Cadre pe secundă (Fps)

Acest parametru afectează de fapt în mod direct netezimea imaginii transmise de camera web. Cu cât camera web transmite mai multe cadre pe secundă, cu atât vei fi mai puțin supărat în comunicarea video cu adversarul tău.

Camerele web se găsesc cu un indicator de 8, 15, 30 de cadre pe secundă sau mai mult. Rata optimă este de 30 de cadre pe secundă.

Important! Cu cât un semnal video are mai multe cadre pe secundă, cu atât are dimensiunea mai mare și, în consecință, pentru comunicarea video normală, este nevoie de un internet mai rapid.

Rezoluția imaginii

Pentru video, rezoluția variază de la 0,1 la 2 megapixeli. Trebuie remarcat faptul că optimul, și în același timp cel mai popular, este formatul VGA (640 × 480 pixeli, 0,3 MP). Aceste camere sunt recomandate pentru achiziționare pentru comunicarea obișnuită, acasă, pe Internet.

O rezoluție de 320×240 (0,1 MP) va fi suficientă, de exemplu, pentru videoconferințele pe Internet, iar această cifră ar trebui deja mărită atunci când posibilitatea de a revizui interlocutorul la o calitate înaltă este de o importanță capitală.

Important! Cu cât rezoluția semnalului video este mai mare, cu atât are dimensiunea mai mare și, în consecință, pentru comunicarea video normală, este necesar un internet mai rapid.

Vreau să remarc că în acest moment, internetul are o viteză de conectare din ce în ce mai mare și, în consecință, au apărut camere web cu rezoluție Full HD 1080p (1920 × 1080), care vă permite să vizualizați semnalul video la înaltă definiție și la o calitate excelentă la Rezoluție înaltă.

Sincer să fiu, datorită progresului tehnologic, ei pot sugera că într-un an sau doi vor exista camere web cu capacitatea de a înregistra video în 3D. Deși, poate că există deja acum și tocmai am pierdut din vedere această noutate pe undeva.

Optica

Există camere web cu lentile din plastic și sticlă.

În camerele web de amatori bugetare, sunt instalate în principal optica din plastic, care transmite în consecință imaginea nu întotdeauna în culori naturale.

Optica din sticla are o reproducere a culorii mai naturala. Nu sunt sigur că toți vânzătorii din magazine au cunoștințe despre acest parametru, dar dacă vă place maximul în toate, fiți atenți la optica camerei web.

La vânzare am văzut o cameră web cu optică Carl Zeiss, care este folosită în camere și camere video de către Sony.

Sensibilitatea matricei

Un parametru important care determină gradul minim de iluminare a obiectului, la care camera web este capabilă să facă poze de calitate acceptabilă. Sensibilitatea matricei camerei web este măsurată în lux (lux).

Important!În condiții de lumină slabă, chiar și o cameră web scumpă cu o matrice CCD produce o imagine cu zgomot.

Microfon

Am decis să menționez, pentru că Recent am căutat o cameră web ieftină și nici nu mi-am putut imagina că mai există fără microfoane încorporate. Sincer să fiu, nu este foarte convenabil dacă poți comunica fără căști cu microfon, folosește un microfon. Și așa, am conectat un dispozitiv și îți spui fără să te legi cu cabluri suplimentare 🙂 .

Încă o nuanță. Microfonul poate fi conectat fie prin același conector USB prin care este conectată camera web în sine, fie printr-o mufă de microfon paralelă. Este convenabil atunci când întregul dispozitiv funcționează printr-un singur cablu, fără mufe suplimentare.

Apropo, înregistrarea sunetului poate fi înregistrată atât în ​​modul mono, cât și în stereo. Alegerea este a ta.

Fixare

Vă rog să fiți atenți la acest lucru mic. Cert este că există camere web care, după cumpărare, trebuie lipite de monitor sau altundeva cu bandă adezivă, înlocuiesc tot felul de bucăți de hârtie, benzi de cauciuc etc. Dacă este posibil, cereți vânzătorului să demonstreze montarea camerei web. Încercați să-l atașați pe loc la ceva.

Concentrarea

Focalizarea determină cât de clară va fi imaginea transmisă.

Camerele web au atât focalizare manuală, cât și focalizare automată. Este convenabil atunci când există atât unul cât și celălalt într-un singur dispozitiv. De ce? Veți afla despre acest lucru când începeți să utilizați camera web.

Oportunitate foto

În majoritatea tipurilor de camere web, există o funcție - o fotografie. Există un buton pe corpul camerei web, prin apăsarea căruia obțineți o fotografie. Voi spune imediat că calitatea este mai proastă decât pe cameră, așa că nu conta prea mult. Dar pentru poza de pe poza de profil, asta e. Deși unii spun că o fotografie cu un număr mare de megapixeli este frumoasă.

Dacă sunteți interesat să știți ce afectează calitatea unei fotografii dintr-o cameră, citiți .

Tipul conexiunii

Practic, toate camerele web sunt conectate folosind un conector USB.

Acest conector are 3 standarde: USB 1.1, USB 2.0, USB 3.0.

Pentru o cameră web obișnuită, USB 2.0 este cea mai bună opțiune. Dacă achiziționați un dispozitiv cu capacitatea de a transmite video la rezoluție Full HD 1080p, atunci este de dorit ca camera să aibă un conector USB 3.0. Deși producătorii încearcă să facă totul în mod optim, dar așa cum se spune: „Este mai bine să exagerezi decât să nu o faci”.

De asemenea, așa cum am menționat mai sus, vă rugăm să rețineți că o cameră cu microfon încorporat nu are o mufă suplimentară pentru a o conecta.

Există, de asemenea, camere web, majoritatea profesionale, cu capacitatea de a transmite video pe un canal Wi-Fi fără fir. Foarte confortabil.

Caracteristici suplimentare ale camerei web

O cameră web poate avea o serie de funcții suplimentare: funcții de editare a informațiilor, controlul luminozității și contrastului, corecția gamei de culori, rata cadrelor, protecția prin parolă.

O cameră web profesională poate fi echipată cu un detector de mișcare și are un mecanism de pivotare care îi permite să fie folosită pentru supraveghere video.

Marca

Obișnuiam să fiu atent producătorului aproape întotdeauna, mai ales când vine vorba de electronice.

În primul rând, este calitatea și garanția dispozitivului în sine. La urma urmei, în acest caz, nu doriți să aflați în căutarea unui centru de servicii că acesta, ca atare, nu există în țara în care locuiți, deoarece. este doar în China, care produce cea mai mare parte a electronicelor.

În al doilea rând, este siguranța ta și a celor dragi. Acum sunt noutăți când până și o păpușă explodează în mâinile unui copil, ca să nu mai vorbim de o tehnică mai complexă.

Cine știe cine și în ce loc s-a gândit când a creat un fals al unui dispozitiv.

Cele mai populare mărci de camere web sunt: ​​Logitech, Creative, A4 Tech, Genius, Sven, Microsoft, Trust, Canyon.

Mi-aș cumpăra Logitech. Iertați-mă pe concurenții acestui brand :-).

Important! Vă rog, dragi cititori, să nu cumpărați camere web în locuri suspecte unde electronice sunt vândute, de exemplu, în piață dintr-o mașină. Mulțumită!

Cea mai ieftină cameră web cu un set minim de funcții poate fi achiziționată cu 8 USD.

O cameră web standard cu microfon încorporat și o rezoluție de 640x480 poate fi achiziționată pentru aproximativ 20 USD.

O cameră web cu toate clopotele și fluierele poate fi achiziționată pentru aproximativ 120 USD.

Video: Cum să alegi o cameră web

Nou pe site

>

Cel mai popular