72
D EFINICIJA EFINICIJA O PERATIVNOG PERATIVNOG S ISTEMA ISTEMA Definicija : Operativni sistem je upravljač računarskim resursima. Osnovni resursi računara su: procesor memorija ulazno – izlazni uređaji podaci računarske mreže Definicija : Operativni sistem je sistemski software koji omogućava da se hardware lakše koristi (tj. OS je software koji čini hardware upotrebljivim). Operativni sistem prilagođava hardver čoveku. Virtuelnu mašinu čini hardware sa OS. Nemoguće je razgraničiti hardware i software, ova podela nije dobra, jer bilo koji deo hardvera računara sadrži u sebi software (određene memorijske čipove u kojima su napisani programi koji upravljaju tim delom hardware-a). Granica između software-a i hardware-a ne postoji. Software se dalje deli na sistemski i aplikativni. Sistemski software je širi pojam od OS i on omogućava korisniku korišćenje računara. Aplikativni software rešava probleme koje korisnik zadaje. Prirodna podela bi bila da su hardware i sistemski software jedna celina koju zovemo virtuelna mašina. To je mašina kako je korisnik vidi, mašina proširenih mogućnosti. Pod sistemskim software-om spada: Operativni Sistem Kompajleri a mogu spadati i programi od opšte namene namenjeni računaru Iznad sistemskog software-a ide aplikativni software. U aplikativni software spada sve ostalo, dok baze spadaju i u jedno i u drugo. Postoje specijalni OS namenjeni bazama. Još bliže aplikativnom software-u su računari namenjeni jednoj svrsi (čvrsto sjedinjeni software i hardware, zovu se i autonomni sistemi. Npr, računari na avionima). Takvi računari nemaju sve delove kao univerzalni računari, nemaju klasičan I/O. Oni se obično progarmiraju u ADA programskom jeziku. Nema jasne granice između hardware-a i software-a, jer svi delovi hardware-a sadrže software. Imaju delove memorije koji čuvaju sadržaj i kad nema električnog napajanja. Programi operativnog sistema su najkomplikovaniji programi.

Programski Sistemi - SP07-V0.3

Embed Size (px)

DESCRIPTION

Programiranje

Citation preview

Page 1: Programski Sistemi - SP07-V0.3

DDEFINICIJAEFINICIJA OOPERATIVNOGPERATIVNOG SSISTEMAISTEMA

Definicija : Operativni sistem je upravljač računarskim resursima. Osnovni resursi računara su:

procesor memorija ulazno – izlazni uređaji podaci računarske mreže

Definicija : Operativni sistem je sistemski software koji omogućava da se hardware lakše koristi (tj. OS je software koji čini hardware upotrebljivim). Operativni sistem prilagođava hardver čoveku.

Virtuelnu mašinu čini hardware sa OS.

Nemoguće je razgraničiti hardware i software, ova podela nije dobra, jer bilo koji deo hardvera računara sadrži u sebi software (određene memorijske čipove u kojima su napisani programi koji upravljaju tim delom hardware-a). Granica između software-a i hardware-a ne postoji. Software se dalje deli na sistemski i aplikativni. Sistemski software je širi pojam od OS i on omogućava korisniku korišćenje računara. Aplikativni software rešava probleme koje korisnik zadaje. Prirodna podela bi bila da su hardware i sistemski software jedna celina koju zovemo virtuelna mašina. To je mašina kako je korisnik vidi, mašina proširenih mogućnosti.Pod sistemskim software-om spada:

Operativni Sistem Kompajleri a mogu spadati i programi od opšte namene namenjeni računaru

Iznad sistemskog software-a ide aplikativni software. U aplikativni software spada sve ostalo, dok baze spadaju i u jedno i u drugo. Postoje specijalni OS namenjeni bazama. Još bliže aplikativnom software-u su računari namenjeni jednoj svrsi (čvrsto sjedinjeni software i hardware, zovu se i autonomni sistemi. Npr, računari na avionima). Takvi računari nemaju sve delove kao univerzalni računari, nemaju klasičan I/O. Oni se obično progarmiraju u ADA programskom jeziku. Nema jasne granice između hardware-a i software-a, jer svi delovi hardware-a sadrže software. Imaju delove memorije koji čuvaju sadržaj i kad nema električnog napajanja. Programi operativnog sistema su najkomplikovaniji programi.Svaka komponenta računara sadrži delove sistemskog software-a. Pokretanje golog hardware-a je mnogo teže od standardnog programiranja.Primer: Tastaturu čine matrice žica na čijim presecima su prekidači. Pritisak na taster se registruje tako što poseban programibilni uređaj daje napon na linije matrice, a čitač čita napon. Čitanje se vrši u ciklusu. Napon se redom stavlja na horizontalne linije i proverava se da li ima napona na vertikali. Kada se pojavi napon otkriva se presek, koji je prekidač pritisnut. Prekidači u tastaturi imaju period oscilovanja, princip rada se razlikuje od klasičnog prekidača. Propuštanje i čitanje napona kroz matricu se vrši toliko brzo da se jedan pritisak na taster registruje više puta. Ukoliko se pročita napon oscilovanje se mora proveravati i odstranjivati. Raspored slova na tastaturi mora poštovati standarde. Jedan takav standard je qwerty (nesrećan raspored). Kada se otkrije pritisnuto slovo, elektronski impulsi se šalju računaru serijskom vezom (standard RS-320). Ovaj transfer je asinhron. U memoriji se kreira bafer određene veličine za prihvatanje karaktera. Mora se voditi računa o prekoračenju bafera. U stanju čekanja računar šalje slova na ekran. Na ekranu, veličine 80x25, slovo se formira u

Page 2: Programski Sistemi - SP07-V0.3

matrici piksela. Video karta u svojoj memoriji formira slovo u matrici i kontroliše elektronski top monitora koji formira slovo na ekranu. Kako je memorija linearna, matrica se predstavlja kao niz. Programi koji obrađuju tastaturu se rade dugo iako su veoma kratki i izgledaju veoma jednostavno.

IISTORIJASTORIJA OOPERATIVNIHPERATIVNIH SSISTEMAISTEMA

Prvi pravi računar pojavio se 1945. godine i to je bio ENIAC. U početku su računari radili bez operativnih sistema. Prvo je razvijen hardware, dosta kasnije operativni sistemi, a tek mnogo kasnije viši programski jezici.

U toku svoje istorije oblast računara se najviše razvijala u odnosu na ostale oblasti, ali se u osnovnim stvarima računari veoma malo razlikuju po generacijama. Osnovne ideje su ostale iste od postanka računara. RAČUNAR je digitalna, binarna, elektronska, programibilna mašina.

CPU + memorija + I/O je minimum da bi se mašina nazivala računarom. Binarni prekidači i lampice su bili najprimitivniji I/O uređaji. Stari I/O uređaji su se sastojali od 8 prekidača i lampica svaki za po jedan bit i oni su bili za podatke (DATA). 16 (ADDRESS), i 4-5 kontrolnih (load, read, start, step, stop...). Kasnije se polazi od ideje da je korisnik neiskusan i ne stručan i kreiraju se I/O uređaji i sistemski software koji sve više olakšavaju rad korisniku, a samim tim otežavaju rad računaru. To rezultira da računar radi više stvari na svoju ruku što može otežati rad iskusnim korisnicima.

Svako novo dostignuće u I/O tehnologiji je bilo toliko revolucionarno u odnosu na prethodno da se zadržavalo u upotrebi određeno vreme, a tek kasnije bi počele da se nalaze mane. Vremenom se uvode u uportrebu sve komplikovaniji I/O uređaji kao dekadni displej, tastature, štampači... To povlači pravljenje softverskih delova u komponentama koji prebacuju iz binarnog u čitljivi oblik i obrnuto. Time se razvija osnova OS. Jedno vreme su se kao I/O koristile bušene kartice koje su starije od računara (Holeritova kartica). Imaju 80 kolona i 12 vrsta. U kolone se upisuje po jedan karakter. Svaka cifra ima svoju vrstu, a za upis slova koristile su se još i vrste za specijalne znake koje su se kombinovale sa ostalim poljima. Ovo dovodi do ubrzanja obrade podataka u odnosu na one koji su se prikupljali ručno. Čitanje kartica se vršilo preko metalnog doboša i iglica koje prenose naelektrisanje. Gde se nalazi rupa iglice dodiruju doboš i naelektrisanje se prenosi, dok karton deluje kao izolator. Ovako je vršena obrada pre pojave računara.

Do prvih unapređenja I/O uređaja dolazi iz razloga da bi se računar efikasnije koristio. Ulaz putem prekidača je bio veoma spor pa je CPU većim delom bio idle. Automatizovano punjenje i pražnjenje memorije predstavlja začetak OS.

Svaki OS ima dva dela, jedan za interaktivan rad, a drugi koji brine o programima koji se izvršavaju u pozadini. Zato dolazi do automatizacije I/O uređaja. Prvi put se javlja ideja virtuelne mašine. Opsluživanje periferija se razvija u OS. Rade se programi od grupa mašinskih instrukcija za izračunavanje koje se mogu ponovo koristiti, što uslovljava začetak kompajlera. Složenije pogramske strukture su uslovile pojavu viših programskih jezika. Prvi programski jezik je bio FORTRAN. Namenjen za matematička izračunavanja. Male sposobnosti za I/O podataka, a velike za računanje složenih formula. Takođe je postojao i COBOL. Velike sposobnosti za I/O podataka, a male čak i za najprostija izračunavanja.

BATCHBATCH SISTEMISISTEMI Ranih 50-ih godina uvodi se BATCH obrada (tzv. BATCH grupa) – automatizacija

kompletnog rada računara tj. nadovezivanje jednog posla na drugi bez direktnog učešća čoveka. Programi se obrađuju grupa po grupa. Čak i sa ovakvim ulazno-izlaznim uređajima najviše se vremena gubi u pripremi za rad (stavljanje podataka, programa i dr. na karticu) i oslobađanju računara od nepotrebnih podataka po završetku rada. BATCH znači ovo – za svaki posao priprema se sve što je potrebno (podaci, programi, nacin rada) u jedan paket. Takvi paketi se slože i računar sam uzima ono što mu je potrebno.

Page 3: Programski Sistemi - SP07-V0.3

MMULTIULTIPPROGRAMMINGROGRAMMING MP je sledeća revolucionarna faza, javlja se ranih 60-ih. Da nema multiprogramiranja

operativni sistemi bi sa teorijskog stanovišta bili vrlo jednostavni. Pre uvođenja multiprogamiranja procesori nisu bili dovoljno iskorišćeni. Globalni problem je bio da se CPU i periferije ne mogu uskladiti. Vremenska jedinica sa kojom CPU barata je (ns). Dok je jedinica vremena za štampač (s). Nikada neće moći da se usklade elektronski i mehanički uređaji. Diskovi su mehanički uređaji koji su se najbrže razvijali, ali je njihova jedinica vremena (ms). Kako tipičan program izgleda I/O obrada I/O obrada... Dolazi do velike neiskorišćenosti CPU, tako da je iskorišćenost CPU vremena na ovakvim sistemima bila manja od 10% jer procesor dosta vremena provodi čekajući dok se obavljaju I/O operacije. Memorije su bile malog kapaciteta, a veoma skupe tako da su se svi podaci obrade morali čuvati na sekundarnim nosiocima memorije. Dolazi do razvoja matematičke discipline o raspodeli memorije na ovakvim sistemima. Ideja MP je bila da se u memoriju istovremeno napuni više programa koji su spremni za izvršenje, i onda ih naizmenično izvršavamo. Dok jedan program radi i troši CPU vreme drugi rade I/O podataka ili čekaju. Kada taj program izda I/O zahtev, kontrola nad CPU se predaje drugom programu i tako dalje. Ovaj proces je toliko komplikovan da je razvijena nauka o regulisanju ovih procesa. Kako su periferije bile znatno jeftinije od CPU pravi se iskorišćeniji sistem. Spore komponentne se paralelizuju. Iskorišćenost CPU na ovakvom sisemu bližila se 100%.

Stvara se nauka o OS. 95% OS predstavlja rešavanje MP problema, raspodela CPU vremena, memorije i ostalih resursa. Problemi pri izgradnji OS su što su kriterijumi nedefinisani, a ciljevi protivrečni. Cilj je maksimalna iskorišćenost sistema, a krierijum maksimalna brzina. Dve nespojive stvari. Zato se mora voditi politika prilikom izgradnje OS o tome šta je prioritetnije. Teorija OS je nepregledno polje i izučava se kroz više matematičkih disciplina. Broj problema koji treba da se reše prilikom izgradnje OS nije definisan.

Danas je razlog za MP što bolje iskorišćenje čovekovog vremena, a ne bolja iskorišćenost procesorskog vremena. CPU ciklusi više nisu značajni zbog njihove niske cene. MP usmeren ka jednom korisniku. MP nema uvek smisla koristiti, ali je veoma koristan za neke određene stvari.

TTIMEIMESSHARINGHARING TS je sledeća revolucionarna ideja. Predstavlja deljenje računara među više korisnika.

Širenjem računara dolazi do nesklada kako ih koristiti. Programiranje postaje profesija koja uvodi grešku kao sastavni deo posla. Organizacija rada na takvim sistemima bila je sledeća. Program se piše na papiru, zatim se nosi u odeljenje za bušenje kartica. Tu se programi predaju operateru koji nema nikakvog iskustva sa programiranjem, već samo prebacuje program na bušene kartice. Zbog nestručnosti operatera javlja se velika mogućnost greške. Kartice se dalje nose operateru koji radi na mašini za unošenje podataka u računar. Rezultat se dobija na hrpi papira nakon određenog vremena. Kompajleri su bili manje pametni tako da su izveštaji o grešci bili veoma loši što je dodatno otežavalo ispravku grešaka. Ukoliko bi se javila greška ceo postupak bi morao da se ponovi što je ovakav proces rešavanja problema produžavalo u beskraj.

Kako je više korisnika zahtevalo rad na računaru, računalo se CPU vreme potrebno za obavljanje njihovih procesa i proveravalo da li je CPU u stanju da obavi sve poslove. CPU su bili dovoljno jaki da sve obrade bez problema, ali se javio problem deljenja CPU između više korisnika. Kako nije bilo moguće podeliti CPU fizički, došlo se na ideju da se deli vremenski. Svaki korisnik bi dobio određeno CPU vreme, za koje bi CPU radio što više operacija za datog korinika pa dodeljivao vreme sledećem i tako u krug. Zbog malih vremenski intervala korisnik ima iluziju da CPU stalno radi za njega. Usporenje je jedino moguće primetiti ako se CPU zada da računa nešto što zahteva više minuta CPU vremena. OS za ove sisteme kontrolišu programe u pozadini i TS. Prioritet su interaktivni korisnici, dok se poslovi u pozadini obavljaju dok CPU ne radi ništa za interaktivne korisnike.

Neophodan uslov za time sharing je multiprogramiranje koje se koristi za bolje opsluživanje korisnika, a ne zbog bolje iskorišćenosti procesora. Fizička memorija u to vreme

Page 4: Programski Sistemi - SP07-V0.3

je skupa i mala ali što se tiče pojedinačnog korisnika potrebna memorija je bila prevelika, pa dolazi do ideje da se pojedinačni korisnici izoluju od fizičkog sistema i da im se da relativno mali model memorije o kome se stara OS. Rešenje je virtuelna memorija.

Kod interaktivnih procesa dobijamo novi parametar – obično je to VREME ODZIVA. Da bi se postigao brži odziv kod time sharing-a ne sme doći do preopterećenja. Posebna grupa OS su Real Time OS. To su OS za specijalne namene. Oni kontrolišu procese koji moraju da se izvršavaju u realnom vremenu. Postoje Soft i Hard Real Time OS. Hard RT OS garantuju tačan odziv za svaki proces, dok Soft kažu da će neki određeni proces čekati određeno vreme. Windows NT je Soft RT OS.

MMULTIXULTIX Ovo je sledeća revolucionarna tačka, krajem 60-ih. Tada su FORTRAN i COBOL bili

glavni PJ. Došlo se na ideju da se oni objedine u jedan PJ, sa obrazloženjem kako bi se tako olakšao posao programera. Prvi takav jezik je bio PL-1. Ideja je bila da se programira tako da se prvo definiše šta se želi, a onda implementira. Što je bilo duže i komplikovanije. Kompajler za ovakav PJ je bio prevelik. Bila je potrebna jaka mašina sa dosta memorije i ostalih resursa, što je dovodilo do toga da ovaj kompajler nije mogao da radi na većini računara. Kompajliranje se produžavalo, a olakšica nije bilo. Ovaj jezik je bio unija FORTRAN-a i COBOL-a, plus još neke komponente. Ovo je bila veoma opasna stvar jer se ista stvar mogla raditi na više načina.

Na razvoju MULTIX sistema bili su zaposleni veliki timovi stručnjaka. Usled velikog broja ljudi koji su radili došlo je do birokratskih problema u hierarhiji što je dovelo do velikog otezanja prilikom izrade sistema. Pokazuje se da nije dobro skupiti previše stručnjaka iste vrste – pre će se posvađati nego što će nešto zajedno uraditi. Ideja za izgradnju ovog sistema se sastojala u tome da se sva dostignuća do tada ugrade u ovaj OS. Ovo je bio novi korak u izgradnji OS jer je za razliku od ostalih bio ogroman projekat. Usled toga sistemi su toliko komplikovani da se ne mogu sasvim kontrolisati, tako da ako se sistem zaglavi niko ne zna šta je problem već se preporučuje ponovno instaliranje. Pre ovog sistema OS su bili relativno kratkog koda tako da je gotovo svako mogao da razume kako radi dotični OS i po potrebi izvrši korekcije. Što se samog MULTIX-a tiče ciljevi u izgradnji ovog sistema su bili zadovoljeni. Sva nova dostignuća su bila ugrađena u sistem bez problema. Ipak, rezultati su bili nepredviđeni. Pokazalo se da sistem ostavlja veoma malo vremena korisnicima, u ekstremnim slučajevima gotovo 95% CPU vremena OS je trošio na optimizaciju. Deo OS koji je bio zadužen za TS je toliko optimizovao da je taj proces gušio sistem. Kasnije se pokušalo sa ispravkom, ali se to svelo u praksi na krpljenje sistema. Ovaj projekat je propao.

UUNIXNIX UNIX je direktna posledica MULTIX sistema. Ovaj OS je bio revolucionaran jer je bio

neverovatno mali u odnosu na MULTIX. Sa razvojem UNIX-a došlo je i do razvoja PJ C. C je bio neverovatno niskog nivoa u odnosu na ostale tadašnje PJ. U Bell-ovim laboratorijama naučnici koji su se vratili sa propalog MULTIX projekta razvili su UNIX za svoje potrebe na, tada, slabim mikro računarima. Kod celog sistema je bio veoma mali i kompletno je bio napisan u asembleru kao i svi OS do tada, a i većina aplikativnog softvera iz tog vremena. Sledeća verzija UNIX-a je prebačena na veći mikro računar i takođe je kompletno urađena u asembleru. Posle ovoga došlo je do razvoja jezika C, koji nije bio novi jezik već nadgradnja nekih već postojećih. Tako da je ova verzija UNIX-a prepisana na C, a sve ostale su pisane u C-u. To je ujedno bio prvi OS koji je urađen na višem PJ. (Granica između sistemskog i aplikativnog softvera je neuhvatljiva. C se smatra delom UNIX-a iako je to poseban PJ). UNIX je bio OS koji je napravljen iz hobija. Kada je UNIX postao popularan i hardver toliko raširen da su i pojedinci imali pristup, logično je bilo da UNIX postane standardni OS na tržištu. To se nije desilo, a problem za to treba tražiti u tome što ovaj OS nije user friendly. Iako je konforniji za rad ljudima koji se profesionalno bave računarima, problem su bili obični korisnici. Za razliku od ostalih OS komande na prvi pogled ne izgledaju logične, sve se tretira kao datoteka (pored fajl sistema, tastatura, ekran...). Ovakva arhitektura sistema je razumljiva profesionalcima, ali obični korisnici su to teškom mukom prihvatali. Slično je bilo i sa C-om. U to vreme se pojavio PASCAL. C kod je bio teže čitljiv, nižeg nivoa i moglo se uraditi svašta što je ostavljalo dosta

Page 5: Programski Sistemi - SP07-V0.3

slobode programeru, ali je za posledicu imalo to da je kod bio slabo čitljiv. Razlog za to leži u tome da su UNIX i C programeri stvorili za sebe. Ispostavilo se, kasnije, da je OS veoma dobar pa je postao i popularan. Kako AT&T nije imala pravo da razvija svoj komercijalni OS (zbog striktnih zakonskih regulativa. Što je npr. dovelo do toga da tranzistori stoje u Bell-ovim laboratorijama duži vremenski period pre njihove šire upotrebe) on je besplatno distribuiran univerzitetima. Što se kasnije ispostavilo kao dobar poslovni potez. (Cilj firmi je da zarade što više para, a ne da naprave što bolji softver. Često se namerno u prodaju pušta softver sa greškom kako bi se posle uzelo još para na ispravljenu verziju). Kako je UNIX pušten na univerzitete studenti su radili na usavršavanju sistema, jer je UNIX jedini OS uz koji ide i source. UNIX je preživeo najviše zahvaljujući INTERNET-u. Za UNIX je napisan TCP/IP protokol koji se i danas koristi za pristup INTERNET-u. Razvijen je na Barkly univerzitetu. AT&T je nastavio nezavisno razvoj svog UNIX-a. Poslednji ozbiljan sistem koji su oni izbacili je bio SVR4. SVR4 polako izumire da bi licenca bila prodata Novell-u. To je takođe bila konzervativna firma sa zastarelim idejama. Ispostavilo se da je ova kupovina obavljenja u cilju gušenja UNIX-a. Dalje je UNIX prodat firmi SCO. Na Barkly univerzitetu se radilo na razvoju njihovog UNIX-a koji je ima oznaku BSD. Sa razvojem BSD-a završeno je pre par godina kada je prebačen u Public Domain. Ovo su nekomercijalne verzije UNIX-a. Bilo je takođe i komercijalnih verzija. Treća značajna verzija UNIX sistema je razvijena od strane firme SUN. Bila je namenjena radnim stanicama koje je ova firma prozivodila. Ovaj sistem je bio značajan dok PC računari nisu postali tako jaki da više nema smisla govoriti od radnoj stanici kao posebnom računaru. Ove tri verzije su bile dominantne. Ostale verzije su bile komercijalne kao što je SCO XENIX klon UNIX sistema koji je bio najznačajnija komercijalna verzija.

70-ih prestaje dominacija velikih računara. Dominiraju VAX mašine koje su bile znatno konfornije za rad. 80-ih se pojavljuju PC koji zamenjuju VAX jer pružaju još veći konfor u radu. Dolazi do pojave DOS-a koji čak ne zadovoljava sve definicije OS. UNIX je vladao u polju OS do početka 90ih.

DDOSOS Sa pojavom PC računara standarni OS je bio CP-M koji je razvila firma Digital

Research. Ovo je bio jedini OS za mikro računare. Kada je IBM rešio da napravi svoj PC računar bio im je potreban OS. Našli su Bill Gates-a koji je otkupio licencu za jedan OS od jedne firme i napravio prvi DOS. Posle ovoga su INTEL i MS smislili nov način vođenja politike koji se zvao podržavanje kompatibilnosti. DOS počinje od verzije 1.0. Prva ozbiljnija verzija je bila verzija 2.1 koja je dosta dugo trajala. Zatim se javljaju verzije 3.0, 3.1, 3.3 (jako popularna), 4.0, 5.0, 6.0, 6.2, 6.22 koja je poslednja zvanično izbačena verzija. Ako bi DOS bio kompatibilan onda bi u 6.22 moralo da radi sve ono što je radilo u verziji 1.0 (zbog tranzitivnosti relacije kompatibilnosti), ali to nije tako! Navodno su proizvodili nove komponente koje su pored novih stvari mogle da rade i sve što je radila stara verzija, što nije bilo sasvim tačno. Onda bi ubedili ljude kako to staro u stvari ne valja i kako treba nabaviti novo. Priča o kompatibilnosti se stalno provlači, ali je niko ne proverava. Početkom 90-ih mikro računari postaju toliko moćni da se većina firmi prebacuje isključivo na njih, što dovodi do velike potražnje za softverom i stvaranje velike konkurencije. Tada se javljaju sukobi između IBM-a i MS-a zbog Windows-a. IBM počinje razvoj svog OS/2 sistema. Dok MS zapošljava ljude iz Digital Research-a. Javljaju se začeci NT-a. MS svoje OS prodaje jeftinije što dovodi do toga da zarađuju više od IBM-a koji uporno vodi svoju tvrdu politiku kako su oni ti koji treba da kreiraju standard, što ih je skupo koštalo. Takođe su probali sa hardverskim inovacijama, ali i to je bio bezuspešan pokušaj. Problemi brže magistrale nisu bili toliko bitni. MS se prilagođava tržištu, što se ispostavilo kao najbolja moguća politika.

LLINUXINUX Novi život UNIX-u daje Linux. Takođe je klon, šteta što se nije pojavio par godina

