View
3
Download
0
Category
Preview:
Citation preview
Unix OS
Vilniaus UniversitetasMatematikos ir Informatikos fakultetas
Rolandas Naujikas
2008
R.Naujikas Unix OS 2
Turinys
● Atminties Valdymo Posistemė (AVP, angl. MMU)– Terminologija– Puslapiavimas– Branduolio atmintis valdymas
● Žemėlapis● išskyrimas/atlaisvinimas
R.Naujikas Unix OS 3
Procesas
Branduolys
Aparat rin rangaū ė į
Aparat ros vald. s sajaū ą
I/O posistemė
Atmintiesvald.
posistemėProcesų
valdymas
Sistemini komand s sajaų ų ą
Procesas
Fail ųposistemė
R.Naujikas Unix OS 4
Terminai
● Atminties valdymas (AVP) (angl. memory management) susijęs:– Pirminė atmintis (main memory)
● Operatyvioji (RAM)– Antrinė atmintis (secondary memory)
● Atsarginė, standusis diskas
R.Naujikas Unix OS 5
AVP: Tikslas● Dalintis atmintimi efektyviai● Optimizuoti veikiančių procesų skaičių ir
atminties sanaudas– Turi įtakos kaip veikia procesų vykdymo
tvarkaraščio sudarymas ● Pagreitinti įvesties/išvesties operacijas antrinei
atminčiai naudojantis podėliu (cache)● Apsaugoti atminties panaudojimą
– keli procesai naudojasi tuo pačiu atminties lopinėliu
R.Naujikas Unix OS 6
Hierarchija
R.Naujikas Unix OS 7
Procesai ir atmintis
● Kiekvienas procesas veikia virtualioje mašinoje● Virtualioji mašina - tai abstrakti, vienodos
sąsajos mašina, kuri paslepia aparatūros veikimo ypatumus
● Virtualioji mašina naudoja virtualiąją atmintį● Virtualioji atmintis – tai adresų erdvės
intervalas, kuris nepriklauso nuo fizinės atminties (tiek pirminės, tiek antrinės atminties adresų ir išsidėstymo)
R.Naujikas Unix OS 8
Procesai ir atmintis II
● Virtualiosios atminties adresas – nuoroda į konkrečią virtualios atminties vietą
● Operacija, kuri virtualios atminties adresą verčia į fizinės atminties adresą vadinama adresų transliacija arba adresų vertimas– Įkelti procesai nepriklauso nuo fiz. adreso– Lengviau balansuoti/optimizuoti sąnaudas– Greičiau atliekamas konteksto persijungimas
R.Naujikas Unix OS 9
Procesai ir atmintis III
● Segmentas– dauguma OS suteikia vientisus atminties regionus,
tačiau jie turi būti fizinėje atmintyje vienalyčiai – be skylių (intel 286, 1984m)
● Mes naudosime terminą segmentas tik jau virtualios atminties segmentavime
R.Naujikas Unix OS 10
Procesai ir atmintis IV
● Virtualioji atmintis daloma į fiksuoto dydžio atminties puslapius (angl. page)
● Virtualiosios atminties adreso transliavimas atliekamas nurodant puslapio numerį pridedant poslinkį nuo puslapio pradžios
● Atminties apsauga atliekama aparatūros ir puslapių lygyje
R.Naujikas Unix OS 11
Procesai ir atmintis V
R.Naujikas Unix OS 12
Puslapiavimas
● Adresų transliavimas įgalina atskirti virtualią nuo fizinės erdvės, kuria naudojasi Procesorius (angl. CPU)
● Kiekvienas puslapis virtualioje atmintyje turi žymę:– Reziduojantis (angl. resident)– Nereziduojantis (angl. nonresident)
● Rezidavimas apibrėžia buvimą fizinėje atmintyje
R.Naujikas Unix OS 13
Puslapiavimas II
● Jei procesas bando pasiekti virtualios atminties adresą, kuris nėra pažymėtas kaip reziduojantis, tai įvyksta puslapio nepataikymo (angl. page fault) įvykis
● AVP (angl. MMU) atlieka puslapių nepataikymų įvykiu aptarnavimą
R.Naujikas Unix OS 14
Puslapiavimas III
● Su puslapiavimu susijusios trys strategijos (angl. policies):– įkrovos (angl. fetch) strategija, kai puslapis įkraunamas į atmintį
– pozicionavimo (angl. placement) strategija, kai puslapis padedamas nurodoma jo pozicija
– atnaujinimo (angl. replacement) strategija, taikoma nustatyt kuris ar kuria tvarka puslapiai privalo būti išimami iš atminties kai to reikia.
R.Naujikas Unix OS 15
Puslapiavimas IV
● Puslapiavimas priklauso nuo:– įkrovos ir atnaujinimo strategijų.
● tai yra tikras pagal reikalavimą grįstas puslapiavimas
● Praktikoje niekas neįgyvendina pagal reikalavimą grindžiamą puslapiavimą, nes sudėtingumas atsiremia į puslapių keitimo greitį atmintyje
R.Naujikas Unix OS 16
Puslapiavimas V
● Praktiškai naudojamas puslapiavimas: išankstinė įkrova (angl. prefetching)– įkrauna visus puslapius, kurie susiję su veikiančiu
procesu, ne vien nepataikytą puslapį– Atnaujinimo strategija naudojama net neužpildytai
atminčiai
R.Naujikas Unix OS 17
Puslapiavimas VI
● Puslapio atnaujinimo algoritmai:– FIFO, pirmas eilėje (angl. First In First Out)– NRU nesenai nenaudotas (angl. Not Recently
Used)– Šansas Nr. 2 (angl. second chance)– LRU, (angl. Least Recently Used)– Random (liet. atsitiktinis)– NFU (Not Frequently Used)– Aging, senstantis
R.Naujikas Unix OS 18
FIFO
● Tiesiog eilė● Lengva įgyvendinti● Mažai informacijos reikia valdyti, kad atlikti
puslapiavimą● Atnaujinimas atliekamas, įvykus puslapio
nepataikymui iš eilutės pradžios išimamas puslapis, o naujas dedamas į eilės galą.
R.Naujikas Unix OS 19
Belady anomalija
● Didinant eilės ilgį puslapių nepataikymų skaičius nemažėja
● Pvz., prašomi puslapiai įkraunami seka:– 3,2,1,0,3,2,4,3,2,1,0,4– Eilės ilgis h=3, arba h=4
R.Naujikas Unix OS 20
Belady anomalija II, h=3
● 3,2,1,0,3,2,4,3,2,1,0,43 2 1
2 1 0
1 0 3
0 3 2
...
R.Naujikas Unix OS 21
NRU (angl. Not recently Used)
● Stengiasi atsikratyti seniausių puslapių pagal kategorijas:– nesikreipta, nemodifikuota– nesikreipta, modifikuota– kreiptasi, nemodifikuota– kreiptasi, modifikuota
● Lygiais laiko tarpais puslapis priskiriamas vienai iš kategorijų
R.Naujikas Unix OS 22
Šansas Nr.2
● Veikia kaip FIFO, tik prieš išimant pirmą elementą stebima ar kreipimosi bitas nustatytas
● Jei kreipimosi bitas nustatytas, tai puslapis dedamas į eilės galą, suteikiant puslapiui būti dar atmintyje
R.Naujikas Unix OS 23
LRU (angl. Least Recently Used)
● Panašus į NRU algoritmą, tačiau skaičiuojami prioritetai laiko intervale
● Labiausiai naudojami puslapiai visada bus atmintyje.– Gana efektyvus, algoritmas– Sudėtingas įgyvendinant ir kainuoja laiko suvaldyti
visus puslapius.
R.Naujikas Unix OS 24
Random
● Atsitiktinai pasirenkama, kurį puslapį sukeisti.● Dažnai kombinuojamas su FIFO ar LRU● Pvz., IBM OS/390
R.Naujikas Unix OS 25
Darbinės aibės modelis
● Sistema stebi į kokias atminties vietas prieina procesas.
● Atminties vietų skaičius dažnai būna fiksuotas ir lėtai kintantis
● Pvz., BSD tipo Unix'ai
R.Naujikas Unix OS 26
Branduolio atminties žemėlapis
● Branduolio įkrovimo metu sukuriama– vm_map duomenų struktūros– skaičius vm_map_entry įrašų
● Kiekvienas vm_map_entry aprašo atminties intervalus● Įgalina valdyti atminties intervalus ir kurti sub-žemėlapius
R.Naujikas Unix OS 27
R.Naujikas Unix OS 28
Branduolio atminties išskyrimo sąsaja
● Branduolio atm. išskyrimo f-jos nustato priėjimą prie vm_map struktūros
● VA atmintis gali būti:– Puslapiuojama– Nepuslapiuojama – Atminties intervalai pririšti prie
fizinės atminties ir lieka atmintyje visą laiką
R.Naujikas Unix OS 29
Nepuslapiuojama d.ž.k. pririšta
● kmem_alloc()– Išskiria atminties intervalą ir apnulina
● kmem_maloc()– išskiria atminties intervalą ir neapnulina– nerakinamas atminties išskyrimas
R.Naujikas Unix OS 30
Puslapiuojama
● kmem_alloc_pageable()● kmem_alloc_wait()
– rakina procesą, kol atminties išskyrimui atsiras● Puslapiuojamas branduolio atminties išskyrimas
kol kas naudojamas tik laikinai informacijai.
R.Naujikas Unix OS 31
Branduolio atm. atlaisvinimas
● kmem_free()– Atlaisvina puslapiuojamą ir nepuslapiuojamą
branduolio atmintį● kmem_free_wakeup()
– Atlaisvina branduolio atmintį ir pažadina su kmem_allow_wait() laukiančių procesų
R.Naujikas Unix OS 32
Savybės
● Jei atminties reikia vienam sisteminiam kvietimui:– Vartotojo lygmenyje, sistema išskirs trumpalaikę
atmintį iš vykdomos programos dėklo (steko)● Atminties panaudojamumas:
–
išnaudojamumas= išskirtosreikalaujamos
R.Naujikas Unix OS 33
Savybės II
● Išnaudojamumas yra labai svarbu● Geras atminties skirstytojas turėtų 100%
atminties išnaudojamumą● Svarbu geras atminties išnaudojamumas
branduoliui, nei vartotojo procesai● Kad išlaikyti kuo didesnį išnaudojamumą AVP
turi atlaisvinti atmintį kuo greičiau, kai tik jos nebereikia
R.Naujikas Unix OS 34
Savybės III
● Atminties skyrimas privalo būti greitas– Kuo lėčiau išskiriama atmintis tuo lėčiau procesai
veiks● Branduolio atminties skyrimui naudojamos dvi
strategijos– Mažų atminties kiekių išskyrimas
● sąrašai ilgio ^2– Didelių atminties išskyrimų – lėtesnis
● Apvalinama iki puslapių ir ieškoma pirmos tinkančios vietos
R.Naujikas Unix OS 35
Savybės IV
● Pagerinti atminties defragmentaciją– Grupuoti mažus išskyrimus į vieną puslapį– Ištrynus didelį kiekį atminties stengiamasi sulieti šalimais esančius laisvus atminties plotus
R.Naujikas Unix OS 36
Dalinama atmintis
● Dalinama atmintis (angl. shared)● Tradiciškai virtuali atmintis kiekvienam procesui
yra izoliuota● Yra poreikis dalintis atmintimi tarp procesų, t.y.,
keliems procesams pasiekti tą pačią atmintį
R.Naujikas Unix OS 37
Problema
● Keli procesai adresuoja tą pačią atmintį● Tarkime procesas A sugadina atmintyje esančią
informaciją● Procesas B, kuris adresuoja į tą pačią dalinamą
atmintį irgi matys sugadintą informaciją.● Problema, kai du procesai bando rašyti į tą
pačią vietą
R.Naujikas Unix OS 38
Sprendimas
● Semaforas– Procesas A turi galimybę įjungti semaforą prieš
rašydamas į atmintį– Kiti procesai B, ir t.t. prieš rašydami į dalinamą
atmintį privalo patikrinti ar semaforas įjungtas. Jei taip, tai privalu laukti kol semaforas bus išjungtas.
– Procesas A užbaigęs rašymą privalo išjungti semaforą.
– Kiti procesai B ir t.t. vėl gali stengtis įjungti semaforą.
R.Naujikas Unix OS 39
Operacijos su dalinama atmintimi
apibrėžiamos <sys/shm.h>#define MAX_LEN 10000
struct region { int len; char buf[MAX_LEN]};struct region *rptr;int fd;fd = shm_open("/myregion", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);if (fd == -1) // handle errorsif (ftruncate(fd, sizeof(struct region)) == -1) // handle errorsrptr = mmap(NULL, sizeof(struct region), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);if (rptr == MAP_FAILED) //handle errors /* use for example, rptr->len */.
R.Naujikas Unix OS 40
MMAP
● Beveik viskas UNIX'e yra rinkmenos● Keli procesai, gali prisimontuoti bendrą
dalinamą atmintį tačiau reikia turėti būdą:– Adresuoti– Apibrėžti išskirtos atminties dydį – Apibrėžti ar tai yra dalinamas ar privatus atminties
prijungimas– mmap pagalba galima nurodyti objektą, pvz.,
rinkmeną kuri bus dalinama atmintis.
R.Naujikas Unix OS 41
Dalinamas atminties prijungimas
● Kelios vm_map_entry rodo į pą patį rinkmenos objektą
R.Naujikas Unix OS 42
Privatus atminties dalinimas
● Savybės:– Pakeitus duomenis privačios atm. dalinimo metu
atmintyje, pokyčiai nėra atvaizduojami į rinkmeną– Visi pokyčiai prijungtoje atmintyje nėra matomi
kitiems procesams
R.Naujikas Unix OS 43
Privatus atminties dalinimas
R.Naujikas Unix OS 44
Naujo proceso kūrimas
● Procesas kuriamas fork() pagalba● Iškart po to vykdomas exec(), perdengiantis
vaiko procesu, VA adresų erdvę su binarinės rinkmenos turiniu.
● Procesas vykdomas tol, kol jis baigsis arba bus užbaigtas kitų procesų (gavus signalą).
R.Naujikas Unix OS 45
Naujo proceso kūrimas II
● funkcija fork() dubliuoja egzistuojančio proceso VA adresų erdvę– dubliuojami VA resursai– dubliuojama VA esanti proceso informacija ir
duomenys
R.Naujikas Unix OS 46
Naujo proceso kūrimas
● Dubliuojama:– procesų struktūros ir susijusi informacija (struct
proc) ir vartotojo struktūra ir informacija (struct user)– branduolio dėklas (angl. stack)
● Papildomai rezervuojami resursai:– atminties– rinkmenų (failinės) sistemos– tarpinės (angl. swap) atminties
R.Naujikas Unix OS 47
Esminiai fork() momentai
● Rezervuoti VA adresų erdvę vaiko procesui● Išskirti vietą proceso struktūrai ir ją užpildyti● Nukopijuoti vaiko procesui tėvo proceso grupės
ID, priėjimo leidimus, bylų aprašus, ribojamus ir signalų apdorojimus
● Išskirti naują vaiko proceso vartotojo dalį (user area)
● Sukurti vmspace struktūra
R.Naujikas Unix OS 48
Esminiai fork() momentai II
● Dubliuoti VA adresų erdvę sukuriant vm_map_entry struktūras
● Surežisuoti, kad vaiko procesas grąžintų 0, jei teisingai užsidaro
R.Naujikas Unix OS 49
kaip dubliuojama vm_map_entry
● fork() funkcijos vykdymo metu yra pereinama per sąrašą vm_map_entry struktūrų ir jų vaikus ir atliekama:– Jei įrašas nurodo į „tik skaitomą“ regioną, reiškia
kopija galima turėti tik su nuoroda– Jei įrašas nurodo į privačius atminties regionus
(duomenų segmentas ir dėklas) vaiko procesas turi sukurti „kopiją rašant“ (angl. copy-on-write) atminties regioną. T.y., jei vėliau bandoma rašyti į tą atminties regioną, tai kuriamas šešėlinis žemėlapis išlaikyti keistus puslapius
R.Naujikas Unix OS 50
Kaip dubliuojama vm_map_entry
– Jei įrašas yra pažymėtas kaip bendras / dalinamas (angl. shared) naujas dalinamas regionas yra sukuriamas ir abi vm_map_entry nuorodos rodo į tą patį puslapį
● proceso atminties regionai nėra suliejami● Tik branduolio atminties regionai konkrečiam
procesui yra suliejami / supaprastinami. Tai vertėtų atlikti ir proceso atminčiai, ypač, ilgai veikiantiems ir dideliems procesams,
R.Naujikas Unix OS 51
Naujo proc kūrimas be dubliavimo
● Kai tėvinis procesas blokuojamas kol vaiko procesas baigs darbą nebūtina dubliuoti visos proceso informacijos Pvz., shell scripte paleidžiama išorinė programa, kurios darbo pabaigos reikia sulaukti
● T.y. jei tėvinis procesas blokuojamas su wait ir laukia kol vaiko procesas užbaigs darbą užtenka vienos VA atminties kopijos
R.Naujikas Unix OS 52
Naujo proc kūrimas be dubliavimo
● Situacijose, kai tėvinis procesas blokuojamas ir laukia vaikų pabaigos yra sukurtas sisteminis kvietimas vfork()
● vfork() yra efektyviau nei „kopija rašant“(angl. copy-on-write) metodas, nes branduolys tik perduoda tėvinę adresų erdvę ir neatlieka kopijų.
● Vaiko procesui užbaigus darbą, VA adresų erdvę grąžinama laukiančiam tėviniam procesui.
R.Naujikas Unix OS 53
Proceso dydžio keitimas
● Procesas keičia savo dydį atmintyje.● Atminties sąnaudos didėja arba mažėja
priklausomai nuo situacijos● Užimamos atminties dydis visada apvalinamas
viršutinį puslapių skaičių● Keičiant programos dydį automatiškai
perskirstoma ir dėklui skirta atmintis● Perskirsčius atmintį nauji regionai apnulinami.
R.Naujikas Unix OS 54
Proceso dydžio keitimas II
● Prieš keičiant programos atminties užimtumą patikrinama ar naujas proceso dydis tilps į atmintį sekančiai:– Patikrinti ar VA resursų užteks– Patikrinti ar adresų erdvė prašomo dydžio iškarto
seka esamo VA adresų erdvės pabaigą– Jei vm_map_entry struktūra neribojama būti
fiksuoto dydžio dėl tarpinės (angl. swap) atminties
R.Naujikas Unix OS 55
Proceso dydžio keitimas III
– Jei vm_map_entry įrašas turi vieną ar daugiau puslapių tarpinėje atmintyje, tai nebus leidžiama ilginti įrašo
– Bus sukurtas vm_map_entry naujas įrašas su adresų erdvės pradžia prijungiamas prie VA pabaigos praplečiant
● Jei perskirstant atmintį proceso dydis atmintyje mažėja, tai:– Nereikalingi atminties puslapiai atlaisvinami iškart.
Dėl to, vm_map_entry įrašai ištrinami, taip sumažindami VA adresų erdvę
R.Naujikas Unix OS 56
Proceso dydžio keitimas III
● Jei atlaisvinamos atminties kiekis didesnis nei įrašyta vm_map_entry visa struktūra atlaisvinama ir pereinama prie kitų intervalų
● Visi kreipiniai į atminties regioną, kurie nėra jau sąrašuose įvykdys puslapio nepataikymą (angl. page fault)
R.Naujikas Unix OS 57
Rinkmenos susiejimas su VA
● naudojamas mmap() funkcija susieti rinkmeną sistemoje su VA adresų erdve.– Galima pareikalauti nuo kurio VA adreso iki kurio
adreso bus priskirta tai rinkmenai– Galima palikti branduoliui pačiam nuspręsti dėl
adresų erdvės priskyrimo ir parinkimo
R.Naujikas Unix OS 58
mmap veikimas VA perskirstyti II
● perskirstant vm_map_entry skanuojama:– Jei naujas atminties intervalas persidengia
atlaisvinti senąjį ir naują sukurti– Jei naujas mmap yra poaibis egzistuojančio
mmap'o, tai suskaldoma į tris dalis ir laisvos dalys apjungiamos su kitomis laisvomis vm_map_entry
– Jei naujas mmap yra didesnis tai senas gražinamas, ir naujas sukuriamas.
– Dalinis adresų persidengimas kombinuotas visų ankstesnių būdų
R.Naujikas Unix OS 59
R.Naujikas Unix OS 60
Apibendrinimai
● VA pakelia abstrakcijos lygi ir įgalina turėti vienalytę VA ant skirtingo tipo atminties:– pirminė (operatyvioji)– antrinė (standusis diskas)
● VA skaidoma puslapiais, kai kiekvienas puslapis● AVP stengiasi išlaikyti kuo daugiau puslapių
pirminėje atmintyje
R.Naujikas Unix OS 61
Apibendrinimai● AVP efektyvus veikimas priveda prie efektyvios
OS darbo● Labai svarbu yra determinuoti algoritmai VA
valdyti● Proceso gyvavime atminties sąnaudos didėja ir
mažėja, tačiau OS turi veikti stabiliai● Procesai turi galimybė bendrauti ar apsikeisti
duomenimis per dalinamąją atmintį
Recommended