Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Razlika izmedju segmentacije i paging-a

[es] :: Kernel i OS programiranje :: Razlika izmedju segmentacije i paging-a

[ Pregleda: 8148 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

kajla
Milorad Janković
Beograd

Član broj: 445
Poruke: 909
*.158.EUnet.yu



Profil

icon Razlika izmedju segmentacije i paging-a02.01.2004. u 19:54 - pre 184 meseci
Da li može neko da detaljno objasni razliku između ovoga? Windows nekoristi segmentaciju iako Intelovi procesori 80386 i noviji podržavanu i paging i segmentaciju, kako bi radio operativni sistem koji bi koristio i jedno i drugo?

poz.
 
Odgovor na temu

dust
Dušan Stefanović

Član broj: 9827
Poruke: 33
*.rcub.bg.ac.yu



Profil

icon Re: Razlika izmedju segmentacije i paging-a06.01.2004. u 01:06 - pre 183 meseci
Kod segmentacije program dobija komad memorije koji trazi, npr. prvi trazi 2 MB, drugi 3 MB, treci 1 KB. Kad drugi zavrsi imas rupu u sredini od 3 MB i to je pojava spoljne fragmentacije.

Kod pejdzinga se memorija podeli na komade odredjene velicine npr. 4 KB i kad programu treba 1 MB on dobije 256 "stranica" od po 4 KB. Ali ako programu treba 5 KB on ce dobiti 2 stranice. To je unutrasnja fragmentacija.

Operativni sistem koji bi podrzavao oba pristupa verovatno ne bi nikako radio, ili bi eventualno radio poput Multix-a, vise bi vremena trosio na sebe nego na korisne stvari.
 
Odgovor na temu

milos23
matf
bgd

Član broj: 16989
Poruke: 118
195.252.85.*

Sajt: www.autoshowserbia.info


Profil

icon Re: Razlika izmedju segmentacije i paging-a08.01.2004. u 22:53 - pre 183 meseci
pa upravljanjem memorije se bavi os, a ne procesor.....a svi savremeni os koriste paging jer ima vece prednosti od obicnog deljenja memorije na komade fiksne velicine
 
Odgovor na temu

Goran Rakić
Beograd

Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Razlika izmedju segmentacije i paging-a09.01.2004. u 11:04 - pre 183 meseci
zar nije paging podela na fiksne delove memorije?
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

milos23
matf
bgd

Član broj: 16989
Poruke: 118
*.beotel.net

Sajt: www.autoshowserbia.info


Profil

icon Re: Razlika izmedju segmentacije i paging-a09.01.2004. u 22:18 - pre 183 meseci
Citat:
Goran Rakić:
zar nije paging podela na fiksne delove memorije?

u sustini i jedno i drugo je podela na delove fiksne velicine, ali je razlika u tome sto se u u segmentaciji odredi tacno fiksni deo ili vishe delova fiksnih pa onda kad nekom procesu zatreba memorija on ima 3 mogucnosti, da nadje najbolji koji mu odgovara, da nadje najveci moguci ili prvi koji mu odgovara memorijski blok........losha strana je sto npr ako nema odgovarajuceg bloka memorije proces ce zauzeti deo koji je veci i tako ce spreciti verovatno neki drugi kome treba blok te velicine.........kod paging-a se i memorija i program dele na fiksne velicine, jedno se zove okvir a jedno stranica i prednost je sto jedan program moze da se napuni na razbacanim adresama sto kod prethodnog nije slucaj tako da se efikasnije trosi memorija, e sad ti je tu drugi problem komplikacija programiranja takvih stvari, odnosno imash nekoliko algoritama od kojih svaki ima svoje prednosti i mane
 
Odgovor na temu

kajla
Milorad Janković
Beograd

Član broj: 445
Poruke: 909
*.101.EUnet.yu



Profil

icon Re: Razlika izmedju segmentacije i paging-a12.01.2004. u 00:17 - pre 183 meseci
Čitao sam Art Of Assembler (noviju verziju za HLL) i taj kaže kako je segmentacija u stvari dobra stvar (od trenutka kad se pojavio procesor 80386 i kad je rešen problem ograničenja od 64K jer sada segment može da bude i do 4GB), i da procesori posle 80386 podržavaju i segmentaciju i paging ali da nijedan moderan operativni sistem (kao Windows, Linux) nepodržavaju segmentaciju tako da je podrška za to bezveze ugrađena u čip.

Koliko ja vidim vi u ovim postovima pričate nešto sasvim drugo, ko je u pravu?

poz.
 
Odgovor na temu

milos23
matf
bgd

Član broj: 16989
Poruke: 118
195.252.87.*

Sajt: www.autoshowserbia.info


Profil

icon Re: Razlika izmedju segmentacije i paging-a12.01.2004. u 11:42 - pre 183 meseci
ja sam josh u prvom postu rekao da svi savremeni os-i koriste paging i da nacin koriscenja zavisi od os-a........ali u sustini ne mora da znachi da je bezveze ugradjena podrska, mozda im je tako jeftinije pri proizvodnji procesora, jer se nikad ne zna gde ce se procesor primenjivati, pa o jednom trosku da naprave i procesore za pc i za nesto drugo
 
Odgovor na temu

Nesha_Burton
Nenad Radulovic
Bor

Član broj: 20829
Poruke: 4
*.teleportgroup.net



Profil

icon Re: Razlika izmedju segmentacije i paging-a18.02.2004. u 01:01 - pre 182 meseci
E ljudi, treba da vidite novo AMD-ovo cudo od arhitekture, AMD64. Mnogo dobra stvar. Moze da se kombinuje svasta (read the docs), a u native 64-bit modu, haos, total 64-bit flat address space. Samo nek Micro$oft napise OS kako treba...

Naravno, www.amd.com
-----------------------------
a) Doktore, mnogo sam kasljao.
b) Jel suvo?
a) Ma jok bre, s usta...
 