ranije. Kernel je napisao Finac Linus Torvalds 90-ih. To je funkcionalan i lepo urađen sistem. Mnogo je prijateljskiji prema korisnicima nego ostali UNIX sistemi. Takođe poseduje grafičko okruženje (GUI) pod nazivom X-Windows. Teško mu je naći manu. Ipak, ovaj OS se pojavio kasno da bi bio dominantan OS jer je MS već razvio imperiju. MS je tokom godina dograđivao

Page 6: Programski Sistemi - SP07-V0.3

NT tako da je postao najdominantniji OS danas. Linux je jedini OS koji danas uspeva da se održi u životu pored NT-a.

GNUGNU PROJEKATPROJEKAT Software treba raditi na drugi način – ideja slobodnog softvera (Copyleft). Smatraju da

ne treba kriti izvorni kod, da software treba deliti besplatno i da autore treba nagraditi slavom, a ne novcem, i da to dalje mora ići tako – svi koji nešto urade na GNU projektima moraju to dati besplatno i to sa izvornim kodom. Pod GNU-om nastaje sve što može zatrebati profesionalcima: C kompajleri, razni editori i sl. Pokazuje se da nije tačno da kad ne bi bilo velikih softverskih kompanija (koje su sve komercijalizovale) da bi svi računari stali.

PPROGRAMERROGRAMER Profesija koja se danas mnogo razlikuje od one koja je bila pre nekoliko decenija. To je

profesija koja je prva uvela grešku kao sastavni deo posla. Danas ima mnogo manje programera nego pre par decenija, jer je mnogo teže postati programer danas nego pre. Dok je nekada bilo dovoljno znanje jednog PJ, danas je potrebno mnogo više od toga. Dok su nekada postojala specijalna zanimanja za određene PJ, danas algoritmi i PJ nisu toliko bitni. Jačanjem računara došlo je i do proširenja PJ, tako da se danas ne vidi jasna razlika između PJ. Generalno svi su u stanju da odrade svaki posao.

Danas je akcenat prebačen na platformu na kojoj se radi. Programiranje u velikoj meri zavisi od operativnog sistema – da li se programira za Windows ili za Unix i sl. Jezik predstavlja mali procenat programa. Danas se uglavnom programira za određeni operativni sistem. Ovakvo programiranje je olakšano uvođenjem vizualnih editora - npr. Delphi, Visual Basic, Visual C++ i sl.

Prelazi se na grafička okruženja gde se javljaju problemi sa I/O programa. Najveći problem za programere ovde predstavlja učenje funkcija za rad sa grafičkim okruženjem, kojih ima neverovatno mnogo.

OODNOSDNOS KKORISNIČKOGORISNIČKOG IINTERFEJSANTERFEJSA II OOPERATIVNIHPERATIVNIH SSISTEMAISTEMA

Tokom godina orijentacija je bila prema GUI-u (Grafičkom Korisničkom Interfejsu). Opasno je izjednačavati OS i korisnički interfejs.

Kod OS je bitno kako on upravlja resursima (CPU, memorijom, I/O…). Osnovno pitanje operativnih sistema je ODNOS PREMA MULTITASKINGU – da li ga određeni operativni sistem podržava, a ako ga podržava u kojoj meri i kako?

Osnovna podela OS-a se može izvršiti na monoprogramske i multiprogramske. Monoprogramski (oni koji nemaju multitasking) OS su PRIMITIVNI jer su to OS starih računara ili su to OS za specijalne namene. To skoro i da nije OS već program monitor (kontroler). DOS spada između primitivnog i OS za specijalne namene. U okviru njega postojala je naredba TSR koja je omogućavala nekakvu vrstu multitaskinga, ali koju DOS-ov proizvođač nije odmah predstavio korisnicima. Ova naredba korišćena je 80-ih godina i služila je da program zadrži u memoriji kada on završi sa radom, tako da nam je kasnije kada nam zatreba lakše dostupan. Pomoću ove naredbe DOS je donekle popravljen.

OS za specijalne namene služe za kontrolu raznih uređaja (video, TV...). Nema čvrste granice između monoprogramskih i multiprogramskih OS-a. Monitori više nisu monoprogramski sistemi jer pored programa za praćenje procesa postoji i OS, tako da se izvršavaju i jedan i drugi. Prvi Windows je navodno uveo MP mogućnosti.

OS koji imaju multitasking (MP) dele se u dve grupe: kooperativni multitasking – OS ne brine u potpunosti o MP-u već deo odgovornosti

prebacuje na programe koji se izvršavaju. Ovo je slaba varijanta, podrazumeva stavljanje više programa u memoriju istovremeno, ali pod uslovom da zajedno rade,

Page 7: Programski Sistemi - SP07-V0.3

tj. da rade kooperativno. U svakom programu mora biti ugrađena opcija koja omogućava oslobađanje procesa, provera da li neki drugi program zahteva CPU vreme i predaja CPU vremena tom programu. Ovo se pokazalao kao veoma loše jer program koji je po ovim standardima dobar je veoma spor. Razne programe prave razni proizvođači, tako da nisu svi pravljeni u fazonu kooperativnosti. Dok radi program povremeno treba da “pita” da li neki drugi program treba da radi. Obično program radi dok ne završi, tako da od kooperativnosti nama ništa. Ovakav sistem postojao je u prvim verzijama WINDOWS-a.

prijemtiv multitasking (sa mogućnošću prekida) – OS je taj koji brine o MP-u i koji kontroliše ceo sistem tj. svu kontrolu ima operativni sistem. Kontrola se ne daje pojedinačnim programima ni u jednom trenutku. OS vodi računa kada se koji program izvršava i koliko dugo se izvršava. U ovu grupu spadaju WINDOWS NT i UNIX kao i svaki ozbiljan OS. Oni su PRAVI OPERATIVNI SISTEMI.

Podela DOS i Windows nije ispravna, već se podela može izvršiti na OS i korisnički interfejs. Prvi Windows nije OS već samo grafički shell za DOS. Čak ni Windows98 nije nov OS, već je to nadgradnja DOS-a.

Laička (neispravna) podela korisničkog interfejsa se može izvršiti na tekstualno orjentisane i grafički orjentisane. Podela tekstualno orjentisanih se može izvršiti na linijski orjentisane i ekranski orjentisane. Linijski su stariji. Ovde se korekcija može vršiti samo u okviru jedne linije (DOS, UNIX). Tada je takva orjentacija bila nužna, jer vraćanja nije bilo. Kod ekranski orjentisanih sistema korekcija se može vršiti po celom ekranu. Ekran je podeljen na kućice, dimenzija 25x80 (a ne na piksele što bi veoma zakomplikovalo rad). Sve što se danas ubraja u GUI je u stvari ekranski orjentisan interfejs. Radi olakšanja korišćenja komandi javlja se ideja menija i omogućen je izbor fajla iz liste. Za sva poboljšanja bio je neophodan ekranski orjentisan korisnički interfejs, a ne GUI. GUI nudi neke prednosti u radu sa prozorima. Kvalitativna barijera je probijena prelaskom sa linijski na ekranski orjentisan interfejs, a ne sa tekstualno na grafički orjentisan. Bilo koji OS može koristiti bilo koji korsnički interfejs.

Sledeća podela korisničkog interfejsa je ispravna: linijski orijentisan ekranski orijentisan grafički orijentisan

Pojava terminala značila je veliki preokret u razvoju korisničkog interfejsa. Unapređivanjem hardvera korisnici su zahtevali bolji interfejs, tako da dolazi do prelaska na GUI. To uslovljava potrebu za jakom hardverskom podrškom. Tokom 80-ih, dok su terminali bili glavni interfejs, sistemi su bili veoma stabilni. Prvi GUI su bili primitivni, a zahtevali su jak hardver što je predstavljalo korak u nazad u razvoju računara. Hardver se razvijao velikom brzinom, ali uporedo sa tim sve više se tražilo i od OS. Sada je stanje bolje, ali u nekim slučajevima računari rade sporije nego oni sa kraja 80-ih. Danas i na najjačim računarima odziv nije momentalan usled prevelikih aplikacija. Pojavom GUI dobitak na funkcionalnosti i estetici je jako mali, a softverska i hardverska ulaganja su velika. Ipak neko unapređenje korisničkog interfejsa je neophodno radi efikasnijeg korišćenja sistema (što potvrđuje nuklearni incident na ostrvu 3 milje). Koja je mera na unapređivanju korisničkog interfejsa na uštrp snage računara ne može se tačno odrediti.

AASINHRONISINHRONI KKONKURENTNIONKURENTNI PPROCESIROCESI

PPROCESROCES Proces je jedna od osnovnih jedinica u OS.

Page 8: Programski Sistemi - SP07-V0.3

Definicija: Proces je program u izvršenju.Program je fajl na disku i on ne radi ništa – pasivan je.

Proces se u OS prepoznaje po tome što ima PCB (process control block). To je zona u memoriji koja u potpunosti određuje stanje procesa pre prekida i tu je zapisano sve što je bitno za nastavak procesa bez ikakvih smetnji (to je na neki način uopštenje stack-a), ako se prekine. U PCB se minimalno nalazi:

tekući program counter – da bi se znalo tekuće mesto do koga je proces stigao tj. da bi se u slučaju prekida znala adresa povratka (nastavka) kada mu procesor ponovo bude dodeljen.

zapamćeni svi registri – moraju biti zapamćeni međurezultati flags – moraju biti takođe zapamćeni

Ostali podaci u PCB su promenljivi, to su: identifikator procesa – to nije opisno ime koje mi koristimo, broj 0 – 65535 otvoreni tekući fajlovi – oni takođe dobijaju neke brojeve za identifikaciju memorijske zone koje je proces rezervisao (gde su mu podaci, gornje i donje

ograničenje, veličina programa) sistem privilegija, zaštite i sl.

Postoji više bitnih stvari koje su neophodne za izvršenje procesa. Stanje brojača naredbi je bitan deo. Za proces je bitno koja je sledeća instrukcija, a one koje su se izvršile više nisu bitne. Ceo rad do tada je akumuliran negde u memoriji. Stanje varijabli je drugi važan deo. Kada se procesu dodeli memorijska lokacija ona ne treba da se menja do kraja izvršavanja tog procesa. Za pristup podacima potrebno je čuvati početnu i krajnju memorijsku zonu rezultata, a takođe i stanje registara. Posebno je važan registar flag-ova. Tu se čuvaju informacije o rezultatu predhodnih operacija (da li je rezultat negativan, nula, da li je došlo do prekoračenja...). Zbog toga je važno sačuvati flag-ove, a i stanje steka je neophodno čuvati.

CPU ne može da radi bez steka. To je glavni hardverski dodatak CPU i praktično nema procesora bez steka. Pristup steku se vrši po LIFO sistemu. Stek je neophodan za realizaciju sistema prekida, kao i za prelazak na podprogram. Takođe se može koristiti za prenos argumenata u podprogram. Obično postoji jedan sistemski stek koji se inicijalizuje po uključenju računara u strujno kolo i koristi ga isključivo sistem, a njegov sadržaj ne sme biti menjan od strane korisnika. Postoji još jedan, manje službeni, stek preko kojeg se obično prenose parametri u podprograme. U sistemima može postojati još stekova koji se obično zovu pomoćni, a i sam korisnik može da definiše svoj stek. Za ispravano korišćenje steka neophodno je čuvanje pointera na stek. Svi ovi podaci se koriste za informacije o stanju procesa.

Proces u toku života prelazi iz aktivnih u pasivna stanja i obrnuto. Život jednog procesa prolazi kroz te dve faze, a OS vodi kompletnu kontrolu o tim procesima tako što može da ih kreira, izvršava (daje kontrolu) i uništava.

Obično OS za manipulaciju procesima ima više delova koji su za to odgovorni. Program koji kontroliše rad procesa je program raspoređivač i on se izvršava na raznim nivoima:

Kratkoročni rasporđivač (DISPEČER) – nalazi se na najnižem nivou i on od spremnih procesa bira sledeći koji će ući u procesor i dodeljuje mu određeno vreme za izvršavanje.

Dugoročni raspoređivač (SKEDJULER) – nalazi se na višem nivou i on vodi politiku tipa koliko procesa da stavi na čekanje, koji redosled da im da, dodeljuje memoriju, koliko procesa može biti u memoriji... Skedjuler neke procese suspenduje uglavnom da bi rasteretio sistem.

Ako je sistem jednoprocesorski shema izgleda ovako:

Page 9: Programski Sistemi - SP07-V0.3

Procesi se mogu nalaziti u 4 stanja (nije univerzalno određen broj stanja): Izvršnom (aktivnom), spremnom, blokiranom i suspendovanom. Prelaz iz jednog u drugo stanje kontroliše kernel. Proces u trenutku kreiranja uglavnom prelazi u spremno stanje, smešta se u memoriju i čeka da dođe na red za izvršenje. Kada dođe na red, dispečer ga preda procesoru i kada krene da se izvršava prelazi u aktivno stanje. Kada istekne vreme koje mu je dodeljeno za izvršavanje, proces se vraća nazad u spremno stanje. Proces prelazi u blokirano stanje ukoliko se izda I/O zahtev. Tipičan program radi dok ne dođe do I/O zahteva, a onda sam sebe blokira. Kada završi I/O prelazi u spremno stanje. Suspendovanje procesa vrši skedjuler – isti deo kernela koji vodi brigu o dodeli memorije procesima. Suspendovano stanje je dugotrajnije od blokiranog. Kada ima suviše procesa u memoriji ovaj program suspenduje jedan ili više procesa na određeni vremenski interval dok se sistem ne odguši. Skedjuler može da suspenduje procese koji se nalaze u grupi spremnih i blokiranih procesa. Blokirani procesi mogu biti suspendovani, a obrnut slučaj se retko koristi u praksi. Proces koji je blokiran prvo obavi I/O, a zatim prelazi u suspendovano stanje. Proces iz suspendovanog stanja se po pravilu vraća u spremno stanje. Teoretski je moguće da proces pređe iz suspendovanog u izvršno stanje ali se to ne radi u praksi, isto važi i za obrnut slučaj.

Postoje razni termini za procese. U BATCH sistemima zvali su se JOB. U TS sistemima termin je bio TASK. Danas je popularan termin TRED, što je ime za pojedine faze jednog istog posla. CHILD procesi su takođe TRED-ovi.

SSISTEMISTEM PREKIDAPREKIDA Sistem prekida je hardverski sistem na CPU i on je hardverska podrška za operativne

sisteme – mehanizam za prekidanje procesa i nastavljanje na pogodnom mestu. Njegov rad je sličan procesu prelaska na podprogram, ali se u nekim stvarima razlikuje. SP radi slično programu koji treba da se izvrši. Izvrši se i vrati se na memorijsku lokaciju odakle je pozvan.

Kada izvršavamo program ............... x = koren(y) ............

ovaj njegov deo će generisati mašinsku naredbu SBR koren koja će pozvati potprogram koren sa ovog mesta u programu.

Page 10: Programski Sistemi - SP07-V0.3

Suština je u povratku u glavni program. Adresa povratka stavljena je u sistemski stek. Sa krajem potprograma nalazi se adresa povratka i program se vraća tamo. Često se i kompletna lista parametara prenosi preko steka.Sistem prekida nije suštinski različit od ovoga. Prekid je sličan mehanizam. Koristi se stek za čuvanje adrese povratka. Do sada su prekidi i potprogrami isti. Ali ključna razlika u radu je u tome što su podprogrami kontrolisani od strane programera, i tačno se zna kada će biti prelaz na podprogram, a interrupti su sasvim slučajni i ne zna se kada nastupaju. SP su asinhroni signali. Nisu kontrolisani, ne zna se kada će uslediti zahtev za SP. Programi se zbog ovoga moraju pisati mnogo pažljivije.

SP je osnovni mehanizam CPU-a koji omogućava MP. Suštinska razlika imeđu SP-a i prelaska na podprogram je u načinu programiranja. Programi koji koriste SP su nezgodni za testiranje i dokazivanje da su korektni. Najveći problem je u tome što čovek misli sekvencijalno. Logika pri pisanju paralelnih i asinhronih programa se razlikuje od logike koju čovek koristi pri razmišljanju. Dokazivanje korektnosti asinhronih programa se vrši pomoću kontra primera. Ranih 70-ih svi mikroprocesori imaju ugrađen SP. Obično svaki CPU ima više SP. Glavni je no mascable, hardverski SP koji ne može da se isključi. Koristi se za slučajeve pada sistema (npr. Nestanak struje). Pored ovog, postoji običan interupt koji se vezuje na neki pobuđivač i koji može da se isključi.

Postoje dva tipa sistema prekida: potpuni i brzi. Prilikom potpunog prekida na stek se prenose svi podaci. Adresa povratka, sadržaj svih registara, flag-ovi i možda još nešto ako je potrebno. Ovo je uobičajen način prekida. Nekada je potrebno prekid realizovati brzo. Ukoliko se po prekidu obavlja neki mali posao za koji se zna tačno šta radi gubljenje vremena je prenošenje na stek svih podataka izuzev adrese povratka. U tom slučaju programer mora da vodi računa šta se radi u toku prekida i da pazi da se sačuva sadržaj svih registara. Ovo je korisno za prekide koji se generišu prilikom učitavanja karaktera sa tastature. Onda se na steku čuva samo sadržaj registra u koji će se učitati karakter koji stiže sa tastature.Kada prekinemo proces mogu se sačuvati neki bitni parametri na osnovu kojih ga možemo bez smetnji nastaviti. Ti parametri čuvaju se u memoriji, u tzv. PCB (process control block-u).

AASINHRONISINHRONI PPROGRAMIROGRAMI Sinhrono – usaglašeno.Definicija Asinhronosti: Ne sme da se napravi nikakva predpostavka o relativnim

brzinama procesa. Moraju se ispitati svi mogući slučajevi relativnih brzina procesa.Kooperativnost: Ako procesi nisu kooperativi to znači da su nezavisni jedan od drugog.

Kooperativni procesi imaju nešto zajedničko, a to je najčešće deljena memorija (može biti i nešto drugo) tj. zajednička varijabla.

Termin “konkurentni procesi” treba razlikovati od termina “paralelni procesi”. Kod MP OS više programa se izvršava konkurentno, a ne paralelno (što je moguće jedino na multiprocesorskim sistemima). Termin “konkurentni procesi” potiče otuda što procesi konkurišu zajedno za isti procesor koji im se dodeljuje malo po malo. Izvršava se deo jednog programa pa drugog pa sledećeg i tako u krug. Na jednoprocesorskim sistemima paralelnog rada nema pa je termin “paralelni procesi” besmislen. Kako je vreme prelaska sa jednog na drugi program veoma malo, gledano spolja programi se izvršavaju paralelno, pa možemo koristiti i temin “pseudoparalelni procesi“. Prilikom pisanja asinhronih programa imamo više problema.

PPRIMERRIMER DDVAVA RAČUNARARAČUNARA Prvi problem je komunikacija dva računara koji nemaju zajednički sat, a jedina veza

im je jedna žica. CPU ovih računara žicu posmatra kao jedan jedno-bitni registar. To je zato što CPU svemu pristupa na uniformni način (npr. Sve posmatra kao fajl). Sinhroni način slanja između ova dva računara bi bio u praksi problem ako bi jedan slao veliki niz 0 ili 1. Problem je jer pri velikim brzinama neće oba sata isto raditi tako da će doći do greške. Tri žice (jedna za podatke i dve kontrolne) su minimum za asinhronu razmenu podataka.

Page 11: Programski Sistemi - SP07-V0.3

Problem je napraviti programe za slanje i primanje.

Pošiljalac Primalac X = Novi; while(A == 0); A = 1; Novi = X; while(B == 0); B = 1; A = 0; while(A == 1); while(B == 1); B = 0; // Vrati se na početak // Vrati se na početak

Ovo je jedini način za asinhrono slanje podataka između 2 računara pomoću tri žice. X je žica kojom se šalju bitovi, A kontrolna od pošiljaoca ka primaocu, B kontrolna obrnuto. Program na pošiljaocu radi tako što pošalje jedan bit i javi drugom da je poslao, a zatim čeka da drugi primi bit. Kada drugi primi bit, prvi čeka da drugi bude spreman da prihvati sledeći bit pa tek onda šalje i tako u krug. Drugi prvo čeka da prvi pošalje, zatim primi i čeka da mu prvi javi da je video da je primljen bit. Onda drugi javlja da je spreman da prihvati sledeći bit.

1) Prva poruka je “poslao sam”2) nakon toga stiže odgovor “primio sam”3) sledeća je “vidim da si primio”4) pa “vidim da vidiš da sam primio”

Ovaj problem se i hardverski rešava – dvostruko zaključavanje. Potrebno je da postoje dva ovakva pulsa:

PPRIMERRIMER JJEDNOGEDNOG RAČUNARARAČUNARA Imamo jedan procesor, jednu memoriju i multiprogramiranje. Problemi nastaju jer često

neki procesi dele iste informacije i iste resurse (uglavnom se misli na iste memorijske lokacije, tj. iste varijable). Npr. Dva procesa zajednički uvećavaju istu varijablu. Ako ovo analiziramo, videćemo da će X u praksi imati manju vrednost nego što bi trebalo da ima. Zbog čega? Svi računari rade na mašinskom jeziku. Uvećavanje promenljive za 1, tj. naredbu X := X + 1 procesor će izvršiti preko sledećeg niza naredbi:

MUA XINC AUM X

Paralelan rad dva procesa vidi se na sledećoj slici:

Page 12: Programski Sistemi - SP07-V0.3

Ova dva procesa na mašinskom jeziku imaju sledeći oblik:

Dakle, ovo treba bolje osmisliti!Moraju se napraviti bolji sintaksni mehanizmi za kontrolu ovoga. Obično se to radi u

proširenom PASCAL-u (koji je preuzeo ulogu ALGOL-a). Službene reči PARBEGIN i PAREND se koriste za pisanje programskih delova koji se izvršavaju asinhrono.

PAR BEGIN . . . . . . . . . . PAR END

Sve što se u ovom bloku izvršava, izvršava se pseudoparalelno.

Kritična sekcija je deo konkurentnog asinhronog programa gde mogu da nastanu problemi – kod pristupanja zajedničkim varijablama. Kritične sekcije nisu opasne ako se ne prekidaju. U kritičnoj sekciji u jednom trentuku može da bude samo jedna procedura (program). Da procedura u kritičnoj sekciji ne bi bila prekinuta mora se onemogućiti prekid. Rešenje sa isključivanjem interapta se ne primenjuje često, jer više softverskih delova u današnjim računarima zavisi od sistema prekida, kao što su OS, keš memorija, kontrola tastature... Najveći problem ovde je taj što nije dobro definisano šta je kritična sekcija. Isključivanje interapta se primenjuje u situacijama kad je u kritičnoj sekciji mali broj instrukcija. Opštije rešenje treba da zadovolji nekoliko uslova.

Uzajamna isključivost – ne mogu dva procesa u isto vreme da budu u kritičnoj sekciji. Uslov progresa – proces koji nije u kritičnoj sekciji i ne želi da uđe u nju ne treba da

ometa (blokira) druge procese da uđu u nju. Uslov konačnog čekanja (pravednost) – mora da postoji granica koliko jedan proces

može da čeka.

Ranije se za ovo tražilo čisto softversko rešenje. Ono može na bilo kojoj platformi da se implementira. Kasnije se okreće hardverskim rešenjima koja se sastoje iz niza nedeljivih mašnskih instrukcija.

Page 13: Programski Sistemi - SP07-V0.3

SSOFTVERSKAOFTVERSKA RREŠENJAEŠENJA Postoji više ovakvih rešenja. Neka je u glavnom programu deklarisana promenljiva

naredu tipa integer koja se postavi na vrednost 1. Onda dva paralelna procesa imaju listing.

Proces 1 Proces 2. .. .while(naredu == 2); while(naredu == 1);// Kritična sekcija // Kritična sekcijanaredu = 2; naredu = 1;

Ovo rešenje ispunjava samo uslov uzajamne isključivosti, zove se alternirajući svič. Dobro je ako se želi postići naizmenično deljenje resursa jer procesi naizmenično ulaze u kritičnu sekciju (slično mehanizmu timesharing-a). Ovde, ukoliko jedan proces ne želi da uđe u krtičnu sekciju on onda blokira drugi. Ovo rešenje je dobro za problem sinhronizacije. Ovde se može javiti problem da kad jedan proces nije zainteresovan da uđe u kritičnu sekciju on onda blokira drugi koji bi to hteo.

Druga ideja je da se uvede promenljiva moze, tipa boolean.

Proces 1 Proces 2. .. .while(moze == 0); while(moze == 0);moze = 0; moze = 0;// Kritična sekcija // Kritična sekcijamoze = 1; moze = 1;

Kod ovog rešenja se javlja problem da nije zadovoljen uslov uzajamne isključivosti. Jedan proces vidi da je ulaz u kritičnu sekciju slobodan, ali nije stigao da spreči drugi proces da takođe uđe u kritičnu sekciju. Zato se uvode dve promenljive hoce1 i hoce2 umesto moze, istog tipa.

Proces 1 Proces 2. .. .hoce1 = 1; hoce2 = 1;while(hoce2); while(hoce1);// Kritična sekcija // Kritična sekcijahoce1 = 0; hoce2 = 0;

