1 / 35

1. UPRAVLJANJE MEMORIJOM U UNIX-U

1. UPRAVLJANJE MEMORIJOM U UNIX-U. UVOD. Memorijski model u UNIX-u teži tome da učini program prenosivim i da omogući primjenu UNIX-a na strojevima sa širokim spektrom različitih memorijskih jedinica. To je model koji se kroz desetljeća vrlo malo mijenjao.

Download Presentation

1. UPRAVLJANJE MEMORIJOM U UNIX-U

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 1. UPRAVLJANJE MEMORIJOM U UNIX-U

  2. UVOD • Memorijski model u UNIX-u teži tome da učini program prenosivim i da omogući primjenu UNIX-a na strojevima sa širokim spektrom različitih memorijskih jedinica. To je model koji se kroz desetljeća vrlo malo mijenjao. Radio je dobro i nije bilo potrebe za velikim obnovama. • Mi ćemo sad pregledati model i vidjeti kako se primjenjivao.

  3. 1.1. OSNOVNIPOJMOVI • Svaki proces u UNIX-u ima adresni prostor koji se sastoji od 3 segmenta: 1.tekstualnog 2. podatkovnog 3. stogovnog • Primjer adresnog prostora nekog procesa je prikazan na sljedećoj slici (10-13) kao proces A.

  4. 1. Tekstualni segment • Sadrži strojne instrukcije koje čine programski izvršni kod. • Njih (instrukcije) proizvode prevoditelj i asembler (također programski prevoditelj) pretvarajući C, C++ ili neki drugi program u strojni kod • Tekstualni segment je samo za čitanje (read-only)

  5. 2. Podatkovni segment • Sadrži skladište za programske varijable, stringove (nizove podataka, znakova), tablice i druge podatke • Ima 2 dijela : početne i nepočetne podatke • Iz povijesnih razloga, drugi dio je poznat kao BSS • Početni dio podatkovnog segmenta sadrži varijable i kompajlerske konstante koje trebaju početnu vrijednost kada je program pokrenut • Nepočetne varijable su sve spojene zajedno nakon početnih, pa sve što kompajler mora obaviti je staviti riječ u zaglavlje govoreći koliko bitova treba dodijeliti • Da bismo ovo lakše shvatili, može nam opet poslužiti naša slika 10-13 pod (a)

  6. Za razliku od tekstualnog segmenta, koji se ne može mijenjati, podatkovni segment je moguće mijenjati. Program mijenja njegove varijable čitavo vrijeme • Mnogi programi trebaju dinamično dodjeljivati prostor, tijekom izvadbe • U UNIX-u se podatkovni segment širi i skuplja ovisno o dodijeljenoj memoriji. • Sistemski poziv brk dopušta programu da mijenja veličinu njegovog podatkovnog segmenta • Što se više memorije dodijeli, program povećava veličinu podatkovnog segmenta. • Procedura malloc u C-u se najčešće koristi za dodjeljivanje memorije

  7. 3. Stogovni segment • U najčešćem slučaju, on započinje na ili u blizini vrha virtualnog adresnog prostora i širi se prema dolje, prema 0. • Ukoliko se stog proširi ispod dna stogovnog segmenta, tvrdi disk normalno uoči pogrešku, i OS spušta dno stogovnog segmenta za jednu stranicu. • Programi ne upravljaju izričito veličinom stogovnog segmenta.

  8. Kada dva korisnika pokrenu isti program, npr.editor (program za uređivanje teksta), bilo bi moguće, ali neučinkovito, sačuvati odjednom dvije kopije programskog teksta u memoriji. • Umjesto toga, većina UNIX sistema podržava dijeljenje tekstualnih segmenata (zajedničko korištenje tekst. segm.), tzv. shared text segments. • Na našoj slici 10-13 (a) i (c) vidimo 2 procesa, A i B, koji imaju isti tekstualni segment. Na (b) vidimo mogući raspored fizičke memorije, u kojem oba procesa dijele isti dio teksta. • Podatkovni i stogovni segment se nikad ne dijele, osim nakon račvanja, i to samo one stranice koje se nisu mijenjale.

  9. Mnoge verzije UNIX-a podržavaju memorijski-preslikane datoteke (memory-mapped files). • Ovo svojstvo omogućava preslikavanje datoteke na dio adresnog prostora nekog procesa, tako da se datoteka može čitati i pisati. • Na slici 10-14 vidimo datoteku koja je istovremeno preslikana u dva procesa, na različitim virtualnim adresama.

  10. 1.2. Sustavski pozivi za rukovanje memorijom u UNIX-u • Mnogi UNIX sustavi imaju sustavske pozive za upravljenje memorijom. • Najčešći su prikazani listom u doljnjoj tablici.

  11. brk određuje veličinu podatkovnog segmenta tako što daje adresu prvog bajta koji se nalazi izvan njega; ako je nova vrijednost veća od stare, podatkovni segment se povećava, u suprotnom se smanjuje • mmap i unmap kontroliraju momorijsko preslikavanje datoteka • mmap je poziv za memorijsko preslikavanje datoteke • unmap je poziv koji uklanja naredbu memorijskog preslikavanja (mapiranja) datoteke; ako je samo dio datoteke “odmapiran”, ostatak ostaje mapiran • Parametri: • addr određuje adresu u koju se datoteka preslikava • len govori koliko se bajtova treba preslikati • prot određuje zaštitu za preslikanu datoteku • flags kontrolira je li datoteka osobna ili djeljiva, i je li addr zahtjev ili samo nagovještaj • fd (file descriptor) opisuje datoteku koja se preslikava • offset govori na kojem mjestu u datoteci da se započne preslikavanje (nije nužno da se započne kod 0-tog bajta)

  12. 1.3. Implementacija rukovanja memorijom u UNIX-u • Kada postoji više procesa koji bi mogli biti zadržani u memoriji, neki od njih se premještaju van na disk. SVAPIRANJE = PREMJEŠTANJE • Pomakom između memorije i diska se bavi gornja razina dvorazinskog raspoređivača, poznata kao premještač (swapper). • Premještanje iz memorije na disk je potaknuto tim što jezgra napušta slobodnu memoriju na račun jednog od sljedećih događaja: • Sistemski poziv fork treba memoriju za procese djecu. • Sistemski poziv brk treba proširiti podatkovni segment. • Stog postaje veći i premašuje prostor koji mu je dodijeljen.

  13. Nadalje, kada dođe vrijeme da se dovede proces koji je predugo bio na disku, često je nužno ukloniti drugi proces da bi se napravilo mjesto za njega. • Žrtva (proces) koji se mora ukloniti se bira tako što prvo premještač (swapper) gleda procese koji su blokirani i čekaju na nešto. Ako ih ima više takvih, bira se onaj koji ima veći prioritet i duže vrijeme boravka, tj. proces koji je dugo vremena bio u memoriji. • Ukoliko nema blokiranih procesa, tada se i neblokirani biraju prema istom kriteriju. • Svakih nekoliko sekundi premještač provjerava listu procesa trenutno premještenih na disk, da vidi je li koji od njih spreman za pokretanje. Ukoliko nema takvih, bira se onaj koji je bio najduže na disku. • Algoritam se ponavlja sve dok se ne dogodi jedan od sljedećih uvjeta: • Na disku nema procesa spremnih za pokretanje. • Memorija je prepuna tek pristiglih procesa i nema više mjesta za druge procese.

  14. STRANIČENJE U UNIX-U Sve verzije UNIX-a su zasnovane na straničenju. Mi ćemo opisati slučaj kod 4BSD: Osnovna ideja je da proces ne mora biti u potpunosti u memoriji da bi bio pokrenut. Ono što zbilja treba je korisnička struktura i stranice tablice. Ako su oni premješteni u memoriju, onda se smatra da je i proces “u memoriji” i može biti raspoređen za pokretanje. Straničenje djelomično provodi jezgra, a djelomično novi proces zvan page daemon. On radi periodično kako bi mogao gledati okolo ima li kakvog posla za obaviti.

  15. Upravljanje memorijom u Linux-u • Linux koristi trorazinsku shemu straničenja. • Svaka virtualna adresa je razlomljena na 4 polja, kako je prikazano na slici 10-17. • Polje direktorija se koristi kao indeks u globalnom (općem) direktoriju. • Pronađena vrijednost pokazuje na jednu od stranica srednje tablice koja je također indeksirana poljem na virtualnoj adresi. • Izabrani unos dalje pokazuje na treću tablicu, koja je opet indeksirana poljem virtualne adrese. • Unos koji je ovdje pronađen pokazuje stranicu koja se traži.

  16. Linux podržava dinamički učitane module, općenito pokretačke programe. • Oni mogu biti proizvoljne veličine i svakom mora biti dodijeljen odgovarajući dio jezgrine memorije. • Kao posljedica ovoga je to da Linux upravlja fizičkom memorijom na takav način da može uzeti po želji proizvoljno velik dio memorije. • Algoritam koji koristi je poznat kao buddy algoritam (algoritam prijatelj) i opisan je ovako: • Početna memorija od pojedinačnih graničnih dijelova (na slici 10-18 (a) memorija se satoji od 64 stranice). • Kada stigne zahtjev za memorijom od 8 stranica, cijela memorija se prvo podijeli po pola (b). • Budući da je svaki od dijelova još uvijek prevelik, doljnji dio se opet dijeli po pola (c) i opet isto (d). • Sada imamo komad tražene veličine, tako da je dodijeljen tražiocu (d). • Nadalje pretpostavimo da stigne drugi zahtjev za 8 stranica. Ovo može biti zadovoljeno odmah (e). • U ovom trenutku stiže zahtjev za 4 stranice. Najmanji slobodni komad se prepolavlja (f) i polovica od toga je ono što je traženo (g).

  17. Dalje, drugi od 8-starničnih komada je oslobođen (h). Konačno, preostali 8-stranični komad je oslobođen. Budući da su dva 8-stranična komada koja su upravo oslobođena susjedni i “prijatelji”, tj. potječu od istog 16-straničnog komada, oni se udružuju da bi dobili nazad 16-stranični komad (i).

  18. 2. ULAZNO-IZLAZNE JEDINICE U UNIX-U

  19. Ulazno/Izlazne jedinice u OS Unix su vrlo jednostavne jer su najčešće napravljene tako da izgledaju poput datoteka i pristupačne su npr. sustavskim pozivima za čitanje i pisanje koji se upotrebljavaju za dostupnost svih datoteka .

  20. 2.1. Temeljni koncepti • OS Unix također ima ulazno-izlazne jedinice koje integrira u datotečni sustav koji zovemo SPECIJALNE DATOTEKE. • Pristupačnost ovim datotekama jednaka je pristupučnosti svim ostalim datotekama. • Specijalne datoteke dijelimo u dvije kategorije: ♦BLOK ♦ZNAK • Blokovna specijalna datoteka je jedna i sastoji se od slijeda brojčanih blokova.

  21. Ključna osobina blokovne specijalne datoteka je u tome što svaki blok može biti individualno adresiran i pristupačan. Obično je njena upotreba vezana za diskove. • Znakovne specijalne datoteke obično se upotrebljavaju za U/I jedinice (printer, tipkovnica, monitor i dr.) koje prihvaćaju ili daju korisniku nekakav niz znakova. • Ono što je zajedničko svim specijalnim datotekama je tzv. pokretačka jedinica (DEVICE DRIVER) koja nadzire ostale odgovarajuće jedinice.

  22. Svaki driver sadrži veći jedinični broj (major device number) koji služi za identifikaciju. Ukoliko driver podupire više jedinica , npr. dva diska istog tipa, svaki disk sadrži manji jedinični broj (minor device number) koji je karakterističan samo za njega. • Veći i manji jedinični broj zajedno jedinstveno specificiraju svaku U/I jedinicu.

  23. 2.1.1. Umrežavanje • Drugi primjer U/I jedinica je umrežavanje. Osnovni koncept temelji se na principu ”he socket”. • Šupljine predstavljaju poštanske ormariće i telefonske zidne utičnice i omogućavaju korisnicima povezivanje s mrežom. • Poštanski ormarići omogućavaju povezivanje sa sustavom za dopisivanje, dok telefonske utičnice omogućavaju korisnicima povezivanje s telefonskim sustavom.

  24. Šupljine mogu biti stvorene i uništene dinamički. Kreiranje šupljine vraća tzv. datotečni opisnik, što je potrebno za uspostavljanje veze, čitanje i pisanje podataka. • Svaka šupljina podupire određeni tip umrežavanja • Najčešći tipovi umrežavanja su: 1.) RELIABLE CONNECTION-ORIENTED BYTE STREAM 2.) RELIABLE CONNECTION-ORIENTED PACKE STREAM 3.) UNRELIABLE PACKET TRANSMISSION

  25. Kada je šupljina kreirana jedan od prametara specificira protokol koji će se upotrebljavati. • Vrlo popularni su sljedeći protokoli: TCP (Transmission Control Protocol) UDP (User Datagram Protocol) IP (Internet Protocol)

  26. 2.2. U/I sustavski pozivi u Unix-u • Svaka U/I jedinica u OS Unix sadrži specijalnu datoteku s kojom je povezana. • Mnoge ulazno-izlazne aktivnosti mogu biti obavljene koristeći samo odgovarajuću datoteku, eliminirajući potrebu za specijalnim sistemskim pozivima. • Ponekad pak postoji potreba za nečim što predstavlja specifičnost jedinice. Npr. sistemski poziv IOCTL je pretvarao velike brojeve specifične jedinice u specijalne datoteke.

  27. Prva četiri retka tablice se odnose na postavljanje brzine terminala, dok se posljednja dva retka odnose na postavljanje i čitanje svih specijalnih znakova koji se upotrebljavaju za brisanje znakova i linija, prekidanje procesa i itd.

  28. 2.3. Primjena U/I jedinica u Unix-u • Funkcija drivera je izoliranje ostatka sustava od načina rada hardvera. Provođenjem standardnog postupka između drivera i ostatka operacijskog sustava, većina U/I jedinica može biti postavljena u strojno- nezavisan dio jezgre • Kada korisnik pristupa specijalnoj datoteci, datotečni sustav determinira veće i manje jedinične brojeve koji pripadaju toj datoteci koja možebiti ili blokovna specijalna datoteka ili znakovna specijalna datoteka. • Veći jedinični broj se upotrebljava za dodavanje hardvera jedne od dviju unutrašnjih strukturnih vrsta.

  29. BDEVSW-za blokovne specijalne datoteke CDEVSW- za znakovne specijalne datoteke • Svaki driver se dijeli na dva dijela. Gornja polovica radi u povezanosti s pozivateljem i povezuje ostatak OS Unix. Donja polovica radi u povezanosti jezgre i međudjelovanju s jedinicama. • U/I jedinice se dijele na dvije veće komponente: - upravljanje blokovnim specijalnim datotekama - upravljanje znakovnim specijalnim datotekama • OS Unix sadrži tzv. buffer cache između disk drivera i datotečnog sustava. On se nalazi u jezgri i njegova uloga sastoji se u tome da drži, tisuće većinom nedavno korištenih blokova.

  30. Ukoliko blok nije u tzv. buffer-u , on se očitava s diska u buffer i tada se kopira tamo gdje je potrebno. Buffer je jednako dobar kako za pisanje tako i za čitanje. • Desetljećima su Unix pokretačke jedinice bile statično vezane s jezgrom i predstavljene u memoriji svaki put kad se sustav koristio. S dolaskom OS Linux to se promijenilo, te svi korisnici Linux-a dobivaju potpun izvorni kod.

  31. 2.4. Nizovi • U prvoj verziji Unix-a sve znakovne pokretačke jedinice su izvršavale sav posao koji je bio potreban. Razvile su se dvije različite verzije za strukturiranje znakovnih pokretača. • BSD verzija se temelji na podatkovnim strukturama koje se zovu C-liste i prikazuju kao male kutije. Svaka kutija je blok koji sadrži 64 znaka i pokazivač na sljedeći blok. Kada se korisnički proces očitava s nekog standardnog ulaza, znakovi ne prelaze direktno s C-liste na proces , nego prolaze kroz dio jezgre koji se zove LINE DISCIPLINE.

  32. On djeluje kao filter prihvaćajući neobrađene znakovne nizove s terminalnog drivera, procesuirajući ga i stvarajući. • Verzija SUSTAV V također sadrži buffer za blokovne specijalne datoteke. Temeljni princip sastoji se u tome da se poveže korisnički proces s driverom i da se dinamički umetnu procesorske jedinice u niz za vrijeme izvršenja. U nekoj mjeri, niz u biti predstavlja jezgru koja je sinonim dovodne cijevi u korisničkom prostoru • Niz uvijek sadrži tzv. glavu niza koja se nalazi na vrhu i povezuje s driverom na dnu. Kada korisnički proces piše, kod u glavi niza interpretira sustavski poziv i sprema podat¸ke u buffer-e koji prelaze s modula na modul od gore prema dolje.

  33. LITERATURA: ♠Knjiga na engleskom jeziku. ♠ Internet

  34. Helena Lukadinović • Sanja Rimac

More Related