Odgovor na temu

zvrba
The Lord of Chaos

Član broj: 31716
Poruke: 105
*.fina.hr



Profil

icon Re: Razlika izmedju segmentacije i paging-a09.08.2004. u 08:50 - pre 176 meseci
Dakle, x86 arhitektura ima dva mehanizma: segmentaciju i paging koji su sasvim nezavisni jedan od drugoga. Proces je malo kompliciran, ali evo u detalje... pricam za protected mode. U realnom modu je sve to puno jednostavnije.

Segmentacija: svaki proces ima ima nekoliko segmenata: code, data i stack, extra te F i G. Segment se bira selektorom koji se sprema u segmentni registar. Segmentni registri su CS, DS, SS, ES, FS i GS.

Kod se UVIJEK dohvaca iz code segmenta. Data se po defaultu dohvaca iz data segmenta, a operacije sa stackom (push, pop, te indirektno adresiranje preko ESP i EBP registara) po defaultu koriste stack segment. Svaka instrukcija moze imati uz sebe segment override prefix (jedan bajt) pa se tako moze prisiliti da adresira drugi segment (npr. moguce je citati podatke iz code segmenta).

Postoji GDT (global descriptor table) i LDT (local descriptor table) te GDTR i LDTR registri koji se ucitavaju sa LGDT i LLDT instrukcijama procesora. Ti registri cuvaju linearnu adresu (o tome cu poslije) GDT i LDT tablica. LDT tablica je per-process.