Kod ovog rešenja se javlja problem ukoliko je jedan proces mnogo brži od drugog. Tada taj proces može ponovo ući u kritičnu sekciju jer je drugi toliko sporiji da nije stigao da uđe. Ispunjen je samo prvi uslov. Ovde dolazi do uzajamnog zaključavanja, ako bilo koji od procesa bude prekinut posle izlaska iz while() petlje, a pre nego sto uđe u kritičnu sekciju.

1965. se pojavljuje Dekerov algoritam za dva procesa. U praksi se obično radi sa više procesa.

Proces 1 Proces 2. .. .hoce1 = 1; hoce2 = 1;while(hoce2) while(hoce1) if(naredu == 2) { if(naredu == 1) { hoce1 = 0; hoce2 = 0; while(naredu == 2); while(naredu == 1); hoce1 = 1; hoce2 = 1; } }// Kritična sekcija // Kritična sekcijanaredu = 2; naredu = 1;hoce1 = 0; hoce2 = 0;

Page 14: Programski Sistemi - SP07-V0.3

1981. se pojavljuje Pitersonov (džentlmenski) algoritam koji radi slično Dekerovom. U glavnom programu se deklarišu dve globalne promenljive tipa boolean i jedna tipa integer i njima se dodeli nula. Paralelni proces ima sledeći listing.

Proces 1 Proces 2. .. .hoce1 = 1; hoce2 = 1;naredu = 2; naredu = 1;while(hoce2 && naredu == 2); while(hoce1 && naredu == 1);// Kritična sekcija // Kritična sekcijahoce1 = 0; hoce2 = 0;

Objašnjenje rada ovog algoritma za razliku od Dekerovog je veoma jednostavno. Da bi se ušlo u kritičnu sekciju, najavim da hoću, dam prednost drugom i čekam dok ovaj hoće i ima prednost. Ovde je obezbeđeno da procesi naizmenično ulaze u kritičnu sekciju bez obzira na njihovu brzinu. Mana ovog algoritma je što je ovo rešenje samo za dva procesa. Takođe, ovo je čisto softversko rešenje pa je samim tim sporije.

HHARDVERSKAARDVERSKA RREŠENJAEŠENJA Ideja za hardverska rešenja je da se naprave mašinske instrukcije koje su u stanju da

rade dve stvari istovremeno bez mogućnosti prekida. Te instrukcije su: TAS (Test And Set) – testiraj i ostavi. Operiše sa dve promenljive. Učitava binarnu

varijablu i testira da li je 0 ili 1, a onda je postavi na 1. Sintaksa je A = TAS(B) prebacuje B u A i 1 u B. Promenljive A i B moraju biti boolean tipa.

FAA (Fetch And Add) - operiše sa dve promenljive. Sintaksa je FAA(A, B) prebacuje B u A i B+A u B, gde je A kod izraza B+A staro A, pre promene vrednosti. Ovde A i B ne moraju biti boolean tipa.

SWAP (zameni mesta) - operiše sa dve promenljive. Sintaksa je SWAP(A, B) menja mesta A i B.

Kod hardverskog rešenja, problem kritične sekcije može da se reši tako što se u glavnom programu deklariše jedna promenljiva tipa boolean(zabranjeno) i setuje se na nulu:

Proces 1 Proces 2. .. .while(TAS(zabranjeno)); while(TAS(zabranjeno));// Kritična sekcija // Kritična sekcijazabranjeno = 0; zabranjeno = 0;

Ovde se, takođe, umesto TAS može koristiti i SWAP. Dok su predhodni softverski algoritmi radili za dva procesa, prednost je što TAS može da radi za proizvoljan broj procesa. TAS ima vrlo ozbiljnu teoretsku manu koja je praktično zanemarljiva. TAS algoritam ne garantuje pravednost. Nema garancije koliko će neki proces da čeka. Statistički ovaj algoritam dobro radi u praksi, ali teorijski uslov konačnog čekanja nije zadovoljen. Zanemarljiva mana je što TAS instrukciju nemaju svi (praistorijski) CPU.

Ukoliko se želi garancija (pravednosti) konačnog čekanja algoritam se mora modifikovati. U glavnom programu se mora deklarisati niz tipa boolean(ceka[n]) koji se setuje na nulu, i promenljiva tipa integer(zauzeto) koja se setuje na nulu.

Proces i..ceka[i] = 1;while(ceka[i] && TAS(zauzeto));

Page 15: Programski Sistemi - SP07-V0.3

ceka[i] = 0;// Kritična sekcijaj = i+1;while(j != i && ceka[j] == 0) j = (j+1) mod n;if(i == j) zauzeto = 0;else ceka[j] = 0;

Ovo rešenje je sporije. Procedura je neefikasna jer svima nudi da pređu u kritičnu sekciju, što dovodi do trošenja CPU vremena. Iako ovaj algoritam garantuje konačno čekanje on se ne koristi u praksi.

LLAMPORTOVAMPORTOV (B(BAKERYAKERY)) ALGORITAMALGORITAM Uopštenje Pitersonovog algoritma za n procesa predstavlja (softverski) Lamportov

algoritam. Pekarski – misli se u smislu – mnogo ljudi čeka u pekari i sve njih treba uslužiti. Rešenje je da svi oni na ulazu dobiju po ceduljicu na kojoj će pisati broj za čekanje. Biće usluženi kada njihov broj stigne na red. Postojaće niz od n članova – po jedan član pripada svakom procesu koji čekaju da uđu u kritičnu sekciju. Šta se dešava ako više njih uzme istu cedulju? Svaki proces u okviru sistema ima neki svoj identifikator. Za kriterijum ulaska u kritičnu sekciju uzima se broj cedulje koji je proces dobio i njegov jedinstveni identifikator u okviru sistema. Sledeći proces koji ulazi u kritičnu sekciju biće onaj koji ima najmanji broj na cedulji, a ako ih ima više sa istim brojem cedulje, ući će onaj koji ima najmanji identifikator. Ovaj efekat pravednosti ne bi se mogao postići ni samo gledanjem na ID procesa, jer nam baš cedulje garantuju pravednost.Za implementaciju ovog rešenja biće nam potrebno par definicija. Definišemo da je (A,B) < (C,D) ako A < C ili A = C i B < D. max(A1, A2, ..., An) = K takvo da je K Ai , i = 1..n. U glavnom programu se deklariše niz tipa integer(broj[n]) i niz tipa boolean(uzima[n]) i oba se setuju na nulu. Listing procedure.

