Unix OS - Vilniaus Universiteto Matematikos ir ...rolnas/unix_os/paskaita.4.lt.pdf · R.Naujikas...

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