U GDT tablici su entryji tzv. segment deskriptori. Segment deskriptor sadrzi sljedece podatke: protection level (0 - najvisi, 3 - najnizi; ovo je komplicirana tema o kojoj sada necu. dovoljno je reci da UNIX-i, i vjerojatno windoze, koriste ring 0 za kernel mode, ring 3 za user programe), bazna linearna adresa segmenta, velicina segmenta (ako se segment adresira izvan granica, desi se exception#13), atribut da li je 16- ili 32-bitni (svi moderni OS-ovi koriste 32-bitne segmente), atribut da li je 'grow up' ili 'grow down' (ovu vrstu segmenta je zgodno koristiti za stack), dozvole (execute, execute&read, data read-only, data-read write) te 'present bit' (segment moze biti oznacen kao not present i onda ga OS moze ucitati sa swapa - medjutim, paging je puno pogodniji za to...) GDT i LDT svaki moze sadrzavati po najvise 8192 deskriptora (2^13). Nulti entry u GDT je tzv. NULL descriptor i svako adresiranje memorije preko njega uzrokuje exception#13 (general protection fault).

Treba napomenuti da se segmenti mogu preklapati. Npr. nije moguce direktno pisati po code segmentu, ali je moguce definirati writable data segment sa istom baznom adresom i velicinom kao code segment.

Sadrzaj segmentnog registra (tzv. SELEKTOR) je INDEKS u GDT ili LDT tablicu. Bitovi 0-1 su RPL (requested privilege level; proces moze raditi sa segmentom sa nizim pravima pristupa nego sto segment deskriptor dopusta), a bit 2 oznacava da li se indeksira GDT ili LDT (ako je 0 mislim da se oznacava GDT). Bitovi 3-15 oznacavaju indeks u GDT ili LDT tablici. Segmentni registri su 16-bitni i preostalih 13 bitova daje taman 8192 mogucnosti za indeksiranje deskriptora u tablici.

Paging je jednostavniji mehanizam, koji je dvorazinski. Svaki proces u CR3 registru (control register) ima baznu adresu tzv. PAGE DIRECTORYJA. Svaki entry u page directoryju adresira jedan PAGE TABLE. Jedan entry u page tableu mapira tzv. PAGE od 4kB. Jedan kompletan PAGE TABLE mapira adresni prostor od 4MB. Entry u page tablu se sastoji od jednog bita koji koristi OS za svoje potrebe (uglavnom za oznacavanje cesto koristenih pageova kad treba raditi swap-out), jedan je U/S (user/supervisor bit - tko smije pristupiti pageu. user mode je ring 3, ringovi 0-2 se smatraju supervisor mode), jedan je WP (write protect - zabrana pisanja po pageu), jedan je present bit (da li je page fizicki prisutan u memoriji). Najvisih 20 bitova (adresa pagea mora biti aligned na 4kB) odreduje mapiranje u fizicku memoriju. AMD x86-64 arhitektura je donijela, a Intel slijedio, "no-execute" bit u page entryju. To onemogucava izvrsavanje koda iz tog pagea - zgodno za stack i ubijanje hrpe sigurnostnih bugova. Naravno, za to treba podrska OS-a.

Primjer kako radi "address translation": neka je u GDT definiran deskriptor na indeksu 1 koji definira segment sa baznom adresom 0x2000000. Ostali atributi nisu bitni za primjer.

Proces adresira podatak preko tog deskriptora na svojoj "logickoj adresi" npr. 0x60. Procesor toj logickoj adresi dodaje bazu segmenta te tako dolazi do "linearne adrese" 0x2000060. Gornjih 10 (22-31) bitova linearne adrese odredjuje page directory entry indeks, u ovom slucaju je to 16. Iz registra CR3 se cita linearna adresa page directoryja i dodaje se 4*16=64 da se dobije adresa page directory entryja. Tada se cita taj entry i dobiva se linearna adresa page tablea. Bitovi 12-21 linearne adrese 0x2000060 daju indeks 0 u page tableu koji se mnozi sa 4 i dodaje linearnoj adresi page tablea. Ako u page tableu na indeksu 0 pise 0x4100000 (donje bitove ne znam napamet, ali vjerojatno nisu svi 0 - to su dodatni atributi), na tu vrijednost se dodaju DONJI bitovi (0-11) originalne adrese, tj. 0x60.

Tako se "logicka adresa programa" 0x60 mapirala u adresu u FIZICKOJ MEMORIJI 0x4100060.

(Ne)zgodna stvar je da i proces translacije (otkrivanje adresa page directoryja i page tableova) takodjer podlijeze pagingu i istom ovom mehanizmu.. Obicno postoji skup pageova koji su mapirani kao identity (linearna = fizicka adresa) u koje se onda spremaju upravo page directory i page table..

Sad tu ima trikova - ako se zeli pisati po read-only pageu ili page nije oznacen kao prisutan - dizu se razni exceptioni (page fault ako page nije prisutan, mozda GPF ili opet page fault - ne sjecam se vise - ako se ne postuju prava pristupa i sl..)

Moderni operacijski sustavi (UNIX) svim procesima dodjeljuju ISTE segmente za kod, stack i podatke od 4GB koji pocinju na adresi 0 - tzv. flat address space i za kontrolu pristupa te swapanje koriste iskljucivo paging..

Steta.. koristenje ovih featura segmentacije bi dosta podiglo sigurnost postojecih OS-ova na x86 arhitekturi (buffer overflowi vise ne bi mogli raditi stetu) kad bi npr. kernel bio u ringu 0, driveri u ringu 1, standardni sistemski libraryji (libc, libm i slicno) u ringu 2 te user aplikacije u ringu 3...
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.cmu.carnet.hr

ICQ: 106979934


Profil

icon Re: Razlika izmedju segmentacije i paging-a20.08.2004. u 21:25 - pre 176 meseci
Citat:
... kad bi npr. kernel bio u ringu 0, driveri u ringu 1, standardni sistemski libraryji (libc, libm i slicno) u ringu 2 te user aplikacije u ringu 3...


Ma koja 4 prstena covjece, i 2 su previse :) ring3->ring2->ring1->ring0 prelaz je moguc ofkors, samo bi bio *iznimno* zahtjevan u terminima procesorskih ciklusa. OS koji bi takve prstenove zastite implementirao bi morao leeetjeti na nekom super-hardveru, jer x86 nije ring-friendly u tome smislu...