Proces i..uzima[i] = 1;broj[i] = max(broj[0], ..., broj[n-1]);uzima[i] = 0;for(j=0; j<n; j++) { while(uzima[j]); while(broj[j] != 0 && ((broj[j], j) < (broj[i], i));}// Kritična sekcijabroj[i] = 0; // znači da nije zainteresovan

Postoje razni problemi koji se rešavaju ovim algoritmima. Kao što je problem ograničenog bafera. Jedan proces vrši upis u bafer dok drugi čita. Mora se voditi računa da se sadržaj bafera ne prepiše pre nego što drugi proces pročita, a takođe da proces koji čita ne pročita više puta isti sadržaj. Ovaj i slični problemi se moraju rešiti prilikom izgradnje OS.

PPROBLEMROBLEM ČITAČAČITAČA II PISAČAPISAČA Često se javlja tamo gde ima više procesa zainteresovanih za čitanje i pisanje. Praksa

pokazuje da čitača može da ima više, a pisač može da bude samo jedan u jedno vreme, a ni čitači ne smeju u to vreme da čitaju jer će da pročitaju pogrešno.

Postoje razna rešenja kojim redosledom da se zadovoljavaju zahtevi koji pristignu. Jedna varijanta je da se pisačima da apsolutna prednost, da se svi drugi procesi prekidaju kada dođe zahtev za pisanje. To nije najbolje rešenje jer čitanje ne traje dugo i nema smisla prekidati ga. Možemo da uvedemo da oni što čitaju ne mogu da budu prekinuti. Problem je ako mnogo

Page 16: Programski Sistemi - SP07-V0.3

čitača jedan za drugim zahtevaju čitanje, time sprečavaju pisača da piše. Zato se pribegava kompromisnom rešenju. Oni koji stignu čekaju da završe svi koji su ispred njih, a čekaju.

Problem je kada pisač izađe kome da da prednost. Standardnije rešenje je da se prednost da čitaču jer ako prednost da pisaču, pisača može da bude mnogo i da čitača dugo drže blokiranog. Rešenje je da se čitači koji su stigli pre pisača ne prekidaju.

SSEMAFOREEMAFORE Semafore predstavljaju način da se Dekerov algoritam lepše upakuje. Svi algoritmi se

zasnijvaju na ideji aktivnog čekanja, što dovodi do slabijeg iskorišćenja CPU. Zato se dolazi na ideju da kad proces ulazi u mrtvu petlju oslobodi CPU, a kad bude slobodan da uđe u kritičnu sekciju nastavi sa korišćenjem CPU vremena. Semafore rešavaju problem aktivnog čekanja, tako je statistički ispalo. Aktivno čekanje nije uvek zlo. Ako je aktivno čekanje vrlo kratko onda nema smisla ukljanati ga. Generalna ideja je da aktivno čekanje treba uklanjati, ali ne po svaku cenu. Semaforama se postiže bolje kontrolisani ulaz u kritičnu sekciju. Time se dosta dobija na jednostavnosti pisanja koda. Semafore se implementiraju na nivou operativnog sistema – on ih ili podržava ili ne podržava. Neke druge strukture mogu biti podržane na nivou programskog jezika, pa ako taj jezik koristimo, možemo i to koristiti. Svi naši algoritmi (Piterson, Tas) zasnivali su se na čekanju - to je rešenje dobro za teoretske analize, ali u praksi ne valja jer procesi koji čekaju da uđu u neku kritičnu sekciju troše računarske resurse (naročito memoriju), vrteći praznu petlju. Zato se semafore obično implementiraju malo drugačije. Obično se u samom operativnom sistemu semafora implementira tako što proces koji naiđe na kritičnu sekciju, umesto da vrti praznu petlju, tj. da radi WAIT, on sam sebe blokira i stavlja se u spisak blokiranih, odakle ih kad dođe vreme, aktivira sam operativni sistem.

Semafore je struktura koja može da blokira proces do određenog vremena i da ga propusti posle određenog vremena. Jedna od definicija semafore je ta da je semafora specijalna varijabla nad kojom mogu da se vrše samo dve operacije P i V, pored standardnih operacija kreiranja i uništavanja. Sama semafora je kritična sekcija i za nju sistem garantuje da će se izvršiti bez prekida. Za ove operacije se koriste još imena down(s) i up(s), ili wait(s) i signal(s). Operacija P smanjuje varijablu za jedan do nule, a ako je nula ništa ne radi. Operacija V povećava za jedan varijablu do jedan, a ako je jedan ništa ne radi. Varijabla s je zaštićena, kada jedan proces radi sa njom ni jedan drugi nema pristup. Semafore mogu biti brojačke (tipa integer) i binarne (tipa boolean). Ako se semafora implementira kao deo kernela onda se definiše kao slog koji se sastoji iz dva dela. Prva promenljiva je tipa integer, a druga je lista procesa koji čekaju. Ovim se isključuje aktivno čekanje. Tada operacije P i V imaju sledeći oblik.

P: s--;if(s<0) { // Proces traži da uđe u kritičnu sekciju // Proces se stavlja na listu i čeka, a o ostalom se brine kernel}

V: s++;if(s0) { // Skida se jedan proces sa liste i javlja se kernelu da taj proces propusti}

Jedan od klasičnih problema je problem kružnog bafera. Bafer služi da uskladi kratkoročna odstupanja od sinhronizovanog ritma. To je niz sa dva pokazivača – pokazivač na najnoviji elemenat i pokazivač na najstariji elemenat. Kružni bafer je sličan primeru sa proizvođačem i potrošačem. Imamo proces proizvođač i proces potrošač koji nezavisno jedan od drugog smeštaju i uzimaju elemente iz bafera. Kada proizvođač stavi elemenat on poveća pokazivač za 1, a kada potrošač uzme elemenat on smanji pokazivač za 1. Bafer ima kapacitet od n elemenata, gde se mora paziti da se bafer ne prepuni i da se ne preprazni (dobije negativnu vrednost). Ako pisač hoće da upiše u bafer dužine n = 10 000 podataka njegov brojač će ići od 1 do 10 000 po modulu n. Isto tako će ići i brojač čitača, sa ograničenjem da

Page 17: Programski Sistemi - SP07-V0.3

mora biti manji od brojača pisača. Takođe brojač čitača ne sme da zaostane za brojačem pisača više od n jer će pisač upisati podatke preko podataka koje čitač još nije pročitao.

Proces Proizvođač Proces Potrošač. .while(kolicina == n); while(kolicina == 0);// Stavi element // Uzme elementkolicina++; kolicina--;

Ovde se javlja problem prilikom rada sa promenljivom kolicina, jer ako je njena vrednost 5 po obavaljanju inkrementa (dekrementa) ne može se tačno predvideti njena vrednost. Kako se ove operacije sastoje od nekoliko mašinskih instrukcija prekid neke od njih može dovesti do pogrešnog rezultata tako da promenljiva može uzeti vrednosti 4,5,6. Rad sa promenljivom kolicina se mora ograditi u kritičnu sekciju.

Modifikacija ovog rešenja se može napisati uz pomoć semafora. Potrebna je jedna semafora tipa boolean koja obezbeđuje da samo jedan proces može da radi sa baferom. Pazi se da se bafer ne prepuni ili ne čita prazan. Potrebne su još dve brojačke semafore, jedna broji prazna, a druga puna mesta. Imena semafora će biti mutex (uobičajeno ime za semaforu koja obezbeđuje ekskluzivan pristup), pun, prazan.

Glavni Programmutex = 1;pun = 0;prazan = n;parbegin proizvođač; potrošač;parend;

Proces Proizvođač Proces Potrošač. .proizvede(); .down(prazan); down(pun);down(mutex); down(mutex);stavi_element(); uzme_element();up(mutex); up(mutex);up(pun); up(prazan);

Prilikom stavljanja ili uzimanja elementa iz bafera mora se još paziti i na pokazivače i njihovu poziciju. Modifikacija ovog problema je problem čitača i pisača. Dok jedan pisač radi sa bazom ne sme više ni jedan drugi proces da pristupa bazi. Kada više čitača pristupa bazi, ne sme ni jedan pisač. Ovo rešenje pored mutex semafore sadrži i mpis koja ograničava pristup čitaču, i varijablu brcit koja broji čitače. mpis = 1, brcit = 0.

Proces Čitač Proces Pisač. .down(mutex); down(mpis);brcit++; piše;if(brcit == 1) up(mpis); down(mpis);up(mutex);čita;down(mutex);brcit--;if(brcit == 0) up(mpis);up(mutex);

Page 18: Programski Sistemi - SP07-V0.3

Ovde je sinhronizacija između pisača jednostavna. Problem je taj što čitači imaju potpuni prioritet što može dovesti do predugačkog čekanja pisača. Problem se rešava tako što se uvede variabla koju pisači mogu da modifikuju a čitači samo da čitaju…

Realizacija brojačke semafore pomoću dve binarne. Potrebne su dve semafore s1 i s2 i jedna varijabla c.

down(c) up(c)down(s1); down(s1);c--; c++;if(c<0) { if(c0) up(s1); up(s2); down(s2); else} up(s1);up(s1);

KKRITIČNIRITIČNI RREGIONIEGIONI Kritična Sekcija je deo koda kome može imati pristup samo jedan proces. Kritični

Region je implementacija pristupa kritičnoj sekciji na višem PJ . Ovde se koriste deljene varijable. Deklaracija se vrši.

var x : shared tip // gde tip moze biti integer, real, ili bilo koji korisnicki definisan tip …

Pristup deljenim varijablama je moguć samo u delu programa koji je označen sa službenom rečju region.

region x while (true) s1;region x while (true) s2;

U toku izvršavanja s1 i s2 ne mogu biti prekinuti (atomsko rešenje), ali se ne garantuje u kojem će se redosledu izvršiti. Ako s1 i s2 povećavaju x za jedan posle izvršenja oba procesa x će sigurno biti uvećano za dva, ne može se javiti mogućnost da bude uvećano samo za jedan. Kod ovakvog rešenja smanjuje se mogućnost greške.

Primer rešenja proizvođača i potrošača se sa kritičnim regionima implementira na sledeći način: Prvo vršimo deklarisanje deljenih varijabli gde su slsl i nruz sledeći slobodan i na redu za uzimanje elementa bafera.

Glavni Programvar bafer : shared record skladiste : array [0..n-1] of nesto; // nesto je tip elemenata koji se proizvodi slsl, nruz, imaih : integerend.

.slsl = 0;imaih = 0;nruz = 0;parbegin Proizvođač(); Potrošač();parend;

Proces Proizvođač Proces Potrošačregion bafer while(imaih<n) { region bafer while(imaih>0) { skladiste[slsl] = novi_pod; novi_uzeti = skladiste[nruz]; slsl = (slsl + 1) mod n; nruz = (nruz + 1) mod n; imaih++; imaih--;} }

MMONITORIONITORI Monitor se u programskom jeziku deklariše kao struktura podataka gde se deklarišu

zajedničke varijable i procedure i unutar njih može biti aktivan samo jedan proces u isto

Page 19: Programski Sistemi - SP07-V0.3

vreme. Kod rešenja sa monitorima koriste se specijalne varijable koje su uslovne, tipa condition. Nad njima su definisane samo dve operacije, wait i signal. Sintaksa ovih operacija je x : wait ili wait(x). Kada se izvrši wait(x) proces se zaustavlja i čeka dok ne dobije signal nad kondicionoj varijabli x. Ovo nisu brojačke semafore. Signal budi proces ako neki proces čeka, a ako ne signal će biti izgubljen.

Primer rešenja problema potrošača i proizvođača uz pomoć monitora:

monitor pro_pot pun, prazan : condition; imaih : integer;

proces entry stavi { proces entry uzmi { if(imaih == n) if(imaih == 0) wait(pun); wait(prazan); stavinovi(); uzminovi(); imaih++; imaih--; if(imaih == 1) if(imaih == n-1) signal(prazan); signal(pun);} }

Slanje prouka se koristi kod povezanih sistema sa posebnim CPU koji ne dele istu memoriju. Ovde se javlja veliki broj problema koje treba rešiti. Kome se šalje poruka, na čije ime, da li je dozvoljena različita dužina poruka, da li će primaoc da primi poruku... Rešenje se svodi na korišćenje Internet adresa. Ukoliko širi krug računara razmenjuje poruke uvode se i domeni.

IPCIPC IPC (Inter Process Communication) su standardni problemi ovog tipa. Služili su za

testiranje (benchmark) asinhronih konkurentnih problema. Jedan od problema je: RUČAJUĆI FILOZOFI. Za okruglim stolom sedi pet filozofa i pred svakim je tanjir, a između svaka dva je viljuška. Život filozofa se sastoji iz tri stanja: razmišlja, gladan je (kada više ne može da razmišlja) i jede. Da bi neko jeo treba da ima dve viljuške. Potrebno je simulirati rad filozofa (malo razmišlja, malo jede). Potrebno je deklarisati niz s(0..4) = 0 tipa semafora koji identifikuje svakog od filozofa, mutex = 1 i niz specijalnog tipa koji opisuje jedno od tri stanja u kom se svaki filozof nalazi, stanje(0..4) = razmislja.

Glavni Program Proces filozof (i)mutex = 1; while(true) {s[0..4] = 0; razmislja();stanje[0..4] = razmislja; uzmeviljuske(i);parbegin jede(); filozof(0); vrativiljuske(i); . } filozof(4);parend.

Proces uzmeviljuske(i) Proces vrativiljuske(i)down(mutex); down(mutex);

Page 20: Programski Sistemi - SP07-V0.3

stanje[i] = gladan; stanje[i] = razmislja;test(i); test(levi);up(mutex); test(desni);down(s[i]); up(mutex);

Proces test (i) // Testira da li je filozof gladan, a onda gleda da li susedi jeduif(stanje[i] == gladan && stanje[levi] != jede && stanje[desni] != jede)up(s[i]);

Algoritam ne garantuje konačno čekanje, tj. mora uvesti neka vrsta prioriteta jer trojica mogu da izgladne drugu dvojicu.

Ovim je obezbeđen paralelizam da mogu dvojica da jedu, i da ne može jedan samo da se smenjuje. Ne može se desiti da jedan, ako je brz, prestane da jede, ali opet brzo uzme viljuške, a onaj drugi koji je spor neće moći da jede, jer ma koliko da je spor on će jednog trenutka doći do toga da pokuša da uzme viljuške pa će proći proces test i time da najavi da je gladan te da vidi levo i desno da li su slobodne viljuške. Ako nema viljuški onda će on da najavi čekanje, ali sada pošto je najavio čekanje ima prednost pošto drugi spuste viljuške.

Ako su dva nesusedna brza i zgodno se izmenjuju oni mogu da izgladne onog između sebe. Oni ne mogu da monopolizuju sami da stalno jedu jer moraju da nude levom i desnom, ali oni mogu da rade to da uvek daju levom i kad on završi oni opet da dobiju viljuške. Izgleda da onaj između njih nikad neće moći da jede.

Još neki IPC problemi: Spavajući berberin – berberin sedi na stolici u svojoj radnji i spava. Kad mu

dođe mušterija, ona ga probudi i on počinje da radi. Mušterije koje zatim dođu ulaze u radnju i sednu ako postoji slobodna stolica. Ako slobodne stolice nema, oni izlaze iz radnje.

Problem pušača cigareta – imamo tri pušača kojima su, da bi pušili, potrebni papir, duvan i šibica. Svaki od njih trojice ima neograničenu količinu jednog potrebnog materijala. Četvrti čovek ponekad pred njih stavi neki od preostala dva materijala koji im nedostaje. Pitanje je koji će ugrabiti to što je stavljeno.

DDEADEAD –– LLOCKOCK

Proces je u Dead Lock-u ako čeka na događaj koji se nikada neće desiti. Ili ako proširimo na sistem: sistem je blokiran ako sadrži proces koji je blokiran. To se obično dešava kada jedan proces drži ono što je potrebno drugom, a drugi ono što je potrebno prvom. Do deadlock-a dolazi samo kod izvesne vrste resursa koji se zovu serijski reupotrebljivi (REUSABLE). To su resursi koji kada se dobiju moraju biti upotrebljeni do kraja bez prekida (drugi proces mora čekati da prvi završi i oslobodi resurs pa tek onda može da ga koristi). Resursi su hardverski (disk, memorija, procesor) i softverski (semafore, datoteke, slogovi u bazama). Oni se dele na:

1. PREEMPTIVE – koji se mogu prekidati2. NON-PREEMPTIVE – koji se ne mogu prekidati

Ovi prvi su CPU, memorija. Procesu nije bitno da li će dobiti vreme sada ili malo kasnije i da li će dobiti komad memorije na ovom ili onom mestu. Njemu je samo važno da dobije određenu količinu vremena i memorije. Tipičan primer drugih resursa je štampač, jer ne sme da se prekida pošto rezultati štampanja ne bi imali smisla. Do blokiranja može doći sa takvim uređajima. Postoje četiri neophodna uslova koji dovode do blokiranja:

Page 21: Programski Sistemi - SP07-V0.3

Mutual Exclusion (uzajamna isključivost) – u jednom momentu jedan resurs može da drži samo jedan proces (proces drži neki sistemski resurs i dok on ne završi, drugi proces neće moći da ga preuzme)

Wait and Hold (čekaj i drži) – proces drži resurse sa kojima radi (koje je već dobio), a čeka na one koji mu trebaju. Štampa na štampaču, a zahteva podatke iz baze.

No Preemtion (nemogućnost prekidanja) – proces koji radi ne može biti prekinut i to mu garantuje operativni sistem tj. jedan posao se vrši neprekidno

Kružno Čekanje – postoji lanac procesa koji čine krug sa uslovima čekanja. Jedan drži neke resurse, a čeka na neke druge koje drži neko drugi, a taj drugi zahteva neke koje drži neko treći… poslednji zahteva one resurse koje drži onaj prvi. Minimum su 2 procesa da bi se ovaj uslov ispunio, a može ih biti proizvoljan broj.

Moraju biti ispunjena sva četiri uslova da bi došlo do deadlock-a. Šta se radi kad dođe do deadlock-a? Ako se bilo koji od ovih uslova ukloni neće doći do blokiranja. Postoji više načina za rešavanje problema deadlock-a, a neki od njih su sledeći:

Sprečavanje (prevencija) deadlock-a – to su duboke sistemske mere kojima se isključuje mogućnost blokiranja. Ugrađuju se određene mere pri projektovanju operativnog sistema koje će sprečiti bar jedan od gornja četiri uslova. Najčešće se radi na sprečavanju nekog od poslednja tri uslova. Ne radi se na prvom uslovu jer se ne može sprečiti da neki uređaj bude serijski, npr. štampač, tj. može se i to uraditi, ali ne bi bilo dobro. Taj uređaj ne bi funkcionisao onako kako mi želimo. Ovakve mere se plaćaju manjom efikasnošću operativnog sistema, pa se retko koriste. To su takozvane statičke mere.

Izbegavanje deadlock-a – ovo je nešto blaža forma. U toku rada, na osnovu informacija o procesu, radi se na izbegavanju deadlock-a. Ugrađuju se određeni algoritmi u operativni sistem koji ovo rade, pa opet imamo proširenje resursa operativnog sistema, pa samim tim i manju efikasnost. Nije sve u napred osigurano da ne dođe do blokiranja. Ovo su dinamičke mere.

Detekcija i oporavljanje – dopuštamo da do deadlock-a dođe, a onda primenjujemo razne vrste mera koje obuhvataju otkrivanje zablokiranosti, uništavanje procesa koji su blokirani i eventualno, ako je to moguće, spašavanje nečega od njihovog prethodnog rada

Ne preduzimanje ničega (problem ne postoji) – je politika za rešavanje deadlock-a koja teoretski izgleda besmisleno. Pravimo se da problem ne postoji, tj. baš nas briga. Praktično, do deadlock-a ne dolazi često, a i ako dođe šteta nije velika. U svakom slučaju šteta koju je prouzrokovao deadlock je manja nego ona koju bismo napravili kada bismo ugradili neki od prethodna dva načina za zaštitu u naš sistem (sistem je sporiji i manje efikasan). Ovaj način ima veliku praktičnu primenu. Razumno rešenje ako se statistički deadlock retko pojavljuje i ako se ne radi o mnogo važnim poslovima.

Aktivne mere: Sprečavanje i izbegavanje se primenjuju kada deadlock-a nema.Pasivne mere: Detekcija i ne preduzimanje ničega se primenjuju kada dođe do deadlock-a.

(Treba ubaciti grafik: sigurnost sistema, troškovi resursa, troškovi neefikasnosti svih metoda)

IIZBEGAVANJEZBEGAVANJE DDEADEAD LLOCKOCK--AA Postoje razne politike kako se može izbeći blokiranje (Dead Lock) koje se svode na

eliminisanje jednog od tri uslova pretposlednje liste. Prvi uslov se ne uzima u obzir jer se ne može eliminisati. Konzervativne politike – teže algoritamskoj jednostavnosti, ali su skupe u odnosu na iskorišćenost resursa. Liberalne politike – povećavaju se troškovi algoritamskih izračunavanja, ali se zato povećava efikasnost korišćenja resursa. Politike čine dinamički algoritmi koji garantuju da do deadlock-a neće doći. Moguće politike (algoritmi) su poređane po skali konzervativnosti:

Page 22: Programski Sistemi - SP07-V0.3

Ne daj nikad nikome ništa – do blokiranja neće doći zato jer niko ništa ne radi ali to je i suviše visoka cena, tj. ovo je “najkonzervativniji” algoritam.

Serijalizacija – je algoritam koji se sastoji u propuštanju procesa jednog za drugim. Pretpostavka je da proces ne sme tražiti više resursa nego što postoji u sistemu. Ovo je najjednostavniji algoritam. Unapred su poznati maksimalni zahtevi procesa. Ovo najčešće nije potpuno moguće. Na trivijalan način izbegava se deadlock, nema multiprogramiranja jer ne mogu dva procesa biti aktivna u isto vreme. Puštaju se u rad jedan po jedan. Sam proces sebe neće blokirati. Cena ovog algoritma je visoka (zbog slabe iskorišćenosti resursa).

Alokacija odjednom (dodeljivanje svih resursa odjednom) – svaki proces pri ulasku u sistem najavljuje svoje maksimalne zahteve tj. ima listu resursa koje zahteva. Ako se procesu može dodeliti sve što zahteva onda će to i da mu se dodeli, ako ne onda će da čeka momenat kad to bude moguće. Do deadlock-a ne može doći jer nije ispunjen uslov Wait and Hold. Ovo je bolji algoritam od predhodnog jer omogućava multiprogramiranje. Skup aktivnih procesa biće >=1, dakle veći nego za algoritam serijalizacije. Resursi su bolje iskorišćeni, a i paralelizam je moguć.

Klasifikacija (numerisanje) resursa – svi resursi se dele u grupe jednorodnih resursa (štampači, semafore, ...), onih koji su serijski reupotrebljivi. Te klase se numerišu (svakoj klasi resursa se dodeljije jedan broj), tj. daju im se nekakvi prioriteti (zašto prioriteti? Ne funkcioniše sve jednako dobro ako se klase resursa slučajno numerišu. Resursi se koriste određenim redosledom – prvo se uzimaju ulazni podaci, npr. sa magnetne trake, zatim se nešto računa, pa se onda štampa. Dakle ulazne klase treba da imaju manji broj, a npr. klasa štampača veći broj klase). Proces koji drži resurse nekih klasa može da dobije samo resurse iz viših klasa tj. ova politika se sastoji u tome da proces koji drži resurse klase k može zahtevati samo resurse klase n, n>k (n mora biti strogo veće od k, ne može biti jednako). Ovo onemogućava četvrti uslov za nastanak deadlock-a, jer ne može doći do ciklusa. Ako postoji niz procesa P1, P2, ..., Pn u deadlock-u, tj. P1 drži k1, P2 drži k2, ..., Pn drži kn, onda se ne može desiti da bude k1<k2<...<kn<k1, pa ne može doći do deadlock-a. U sistemu mogu biti i procesi koji nisu potpuno zadovoljili svoje resurse. Opet se povećava paralelizam i broj aktivnih procesa, tj. iskorišćenost resursa.

Bankerov (bankarov) algoritam – prilično je liberalan, ali je više od teoretskog značaja. Dobio je ime jer liči na sistem davanja zajmova. Bitno za ovaj algoritam je koncept sigurnog stanja. Procesi P1, P2, …, Pn rade u nekom sistemu i zahtevaju neke resurse. Sigurno stanje je stanje u kom se može naći sekvenca procesa Pi, Pi1, ..., Pin koji sa svojim resursima mogu završiti rad u tom redosledu. Procesi u proizvoljna vremena traže potrebne resurse, OS im opet, u proizvoljno vreme te resurse dodeljuje. Ne znači da ako stanje nije sigurno da će doći do blokiranja, već da može doći. Kako se sistem vodi kroz sigurna stanja? Npr. imamo 10 štampača. Imamo proces A koji drži 4 a traži maksimalno 7 resursa (štampača). Proces B drži 5 a zahteva maksimalno 6 resursa. Kako sistem utvrđuje da li je ovo stanje sigurno? Zauzeto je 9 resursa, a jedan nije. Naša sekvenca biće BA jer možemo zadovoljiti B. Njemu damo šta mu treba, on uradi, pa oslobodi sve resurse koje je zauzeo. Onda zadovoljimo A i stignemo do kraja. To je sigurno stanje. Ovaj algoritam je teorijski dobar, ali u praksi ima ozbiljna ograničenja. Svi procesi u napred moraju da saopšte svoje maksimalne zahteve i onda će na osnovu toga da im se dodeljuju resursi, a realni procesi unapred takve stvari ne znaju.

OOTKRIVANJETKRIVANJE DDEADEAD LLOCKOCK--AA Rešenje je dobijeno korišćenjem grafova. Neka nam procese predstavljaju kvadratići, a

resurse krugovi, a klase resursa veliki krugovi.

Page 23: Programski Sistemi - SP07-V0.3

Ako neki proces traži neki resurs, od njega ide strelica ka klasi tih resursa. Kad je resurs dodeljen, onda ide strelica od pojedinačnog resursa do procesa.

Procedura za otkrivanje blokiranja se sastoji u traženju procesa koji može da bude zadovoljen. Ako se nađe proces koji može biti zadovoljen onda će on jednog trenutka da završi i otpusti ono što je držao tako da graf može da se redukuje. Ako se takvim postupkom graf redukuje na nulu onda sistem nije blokiran, inače se javlja blokiranje pa je moguće jedan od zablokiranih procesa uništiti. Ovo se može programski implementirati.

Grafovski algoritmi

Grafovi se najčešće predstavljaju kao matrice. Ovi grafovi su najčešće usmereni. Broj čvorova u grafu jednak je broju vrsta i kolona u matrici. Dijagonala nije važna. M[i,j] je element matrice koji označava kako se odnosi čvor i prema čvoru j. Ako je u polju 1, to znači da strelice ima, a ako je 0, onda strelice nema. U poljima ne moraju nužno biti 0 i 1, već mogu biti i neki drugi pozitivni brojevi koji označavaju nekakve drugačije odnose. Retko se koriste negativni brojevi, jer tada algoritam ne radi kako treba. Ako je graf neusmeren, matrica je simetrična. Ako je usmeren, matrica nije simetrična.

Varšalov algoritam

Varšalov algoritam utvrđuje koji je čvor povezan sa kojim čvorom, makar i indirektno (postoji put od čvora A do čvora B). Može se odrediti i cena tog povezivanja (obično se izražava u HOP-ovima, tj. koracima). Dalje se utvrđuje tranzitivno zatvorenje, a zatim da li u grafu ima ciklusa. Ceo algoritam se zasniva na pretraživanju grafa po dubini. Ako ima povratnih grana, to znači da će možda biti ciklusa.

Ideja: Jednu matricu nxn obradićemo n puta, na k-tom prolazu ona će imati 1 na svim mestima gde između i-tog i j-tog čvora postoji indirektni put, ali samo kroz čvorove čiji broj nije veći od k. Algoritam:

for k = 1 to nfor i = 1 to n

for j = 1 to n if A[i,j] > A[i,k] + A[k,j] then upiši nešto...

Page 24: Programski Sistemi - SP07-V0.3

UUPRAVLJANJEPRAVLJANJE PPROCESOROMROCESOROM

Operativni sistemi bi bili mnogo jednostavniji da nije multiprogramiranja. To je ono što dovodi do boljeg iskorišćavanja resursa i udobnijeg rada. Procesor je ranije bio najskuplji resurs, pa se išlo na njegovo bolje iskorišćavanje. Danas se ovo ne radi zbog boljeg iskorišćavanja procesora, jer su oni sada relativno jeftini, već zbog mogućnosti udobnijeg rada na računaru.

CPU spada u priemtiv resurs (koji mogu da se prekidaju). Da bi se CPU prebacio sa jednog procesa na drugi mora se uraditi context switching (pamćenje svih registara, akumulatora, flagova…). Kod starijih CPU programer je morao svaku od ovih operacija posebno da obezbedi, a kod novijih postoji jedna instrukcija koja obavi sve to.

U memoriji je napunjeno više programa koji trebaju biti izvršeni i sada je pitanje na koji način. Dispečar niskog nivoa određuje kakvu politiku treba voditi pri dodeljivanju CPU procesima. On odlučuje kome će dodeliti svaku sledeću mikrosekundu.

Postoje razni kriterijumi na osnovu kojih on dodeljuje CPU raznim procesima: pravednost – što znači da niko ne čeka predugo. maksimalni protok (throughput) tj. maksimalna iskorišćenost sistema – da

računar obradi što više poslova za izvesno vreme. maksimalni odziv sistema – ako ima više procesa da trenutno izvršava njihove

zahteve, važno je i blago padanje sistema, što podrazumeva da sistem postepeno reaguje na preopterećenost. Nije dobro da kad se preoptereti odmah padne. Postepeno padanje podrazumeva sve slabije vreme odziva.

Do najboljeg rešenja se ne može doći maksimalnim zadovoljenjem kriterijuma, jer su neki od njih u izvesnom smislu kontradiktorni. Dobro rešenje mora imati kompromisni karakter koje zavisi od okruženja sistema, tipa procesa… Dva kriterijuma su uvek suprotstavljena. To su maksimizovanje propusne moći i maksimizovanje odziva. Prvi zahtev se zadovoljava tako što se svi resursi maksimalno iskoriste (preopterete). Drugi u suprotnom slučaju. Najbolji odziv će biti ako resursi nisu uposleni.Politike dodeljivanja CPU procesima:

Opsluživanje po redu dolaska – FIFO (FCFS) – najjednostavnija politika dodeljivanja CPU je da se CPU dodeljuje procesima kako pristižu. To je politika bez prekidanja – kada jedan proces dobije resurse drži ih sve dok ne završi rad. Red procesa se formira kako koji zahtev pristiže i oni se opslužuju tim redom. Šta se dešava ako neko zahteva jako malo vremena, a neko jako mnogo? Npr. prvi posao zahteva 30, a drugi 2 sekunde. Ako zadovoljimo FIFO pravednost, ukupno vreme boravka u sistemu za prvog je 30 sekundi, a za drugog je 32 sekunde, pa je prosečno vreme boravka u sistemu 31 sekunda. Ako pustimo prvo drugog, pa onda prvog, srednje vreme boravka u sistemu biće 17 sekundi. Mane su neefikasnost i nepravednost.

SJF (Shortest job first) ili SPN (shortest process next) – politika favorizovanja kraćih poslova. Takođe je politika bez prekidanja. Daje se prednost kraćim procesima u cilju da se minimizuje ukupno vreme čekanja. Ako je disperzija (odstupanje od srednje vrednosti (boravka u sistemu)) dužine traženog servisiranja procesa velika onda se ovim algoritmom postiže mnogo. Teorijski optimum u klasi politika gde se ne dopušta prekidanje. Zasniva se na ideji da za svaki proces znamo koliko će mu vremena trebati. To se ne može uvek znati, ali i nekad kada znamo i tu informaciju, ona nam mnogo ne pomaže.

SRTF (Shortest remaining time first) – prvi na red dolazi proces kome je potrebno najmanje vremena da završi posao tj. ima najkraće preostalo vreme. Ovo je politika sa mogućnošću prekida. Ako neki proces radi i pojavi se neki koji će da radi kraće nego što je ovom preostalo, onda taj što je radio ide u red, a taj kraći dobija CPU dok ne završi ili dok se ne pojavi neki treći koji će raditi kraće vreme nego onaj što se trenutno

Page 25: Programski Sistemi - SP07-V0.3

izvršava. Teoretski ovo je najoptimalnija politika. Ipak, ovde su zanemareni neki elementi iz stvarnosti pa zato prethodne politike neće biti tako dobre. Zanemareno je vreme preključivanja sa jednog procesa na drugi. U prkasi se najčešće ne zna koliko će neki proces da traje.

Round Robin (deljenje u krug) – određeni intervali se daju u krug svakom procesu. Od ovoga je počelo, da bi se izbegla batch obrada. 60-ih kada je izmišljen time sharing prva ideja je bila da se svakom od procesa da po mali komad vremena. Na kraju se pokazuje da je Round Robin jako dobra politika, jer je to teoretski optimum od kog bolje ne možemo napraviti. Davanje istog vremena svima dovodi do toga da oni kojima treba malo vremena brže završe posao, a oni kojima treba više vremena ostaju duže. Na ovaj način kratki procesi su favorizovani.

Parametar koji utiče na ponašanje RR je disperzija vremena procesa koji čekaju. Ako neki čekaju manje ili više, disperzija se pogoršava. Aproksimacija vremena u RR je u ovakvim primerima jako loša. Nema smisla da quantum mnogo raste, jer veliki quantum ne bi vršio funkciju. Kad quantum pređe dužinu najvećeg posla, RR prelazi u FIFO. Ako veličina quantuma teži nuli, onda RR teži teoretskoj disciplini koja se zove processor shering. Imamo utisak da je procesor fizički podeljen – za n procesa postoji n procesorskih delova koji nezavisno rade. Procesor je idealno podeljen među svima. Ovo je nemoguće uraditi jer se gubi vreme pri prelasku s procesa na proces. Tajmer uzima vreme, pune se registri i sl. Vreme koje je ovim oduzeto najčešće je fiksirano. Kad se quantum mnogo smanji, onda procesor troši više vremena na preključivanje nego na rad sa procesom. Quantum treba da bude dosta veći od vremena preključivanja.

HPRN (Highest Penalty Ratio Next) – sledeći proces koji treba uđe u procesor nije najkraći već najnezadovoljniji. Zavisi od toga koliko dugo će da traje neki proces. Ova politika daje prioritet onima koji duže čekaju, ali i kraćim procesima. Matematički se to može izraziti kao funkcija koja meri stepen nezdovoljstva (w + t) / t gde je w – vreme provedeno u sistemu; t – vreme koje je proces trebao da provede u sistemu.

Sistem prioritetnih redova – je često korišćena politika u starija vremena. Postoji jedan red visokog prioriteta, gde se dobijaju mali kvantumi, pa sledeći višeg prioriteta gde se dobijaju veći kvantumi… Proces kruži kroz jedan sloj određeno vreme, pa onda propadne u niži sloj ako nije završio. Svim procesima se na početku veruje da su kratki, ako nisu onda propadaju u niži sloj. Procesi u nižim slojevima dobijaju ređe vreme, ali u većim kvantumima. Tu se postavlja pitanje nakon kog vremena će procesi da propadaju iz jednog u drugi sloj. Jedna politika je da red nižeg prioriteta može da dobije CPU samo kada je red iznad prazan. . U redu se ostaje samo jedan quantum. Favorizuju se kratki procesi. Što duže proces ostaje u sistemu, to znači da je duži. On se potiskuje dublje u red, ređe mu dajemo procesor, ali mu dajemo veći quantum. Najčešći sistemi su sa četiri nivoa. Sa višeg se propada u niži nivo. U nižem nivou je veći quantum. Proporcije quantuma u ta četiri nivoa su najčešće

1 : 2 : 4 : 8 (8 u najnižem nivou, a 1 u najvišem).

Sistem promocije – u prethodnom sistemu se može desiti da procesi u četvrtom nivou retko dolaze na red. Zato postoji sistem promocije – neki procesi se prebacuju u više nivoe, pa se tamo izvršavaju.

AARHITEKTURARHITEKTURA PPROCESORAROCESORA Sam CPU sadrži 14 registara (kod PC-a). Ima 4 akumulatora koji su 16-bitni i zovu se

A, B, C i D. Pošto oni mogu da se koriste i kao 8-bitni, da bi naglasili da su 16-bitni zovu se AX, BX, CX i DX. Kao osmobitni se koriste AH, AL, BH, BL… Od CPU 80386 pa na dalje oni su 32-bitni i zovu se EAX, EBX, ECX i EDX. Akumulatori među sobom nisu sasvim ekvivalentni već svaki od njih ima još po neku posebnu namenu.

Page 26: Programski Sistemi - SP07-V0.3

CPU ima i stek pointere SP i BP (Base Pointer). SP je sistemski i nesme da se dira, BP služi za neki pomoćni stek. Nad stekovima su definisane operacije push i pop, pa se on po tome razlikuje od ostalih registara.

Postoje dva registra koji se nazivaju string-index registri i služe za neke operacije sa stringovima i neke druge stvari. To su index-registri i zovu se SI (source index) i DI (destination index). Koriste se kada treba niz obrnuti pa se jedan koristi za polazni a drugi za rezultujući niz.

Sledeća četiri registra služe za adresaciju i zovu se segment registri. Njima se reguliše pristup memoriji. Oni se pojedinačno zovu:

Code Segment koji pokazuje gde se nalaze programi Data Segment koji pokazuje na podatke Stack Segment za stek Extra Segment se koristi za šta mi hoćemo

Postoje još dva registra i to su:

Instruction Pointer tj. Brojač naredbi Flags u kome se nalaze flegovi

Programiranje na mašinskom jeziku sastoji se od pozivanja ugrađenih funkcija i punjenja registara. Proizvođač CPU obezbeđuje tabelu dostupnih funkcija i njihovih efekata, a programer ih samo poziva kao interapte.

UUPRAVLJANJEPRAVLJANJE MEMORIJOMMEMORIJOM Memorija je neophodan resurs. CPU i memorija čine osnovne komponente računara.Memorija može da se podeli na: radnu i fiksnu. U radnoj se nalaze neki podaci sa

kojima se radi. Stvari se suštinski nisu izmenile od 1945. Organizacija memorije i komunikacija u njoj ostale su iste više decenija do danas. Menjao se kapacitet i brzina memorije. Stvar koja se od početka nije menjala je to da je memorija organizovana u bajtove, a najmanja jedinica memorije kojom može da se manipuliše je bit. Bitovi su mogli i drugačije da budu organizovani, ali izabran je sistem da jedan bajt je osam bitova.

Bajt nije dovoljno velika jedinica pa se više bajtova udružuju u veće memorijske jedinice koje se zovu reči. Već 60-ih 32-bitna reč je predstavljala standard u velikim računarima. Posle toga su se pojavili PC koji su u početku bili 8-bitni, zatim 16-bitni, da bi danas standard bio 32-bitni računar.

Na prvi pogled se čini da su 16-bitni računari najpogodniji jer se integer predstavljao i predstavlja sa 2 bajta. To je zadovljavalo brojače, a ranije se računar koristio samo u svrhe izračunavanja. Kasnije dolazi do obrade znakova pa se uvode posebni kodovi, kao što je ASCII za koji je potreban samo jedan bajt. Sa 32 bita mogu se predstavljati celi brojevi i brojevi u pokretnom zarezu. Sa ovakvim predstavljanjem brojeva praktične potrebe se u potpunosti pokrivaju. U poslednje vreme se pojavljuju 64-bitni računari sa moćnim CPU.

RRAZLIKAAZLIKA IZMEĐUIZMEĐU CISC-CISC-AA II RISC-RISC-AA RISC je u prevodu skraćenica od redukovani set instrukcija, a CISC od kompletni set

instrukcija. U CISC-u postoji veliki set instrukcija, razni adresni modovi. Kod RISC-a je osnovna ideja bila da se broj instrukcija smanji, a osnovni moto je jedna instrukcija jedan ciklus. Isntrukcija za računar nije osnovna jedinica, već takt, ali za programera je instrukcija osnovna jedinica, pa se u RISC-u išlo na to da bude jedna instrukcija jedan takt. Takođe imaju prednost da mogu da učitaju nekoliko instrukcija unapred, pa da imaju paralelno izvršavanje. U praksi se sada dobija nekakva kombinacija. CISC nije odumro, ali ni RISC nije preovladao. Danas CISC u sebi sadrži neke osobine RISC-a, tako da su današnji CISC-ovi daleko od onih u prošlosti.

Sa idejom da se instrukcije na neki način redukuju, dobija na značaju ideja o 64-bitnom registru, jer pomaže kada se mnogo toga učitava od jedanput, paralelnog izvršavanja i analiziranja i jednog i drugog.

Page 27: Programski Sistemi - SP07-V0.3

MMEMORIJAEMORIJA

Jedino što se menjalo tokom godina je tehnologija izrade. Nekada su to bile magnetne memorije (feritna jezgra). Prednost ovi memorije je da ona ne gubi sadržaj pri isključenju iz struje. Najveća mana je što je užasno skupa. Sa prelaskom na elektronske memorije kapacitet je povećan za ogroman faktor, a cena se smanjivala za isti taj faktor. Elektronska memorija je počela da se pravi 70-ih godina. Mogla je da se pravi kao statička (FLIP-FLOP metodom), koje se čini kompleksnija i dinamička (sa kondenzatorima), koja se čini da će jako teško funkcionisati. Kapacitet memorije je obično rastao sa faktorom 4, jer je tehnološki najlakše da se to pravi na silikonskim kvadratima. Tehnologija se razvijala u tom smislu da se te veze stanjuju i time da se više pakuje na kvadrat, a sa druge strane taj kvadrat tj. njegova površina može da se povećava. Povećanje površine donosi opasnost da se poveća verovatnoća greške.

Na čipu se prave tranzistori sa ukrštanjem raznih žičica i postavlja se pitanje koliko tanka ta veza može da bude. Što je manja to se radi sa manjom strujom, nižim naponom, sa manjim grejanjem, pitanje je gde je granica. Danas se došlo do 0.3 mikrona. To smanjenje donosi opasnost od prekidanja veze i onda to neće funkcionisati. Sa povećanjem površine za 4 puta, verovatnoća da će sve biti u redu smanjuje se sa 90% na 65%.

OORGANIZACIJARGANIZACIJA MEMORIJEMEMORIJE Ako pogledamo po godinama, vidimo da postoji velika nesloga u brzini CPU i memorije.

Memorija je dosta spora u odnosu na CPU.

SSTATIČKETATIČKE MEMORIJEMEMORIJE Pretpostavimo da imamo CPU na 10MHz (10 taktova u mikrosekundi). On u jednom

taktu izvršava učitavanje ili upisivanje u memoriju. Rešenje je u statičkim memorijama kod kojih kada nešto upišeš u memoriju to se odatle ne briše sve dok postoji napajanje strujom. Za takvu memoriju za čuvanje jednog bita potrebno je nekoliko tranzistora, pa je ona izuzetno skupa. Takva memorija se i danas pravi.

DDINAMIČKEINAMIČKE MEMORIJEMEMORIJE Da bi se problem sa cenom prevazišao prave se dinamičke memorije. Kod statičkih

memorija na liniju se upiše SET signal i on upiše 1 ili RESET koji upiše 0 i to je zaštićeno dok ima napajanja strujom. Dinamičke memorije se prave na principu kondezatora, ali u veoma sićušnim dimenzijama. To je premetnuta žica preko žice bez ijednog tranzistora. Ako se takav kondenzator stavi na 5V pretpostavimo da on nakon 1ms iscuri i padne ispod 3V. Sa gledišta računara 1ms nije malo vreme, on može za to vreme da izvrši 10 000 taktova. Nakon određenog broja taktova mora da se izvrši obnavljanje memorije, da podaci ne bi bili izgubljeni. Tu moraju da postoje još neka elektronska kola koja će da vrše obnavljanje memorije. Za takvo obnavljanje memorije gubiće se određeni procenat vremena, ali to će biti 1-2%.

Kada se uporede cene za statičku memoriju od 256KB može se dobiti 16MB dinamičke memorije. Sada se u računare uglavnom ugrađuju dinamičke memorije. Problem neusklađenosti brzine CPU i memorije i dalje ostaje, jer sa povećanem brzine pristupa memoriji povećala se i brzina CPU. Problem se rešava još od 60-ih ubacivanjem male memorije koja se zove keš.

Ovim se postiže da su CPU i memorija skoro usklađeni, jer se iz velike memorije podaci koji su hitno potrebni CPU, prebacuju u malu i brzu keš memoriju. Praksa pokazuje da je statistički procenat promašaja između 1 i 5%.

OOGRANIČAVAČIGRANIČAVAČI MEMORIJEMEMORIJE Pojedini veliki proizvođači su imali običaj da na svoje ploče stave ograničavače

memorije. Kada nakon izvesnog vremena želimo da povećamo memoriju onda tu memoriju

Page 28: Programski Sistemi - SP07-V0.3

moramo da kupimo od istog proizvođača. Zato što je na njihovoj matičnoj ploči ugrađen čip koji skriva dve ili tri adresne linije.

SSTARIJITARIJI NAČININAČINI ZAZA UPRAVLJANJEUPRAVLJANJE MEMORIJOMMEMORIJOM

OORGANIZACIJARGANIZACIJA MEMORIJEMEMORIJE ZAZA MULTIPROGRAMIRANJEMULTIPROGRAMIRANJE Ovo je vrlo značajan problem, jer je memorija pored procesora ranije bila najskuplji

resurs. Mora se optimizovati, jer procesor sarađuje sa njom, pa ona utiče na procesor. Memorija predstavlja najkritičniji resurs u multiprogramiranju. Glavni deo organizacije multiprogramiranja je u memoriji, a ne u procesoru. Raspoređivanje memorije na više procesa koji treba zajedno lepo da rade i da jedni drugima ne smetaju je teži problem.

Prva ideja koja bi ljudima mogla da padne na pamet su:

SSTATIČKETATIČKE PARTICIJEPARTICIJE Ovakav naziv potiče od ideje da se memorija deli na delove i ti delovi su statički, svaki

posao dobija određeni deo memorije koji se ne menja. Prednost će biti na strani jednostavnosti, ali jasno je da će to biti nefleksibilno i neefikasno. Za svaki deo postoje tri registra. U manji će se upisivati koji je proces aktivan, a u dva veća donja i gronja adresa proces koji je trenutno aktivan. Ako aktivan proces pokuša da upiše nešto u opseg van brojeva iz većih registara to mu se ne dozvoljava.

Postoje dva modela sa statičkim particijama. Jedan je da se programi pišu za određene particije i to je nerelokatibilni način. To se radilo u stara vremena, gde je program morao da se napuni sa adrese sa koje je prevođen, pa su pisani posebni programi za I particiju, za II particiju… Ovo je sistem sa višestrukim redom. Za svaku particiju postoji red programa koji čekaju. Ovo je neefikasno jer može da se desi da je red za jednu particiju veliki, a ostala dva reda prazna. Prvo rešenje je da se prave relokatibilni programi. Ovde nije rešeno gde program treba da stoji u memoriji. Sada treba imati komplikovaniji loader program koji u momentu punjenja razrešava i adrese. Loader postavlja program u memoriji gde nađe slobodno mesto. Sada postoji samo jedan red. Ovde je iskorišćenost bolja.

Memorija se ni ovde ne koristi efikasno, a veoma je skupa. Pretpostavimo da je najveći program 100KB, a prosečni programi su 10KB, 20KB… Onda je particija od 100KB veoma neiskorišćena kada se u nju smesti program od 20KB. Težnja je da se razrešavanje adresa procesa u memoriji uradi što kasnije tj. kada program krene da se izvršava, a ne za vreme punjenja u memoriju ili prilikom kompajliranja.

DDINAMIČKEINAMIČKE PARTICIJEPARTICIJE Ovde se za vreme punjenja programa u memoriji odredi prostor za taj program. Kod

statičkih particija je postojalo nekoliko registara u koje su se upisivale već ranije utvrđene adrese, a ovde se to stalno menja. Treba da postoji program koji će da čuva, pamti i menja te adrese. Ovde je situacija lepa samo u početku, programi se slažu u memoriji jedan za drugim i za razliku od onog što se dešava kod statičkih particija iskorišćenost je ovde skoro 100%. Kada programi počnu da izlaze iz memorije nastaju rupe u koje može da uđe sledeći program koji je manji ili jednak programu koji je završio. Ako je program koji je završio toliko mali da sledećih 20 programa koji čekaju u redu ne mogu da stanu, već program 21 onda je takva politika nepravedna jer se favorizuje neko sa kraja reda. Ako ubrzo posle toga izađe program iz prethodnog onda bi u rupi koje su ostavili programi 4 i 5 bilo mesta za onog koji je prvi u redu, da prethodno u rupu programa 4 nije napunjen 21. iz reda. Ovde dolazi do fragmentacije memorije. Za to postoji rešenje, to je kompakcija memorije. Taj metod je jako skup i retko se koristi. Kompakcija podrazumeva zaustavljanje sistema za sve korisnike. Koliko često će se raditi kompakcija zavisi od tipa računara, brzine, veličine memorije, vremena kada se napravi toliko rupa da je dalje izuzetno teško raditi.

Page 29: Programski Sistemi - SP07-V0.3

Postoji više politika punjenja programa u fragmentiranu memoriju:

Best Fit – kada u memoriji tražimo mesto za program onda tražimo tako da njegova veličina najmanje odstupa od veličine te zone u memoriji. Problem je u tome što treba da se prođe kroz celu memoriju, izračunaju veličine svih rupa, odbace manje, a od većih treba naći odgovarajuću. Kada se ova politika implementira na računaru pokazuje se da nije tako loša, ali nije ni preterano dobra. Kako računari drugačije gledaju na neke stvari nego ljudi, uzeto je u obzir da se razmatra politika worst fit.

Worst Fit – Ona se sastoji u tome da se uzme program i stavi u rupu u koju se najgore uklapa. U praksi se ispostavilo da je ovo dobro i da funkcioniše, čak je bolje od best fit politke. Pretpostavimo da imamo program od 50KB i neka on najbolje paše u rupu od 60KB, a najgore u rupu od 110KB. Politika best fit će taj program ubaciti u rupu od 60KB pa će onda ostati rupa od 10KB gde ne možemo da smestimo ni jedan drugi program. Tako će nam vremenom u memoriji ostajati mnogo malih rupa, pa ćemo često biti primorani da vršimo kompakcije memorije. Politika worst fit će taj program smestiti u rupu od 110KB pa će ostati još 60KB što je dovoljno da se smesti još jedan program. Sledeće dve metode proizilaze iz ove.

Overlay – ne radi sam računar već i programer. To joj je glavna mana. Program se razbije na jedinice koje se izvršavaju u različitim vremenima (unos, obrada, štampanje). To znači da program treba da se razbije u neke logičke celine, koje se vremenski ne poklapaju u smislu da treba istovremeno da se izvršavaju. Zato se za te programe predvidi isto mesto u memoriji. Ako imamo tri programa čije se izvršavanje vremenski ne poklapa, neka su to programi A B C. onda postoji jedan kontrolni program koji sve to kontroliše. Neka se prvo izvršava A. Kada on završi kontrolni program na njegovo mesto stavlja B… Ovaj metod je bio jako popularan pre 20 godina, jer su resursi bili veoma skupi. Postoje automatski overlay-i, tu računar određuje sam šta će ići u overlay na osnovu pretpostavki o izvršavanju programa. Kako je teško predvideti tok izvršavanja programa, to su uglavnom bili neuspešni pokušaji.

Swaping – se i danas koristi na nekim sisemima. To je privremeno izbacivanje iz memorije. Ako memorija nije dovoljno velika uzme se jedan deo diska i on predstavlja jedno proširenje memorije, ali na specijalan način. Kada nam zafali memorija, a treba nešto dodatno da napunimo, da ne bi došlo do dead lock-a, sistem izabere nekoliko programa iz memorije i prebaci ih na disk. Kompletna slika memorije biva prebačena na disk nezavisno od znanja programa. Program je nasilno prekinut u nekoj tački, a da nije ni svestan da je prekinut, i u tom momentu OS vodi računa o svemu. OS uzme taj deo memorije, izbaci sadržaj na disk, napuni nešto drugo što mu je trebalo, završi neki drugi posao, oslobodi memoriju i onda ponovo vrati program koji je prebacio na disk. Ovo je preteča pejdžing sistema koji mnogo fleksibilnije koristi disk kao memoriju.

Ove dve poslednje metode su se koristile za statičke i dinamičke particije, ali danas nemaju neki preveliki značaj.

EEXPANDEDXPANDED((PROŠIRENAPROŠIRENA)) II EXTENDEDEXTENDED((PRODUŽENAPRODUŽENA)) MEMORIJAMEMORIJA Expanded je stariji način, a extended noviji i provereni način upravljanja memorijom. Pre

nekoliko godina expanded je bio mnogo značajaniji, a danas je obrnuto. Kada se napravi CPU on se fabrički napravi da vidi odeđenu memoriju. To se obezbedi

tako da CPU može da izdaje adrese u određenom opsegu. Prvo su CPU bili 8-bitni, a imali su 16-bitne adrese. To znači da je CPU imao 16 adresnih linija A0, … A15. Te adresne linije čine jedan 16-bitni broj, pa su ti procesori mogli da vide najviše 64KB memorije.

Zaključujemo da onda ispod 64KB može da se ide, ali preko 64KB ne. Ovde nastaje problem expanded memorije. To se pojavilo sa prvim PC. CPU 8088 imao je 20 adresnih linija, pa je mogao da adresira 1MB. Na računar se može staviti 1MB memorije i sve to lepo

Page 30: Programski Sistemi - SP07-V0.3

funkcioniše. Može se staviti i manje od 1MB, ali kako staviti više npr. 2MB. Onda uzmemo dva memorijska čipa od po 1MB. Rešenje problema njihovog povezivanja mora biti hardverski. Sastoji se u tome da nam treba jedan 1-bitni registar koji će da bude pod kontrolom CPU. CPU povežemo linijama A0…A19 sa oba čipa. Ako tražimo lokaciju 30 onda je CPU traži i iz jednog i iz drugog čipa. Tako nešto se ne sme raditi jer se može zapaliti računar. Oba čipa imaju obično jedan signal koji pokazuje da li je čip aktivan ili ne. Taj signal se uzima sa jednog čipa i komplementarno se povezuje preko invertera za drugi čip.

OORGANIZACIJARGANIZACIJA MEMORIJEMEMORIJE Memorija je najčešće organizovana po bitovima. Kada se kupi memorija je najčešće

organizovana kao 4Mx1 ili 1Mx4 ili 512Kx8 bita. Jedinica za merenje memorije na čipovima je bit, a ne bajt. Pa se kapacitet čipova izražava u bitovima. 4MB je modul u obliku pločice na kojem je 8 čipova kapaciteta 4 mega bita.

U slučaju 4Mx1 treba imati mogućnost adresacije 4 miliona različitih adresa, a za to je potrbno 22 bita. Zato imamo adresne linije A0…A21. Imamo jednu liniju za podatke. Na čipu se nalazi još jedna iglica ce (chip enable) koja ga aktivira ili deaktivira.

Ako je ogranizacija 512Kx8, onda je potrebno ardesirati 512 000 različitih adresa pa je za to potrebno 19 adresnih linija. Zato ovaj čip ima osam linija za podatke (umesto 4 miliona bita gde je po jedan u redu, ovde je 512 000 readova po osam bita). Ovo je po kapacitetu, ceni i uopšte po svemu isti čip kao 4Mx1, razlika je samo u organizaciji.

OODNOSDNOS CPUCPU II MEMORIJSKOGMEMORIJSKOG ČIPAČIPA Možemo reći da se svaki memorijski čip može upariti sa svakim CPU, ali sa

odgovarajućim povezivanjem. Uzmimo čip 512Kx8 i CPU sa 32 adresne linije. Takav CPU može da adresira 4GB. Neka on ima i 8 linija za podatke. Sada takav CPU treba povezati sa memorijskim čipom. Paralelnim povezivanjem (A0 na A0…A18 na A18; d0 na d0…d7 na d7) smo na ovakav CPU stavili 512K memorije. Ovde sve lepo radi dok CPU ne treba da pročita nešto sa adrese 512K+1. To izgleda kao da je na A19 jedinica na ostalima nula. Kako A19 nije povezan nigde to će biti kao da tražimo adresu 0. Ovo znači da program možemo da napišemo na 8000 načina, u oko 8000 adresnih prostora, a taj program će uvek isto da se izvršava i na istom fizičkom mestu da bude.

Vratimo se našem problemu. Imamo dva čipa sa organizacijom 512Kx8, a želimo da CPU vidi 1MB. Mi bi hteli da nam memorijski prostor od 0-512K pokriva čip I, a od 512K-1MB čip II. Čipovi sami za sebe ne znaju da je jedan donja polovina megabajta, a drugi gornja. To treba spolja nekako organizovati. Primećujemo da se donja i gornja polovina megabajta razlikuju po adresnoj liniji A19. Kada je na toj liniji 0 onda smo u donjoj polovini. To može da se iskoristi u kombinaciji sa signalom ce. Želimo da kada je nula na A19 aktivan je čip I, inače je aktivan čip II. Možemo povezati liniju A19 sa ce na čipu II, a ce čipa I spojimo jedan inverter. A0…A18 je paralelno povezano i na jedan i na drugi čip, a koji će da bude aktivan regulisaće linija A19.

Kada nam treba 2MB uzećemo četiri ovakva čipa. Linije za podatke se na sva četiri čipa povezuju paralelno sa CPU, i uvek samo jedan može biti aktivan. U ovom slučaju će nam linije A19 i A20 kontrolisati koje je čip aktivan. Postoje specijalni logički čipovi koji se zovu selektori, koji na ulazu imaju 2, a na izlazu četiri linije. Takav čip radi binarno dekodiranje, tu se koristi ili kolo. Selektor se stavlja između linija A19 i A20 i ce-ova odgovarajućih memorijskih čipova.

EEXTENDEDXTENDED MEMORIJAMEMORIJA Extended memorija je memorija preko 1MB. Ona se može primeniti na XT PC računare

(nijhovo stvarno ograničenje je 1MB jer imaju samo 20 adresnih linija), ali sa pojavom CPU 80286 primenjuje se ova tehnika (386 SX mogao da adresira 16MB, 486 DX 4GB). Zbog kompatibilnosti sa starim OS i softverom ovi CPU nisu napravljeni kao čisti 16-bitni ili 32-bitni. Oni su napravljeni kao dvostepeni CPU jer se svi noviji CPU u momentu uključenja u struju bude kao 8088. Prvi mod se zove real, a drugi protected. Veliki nedostatk modela 80286 je što još u momentu dizajniranja nije predviđena instrukcija koja bi taj CPU vratila iz protected u real

Page 31: Programski Sistemi - SP07-V0.3

mod, dok se instrukcija koja ostvaruje taj povratak pojavila kod 80386. Extended memorija je ona memorija koju CPU može da vidi kada se prebaci u protected mod.

Pretpostavimo da imamo CPU sa 20 adresnih linija i dva čipo po 1MB. Kako CPU može da adresira samo jedan od ovih čipova oni se povezuju na ranije opisan način da bi CPU mogao da vidi 2MB. Mehanizam za extended memoriju je bio sledeći: unutar prostora od 1MB odredi se prozor (expanded memory page) određene veličine (najčešće 64KB), i u taj prozor se preslikavaju segmenti od po 64KB iz dodatne memorije. 1MB je podeljen na 16 segmenata od po 64KB i svaki je obeležen sa 0,1…9,A,…F. u segmentima 0-9 (0-640KB) obično je smešten OS, a u segmentu F BIOS. Zato odgovarajuću rupu treba tražiti u segmentima A-E.

Imamo 20 linija ili 20 bita koji se dele kao 4+16 bita. Prva četiri određuju o kojoj se stranici radi, a drugih 16 određuju priraštaj unutar jedne stranice. od kandidata A-E: A je obično zauzet za video kartu, B za novije video karte, C za disk kontrolere i slične stvari, ostaju D i E. Uzmimo E. Preslikamo nekih 64KB iz drugog megabajta i sada tih 64KB postaju vidljivi u prvom megabajtu. Time možemo preslikavati memoriju ne samo iz 1MB već i iz 16MB, ali smo ograničeni tim prozorom. Za ovako nešto potrebno je imati neke kontrolne programe (memory manager) koji bi ta prebacivanja iz jednog u drugi memorijski čip kontrolisali.

Ako je naš prozor u segmentu E, prva četiri bita za extended memoriju su 1110, a ostalih 16 određuju adresu unutar prozora. Treba napraviti adresni dekoder koji će da vidi da li se u adresi u prva 4 bita pojavilo 1110 ili nešto drugo. Ako je nešto drugo onda je to regularna adresa, ali ako je 1110 onda znamo da se radi o extended memoriji, pa onda veza sa CPU ne treba da ide taj čip već na neki drugi.

Adresni dekoder kada registruje 1110 povezuje CPU sa dodatnom memorijom, a u suprotnom povezuje na odgovarajuće linije prvi megabajt. Adresni dekoder će biti i-kolo sa jednim inverterom.

Sada treba znati sa kojim dodatnim čipom treba spojiti CPU. Zato mora da postoji još jedan registar koji će određivati koji deo iz dodatne memorije ide u prozor normalne memroije. Taj registar, dodatna memroija, adresni dekoder i protokol se zajedno spajaju na jednu memorijsku karticu koja se ubacuje na matičnu ploču.

CPU 80486 i Pentium mogu da simuliraju rad extended memorije. Da bi extended mogao da radi onda se u config.sys stavi linija DEVICE = EMM386.EXE, da bi DOS mogao da vidi postojanje te extended memorije još u vreme podizanja sistema. Parametar NOEMS se stavlja u slučaju da se ne želi extended memorija jer nas ona košta 64KB u visokoj memoriji, a tu mogu da se stave neki korisni drajveri koji nam trenutno trebaju više nego extended memorija.

NNOVIJIOVIJI NAČININAČINI UPRAVLJANJAUPRAVLJANJA MEMORIJOMMEMORIJOM

VVIRTUELNAIRTUELNA MEMORIJAMEMORIJA Pojavila se još 70-ih na velikim računarima. Sa pojavom PC nije se koristila, ali sa

dolaskom novih sistema, javila se ponovo potreba za korišćenjem virtuelne memorije.Definicija: Virtielna memorija je razdvajanje programerskog modela memorije od

fizičke memorije. Vrši se razdvajanje onoga što programer vidi od onoga što stvarno fizički postoji.

Korespodenciju između ove dve stvari treba da vrši OS. Jednom se u OS ugradi to da funkcioniše i to će funkcionisati s tim da programer ne treba o tome da vodi računa. Ako imamo 4MB memorije onda on vidi adrese od 1 do 4 miliona, a računar vodi računa o tome kako će svih 4MB da se vide u 1MB.

Definicja (istorijski i suštinski netačna): Virtuelna memorija je sistem gde se disk koristi kao proširenje fizičke memorije.

Suština virtuelne memorije je da se programeru da velika memorija iako je fizička mnogo manja. Sistem virtuelne memorije je sličan keš memoriji. Istorijski, kada se virtuelna memorija pojavila, korišćena je u paradoksalne svrhe u odnosu na korišćenje danas, tj. predstavljala je suženje fizičke memorije.

Page 32: Programski Sistemi - SP07-V0.3

IIMPLEMENTACIJAMPLEMENTACIJA VIRTUELNEVIRTUELNE MEMORIJEMEMORIJE Virtuelna memorija se obično implementira na dva načina:

1. Model sa segmentima (segment sistem)2. Model sa stranicama (pageing sistem)

Bez obzira od toga koji je od ova dva sistema u pitanju, programeru se na početku da odgovarajući model. To je sve što se tiče programerskog modela. Ostaje još da se vidi fizička implementacija. Ovde se kao memorija podrazumeva i obična memorija i proširenje na disku. Za razliku od implementacije keš memorije, ovde se ne radi samo o tome da je jedino pitanje, pitanje brzine. Ako je deo programa koji treba da se izvršava na disku, on ne može da se izvršava sa diska već mora prvo da se učita u memoriju. Za keš važi: keš može da se isključi a program koji se izvršava izvršavaće se sporije, ali će se izvršavati. Razlika u brzini između keša i memorije bila je za faktor 10, a ovde je faktor više stotina hiljada. Kod keša da bi sve radilo kako treba bilo je dovoljno da imamo 95% pogodaka, ali sa ovakvim procentom kod virtuelne memorije stvari će da se zaglave. Ovde treba imati više od 95% pogodaka. Ideja je slična kao kod keša, nadamo se da će 99% podataka koji nam trebaju biti u memoriji a ostatak na disku.

Prva ideja, segmentacije je prirodna. Za segmente se proglase neke logičke celine programa, jer će taj deo da radi nezavisno od toga šta radi ostali deo programa. Kada on završi učita se neki drugi deo… Ovde nastaju problemi slični kao kod dinamičkih particija, fragmentacija memorije.

Druga ideja je da se umesto segmentacije koriste stranice. Stranice su komadi jednake veličine, ali i oni imaju svoje mane, jer logičke celine ne mogu biti jednake veličine. Sa druge strane problem zamene stranice je potpuno rešen pa se to smatra prednošću. Ako imamo ograničenu fizičku memoriju i veliku virtuelnu memoriju. Podelimo ih na stranice jednakih veličina. U svakom momentu neke stranice će biti u memoriji, a neke neće. Sada dolazimo do pitanja koje stranice da budu u fizičkoj memoriji u kojem momentu, kada ih treba napuniti, a kada isprazniti. Te probleme rešava OS politikama upravljanja fizičkom memorijom. Taj problem se rešava na sledeći način:

U memoriji se napravi jedna tabela koja ima po jednu stavku za svaku stranicu. Podaci koji treba da stoje za svaku stranicu su:

Da li je stranica u memoriji ili nije? Ako je u memoriji treba da postoji njena fizička adresa u memoriji? Ako nije u memoriji onda je na disku, pa treba da postoji deo koji pokazuje gde se ona

nalazi na disku?

Stranica iz vrituelne memorije ide u bilo koji stranični okvir fizičke memorije, a OS će regulisati da sve radi kako treba. Koliko ima stranica u virtuelnoj memoriji toliko ima stavki u tabeli, tako da na osnovu te tabele za svaku stranicu znamo da li je u memoriji, ako jeste na kojoj je adresi, a ako nije odakle možemo da je pribavimo.

Teoretski extremi: Kad bi stranica bila veličine fizičke memorije, izgubili bismo multiprogramiranje. Zašto nije dobra prevelika stranica?

NIJE ODGOVOR: zato što ćemo izgubiti multiprogramiranje.ODGOVOR JE: velikom stranicom se unosi mnogo više mrtvog koda.

Ne treba da bude ni suviše mala jer mora da se održava tabela. Za jednu stavku u tabeli treba 10B i ako uzmemo da je stanica veličine 10B onda će pola memorije otići na tabelu. Veličina stranice se u praksi empirijski određuje.

Primeri virtuelnih sistema su razne varijante UNIX-a i Windows NT. Primer loše rešenog sistema virtuelne memorije su stari Windowsi.

Problem virtuelne memorije se rešava hardverski i na nivou OS. Prvo se piše program koji ne zna ništa o svemu što se kasnije dešava. On zna da je adresa npr. 24-bitna. OS i odgovarajući hardver znajući kakv se model virtuelne memorije primenjuje, ovu adresu deli na

Page 33: Programski Sistemi - SP07-V0.3

dva dela: jedan deo veličine k bita određuje o kojoj se stranici radi, a preostali deo određuje gde se nalazimo unutar jedne stranice.

Primer: neka imamo računar sa virtuelnim modelom od 8MB, ima 1MB fizičke memorije i stranicu 2KB. Programera jedino zanima virtuelna memorija gde će pisati program, a tek kasnije dolazi do izvršavanja programa u fizičkoj memoriji. Na početku nas zanima kako izgleda virtuelna adresa. Za virtuelnu adresu imamo 23 bita, svaka instrukcija ima 23-bitnu adresu. Kada takav program dođe na izvršenje ta 23-bitna adresa se učitava u neki hardver. Adresa se podeli na dva dela. Prvi deo označava o kojoj se stranici radi, a drugi koliko treba da idemo od početka stranice. Ako je stranica 2KB potrebno je 11 bita da adresiramo 2KB. Potrebno je 11 bita za adresaciju unutar jedne stranice. Ostaju još 12 bita. Oni nam govore o kojoj stranici se radi, a da se stvarno radi o 12 bita možemo da proverimo da nismo pogrešili. Sa 12 bita se mogu adresirati 4KB, iz toga vidimo da se radi o 4096 stranica. 2KB u 8MB ide 4096 puta. Starijih 12 bita određuju o kojoj se od tih 4096 stranica radi, a malđih 11 određuju gde se nalazimo unutar te stranice.

Zaključujemo da u fizičku memoriju može da stane najviše 512 stranica, a tabela će imati 4096 stavki. Ako je jedna stavka jedan bajt onda će cela tabela biti 4KB.

PPOLITIKAOLITIKA DONOŠENJADONOŠENJA,, SMEŠTANJASMEŠTANJA II IZBACIVANJAIZBACIVANJA STRANICASTRANICA Postoje dve politike paging sistema:

Demand paging – straničenje po zahtevu Anticipatory paging – donošenje stranica u napred

U praksi se isključivo primenjuje Demand paging. Ove politike su interesantne kod segmentacije. Priča se svodi na ono što je rečeno kod dinamičkih particija (best fit i worst fit). Treća i vrlo važna politika je politika izbacivanja stranica. Ovo je vrlo važna politika jer se ubacivanje i izbacivanje vrši neprekidno. Za politiku izbacivanja mogu da se smisle mnogi algoritmi, ali se brzo zaključi da se oni teško mogu primeniti, a da svi kriterijumi budu zadovoljeni. Ti kriterijumi su sledeći: sve treba da funkcioniše jako brzo i treba da izgleda hardverski jako jednostavno.

Brzina memorije meri se nanosekundama a brzina diska milisekundama, što je 1000000 puta sporije. CACHE memorija, mala ali skupa. Ona radi sporije od procesora ali brže od diska i fizičke memorije. Važno je da ona dobro pokriva fizičku memoriju. U njoj se nalazi ono što će nam najpre zatrebati, u 95% slučajeva, to nešto je tu, a u 5% slučajeva nije. Treba napraviti sistem koji će minimizovati broj Page Fault-ova (greška koja se javlja kada tražena stranica nije u CACHE-u). Kad je memorija puna, odlučuje se šta da se izbaci, a šta da se donese. Za ovo odlučivanje postoji više politika:

FIFO politika – stranica koja je prva ušla prva se i izbacuje tj. izbacujemo najstariju stranicu. Loša strana je što u memoriji možemo da imamo stranicu koja je davno ušla, ali u sebi ima važan deo koda koji svi koriste. Onda je nepravedno izbaciti je. Prilikom implementacije treba imati još jedan memorijski registar u koji će se upisivati kada je koja stranica ušla u memoriju, pa onda treba sortirati ta vremena, što bi bio preteran hardverski i softverski posao. Takođe treba spomenuti FIFO anomaliju. U izvesnim primerima se sistem bolje ponaša kada ima manje fizičke memorije nego kada ima više. Ipak, primer za to je veštački napravljen i verovatnoća da se on dogodi u praksi je 10 -12, tim pre što se u praksi radi sa nekoliko hiljada stranica gde je teško napraviti primer FIFO anomalije.

Random politika – izgleda jako jednostavno, ali u praksi implementirana neće izgledati jednostavno. Ona uglavnom služi kao referentna tačka tj. da se druge politike uporede sa njom. Random politika nam daje donje razumno ograničenje. Za ovu politiku je potrebno imati nekakv jednostavan hardver koji ne bi bio u stanju da izbaci neke kvalitetne slučajne brojeve, ali bi ipak nešto slično radio. Ovo nije jednostavno za

Page 34: Programski Sistemi - SP07-V0.3

implementaciju, a sa druge strane ni sistem se ne bi baš dobro ponašao. Pod dobrim ponašanjem podrazumeva se što manji broj straničnih prekida.

Optimalna politika Beladija – da bi se minimizovao broj page fault-ova iz memorije treba izbaciti stranicu koja nam najduže neće trebati. Izbacuje se stranica čije je sledeće referenciranje najdalje u budućnosti u odnosu na sve ostale stranice koje su u memoriji. Problem ove politike je što se u praksi ne zna tačno kada će koja stranica biti referencirana. Ova politika je teorijski optimum i potrebna nam je kao referentna tačka tj. da bi smo sa njom uporedili druge politike. Ova politika predstavlja gornju referentnu tačku.

LFU (Least Frequently Used) – najmanje često korišćena. Zasniva se na tome da se iz memorije izbacuje stranica koja je najmanje često korišćena od stranica koje se nalaze u memoriji. Ovde se ide na to da se ono što se često koristi drži u memoriji, a ono što se tako često ne koristi drži na disku. Ovde je hardverska implementacija još teža jer se pominje frekvencija pojavljivanja, tako da bi se javio problem sa registracijom vremena kada je koja stranica korišćena. Postavlja se pitanje perioda u kome treba meriti referisanje stranica. Ova politika u praksi nema naročitu primenu.

LRU (Least Recently Used) – najmanje skoro korišćena. Zasniva se na tome da se iz memorije izbacuje stranica koja najduže nije korišćena. Ova politika je modifikacija FIFO politike i ima razumniji kriterijum izbacivanja nego FIFO. I ona ima mana, sličnih predhodnoj politici. Kod programa se nikada ne može predvideti koja će mu stranica trebati, pa može uvek da se nađe kontraprimer. Pretpostavimo da postoji dovoljno veliki ciklus podeljen na veliki broj stranica. Može se desiti da se pri ubacivanju zadnje stranice tog ciklusa, da se izbaci ona koja najduže nije korišćena, a to bi mogla biti prva stranica u tom ciklusu. Ta prva stranica u ciklusu već u sledećem navratu će nam trebati.

NUR (Not Used Recently) – nije skoro korišćena. Zasniva se na tome da se iz memorije izbacuje stranica koja nije skoro korišćena. Razlikuje se od LRU po tome što se ne traži najdalje u prošlost referisana stranica, već jedna od takvih koje nisu skoro referisane. Znači: ne traži se apsolutni minimum, već nešto što je dovoljno daleko i vremenski se ne zahteva da to funkcioniše neprekidno (već da funkcioniše). Ova dva razloga omogućavaju relativno jednostavnu hardversku implementaciju. Hardver se svodi na jedan bit po stranici. Taj bit se zove bit referisanosti i služi da označi da li je stranica skoro korišćena ili ne. To znači da su svi bitovi na početku postavljeni na nulu, a kada se stranica koristi u taj bit se upiše jedinica. Može se desiti da su posle izvesnog vremena svi bitovi postavljeni na jedinicu, pa su onda sve stranice ravnopravne. Problem se rešava modifikacijom ove politike.

Hardverska modifikacija NUR politike – prvo što treba uraditi je to da kada se stranica donosi u memoriju njen bit referisanosti se neće postaviti na 1 već će ostati 0. Opet nakon nekog vremena će svi bitovi biti postavljeni na 1. Zato se prave neke jednostavne hardverske modifikacije koje se sastoje u periodičnom resetovanju svih bitova refrisanosti na nulu. Zbog toga treba da se odredi periodična konstanta koja će nakon vremena t resetovati bitove. Sada će sve ovo da funkcioniše, jer posle vremena t/2 nakon resetovanja neke stranice će imeti postavljene bitove referisanosti na 1, a neke na 0, pa su te stranice kandidati za izbacivanje.

Tu ostaju dva problema. Jedan je rešiv, a jedan nerešiv. Prvi problem je odabrati konstantu t. ona može biti i prekratka i predugačka pa treba naći neku sredinu. U praksi obično za svaki sistem i svaki program treba eksperimentisati sa ovom konstantom, da se resetovanje obavi pre nego što se svi bitovi postave na 1. Drugi problem je, posle resetovanja svi bitovi su postavljeni na 0, sada ponovo ne znamo koju stranicu da izbacimo jer su sve ravnopravne.

Ovde se mogu izvršiti neke modifikacije. Te promene su u smislu dodavanja još jednog bita koji bi određivao da li je po stranici pisano ili ne. Taj bit se zove bit modifikovanosti. Bit referisanosti se postavi na 1 bilo kada pišemo ili čitamo, a bit modifikacije se postavi na 1 samo kada pišemo. Sa ova dva bita mogu se napraviti četiri kombinacije:

0 stranica koja nije referisana i nije modifikovana

Page 35: Programski Sistemi - SP07-V0.3

1 stranica koja nije referisana a jeste modifikovana10 stranica koja je referisana a nije modifikovana11 stranica koja je referisana i modifikovana

Ovim redom su stranice označene kao poželjne za izbacivanje. Kombinacija 01 čini se da logički nije moguća jer je referisanje širi pojam od modifikovanja, ali gledajući kako to sve stvarno ide vidimo da je taj slučaj moguć. Stranica se prvo referiše pa onda modifikuje, ali kada istekne vremenska konstanta onda se resetuju samo bitovi referisanosti, a bitovi modifikacije ostaju nepromenjeni. Ovaj redosled je i najispravniji. Izbacivanjem stranice koja je skoro referisana, a nije modifikovana rizikujemo da izgubimo mnogo jer nam je možda baš to radna stranica.

FIFO anomalija – pojava da kod FIFO algoritma može da se desi da sa povećanjem fizičke memorije se poveća broj page fault-ova (javlja se više straničnih prekida). Npr. imamo memoriju veličine tri stranice A, B i C. Niz memorijskih lokacija punimo ovakvim straničnim zahtevima:

Prve tri stranice učitamo redom u memoriju, prvo A, pa B, pa C. Kad naiđemo na zahtev za stranicom D, izbacićemo najstariju, a to je A i umesto nje učitati D. Zatim se traži A, a nju smo upravo izbacili, izbacićemo najstariju, a to je sad B i učitati A. Zatim se traži B, izbacićemo C i učitati B. Svaki put imaćemo stranični prekid. U celom nizu straničnih zahteva samo tri puta nećemo imati prekid.

| - označava da je stranični prekid nastao pri zahtevu za određenom stranicom.Sada dolazi nezgodni deo. Povećajmo memoriju na četiri stranice. Ako imamo iste stranične zahteve kao gore, ovako će izgledati stranični prekidi:

Pokazuje se da samo dva puta nismo imali stranični prekid. Još gore nego u prvom slučaju. Sa većom memorijom imali smo više straničnih prekida.

Na osnovu FIFO anomalije razvila se teorija o politici vođenja memorije nazvana stek algoritmi. Stek algoritmi su takvi kod kojih je sadržaj memorije sa X fizičkih stranica podskup sadržaja fizičke memorije sa Y stranica, gde je Y > X. To znači da će veća memorija da sadrži sve što je sadržala i manja memorija uz još nešto. Ako je algoritam takav onda ne može da dođe do anomalije, jer veća memorija ima sve što je imala i manja. Svi algoritmi gore spomenuti, osim FIFO algoritma, su stek algoritmi.

Radni setovi (working set) – skup stranica jednog programa koje on trenutno koristi. Radni set ne zavisi od veličine programa koji se izvršava. U memoriji moraju biti prisutni kompletni working set-ovi. Ako oni nisu kompletni dolazi do velikog broja page fault-ova, nezavisno od toga koju politiku koristimo. Treba uskladiti stepen multiprogramiranja i broja working set-ova, a to se postiže aproksimativnim utvrđivanjem dužine vremenskog prozora (interval korišćenja stranica). Ako se pretera sa sistemom multiprogramiranja dolazi do trashing-a (postoji ogroman broj page fault-ova) tj. naglog pogoršanja sistema. Ovaj problem se rešava smanjenjem stepena multiprogramiranja.

UUPRAVLJANJEPRAVLJANJE ULAZNOULAZNO--IZLAZNIMIZLAZNIM JEDINICAMAJEDINICAMA

Page 36: Programski Sistemi - SP07-V0.3

Upravljanje resursima kao što su ulazno-izlazne jedinice uglavnom se svodi na upravljanje hard diskom. Hard disk najviše utiče na performanse sistema i jedino kod njega ima smisla razmatrati neke politike u cilju poboljšanja performansi. Dva najveća razloga za razmatranje hard diska su: svi programi se nalaze na disku i hard disk dobija još više na značaju ako koristi sistem sa virtuelnom memorijom, gde se deo diska koristi kao produženje memorije.

U prošlosti kada je u prvom planu bio računar na koji je bilo povezano mnogo korisnika, fizička memorije je bila mali deo virtuelne memorije, pa su stranice stalno išle sa diska u memoriju i obrnuto. Danas se virtuelna memorija ne koristi u tolikoj meri, ali se ipak koristi kao neka vrsta prinude kada nema dovoljno fizičke memorije. Danas se virtuelna memorija uglavnom koristi kao neki dodatak običnoj memoriji. Koristi se ponekad, u kritičnim situacijama, pa je pomalo izgubila na značaju kakav je imala pre.

Procesor sve ulazno-izlazne jedinice vidi kao memoriju, tako da se svi spoljni uređaji prilagođavaju tome i predstavljaju kao memorija.

UUPRAVLJANJEPRAVLJANJE HARDHARD DISKOMDISKOM HD su se pojavili dosta davno, još pre pojave PC, ali to su bili izuzetno skupi uređaji koji

su ugrađivani u velike računare. Uzmimo za referentnu tačku 70-e godine, kada su mini-računari bili popularni. Tada su postojale dve vrste tvrdih diskova:

Jeftiniji – oblika većeg tanjira, imali su prečnik 0.5m i kapacitet 5-10MB. To je bio nepromenljiv medijum koji kada se stavi u računar više se ne vadi.

Skuplji – korišćeni u profesionalne svrhe na sistemu koji opslužuje veliki broj korisnika i bio je promenljiv. Drajv za takav disk bio je dimenzija sadašnje veš mašine u koga se umetao HD oblika valjka. Kapacitet je bio 40MB i mogao je da se vadi iz drajva i ubacuje u drajv. Cene su im bile velike.

Sa pojavom AT računara počeli su da se urgađuju HD u PC. Cena takvog HD bila je 2-3 puta veća od cene samog računara ali ubrzanje u odnosu na flopi bilo je fantastično. Tadašnji HD su imali kapacitet 5MB, a kapacitet mnogo sporijeg flopija je bio 0.3MB. Kasnije dolazi do unapređenja karakteristika HD, ali pošto je to mehanički uređaj tu je sporije dolazilo do unapređenja nego kod memorije i CPU.

Bitne promene koje bi mogle biti urađene na nivou principa rada su:Umesto rotirajućeg HD da se ubaci neka vrsta memorije koja bi na drugačiji način

pamtila podatke; da se umesto mehaničkog principa rada postavi optički princip rada HD.HD služi kao sekundarna memorija, za trajno čuvanje podataka. Primarna memorija, čak

i kada je pravljena od feritnih jezgara, nije se smatrala pogodnom za trajno čuvanje podataka zbog malog kapaciteta i visoke cene. Što nemamo kontrolu nad tim šta se puni u tu memoriju u kom stanju, gde su podaci u memoriji. Ljudi su primetili da je magnetno čuvanje informacija najbrže, najsigurnije i najtrajnije. U računarskoj tehnici HD treba da zapamti dva nivoa koji će predstavljati 0 i 1. Treba napraviti i uređaj koji će da prepozna te nule i jedinice i treba napraviti standard gde će se znati gde i šta treba da se upisuje i kojim redom.

Vremenom se došlo do sledećeg standarda. Osnovnu jedinicu magnetnog diska predstavlja 1 tanjir koji ima u sredini osovinu oko koje se vrti. Premazan je feritnim materijalom koji stalno može da se namagnetiše. Podaci se upisuju po stazama. Tu vidimo razliku u odnosu na današnje CD, gde nema više staza već postoji jedna spiralna. Tu nastaju problemi: glava za čitanje treba da se kontinualno pomera sa okretanje diska; pristup je spor, jer ako treba pristupiti datoteci na kraju spirale treba mnogo čekati.

Radi maksimalnih performansi HD ideja sa spiralom je odbačena, a prihvaćena je ideja sa koncentričnim krugovima. Podaci se nalaze na koncentričnim krugovima koji se zovu trake ili staze. Ti podaci se čitaju pomoću glave za čitanje. Glava je slična onoj kao kod kasetofona. To je mehanička sprava koja na sebi ima metalni produžetak koji deluje kao magnet i ima žičanu navojnicu kroz koju može da se pušta struja ili koja može da očitava indukovanu struju. Pisanje ide tako što kroz navojnicu prolazi odgovarajući napon koji namagnetiše magnet i odgovarajući deo na ploči. Čitanje se odvija tako što namagnetisani deo ploče prolazi ispod glave u kojoj se zatim indukuje napon koji daje 0 ili 1. Sada je pomeranje glave diskretno, a ne kontinualno.

Page 37: Programski Sistemi - SP07-V0.3

Kada se 0 i 1 upisuju duž kocentričnog kruga, treba znati gde je početak a gde kraj svakog bajta. Od tehnologije zavisi koliko bitova može da stane na jedan krug. Zbog ovakvih problem uvodi se standard da se staza deli na određeni broj sektora. Veličina svakog sektora je 512B. Osnovna jedinica diska je onda sektor. Kada se pristupa HD pristupa se jednom celom sektoru. Koliko će sektora biti na jednoj stazi zavisi od tipa diska. Da bi računar prepoznao početak i kraj sektora, onda između svaka dva sektora treba da postoji prolaz koji se zove međusektorski gap. Svaki sektor ima na sebi sector header, gde se upisuje redni broj sektora, informacija za korekciju grešaka.

Ovo je standard koji poštuje svaki proizvođač, ali mimo toga svaki od njih ima svoje dogradnje i dodatke. Ti dodaci mogu biti: korišćenje obe strane ploče HD radi minimizacije troškova. Tu je potrebna dogradnja samo još jedne glave za čitanje. Ako dalje hoćemo da povećamo kapacitet diska onda uzmemo još jednu takvu ploču kojoj dodamo još dve glave za čitanje.

Kada su HD počeli da se ugrađuju standard je bio 5.25'', a debljina nije bila strogo definisana. Zbog toga su postojala dva standarda: full hide i half hide. Full hide 4'' (10cm), a half hide 2''. U zavisnosti od te visine moglo je da se pakuje više ili manje ploča.

Kasnije se prešlo na novu tehnologiju gde se povećala gustina zapisa, razvija se elektronika glave i ostalih uređaja, a diskovi postaju sve manji. Tehnologija zapisa informacija na HD vremenom se menjala. Najstarija tehnologija se zvala MFM. Takvih diskova danas skoro više nema. Svi ti diskovi su se zvali vinčester diskovi.

Pretpostavimo da imamo HD glavu za čitanje i jednu stazu. Matematički računato može se na tu kružnicu upisati beskonačno 0 i 1. U praktičnom životu postoje neka fizička ograničenja na najmanji deo na koji može da se upiše 0 ili 1. Ta fizička ograničenja zavise od same glave za čitanje. Kod prvih HD na svakoj ploči je bilo 100-300 staza. Koliko će staza biti zavisi od preciznosti stepena motora za pomeranje glave. U to vreme se pokazalo da na jednoj stazi može da bude 17 sektora, 512B*17 je približno 8.5KB što je 7000-8000 bitova.

Takođe se javljao sledeći problem. Pretpostavimo da imamo dugi niz 0 ili 1. Jednu za drugom 1000 nula npr. Kada se pročita zadnja nule, ne možemo biti sigurni da smo pročitali baš 1000 nula a ne 999 ili 1001. To zavisi od preciznosti sata računara. Onda treba da postoji nekakav sat i standard u smislu broja obrtaja diska. U to vreme brzina je bila 3600rpm, što je 60 rotacija u sekundi, 16ms za jednu rotaciju. Pa se dobije 160ns vreme čitanja jednog bita. Da bi znali koliko nula je pročitano meri se 1000*160ns. Da bi se došlo do tačnog podatka računar treba da ima jako precizan časovnik kome ne sme da se menja takt. Tačnost čitanja zavisi od brzine rotacije. Teško je napraviti elektromotor za koji se garantuje apsolutna jednolikost rotacije. U stara vremena bilo je malo poverenje u jednolikost rotacije tako da se po jedan sinhronizacioni impuls upisivao između svake dve binarne cifre. To znači da je na svaki bit išao jedan sinhronizacioni impuls pa je ta tehnologija nazvana MFM (Modify Frequency Modulation). Kod ovog načina zapisa gubi se mnogo prostora na disku.

Prva povećanja kapaciteta diska nisu se desila zbog promene fizičkih parametara diska, već se promenio način zapisa informacija. Novi zapis je doveo do toga da fizički isti diskovi imaju za 50% veći kapacitet. Taj novi zapis se zvao RLL (Run Length Limited) ograničena dužina serije. Zasnovan je na smanjenju broja sinhro-impulsa. Ovde je na tri bita informacija išao jedan sinhro-impuls. Ovaj zpis od tri bita nije išao na običan način, već se ta tri bita prvo kodiraju pa se onda zapišu.

Glava HD ne sme da dodiruje površinu diska, a mora biti jako blizu te površine. To rastojanje se meri u mikronima. Pri brzini rotacije od 5400 (7200) rpm glava ne bi smela naići ni na kakve prepreke kao što su zrnca prašine. Čak i najfinije zrno prašine je višestruko veće od razmaka glave i ploče. Zato su HD hermetički zatvoreni i kada se jednom otvore neupotrebljivi su. Zbog malog razmaka glave HD, osetljivi su na udare. Naročito stariji modeli. Ti problemi su kasnije rešeni: može da se napravi tako da glava nikad ne udari u površinu, a i ako udari površina se pravi izdržljivijom, neće se odmah oštetiti; takođe je obezbeđeno da kada HD ne radi da glava bude na nekom neopasnom mestu, iznad dela gde nema podataka.

Posle RLL javio se ESDI (Enhanced Small Device Interface) unapređen interfejs za male uređaje. Davao je još veću gustinu zapisa, tako što je neke funkcije prebacivao lokalno na disk,

Page 38: Programski Sistemi - SP07-V0.3

a broj sektora se povećavao. Kod MFM je bilo 17 sektora u traci, RLL 26, a ESDI 30-32. Parametri diska su: broj glava (broj površina), broja traka na jednoj površini i broj sektora na stazi. Kod starijih računara ti parametri su se navodili pri uključenju računara, a kasnije se ti parametri navedu jednom i pamte pomoću baterije. CMOS memorije.

Unapređenje dolazi i sa druge strane, tako što se više ne prave diskovi sa stepen motorom, gde se korak po korak pomera glava sa staze na stazu, već sa servo pločom. Gde se na jednoj posebnoj ploči upisuju podaci o stazama, a glava se ne pomera sve dok ne počne da čita podatke o odgovarajućoj stazi. Ovde je pomeranje kontinualno, a ne stepenasto, i glava može da se pomera napred nazad sve dok se ne podesi na najjči signal. To je sledeća tehnologija. Od tada diskovi imaju neparan broj površina. Jedna služi za pozicioniranje na traku.

Kod današnjih diskova koji su se pojavili krajem 80-ih iskorišćena je jedna dobra ideja da se kontroler prebaci na sam disk. To je IDE standard. Time se dobija mogućnost za gušće zapise i za bolje iskorišćenje fizičkih resursa. Što se tiče sektora koji se u toku rada oštete, njih kontroler automatski pronalazi, zapisuje da oni ne valjaju i izbacuje ih iz upotrebe. Danas se obično koriste unapređeni IDE diskovi, EIDE diskovi.

Lako se vidi da trake u obliku koncentričnih krugova nisu jednake dužine. To znači da one nisu ekvivalentne u pogledu količine zapisanih bitova. Najjednostavnije rešenje je da onoliko koliko možemo da zapišemo na najkraćoj stazi zapisujemo i na ostalim stazama. U ovom slučaju kapacitet se ne koristi u potpunosti. Kod novih diskova kao posledica integracije HD i kontrolera imamo različit broj sektora u raznim stazama. Treba samo napisati odgovarajuće podatke za taj disk. On se sastoji od jednog ili dva tanjira širine 3.5'' i debljine 1'' sa velikom gustinom pisanja gde se na spoljnim stazama stavlja veliki broj sektora. OS danas fizičke parametre HD ne zna, već oni komuniciraju na nivou sektora, i sa stanovišta OS HD je nekakav linearni prostor.

Postoji još jedna vrsta diskova koji su išli paralelno sa IDE diskovima, to su SCSI diskovi. To je definicija jedne magistrale kojom mogu da se periferni uređaji priključe na računar. Kod SCSI može najviše 7 uređaja da se stavi na 1 kontroler. Može se priključiti 7 diskova, ali i razni drugi uređaji kao CDR drajvovi, razni skeneri… Ako je stavljen SCSI disk onda će se taj uređaj sam prijaviti i on će dalje sve sam da kontroliše. SCSI diskovi su bili interesantni za velike kapacitete jer je ranije za obične HD bilo ograničenje na 32MB a kasnije na 512MB.

PPOLITIKEOLITIKE OPSLUŽIVANJAOPSLUŽIVANJA HDHD Hardverski parametri diska koji su od značaja operativnom sistemu:

Brzina rotacije – je brzina kojom se disk okreće. Danas je to 5400 (7200) rpm.Seek time – brzina pomeranja glave od jedne do druge staze. Najčešće je 1ms do 3ms. Rotaciona latencija – vreme traženja podatka i zavisi od brzine rotacije.Transfer time – vreme za koje podatak moze da se pročita i zavisi od brzine rotacije.

Politike opsluživanja HD koje se razmatraju prilikom izgradnje OS: FIFO ili FCFS (First Came First Served) politika – korisna je kao referentna tačka.

Zahtevi će biti opsluživani kojim su redom stigli. Ova politika nikoga ne favorizuje. Algoritam ima osobinu da je jako pravedan, ali je i jako neefikasan – jer izaziva veliko šetanje glave, jer zahteve opslužujemo onim redom kojim su došli, a ti zahtevi su slučajni. Kako je HD izuzetno spor efikasnost je od primarne važnosti.

SSF (Shorter Seek Frist) politika – zasniva se na tome da se prvo opslužuje onaj zahtev do koga je pomeranje glave najmanje. Algoritam je efikasan, ali nepravedan (disperzija je velika). Pri dobijanju podataka sa diska gubi se vreme na sledeće: seek time; rotaciono čekanje; vreme transfera. Seek time zavisi od mehanike za pomeranje glave i tu su postignuti napretci tako da je tu razvoj došao do maksimuma. Vreme transfera je takođe važan faktor. Često su zahtevi za čitanjem veći od jednog sektora. Čitanje zavisi od: brzine rotacije diska, gustine zapisa… To čitanje donedavno nije bilo jednostavno, jer kontroleri nisu bili dovoljno brzi. Do pre nekoliko godina postojao je jedan važan faktor: interliv faktor. To je specijalan način smeštanja podataka na disk. Ako imamo datoteku koja se sastoji od 10 sektora. Prva ideja je da se tih 10 sektora

Page 39: Programski Sistemi - SP07-V0.3

upišu u jednu traku jedan za drugim. U starija vremena se dešavalo da elektronika kontrolera i prebacivanje u memoriju nisu dovoljno efikasni, tako da kada 1 sektor prolazi ispod glave, on trpi odgovarajuću obradu u tom smislu da se signali prerađuju, pretvaraju u bajtove i šalju u memoriju, što traje neko vreme. Kada dođe sledeći sektor pod glavu podaci iz prethodnog sektora se još nisu obradili. Tako će taj sledeći sektor da pobegne, pa će morati da se čeka sledeća rotacija. Zato se radilo nešto što se zove inter-leaving koje se sastojalo u tome da se sektori jedne datoteke ne upisuju na disk jedan iza drugog. Za najstarije diskove faktor preplitanja je išao 1:6. Danas je interliv 1:1, vreme čitanja je konstanta i brzina rotacije je praktično konstanta, tako da je onaj prvi faktor seek time jedini podatak sa kojim ima smisla nešto raditi da bi se ukupno vreme smanjilo. (pojavili se 7200rpm HD). Postoje tehnologije koje su uvedene iz razloga sigurnosti, ali koje mogu imati značaja za brzinu čitanja. To su RAID tehnologije. To je ideja koja se primenjuje uglavnom za velike servere gde se više diskova stavlja da rade zajedno. Iz svega proizilazi da je politika optimalna jer se tu nastoji da se glava pomera što manje. Optimalna je u smislu maksimizacije protoka. Time se gubi pravednost, gube se i drugi parametri optimalnosti: prosečno vreme čekanja. Prosečno vreme čekanja kod FIFO može da bude 20ms, ali kod SSF prosečno vreme je npr. 10ms. To srednje vreme je napravljeno na jako nepravedan način. Neki zahtevi su opsluženi za 1ms, neki za 5ms, neki 8, a neki 10… Raspon vremena opsluživanja je 1-100ms, dok je taj raspon kod FIFO 15-25ms. Pretpostavimo da je sistem preopterećen i da zahtevi stalno stižu. Tada se lako pokaže da se kod SSF glava zadržava negde kod sredine HD. Tada zatevi sa krajeva HD skoro nikad neće biti opsluženi.

SCAN (lift) politika – ova politika je slična SSF, ali je zasnovana na tome da se opslužuje najbliži zahtev s tim da glava ide samo u jednom smeru, dok ne dođe do kraja diska, pa se onda vraća na početak tj. ide slično liftu. Gubimo 3% efikasnosti da bi dobili 90% pravednosti. Nema bojazni da će ovo da izazove neefikasnost jer je pretpostavka da zahteva ima mnogo, pa ako ih ima na jednoj ima ih i na drugoj strani u odnosu na glavu. Što se pravednosti tiče mnogo je dobijeno, jer sada nema neograničenog čekanja na unutrašnjim i spoljnim trakama. Ipak postoji mala nepravednost, jer kako se ide sa spoljne strane prema unutra i obrnuto srednje staze će biti pređene dva puta, a krajnje samo jednom. Opsluživanje u sredini je opet bolje nego na krajevima.

C-SCAN politika – to je lift u jednom pravcu. Ovde više nema favorizovanja sredine. Sa malim gubitkom brzine ovaj algoritam eliminiše nepravednost.

Postoje razne modifikacije ovih algoritama za razne specijalne slučajeve, ali su ovi algoritmi uglavnom principi koji treba da se shvate.

Uobičajeno je da se stavlja keš između HD i računara. To je jedan bafer koji je ili obična memorija ili dodatna memorije na kontroleru gde se memorišu stvari za koje se ima utisak da bi mogle dodatno da nam trebaju, uskoro, i time da se ubrza transfer. Kako to radi rešeno je na nivou HD. U jednoj kutiji su HD, kontroler i ta memorija.

FFAJLAJL SISTEMSISTEM Na svakoj spoljnoj memoriji postoji nešto što se zove fajl sistem, nekakva organizacija

podataka. Ta organizacija ima svoju hijerarhiju. Osnovna jedinica na svakom računaru je bit. 8 bitova se grupišu u bajt i to je obično najmanja adresibilna jedinica u memoriji. Jedan bajt čuva ili male brojeve ili jedno slovo. Sledeći hijerarhijski nivo je fajl. Precizna definicija fajla ne postoji, ali može da se kaže da je fajl neka skupina podataka koja čini celinu. Fajlovi se obično sastoje od odgovarajućeg broja sektora u zavisnosti od OS. Mogu se više sektora organizovati u nešto veće, u dosu sektori se grupišu u klastere. Ako je fajl takav da je deo zadnjeg sektora neiskorišćen to tako ostaje. Fajl je osnovna jedinica kojom se pristupa podacima. Bitno je da on ima ime. Sa fajlovima mogu da se obave razne operacije: kreiranje, brisanje, kopiranje… pored tih manipulacija treba da se odredi ko to može da radi. Bitna svrha fajl sistema je omogućavanje kontrolisanog pristupa.

Davanje imena fajlovima zavisi od OS. Uslov koji OS treba da zadovolji je da pristup fajlovima po imenu bude ugodan korisnicima. Najčešće je dužina imena fajla ograničena, a ako

Page 40: Programski Sistemi - SP07-V0.3

nije korisnik je sam ograničava. Imena se najčešće sastoje od slova, ali mogu da dođu u obzir i neki drugi karakteri kao što su cifre i neki specijalni znaci. Stvar koja je uobičajena kod mnogih OS je da se ime sastoji iz dva dela, imena i ekstenzije. Ideja ekstenzije je da se fajlovi grupišu po nameni. Tu postoje ekstremi, dos ne izvršava nešto što nema ekstenziju exe com ili bat, dok kod unix-a nije potrebna ekstenzija. Često se kod imena fajlova koriste džoker znaci, unix je tu precizniji i on koristi regularne izraze.

U svakom OS danas postoje i neki specijalni fajlovi. Neki od njih su zastupljeni u svim OS. To su fajlovi koji se zovu standardni ulaz i izlaz i OS ih dodeljuje uređajima koji su najpopularniji, tastatura i ekran. Kada se OS startuje te dve datoteke se otvore.

Negde moraju da se čuvaju informacije o tome ko može da pristupi fajlovima i ko može da daje imena tim fajlovima. Postoji takozvani file deskriptor što bi bila svaka informacija o svakoj datoteci u OS. Tu se pre svega čuva ime, a u zavisnosti od OS podaci o pristupu… Podaci o pristupu u dosu se zovu atributi, to su 4 bita (ro, hidden, system, archive). Tu su još podaci o veličini datoteke, datum kreiranja, datum modifikacije. Sve to zajedno je file deskriptor.

Najjednostavnija organizacija je flat file system koji se danas ne koristi više nigde, sastoji se u tome da se sve nalazi na istom mestu. Razni OS imaju razne načine za komunikaciju sa spoljnim uređajima. U dosu im se dodeljuju slova. U unix-u se oni montiraju na odgovarajuća mesta u direktorijumu.

Podaci se organizuju hijerarhijski. Postoji struktura koja se zove direktorijum, to je neka tabela koja čuva file deskriptore. Ona se pravi fiksne veličine i to je problem sa tim modelom. Ako se ostavi malo mesta, doći će do toga da ne možemo da stavimo onoliki broj fajlova koji smo planirali, a ako ostavimo previše mesta, biće praznih polja koja će zauzimati mesta na disku. Ta struktura se može napraviti i dinamičkom, ali to može izazvati i druge probleme.

Alokacija prostora i pronalaženje gde je šta zavisi od OS. U dosu postoje dve strukture koje se bave time: direktorijum i fat. Kod fat-a dos radi sa diskontinualnom alokacijom, bez neke naročite optimizacije. Kod određivanja prostora javljaju se dileme i problemi kao i kod memorije. Preovladava ideja da tu nije naročito bitno da se neke performanse poboljšaju, već radi najjednostavnijim metodama. HD se deli na sektore, a neki sektori su slobodni a neki zauzeti. Onda mora da se vodi evidencija šta je slobodno, a šta zauzeto i kada treba prostor on se traži u listi slobodnog prostora. U početku je sve lepo, podaci idu kontinualno jedan za drugim i HD se redom popunjava. Kada se HD napuni i počne da se briše onda nastaju rupe. Tada sistem počinje sporije da radi. To nije pretrano bitno pri čitanju običnih datoteka, ali virtuelna memorija traži kontinualni prostor na disku. I ovde može da se uradi kompakcija, ali to je relativno skupa operacija pa nema smisla da se radi često. To nije bio deo OS već se radilo drugim programima, a kasnije ti alati postaju deo OS.

KKAKOAKO RADIRADI FATFAT To je povezana lista zauzetih i slobodnih klastera. U direktorijumu gde imamo

podatke o fajlu stoji: ime, atributi, vreme kreiranja, veličina i kao glavno početni klaster. Ako je fajl veći od 1 klastera stoji samo broj početnog klastera. Fat ima po 1 mesto za svaki klaster i u svakom od tih mesta postoji pokazivač na sledeći klaster osim ako nije krajnji gde onda stoji specijalni znak koji pokazuje kraj fajla. Postoji jedna prelazna lista koja čuva neupotrebljene klastere. Kada se neki fajl izbriše njegovi klasteri se dopišu na praznu listu. Ako se uništi fat onda se pogube informacije šta se nalazi na disku. U dosu fat se čuva na spoljnim stazama. Ovo ima svoje mane jer ako je sredina diska deo kojem se najčešće pristupa neoptimalno je za svaki klaster glava treba da ide na kraj. Zato se kod nekih OS fat čuva na sredini. Ni time se ništa značajano ne dobija pa se te informacije baferišu.

Treba spomenuti da je brisanje kod svih OS logička a ne fizička operacija. U dosu kad se izbriše fajl, onda se njeno mesto u direktorijumu promeni samo na taj način što se prvo slovo zamni nekim specijalnim znakom, a sve ostalo ostaje isto. Na osnovu tog specijalnog znaka OS prepoznaje da je to prazno. U fatu klasteri tog fajla bivaju proglašeni slobodnim, samo početni klaster se nadovezuje na kraj liste praznih.

Page 41: Programski Sistemi - SP07-V0.3

U unix-u postoje i-nodes. To je nešto slično klasterima u dosu i njihovim nadovezivanjem se prave fajlovi i direktorijumi kao specijalna vrsta fajlova. U unixu link je pokazivač na neku drugu datoteku.

Back up medijumi su različitog kvaliteta. Jedno vreme su bili popularni mini kertridži sa kapacitetom 120MB. To je bilo rešenje jedno vreme iako je dosta nepouzdano. Postoji totalni back up, ceo sadržaj HD. Postoji i inkrementni, izvrši se prvo totalni, a sutra se bekapuje samo ono što je menjano od juče. Najviše ima smisla back up sa jednog HD na drugi. Postoje i HD gde je jedan ogledalo drugog.

U raznim OS kontrola pristupa se može vršiti na razne načine. Obično se gleda kontrola pristupa fajlovima, ali ako nemamo pristup direktorijumu za čitanje onda ništa u njemu ne možemo da čitamo. Takođe je važno ko može da radi sa fajlovima. Uobičajeno je da se korisnici podele u nekoliko grupa. Najčešće se deli na vlasnika, pa grupa gde više korisnika pripada istoj grupi, i ostali. Četvrta grupa se zove sistem gde su administratori ili sam OS. Windows NT ima najrazrađeniji fajl sistem gde se može postaviti sve na najnižem nivou. Može se kreirati proizvoljan broj grupa.

Treba voditi računa o tome, da su tamo ge se ima pristup nekim specijalnim datotekama česti problemi sa sigurnošću. Kada korisnik treba da štampa onda se koristi neka zona na disku kojom može direktno da se pristupi štampaču. Korisnik treba sada da manipuliše sistemom, a on je običan korisnik koji nema prava da menja te sistemske stvari. Sa druge strane korisnik treba da ima mogućnost da koristi te resurse. U novijim sistemima ni administrator nema sva prava. Sistem zaštite je takav da se administratorima ostavlja pravo da mogu da urade prktično bilo šta zbog održavanja sistema, ali ne bez traga. U NT-u administrator ne može da izbriše korisnikovu datoteku bez traga. To on radi preuzimanjem vlasništva.

DDODATNIODATNI UREĐAJIUREĐAJI

Jedan od dodatnih uređaja je sat. On uglavnom služi za označavanje da su fajlovi menjani, postavljanje vremena, datuma…

Danas su veliki sistemi obično višekorisnički pa je više korisnika priključeno na jedan štampač. Obično štampanje ne ide tako da ono što treba da se štampa ide direktno na štampač već postoji spooling sistem (sistem bafera) koji funkcioniše tako što sve što korisnici šalju ide u neke privremene fajlove na disku, a OS određuje kako i kojim redom će ići štampanje. Kada se štampanje završi onda se privremeni fajlovi obrišu.

Komunikacioni kanal je jedan interesantan resurs za koji su išli odgovarajući drajveri. Danas se najčešće radi o serijskim portovima. Spadaju u grupu mrežnih kartica. Modem služi za prenos podataka preko telefonskih linija. Serijski portovi definišu način za prenos binarne informacije. Taj protokol je dosta star i zove se RS320 (standard za prenos digitalne informacije preko serijskih portova). Ako imamo dva računara i sa jednog hoćemo da presnimimo čitav direktorijum na drugi onda i na jednom i drugom treba imati program koji će sa jedne strane rastaviti taj direktorijum na fajlove pa na bitove, a sa druge strane te bitove sastaviti u fajlove i direktorijum. Treba da postoje mehanički, električni i logički protokoli koji će to omogućiti. Mehanički se sastoji u konektorima (da se žice ne bi vezale u čvor), električni su oni kako se definiše 0 i 1 (12V=1 0V=0), a logički se sastoje u saznanju koliko taj signal traje i kako se ti signali sinhronizuju. Ovde se stvar rešava start i stop bitovima. Stavi se start bit koji mora da je 1 i stop koji mora da je 0. Sada svaki bajt ima 10 bita. Sada nema problema slanja velikog niza 0 ili 1, jer kada se prelazi sa bajta na bajt garantovano se ide sa stop bita na start bit. Ako se ide sa serijskog na serijski port uobičajene brzine su bile: 300, 1200, 2400, 9600. U starija vremena mereni su bodovi (broj promena u sekundi), a u novija vremena brzina se meri u jedinici bita u sekundi. Broj promena u sekundi je funkcionisao samo na niskim brzinama. Kasnije se uvode razni nivoi, ne postoje samo dva nivoa (0 i 1) već postoji 4 nivoa: niski, donji, gornji i visoki. U tom slučaju broj boda ne odgovara broju bita (za 4 nivoa 300boda = 600bita).

Page 42: Programski Sistemi - SP07-V0.3

Kod starijih portova brzina je išla najviše do 9600. Kasnije se ide na dvostruko od toga 19200, a još kasnije su počeli da se ugrađuju portovi koji imaju još veće brzine. Današnji portovi podržavaju od 100-120 Kbita/sec. Ovo je u slučaju digitalnog prenosa.

U slučaju prenosa telefonom treba od digitalnih informacija na jednom računaru dobiti digitalne informacije na drugom, a između su modemi. Modemi imaju funkciju da modulišu te signale na nešto što je prigodno za prenos preko telefonske žice. Taj prenos ide preko tonova: postoji jedan ton koji znači nula, a drugi koji znači jedan. Obično je to dosta komplikovanije, ali u suštini to je to.

Modemi imaju neka ograničenja zato što su telefonske linije sa stalnim šumom i smetnjama. Standardi su išli linijom: 300, 1200, 2400, 9600, 14400 koji je bio standard duže vreme. Razvoj serijskih portova je išao sa 9600 na 19200, a kod modema na 14400 zbog problema sa telefonskim linijama.

Kada se prave drajveri za ovakve komunikacione linije oni se razlikuju od ostalih u tom smislu što treba uzeti u obzir gore navedena fizička ograničenja. Ovde je stvar drugačija nego kada se pravi drajver za štampač, pa zato ovde treba uključiti drugačiji način programiranja. Da se ispita da li je došlo do greške, da pokuša da se popravi, ako ne uspe da je popravi da ima mogućnost da javi da greška nije popravljena. Obično u OS postoji podrška za takve stvari, a preko toga idu aplikacioni programi koji olakšavaju rad sa modemom.

KKOMPRESIJAOMPRESIJA

Postoje dva algoritma koji se koriste u široj upotrebi: jedan je stariji, teoretski više korišćen, iako se u praksi koristi drugi algoritam. Ovaj prvi se zove Hofmanov kod. On ima više varijanti, s tim da je ona osnovna varijanta koja se lakše pokazuje i odakle se vidi kako te stvari stoje, je statički Hofmanov kod. Polazi se od nekog koda, gde su svi kodovi obično iste dužine, ali to nije neophodan uslov. Cilj je da se pronađe minimalan kod sa kojim će moći da se ta informacija predstavi. Potrebno je znati unapred verovatnoće pojavljivanja svakog od tih karaktera. Može da se uradi sledeće: da se karakterima koji se češće javljaju dodele manji kodovi, a onima koji se ređe javljaju duži kodovi. Kada se malo razmisli lako će se zaključiti da postoji neko skraćenje. Pokazuje se da je to teoretski minimum i da bolje od toga ne može da se radi. Karakter koji imaju manju verovatnoću udružujemo u metakaraktere koji imaju veću verovatnoću. Sistem ima maksimalnu entropiju, odnosno sve je jednako verovatno kada su svi jednako verovatni. Efektivna procedura da bi se to binarno iskodiralo otprilike je ovakva:

(slika)Normalni ASCII kod koji nam je ovde potreban, kako imamo 8 karatera, bio bi oktalni (3-

bitni kod). Hofmanov kod se pravi tako što sparujemo karaktere sa manjom verovatnoćom i damo tom čvoru težinu jednaku zbiru težina čvorova iz grana. Kodovi za svaki karakter se dodeljuju na sledeći način: ide se od vrha drveta prema karakteru i kada se ide levo piše se 0, a kada se ide desno piše se 1. Onda su kodovi naših karaktera:

A 10B 00C 110D 010E 011F 1110G 11110H 11111Kod koda koji nije uniforman dekodiranje je otežano u smislu da treba biti globalno,

odjedanput i sekvencijalno (ne može se vaditi karakter iz sredine). Zbog toga kod mora da zadovoljava izvesne uslove:

Page 43: Programski Sistemi - SP07-V0.3

Nijedan kod za neki karakter ne sme da bude početna niska koda drugog karatera. Hofmanov kod zadovoljava ovaj uslov. Izračunajmo šta smo uštedeli: 2 koda skratili na 2 bita; 3 na 3; 1 na 4; 2 na 5.

Ali kodovi od dva bita imaju veliku verovatnoću, a oni od 5 se javljau retko.Ovakvo kodiranje ima sve prednosti osim jedne mane: u početku su potrebne tablice

verovatnoće pojavljivanja svih karaktera. U praksi tih tablica nema, tako da se u praksi statički hofmanov kod ne koristi. Obično se koristi u teoriji da se dokaže da ne može bolje da se kodira, ali je u praksi neupotrebljiv.

Zato se koristi dinamički Hofmanov kod. On poštuje iste principe kao statički, ali s tim da verovatnoće izgrađuje u toku rada. Počne se ni sa čim. To u početku ne radi dobro za prvih 50-ak karaktera, ali posle toga vidi se koji su češći pa se to polako isčišćava. Ne vredi pokušati sabiti prekratke programe jer se neće dobiti dobri rezultati.

Drugi algoritam koji je češće u primeni je LZV (zip) algoritam. On radi slično dinamičkom Hofmanovom kodu. Ideja je kao malopre, da se one stvari koje se češće pojavlju kodiraju na kraći način. Umesto 8-bitnog ASCII koda uzme se 9-bitni kod. U prvih 256 karaktera idu onih 256 iz 8-bitnog koda, a ima se mogućnost dodefinisanja još 256 kombinacija karaktera koji se najčešće javljaju. Ako se često pojavljuje ak onda se to posmatra kao jedan karakter i on se stavi u 9-bitnu šifru. Šta će ići u gornjih 256 mesta odlučuje se dinamički.

Ako smo imali string dužine 4 na mestu 311 i imamo string dužine 5 koji počinje stringom dužine 4 sa 311, on se zapiše na mesto 421, ali se zapiše kao: on na mestu 311+dodatak. Tako se dobija uniformna struktura. Ovaj algoritam je dinamički i u praksi daje možda i bolje rezultate od dinamičkog Hofmanovog koda. Ovo su sve lossless algoritmi – gde nema gubitka informacija koje se kodiraju.

Druga vrsta kompresije je na mestima gde je dopušten izvestan gubitak informacija. Kod takvih kompresija je izvestan dobitak u faktoru kompresije od nekoliko desetina do sto. To su tzv. lossy algoritmi – koji prilikom kompresije imaju određeni gubitak i koji se ne primenjuju na tekst ili precizne podatke, već na podatke gde nam gubitak određenog broja bitova nije važan, npr. kod čuvanja slika, audio i video zapisa...

ZZAŠTITAAŠTITA OPERATIVNIHOPERATIVNIH SISTEMASISTEMA

Zaštita OS ima više nivoa, više namena i više načina. Treba paziti ko može pristupati računarima. Kada je već pristupio šta može da radi. Postoji pitanje o efikasnom korišćenju resursa. Tu postoji čitav niz mera koje mogu da se preduzimaju. Većina od tih mera se zasniva na oblasti koja se zove kriptografija. To je menjanje izvornog zapisa tako da postane nerazumljiv onome ko ne zna kako da ga dešifruje. To se radi na različitim mestima: pri pristupu sistemu, čuvanju fajlova. Apsolutna zaštita ne postoji. Ako je računar spojen na mrežu onda tu govora o sigurnosti ne može da bude.

Prva stvar koju treba utvrditi je ko može da pristupa računaru. Potrebno je da se taj korisnik identifikuje. Danas se to rešava upotrebom password-a. Takođe su mogući načini koji čoveka određuju jedinstveno, a brzo i efikasno. Kao što su otisci prstiju…

Ideja sa password-om deluje jednostavno i razumno s tim što se u praksi javljaju mnogi problemi. Od početka je osnovna ideja bila da postoji neka datoteka u kojoj se nalazi spisak svih korisnika i njihovih šifri. Kada korisnik dođe da radi on mora prvo da prođe program login. Mnogo vrednih informacija je koncentrisano u datoteci u kojoj su šifre. Tu datoteku treba zaštititi, ali je praksa pokazala da jedna datoteka ne može dovoljno dobro da se zaštiti, jer treba da je stalno pri ruci programu login.

Sledeći korak je da se šifra čuva u fajlu enkriptovana. Ta enkripcija se onda radi sa algoritmom koji pripada klasi jednosmernih algoritama. Dobar sistem ima javni algoritam gde se kaže tačno šta se radi sa podacima, a težina je u tome da je algoritam dobro osmišljen tako da stvarno nema inverznog algoritma. Nevolja kod kriptografije je u tome što se nikad ne može dokazati da je algoritam dobar, već postoje kontra primeri koji mogu pokazati da algoritam ne valja.

Page 44: Programski Sistemi - SP07-V0.3

Kada se napravi gore navedeni sistem on će i dalje biti slab. Biće slab od onog momenta kada korisnik unese šifru, pa dok ona ne dođe do računara. Tipičan primer je mreža gde se na jednom kraju nalazi računar na kome se ukucava šifra, a na drugom računar sa fajlom u kome je šifra i algoritam za kriptovanje. Taj deo između dva računara je najosetljiviji. Ako se radi o lokalnoj mreži onda tu nema nikakve sigurnosti. Lokalne mreže su otvorene čitanju. Potrebno je samo malo softvera, jer princip lokalne mreže je broad cast, što znači da se šalje preko zajedničkog kabla, i svako može da sluša.

Rešenje je da password-i putuju kriptovani. Algoritam za kriptovanje mora da bude na oba kraja (challenge-respond algoritam za jednokratni password). Time problem nije u potpunosti rešen, i tome mogu da se nalaze kritike i onda ima različitih nivoa kako se to brani.

Postoje i drugačiji napadi koji su dosta češći, a koji se ne zasnivaju na hardverskoj tehnologiji, već na softveru i psihologiji.

Kada je korisnik već prišao računaru onda treba da se ograniči čemu on može da pristupa. Jedna od osnovnih nevolja je što korisnik mora da pristupa nekim resursima, kojima ne bi trebao da ima pristup (štampanje , komunikacije…). Zato programi nisu nikada do kraja istestirani, tu se radi o ljudima koji ulažu veliki napor da nađu rupu. Program može abnormalno da se prekine i onda može da ono što ima u memoriji izbaci na disk.

Jedna stvar koja se javila na računarima pre 10-ak godina su programi koji prave štete. Ti programi mogu da se klasifikuju na:

Viruse – mogu da se razmnožavaju i da prave štetu Crve – razmnožavaju se, a ne prave drugu štetu Trojanske konje – uglavnom ne prave štetu, ali mogu da kradu pasworde i

razne informacije

Ovo nije precizna klasifikacija.To su programi koji su zlonamerno ubačeni u sistem. Virus se napuni u memoriju i tamo

sedi i kad god se neki drugi program startuje on se prikači za njega. Takođe može da pretražuje po disku i da kad god naiđe na program sa ekstenzijom exe da se prikači na njega. Tako se on širi, a kada se zaraženi program prebaci na drugi računar on počne tamo da se širi. Mesta koja su zgodna su izvršni programi, i delovi OS koji se stalno učitavaju kao command.com. On je zgodan jer se uvek učitava i prisutan je na svakom sistemu, ali mana je to što provera uvek počinje od njega. Ovim načinom širenja se menja veličina fajlova, ali virus može da obriše deo programa pa da se tamo postavi, a time sam program prestaje da bude funkcionalan čime može da se otkrije virus.

Kasnije su virusi počeli da se čuvaju na boljim mestima kao što je boot sector i praticiona tabela. Ona su zgodna zato što su prisutna na svakom računaru, a ona se teže proveravaju. Boot sector se sastoji iz prvih 512 bajtova pa je zgodno da se tamo prikači, a isto tako praticiona tabela se sastoji od 512 bajtova od kojih je 30 zauzeto.

Kasnije su počeli da se pojavljuju samomodifikujući virusi. Onaj koji može da formatira disk je primer takvog. Suštinski kod je:

Load al,15Load ah, 30

To je suština koja treba da stoji a okolo mogu biti ukrasi koji se mogu menjati. Ljudi koji prave viruse uzimaće suštinski deo, ali taj suštinski kod može da se modifikuje.

Neki kažu da viruse prave oni koji prave programe za otklanjanje virusa. Programi koji pronalaze viruse ponudiće da očiste viruse, ali ipak najsigurnije rešenje je da se preformatira disk i očisti particiona tabela.

Virusi su nalaženi i na originalnim fabričkim disketama, a ne samo na piratskim programima.

Što se tiče OS, dos je bio najosetljiviji na viruse jer nema nikakve zaštite. Kod unix-a i Windows NT-a toga nema jer korisnik nema direktan pristup boot sektoru, particionoj tabeli ni bilo čemu drugome. To je tamo zaštićeno i stvar je mnogo teža, ali ne i nemoguća.

Page 45: Programski Sistemi - SP07-V0.3

KKRIPTOGRAFIJARIPTOGRAFIJA

Svaka kriptografija se danas zasniva na sledećoj ideji. Uzme se tekst koji hoće da se šifrira i onda se taj tekst na neki način kombinuje sa nekim drugim podacima koji se zovu ključ, niz određenog broja bitova. To kombinovanje može da se vrši na razne načine ali je praksa pokazala da je XOR operacija najbolja. Ona je zgodna zbog toga što se istom metodom šifrirani tekst vraća u originalno stanje. Stvar nije u algoritmu već je cela stvar u ključu. Uzme se deo teksta, on se šifrira ključem pa se onda uzme naredni deo teksta… Ključ mora da bude dovoljno dugačak, jer postoje razne metode napada na sistem:

Analitički napad se zasniva na otkrivanju formula i algoritamskih zakonitosti kojima je tekst šifriran i načina da se takav tekst dešifruje.

Statistički napad se zasniva na statističkim načinima za dešifrovanje šifriranog teksta. Ako je ključ dužine jednog bajta to postaje lako za svaki jezik postoji verovatnoća njegovog pojavljivanja u tekstu. Ako su uzme ključ dužine 2 bajta onda za slova umesto 30 biće 900 kombinacija. Zato ključ treba da bude dovoljno dugačak da bi se ovakvi napadi otklonili.

Napadi grubom silom. Ovo je najteži način, a zasniva se pokušavanju svih mogućnosti da se šifrirani tekst dešifruje. Podrazumevamo da su algoritam i šifrirani tekst poznati protivniku, ali da je algoritam jednosmeran. Problem je u dokazivanju da taj algoritam nema inverz.

Postoji jedan zapanjujuće jednostavan sistem koji je teoretski dokazano savršen, ali on ima neke druge mane. Savršeno šifriranje postiže se algoritmom koji se zove one time pass. Ovaj ključ se samo jednom koristi i njegova dužina je dužina teksta.

Enkripcija: [ text ] XOR [ ključ ] => [ šifrovanText ]Dekripcija: [ šifrovanText ] XOR [ ključ ] => [ text ]Nepraktičan je, dugačak kao sam tekst i nikad se ne ponavlja. Onda se postavlja pitanje

distribucije ključa, ako se nađe način da se doturi ključ, onda je nađen način da se doturi i poruka. U današnjim uslovima sa velikim diskovima ovaj način ne zvuči loše jer na disku može stati jedan veliki ključ dužine veće od dužine svakog teksta koji želi da se šifrira.

Problematičan je onaj deo da ključ treba da bude slučajan. Pravu slučajnost je teško postići. Ona se postiže negde iz prirode. Postoje uređaji koji se zovu generatori slučajnih brojeva, a oni mogu da se zasnivaju na raznim principima. Jedan je na osnovu radioaktivnog raspada. Takvi uređaji postoje ali su spori, pa to onda nije zgodan i široko dostupan način za generisanje slučajnih brojeva. Zato se mi ograničavamo na pseudo slučajne brojeve gde se krije prava opasnost. Za kriptografiju ovi brojevi nisu slučajni, napravljeni su na osnovu nekog algoritma. Ni sa jednim od tih sistema ne možemo biti sigurni, jer je kriptografija naučna oblast u kojoj ne postoji dobronamernost.

CCEZAROVEZAROV KODKOD Jedan od prvih kodova koji se koristio u istoriji je Cezarov kod. Cezar je kodirao poruke

tako što bi abecedu pomerio recimo za par slova u desno, recimo za 3 slova:

Ovde vidimo da je primenjen jedan od načina kodiranja koji se koristi – substitucija (zamena). Kvalitet ovog koda zasniva se na tajnosti algoritma tako da ovaj algoritam nije dobar.Jedno od prvih pravila kriptografije: Algoritam mora da je u potpunosti javan. A tajnost se zasniva na ključu.Drugi način kodiranja je transpozicija (pomeranje mesta). Primer kocke. Transpozicija je uvek bolji algoritam od substitucije. Substitucija sa transpozicijom daje dobre rezultate.

Danas u praksi imamo dve vrste algoritama: algoritmi sa jednim ključem (simetrični ili klasični ključ)

Page 46: Programski Sistemi - SP07-V0.3

algoritmi sa dva ključa (asimetrični ili javni ključ)

KKLASIČNALASIČNA ENKRIPCIJAENKRIPCIJA Klasična enkripcija je enkripcija pomoću jednog ključa. Glavni kvalitet ove enkripcije je

brzina. Ovi algoritmi su toliko brzi da se enkripcija može vršiti u realnom vremenu. Sa ovakvim metodom nastaje problem sa distribucijom ključa i problem utvrđivanja identiteta pošaljioca. Ako ima više mesta sa kojima se komunicira onda taj ključ mora svuda da se pošalje i da se pazi da negde ne procuri. Ovi algoritmi se zasnivaju na substituciji i transpoziciji. Imaju s-box (naredbe substitucije) i p-box (neredbe transpozicije). Imamo jedan ključ koji je relativno kratak i koji se stalno koristi. Što je ključ veći to je sigurnost bolja (pod uslovom da je algoritam dobar), tako da će napadi grubom silom biti teži (mogu trajati stotinama godina). Oko 128 bitova je sasvim dovoljno za obične upotrebe. Poruka se podeli na blokove fiksne dužine (recimo 64 bita) i vrše se mešanja blokova i ključa koji se propušta kroz s i p box-ove u više faza (10-20).

Najpoznatiji algoritam ove vrste je DES. Garantuje da na nivou pojedinca niko neće moći da ga dešifruje, a na nivou države da će sigurno moći da ga dešifruju.

Ovih standardizovanih algoritama ima dosta u svetu i svi rade na sličan način. Potreban je nekakav ključ koji treba da je kratak jer mora da se saopšti drugoj strani. Na osnovu tog kratkog ključa treba dobiti kvalitetnu enkripciju, pa je onda pitanje algoritma koji treba dobro da se napravi. Tipično je da se dužina ključa meri u bitovima. Dužina DES ključa je 56 bita. Kod DES se kripcija radi na sledeći način:

Cela poruka se podeli na grupe od 64 bita. Te grupe se jedna po jedna kombinuje sa ključem. Tu se rade razna mešanja, a ona su tipično takva da se podeli grupa od 64 bita na levu i desnu stranu, pa se uvek rekurzivno čuva prethodna i sledeća iteracija. Obično se desna strana kmbinuje sa ključem. Mešanje se vrši tako da od 56 bita ključa uzmu se 42 i to na propisan način pa se oni na neki način ispermutuju, pa se sa njima nešto uradi i dobije se ključ za prvi prolaz; za drugi prolaz uzmu se neka druga 42 bita i slično kao prethodno… Ovo ima smisla da se radi jer čini sistem otpornim na statističke napade.

DES nikada nije bio popularan jer je većina stručnjaka rekla da je ključ od 56 bita prekratak. Analize pokazuju da postoji ne baš čista inverzija iz čega izlazi da se sa jednim dobrim računarom može izvršiti dešifrovanje za 2-3 sata) čime dolazi u pitanje sigurnost tog sistema. Postoji i 3DES (DES šifrovan 3 puta uzastopno) koji je sigurniji.

MMETODIETODI ŠIFRIRANJAŠIFRIRANJA JAVNOGJAVNOG KLJUČAKLJUČA Njihova osnovna osobina je da imaju dva ključa – jedan za šifrovanje a drugi za

dešifrovanje. Ne koristi se isti ključ za enkripciju i dekripciju. Ovo se svodi na to da ključ za šifrovanje može javno da se objavi (ne mora da se krije), a ključ za dešifrovanje je tajni i čuva se za sebe. Time je spremljena komunikacija od onoga ko uzme javni ključ do onoga ko ima svoj tajni ključ. Ako je poslata poruka šifrirana javnim ključem, ona može da se dešifruje samo tajnim ključem. Ovim je rešen problem distribucije ključa (tajnost), ali se uočava naredni problem kod utvrđivanja identiteta pošaljioca: kada A dobije poruku od osobe B, osoba A nije sigurna da li je to osoba B poslala, jer A je svoj javni ključ objavio tako da može bilo ko da mu ima pristup. Mora na neki način da se reši pitanje ko je stvarni autor poruke. To se jednostavno rešava tako što na poruku osoba B nadoveže svoj potpis. B kriptuje javnim ključem od A poruku + potpis a tajnim ključem od B potpis. A dekriptuje tajnim ključem od A celu poruku i javnim ključem od B potpis.

Iako izgleda kao idealan i ovaj način ima svoje mane. Glavna mana je što je jako spor, ne koristi se real time, pa čak ni za pisane poruke jer je i tamo jako komplikovan. Najčešće se ovi algoritmi koriste u kombinaciji sa algoritmima sa jednim ključem, tako da se rešavaju problemi njihovih loših osobina. Često se ovi algoritmi koriste samo za prenošenje ključa, tako da se rešava problem distribucije i utvrđivanja identiteta pošaljioca, a za enkripciju u realnom vremenu se onda koriste algoritmi sa jednim ključem.

Druga mana je to što se ne zna koliko je ovaj sistem siguran (za sada nema dokazanih slučajeva da ga je neko provalio). Najpoznatiji algoritam sa sistemom javnog ključa je RSA.

Page 47: Programski Sistemi - SP07-V0.3

Osnovna ideja je zasnovana na velikim prostim brojevima i na tome da se oni teško mogu faktorizovati. RSA izgleda ovako:

Uzmu se dva velika prosta broja p i q, u zavisnosti od sigurnosti i tehnologije treba da imaju od 100 do 200 cifara. Napravi se proizvod n = p * q i tu je onda ideja da n teško može da se rastavi na polazne faktore. Izabere se broj d koji je relativno prost u odnosu na (p-1) * (q-1) tj. (d, (p-1)*(q-1)) = 1. Izabere se e takav da je (e*d) mod (p-1)(q-1) = 1. Onda se parovi (e, n) proglase javnim ključem, a (d, n) tajnim ključem.

Poruka (niz bitova) se podeli na komade P jednake veličine takve da oni predstavljaju binarne brojeve ne veće od n (ako je npr. n=1024 onda su ti komadi od po 10 bitova jer se tim komadima mogu predstaviti svi bojevi manji od 1024, tj. 210=1024). Tada se blok P iz {1…n} diže na stepen e ili d u zavisnosti od toga da li se vrši enkripcija ili dekripcija. Enkripcija se sastoji u tome da Pe mod n, a dekripcija: Pd mod n. Može da se pokaže da su ove operacije inverzne.

PGP je ovakav sistem koji se koristi za slanje elektronske pošte preko interneta. Radi slično kao RSA ali se algoritam za enkripciju menja. Ovde se javlja problem verodostojnosti javnog ključa. Da li je objavljeni javni ključ stvarno taj javni ključ? Drugi problem je koji uvek važi kod kriptografije: da li taj sitem stvarno ne može da se probije.

RRAČUNARSKEAČUNARSKE MREŽEMREŽE

Sve računarske mreže dele se u dve grupe: široke lokalne

Potreba da se povežu računari postoji dugo. Pre lokalnog i širokog povezivanja postoji još niži novi, privremeno povezivanje. Povezivanje računara paralelnim ili serijskim kablom. Osnovna ideja kod mreža je komunikacija dva računara, a sve ostalo samo nadogradnja. Da bi se od jednog računara stiglo do drugog onda ih treba povezati žicama. Na neki način ono što teče u jednom računaru preći će i postati vidljivo i na drugom. To je osnovna ideja.

Da bi se to uradilo treba da se postave mehanički, električni i protokolarni standardi. Za mehanički standard možemo reći da se tu uglavnom radi o konektorima i kablovima. Kod serijskog i paralelnog porta radi se od D konektorima, kod novijih serijskih portova DB9 kod starijih DB25, kod paralelnih DB25. Kod paralelnih ženski je na računaru. DB9 5+4 konekcija. Električni standard podrazumeva da definišemo kako se prenose signali. Serijski standard je RS232.

Ideja na logičkom nivou je sledeća: može da se ima 1 žica između dva računara čime su oni povezani. Podaci će da teku kroz tu žicu. To bi bila serijska veza jer će podaci onda serijski da teku. U praktičnoj realizaciji tu bi trebalo još nešto da se doradi jer struja nikad neće da teče kroz jednu žicu, mora da ima bar još 1 žica koja je masa, a za komunikaciju u oba smera potrebna je još jedna žica. Onda serijski port ima minimalno 3 žice. Obično se dodaje 1 ili 2 para žica za signaliziranje, u smislu spreman sam ili podaci su stigli.

Paralelni port nije ništa drugo već više serijskih portova koji rade na istom poslu. Time se dobija na brzini, a gubi se na udaljenosti i ceni. Takvi kablovi su deblji, teže se postavljaju, a moraju biti kraći jer kad ima više žica jedna uz drugu onda nastaju smetnje. Tako je dužina paralelnih kablova obično 2-3 metra, a serijskih 30-ak u lošim uslovima, a u dorbim mnogo veća. Paralelni kablovi ne rade 8 puta brže, nisu bidirekcioni. Podaci idu u jednom smeru, a za drugi koriste kontrolne žice kojih ima oko 5, pa su obično 5 puta brži od serijskig.

Brzina serijskih portova danas je obično 115 000 bita u sekundi.Što se protokola tiče potrebna je sinhronizacija. Ako se definiše da je nizak signal 0, a

visok 1 time nije sve definisano, već treba i definisati trajanje signala. Tu nastaje nevolja kao kod diskova kada se šalje veći niz 0 ili 1. Zato se komunikacijama dodaju start i stop bit. Potreban je još i softver koji će sve ovo da kontroliše jer korisnik hoće da obavlja poslove na visokom logičkom nivou.

Page 48: Programski Sistemi - SP07-V0.3

RREFERENTNIEFERENTNI MODELIMODELI MREMRE ŽAŽA Referentni modeli su modeli koji daju hijerarhijsku organizaciju računarkih mreža.

Organizacija je podeljena na layer-e (slojeve, nivoe). Najviši nivo je blizak čoveku (korisnički interfejs), a na najnižem nivou je hardver koji obavlja komunikaciju (fizički nivo). Izmedju svaka dva nivoa se nalazi interfejs da bi se mogla ostvariti komunikacija. Ono sto niži sloj nudi višem se naziva servisima, a ono kako viši sloj vidi niži naziva se interfejs. Protokoli predstavljaju virtuelnu komunikaciju između slojeva. Virtuelni krug je krug koji obrazuju dve tačke koje komuniciraju. Komunikacija dva računara se odvija između ekvivalentnih parova ovih slojeva.

Jedan od prvih referentnih modela 80-tih godina bio je ISO/OSI (International Standard Organization / Open System Interface) i imao je 7 nivoa: physical, data-link, network, transport, session, presentation, application. To je bio nedovoljno promišljen, komplikovan za realizaciju u praksi i neefikasan model. Na kraju je pobedio model interneta (arpanet) iz BSD verzije UNIX-a sa Barkly univerziteta koji se zasniva na TCP/IP protokolu. On je kasnije standardizovan u model sa 5 nivoa:

physical layer – najniži nivo na kome se podaci između računara prenose. On mora da obavi sve poslove koji su neophodni za fizičko prenošenje paketa informacija.

data-link layer – osnovna funkcija je da obezbedi savršen virtuelni kanal. To se postiže detekcijom i korekcijom grešaka i protokolima koji upravljaju paketima koji pristižu ili se šalju.

network layer – obavlja funkciju rutiranja. Rutiranje se obavlja tako sto se traže najpogodniji susedi preko kojih ce se informacija preneti. Postoji statičko i dinamičko rutiranje. Ovde je smešten IP protokol.

transport layer – obezbeđuje sigurnu vezu između dva krajnja korisnika. Ovde su smešteni TCP i UDP protokoli.

application layer – najvažniji za korisnika. Služi za iplementaciju korisničkih servisa kao što su mail, ftp, http, ssh, telnet ...

LANLAN Su zasnovane na istoji ideji kao privremeno povezivanje. Gore je ideja bila privremeno

povezivanje pa se brzina i udobnost žrtvuju za malu cenu. Ako treba umrežiti računare lokalno onda će to više da košta, ali će biti efikasno. Nema precizne definicije za LAN, ali ima opisnih. Definicija: LAN je mreža koja povezuje prostorno bliske računare. Blizina može strogo da se definiše preko električnih parametara. Da se u zavisnosti od tipa mreže kaže da kabl dopušta segment od 200m ili najviše 3 segmenta = 600m.

Nekada se umrežavanjem dobijala mogućnost da više korisnika ima pristup skupim periferijama ili HD.

Danas ima koristi sa administrativne strane, za onoga ko treba da održava više računara. Što se tiče korisnika, oni imaju korist što sa svakog računara mogu pristupati nekom drugom.

Da bi se računari umrežili potrebna ja po jedna mrežna kartica za svaki računar. Ona vrši funkciju super serijskog porta. Ekvivalentna je serijskom portu u smislu da služi za vezivanje računara sa drugim. Standardna brzina današnjeg ethernet-a je 10MB/s. Topologije lokalnih mreža su uglavnom pravilne topologije. Obično su to magistrala, prsten i zvezda. Danas se sve svodi na eternet, ima ih 3 vrste:

Debeli (stari) ethernet – radi se sa koaksijalnim kablom koji ima spoljnu izolaciju od plastike, onda jednu metalnu žičanu mrežicu pa ponovo plastičnu izolaciju i na kraju jednu centralnu žicu. Debljine je palca, a kabl može biti i do 2km (iz nekoliko segmenata), ali je nezgodan za instalaciju jer je debeo, nefleksibilan, skup pa traži ukopavanje (ali nisu morali da se ukopavaju). Postavi se magistrala (koaksijalni kabal duzine do 2km), a onda se pojedini računari prikačinju na magistralu drop (priključnim) kablovima sa vampijalnim konektorima. Osnovne karakeristike su da je to pouzdano, dobrih električnih osobina, ali vrlo skupo i nefleksibilno. Kasnije se javila zamena za ovo.

Page 49: Programski Sistemi - SP07-V0.3

Tanki ethernet – radi isto sa koaksijalnim kablom, ali koji je tanji od prethodnog. Mreža tim kablom može ići do 1km iz 5 segmenata od po 200m. Spolja izgleda kao kabl za antenu, ali nije istih karakteristika. Nosi oznaku RG58 i impedansa je 50 oma, televizijski nosi oznaku RG59 sa impedansom od 75 oma. Sa mrežne kartice viri BNC konektor, a uz svaku karticu se dobija i po jedan T konektor. Topologija kojom se ovi računari povezuju je magistrala. Na kraju se stavljaju terminatori, otpornici od 50 oma. Posle svega treba konfigurisati mrežne kartice, a to se danas uglavnom radi softverski. Time je sve hardverski spremno. Tanki eternet je jako popularan, ali mana mu je što je podložana slučajnim i namernim prekidima. Kabl je osetljiv pa može slučajno da se ugnječi stolicom. Takođe kada se kabl preseče negde cela stvar staje.

Treći ethernet – je jako popularan za neke primene i kablira se telefonskim kablovima. Za mesta gde je potrebna sigurnost radi se sistem sa telefonskim žicama. One nisu baš kao telefonske ali su dosta slične (UTP), a konektori nisu kao na panasonic telefonima, već malo veći (KJ45). On se fizički vezuje u topologiju zvezde. Postoji jedno centralno mesto (koncentrator) i svi ostali dolaze do tog centralnog mesta. Potrebno je mnogo više žice, a samim tim i troškovi su veći. Ovim sistemom se dobija sigurnost, jer ako se preseče jedna žica samo jedan računar će izaći iz mreže. Fast Ethernet je noviji ethernet brzine 100MB/s. Iako ovaj ethernet prividno izgleda kao topologija zvezde fizički je ovo i dalje magistrala. Topologija ethernet-a je uvek magistrala. Sve ovakve mreže zovu se paketne.

Paketno slanje informacija je takvo da se ono što treba da se pošalje deli u pakete određene veličine, stavlja se adresa pošiljaoca i adresa primaoca i šalje se nekakvim zajedničkim kanalom. Osnovna ideja eterneta je da svako može da razgovara kad hoće ukoliko žica nije zauzeta. To može da liči na haos, ali to u praksi dobro funkcioniše. Suprotna ideja je ideja token ring-a gde se pravi redosled kada ko može da govori i izmenjuje se neka poruka koja ide u krug, i samo onaj koji ima token može da govori, što liči na rešenje koje uvodi red, ali samo nepotrebno košta.

Na ovako povezane računare treba dodati i softver, a postoje i pravi mrežni OS, koji obezbeđuju i efikasnost i sigurnost. Ima smisla pomenuti 3 mrežna OS:

Windows NT ima ugrađeno sve što bi odprilike trebalo da ima (podrška internetu, tcp/ip…).

Linux je takav OS da nema podvala, nekih namerno napravljenih grešaka koje će se ispraviti novom verzijom. Ima sva ograničenja koja ima unix. Nije preterano korisnički ljubazan, iako se i na tom polju popravlja. Ne pretenduje da bude OS broj 1, ali da broj 2. Za internet i široke mreže on je i dalje bolje prilagođen od Windows NT.

Nowell je treći sistem kome je teško naći dobre strane, bio veoma popularan u Jugoslaviji. Nastao 1982. Te ideje su odavno propale u Americi i tamo takav sistem ne može da se proda.

ŠŠIROKEIROKE MREŽEMREŽE Široke mreže (internet) povezuju raznorodne računare tj. razne vrste hardvera i

operativnih sistema. Počele su sa razvojem ksnih 60-ih, kao projekat povezivanja nekoliko najvećih univerziteta u Americi. To je dosta dugo trajalo kao jedan uzan, eksluzivan, i interesantan projekat, zvan arpanet. Sve je to urađeno na unix-u, tako da je on postao osnovni OS za mreže. Značajni su internet servisi: mail, telnet, news, www, pretraživači, proxy-serveri,... Topologije širokih mreža su uglavnom nepravilne topologije.