Pogledaj samo kroz povijest: win32 podrzava samo 2 prstena iz jednostavnog razloga sto su, dok je jos projekt NT kernela bio u punom zamahu ranih 90-ih, bile podrzane i platforme koje su implementirale samo 2 prstena, npr. Compaq Alpha i Silicon Graphics MIPS. Danas se naravno windoze vrte iskljucivo na x86, ali tko je onda jos mislio na to da ce jednog dana sigurnost OS-a po prioritetu (uzokovanog ponajvise direktnim financijskim gubicima :) zauzimati mjesto ispred portabilnosti.

Npr. GDI i USER, dakle window manager i graficki servisi su bili dio user-mode win32 subsystema do NT 4.0, nakon cega su prebaceni u kernel-mode. Razlog? Grafika je bila sugava unatoc dobrom izvornom dizajnu. Svatko tko je sa par godina rada na win9x presao na winXP ce biti jasno o cemu govorim. Osim toga, jos se koristi "batching", tj. buffering GDI API-ja unutar user-modea, jer je transakcija u kernel-mode za svaki API jednostavno neucinkovita.

Ovo je nesto slicno kao sto libc implementira I/O buffering, umjesto da za svaki bajt poziva read/write, poziva ga za znatno vece jedinice podataka pri cemu se stedi procesorsko vrijeme. Od XP-a se koriste 2-bajtni mnemonici sysneter/sysexit koji su optimiziranija verzija tradicionalnog "trap gate" mehanizma (win9x cesto koristi i call gate u obliku VxdCall). Sjeca li se jos itko int 2eh? :) To sto je intel izmislio ove instrukcije (AMD ima druge, ne da mi se sad traziti tocan naziv, osim toga, AMD sux :) i sto se savrseno poklapaju sa ring3/ring0 zahtjevima selektora koje ima NT je druga wintel (win-intel) prica... koincidencija my arse.

Moj fejvorit slackware trosi zasad samo int 80h :( Nadalje, sa dolaskom winFX kao buduceg subsystema koji ce zamijeniti win32, vecina API-ja postaju wrapperi za svoje kernel-mode ekvivalente, jednostavno implementiraju minimalan error-checking i pozivaju Nt* rutine. Uostalom mozes vidjeti u izvornom kodu :) Toliko sto se tice OS-a koji bi mozda najvise beneficirao od takvih mjera sigurnosti :)

Ne mogu odoljeti a da ne parafraziram Tolkiena: One ring to rule them all, one ring to bind them, one ring to bring them all and in buffer overflows bind them....mwhahahaha
 
Odgovor na temu

[es] :: Kernel i OS programiranje :: Razlika izmedju segmentacije i paging-a

[ Pregleda: 8148 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.