praegune kellaaeg 28.05.2024 22:34:29
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
tanzanite
HV kasutaja
liitunud: 13.05.2006
|
03.01.2008 11:34:07
64bit & privaatne virtuaalne aadressiruum ... |
|
|
... on kasutusel millistes OS'ides?
Windowsis on (mis on kuradima kena ja mida ma ohtralt exploidin) aga teisi ei tea - ehk oskab keegi teadvam kommenteerida?
Küsimus tuleneb sellest, et 64bit korral oleks võimalik kasutada ka ühist virtuaalset aadressiruumi - äkki on keegi seda teed läinud?
|
|
tagasi üles |
|
|
Urmet
HV vaatleja
liitunud: 29.07.2005
|
04.01.2008 01:06:38
|
|
|
Arvan ma õigesti et virtuaalsete aadressiruumide all mõtled seda, et opsüsteem tekitab igale programmile mulje sellest, et ta on üksi koos kerneliga mälus ja ühtki teist segajat pole? See peaks olema kasutuses kõigis opsüsteemides, mis toetavad multitaskingut. Mingit takistust ühise aadressiruumi kasutamiseks ei oleks ka 32bit all. Windowsi all tähendaks see siis seda, et kõik programmid peavad kokku hakkama saama 3GB(veidi vähem tegelikult) virtuaalse pinnaga - ei tundu uskumatult võimatu.
Üks hea põhjus asja vanamoodi edasi tegemiseks oleks vast see, et siis pole vaja nii palju uut koodi kirjutada opsüsteemi portimiseks.
Mismoodi sa neid aadressiruume "exploidid" üldse? Või olen mina võhik ja sain valesti aru poindist.
|
|
Kommentaarid: 10 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
10 |
|
tagasi üles |
|
|
troglodyte
Kreisi kasutaja
liitunud: 09.08.2002
|
04.01.2008 02:05:58
|
|
|
Veidralt sõnastatud küsimus, ilmselt oleks hea kui sa seletaks täpsemalt lahti mida sa privaatse ning virtuaalse aadressiruumi all silmas pead?
Eri protsesside vahel jagatud mäluruumi nimetatakse tavaliselt shared memory-ks. Kõik enamlevinud opsüsteemid toetavad seda ühel või teisel viisil ning see ei ole oluliselt sõltuv allolevast protsessori arhitektuurist.
|
|
Kommentaarid: 33 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
33 |
|
tagasi üles |
|
|
tanzanite
HV kasutaja
liitunud: 13.05.2006
|
04.01.2008 10:57:27
|
|
|
terminite selgitus:
privaatne - rakenduse kasutada on KOGU (- jagatud osa) aadressiruum (ehk app1 hoiab oma kraami aadressil 777 ja app2 ka 777 jne ... n2iteks iga rakenduse enda aadress on tavaliselt 0x400000)
virtuaalne - aadress ei vasta füüsilisele mäluaadressile.
üks kena link ka: link
Küsimust (pisut limiteerides) saaks esitada ka nii: kas ma võin ALATI eeldada, et mingi konkreetne aadress on vaba kui ma ise (minu app + kasutatud teegid) sinna midagi pannud pole? Windowsi all see on nii - kas ka mujal (usun et on aga tahaks kinnitust et see tõesti-tõesti nii on)?
Urmet, terminite segadust kõrvale jättes - siis seda mõtlesin jah. 3GB puhul oleks oluliseks takistuseks aadressiruumi fragmenteerumine ja oluliselt väiksem, kõikide protsesside peale kokku, kasutatav mäluruum (ehk iga protsessi ei saa kogu seda aadressiruumi kasutada, nt: MMF abil mäluruumi lisades kui füüsilisest mälust ja swapist ei piisa või lihtsalt data jaoks). 64bit korral teoreetiliselt probleemi poleks.
Kahtlustan et seon end liiga palju MS'iga. Üks lisaküsimus:
* mis OSides saab veel küsida mingit konkreetset aadressi/mälu-piirkonda (userlandi rakendused muidugi) ja kuidas?
Exploit: eeldus et esimese 4GB sees on umbes 1GB vaba aadressiruumi (ei pea olema ühes tükis) täielikult minu/api kontrolli all. 4GB on väga väike mäluala ja seetõttu saab väga väikese vaevaga kogu sellel alal silma peal hoida:
Võimaldab kasutada pagana mugavaid memory management lahendusi [fastpath ~ 15 instruktsiooni + user space mutex in&out ~ 15 instruktsiooni, ~0.2% ruumist raisatakse mäluhaldusele {ehk 16B bloki alloc vajab umbes 0.2 bitti housekeeping infi x_x - kui mingil põhjusel ei saa konteinerit kasutada ja vaja kasutada TS general-purpose varianti}, TS, new/delete compatible]. Eks tal ole negatiivseid külgi ka (nagu alati).
edit:
privaatse aadressiruumi kaotamise eelistest üks lingike mille leidsin (1992):
link
|
|
tagasi üles |
|
|
Urmet
HV vaatleja
liitunud: 29.07.2005
|
04.01.2008 12:10:12
|
|
|
tanzanite kirjutas: |
Küsimust (pisut limiteerides) saaks esitada ka nii: kas ma võin ALATI eeldada, et mingi konkreetne aadress on vaba kui ma ise (minu app + kasutatud teegid) sinna midagi pannud pole? Windowsi all see on nii - kas ka mujal (usun et on aga tahaks kinnitust et see tõesti-tõesti nii on)? |
Mitte miski pole vaba enne, kui on järgi küsitud, kas see ikka on vaba - vaba ja kasutatavana võib arvestada aadresse, millele on viit saadud mõnda mälueraldusfunktsiooni kasutades. Täiesti suvalist "vaba" aadressi kasutades peaks programm üpris kiirelt sulguma GPF või segfauldi või muu samaväärse veaga. Peale selle on osad virtuaalsed aadressid kasutusel sisendi-väljundina(memory-mapped IO) ja suur osa kerneliruumiks. Vastus küsimusele oleks siis jah, on küll - kõigi opsüsteemide all mis tarbivad virtuaalmälu.
tanzanite kirjutas: |
Urmet, terminite segadust kõrvale jättes - siis seda mõtlesin jah. 3GB puhul oleks oluliseks takistuseks aadressiruumi fragmenteerumine ja oluliselt väiksem, kõikide protsesside peale kokku, kasutatav mäluruum (ehk iga protsessi ei saa kogu seda aadressiruumi kasutada, nt: MMF abil mäluruumi lisades kui füüsilisest mälust ja swapist ei piisa või lihtsalt data jaoks). 64bit korral teoreetiliselt probleemi poleks.
|
Kui kõik protsessid jagaksid ühte ja sama virtuaalmälu, satuvad programmide tükikesed üksteisest üpris kindlasti kaugemale kui 4GB, mis oli minuteada see piir, mille piires protsessor suudab väga kiirelt ja efektiivselt mälu adresseerida. Suuremate vahemaade puhul muutub kogu töö hüppeliselt aeglasemaks.
tanzanite kirjutas: |
Exploit: eeldus et esimese 4GB sees on umbes 1GB vaba aadressiruumi (ei pea olema ühes tükis) täielikult minu/api kontrolli all. 4GB on väga väike mäluala ja seetõttu saab väga väikese vaevaga kogu sellel alal silma peal hoida:
Võimaldab kasutada pagana mugavaid memory management lahendusi [fastpath ~ 15 instruktsiooni + user space mutex in&out ~ 15 instruktsiooni, ~0.2% ruumist raisatakse mäluhaldusele {ehk 16B bloki alloc vajab umbes 0.2 bitti housekeeping infi x_x - kui mingil põhjusel ei saa konteinerit kasutada ja vaja kasutada TS general-purpose varianti}, TS, new/delete compatible]. Eks tal ole negatiivseid külgi ka (nagu alati). |
Loodan, et kurjaks ei saa aga sellega tuli üks lahe kirjatükk meelde, mida eile õhtul lugesin
a rant against programs that were written poorly
link kirjutas: |
Program 24b first allocates all the memory in the system into a spare pool. When it needs
to allocate memory from the pool, it first attempts to grow the spare pool; if this succeeds,
the application crashes. (How could I possibly make this up?) Otherwise, it shrinks the spare
pool by the amount it wants to allocate, then allocates the desired value. If this second
allocation fails, the application crashes. |
tanzanite kirjutas: |
edit:
privaatse aadressiruumi kaotamise eelistest üks lingike mille leidsin (1992):
link |
Sealse jutu läbivaks poindiks on see lihtsus, millega saaks sel juhul programmide vahel andmeid jagada. See pole kahjuks eriti mõjuv point, sest mitmetel opsüsteemidel on olemas lahe võimalus nimega shared memory. Ja kuna multitasking opsüsteemid peavad protsessori page table'ga(sellele mingit ilusat eestikeelset vastet on?) niikuinii tegelema aktiivse protsessi vahetumisel, muutub kogu see mitme protsessi vahel jagatud virtuaalse mäluaadressi kasutamine lihtsalt selleks, et opsüsteem kaardistab sama füüsilise aadressi eri protsesside jaoks samale kohale. + Terve aadressiruumi kasutamine on aeglasem, nagu ülevalpool mainisin
|
|
Kommentaarid: 10 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
10 |
|
tagasi üles |
|
|
tanzanite
HV kasutaja
liitunud: 13.05.2006
|
04.01.2008 13:44:05
|
|
|
Urmet kirjutas: |
Mitte miski pole vaba enne, kui on järgi küsitud, kas see ikka on vaba. /.../ |
Vaba all mõtlesin seda, et kui ma küsin, et kus sellel alal (4GB) on vaba mälu siis selline ala leidub ja kui ma sellelt alalt midagi kasutusele küsin (ja seis pole muutunud) siis ma selle ka saan.
Urmet kirjutas: |
Kui kõik protsessid jagaksid ühte ja sama virtuaalmälu, satuvad programmide tükikesed üksteisest üpris kindlasti kaugemale kui 4GB, mis oli minuteada see piir, mille piires protsessor suudab väga kiirelt ja efektiivselt mälu adresseerida. Suuremate vahemaade puhul muutub kogu töö hüppeliselt aeglasemaks. |
Minuteada vahet pole (vähemalt arvestatavat mitte) - aga kindlalt väita ka ei tea. MS igatahes paigutab kõik OSi asjad kaugele 4GB taha.
Urmet kirjutas: |
Loodan, et kurjaks ei saa aga sellega tuli üks lahe kirjatükk meelde, mida eile õhtul lugesin |
Ei saa.
* oh, old days ... cli hlt
* amusingly predictable - enamus patustajatest on mängud
* tuli borlandi crt teegi viga meelde - ei märganud et seda mainitud oleks (see ikka märksa tõsisem prohmakas kui kõik muu)
* njah, üsna mitut kirjeldatust kohanud
on a different note:
* 24b on amusing but unrelated (like everything else there).
* teemaks oleva alamsüsteemi toimimine tulevikus on täiesti ebaoluline (a. sõltumatu, b. ei vaja pikemaajalist tuge - kasutusel teistel eesmärkidel) - minu huvi selle toimimise kohta teistes OSides on puhtalt akadeemiline. Ma ise nimelt olen väga vähe teistel platvormidel progenud. Samas tasub teada mis/kuidas seal toimub/toimib - aitab enda väärarusaamu ja halbu harjumusi siluda (lingitu on sellel eesmärgil juba liiga vananenud).
Urmet kirjutas: |
Sealse jutu läbivaks poindiks on see lihtsus, millega saaks sel juhul programmide vahel andmeid jagada. See pole kahjuks eriti mõjuv point, sest mitmetel opsüsteemidel on olemas lahe võimalus nimega shared memory. Ja kuna multitasking opsüsteemid peavad protsessori page table'ga(sellele mingit ilusat eestikeelset vastet on?) niikuinii tegelema aktiivse protsessi vahetumisel, muutub kogu see mitme protsessi vahel jagatud virtuaalse mäluaadressi kasutamine lihtsalt selleks, et opsüsteem kaardistab sama füüsilise aadressi eri protsesside jaoks samale kohale. + Terve aadressiruumi kasutamine on aeglasem, nagu ülevalpool mainisin |
Andmeid jagada ... see pole jah eriti mõjuv. Kas mulle viirastus või oli seal ikka ka rauapoolsest lihtsustamisest juttu - cache ja context switch on multitaskingu juures üsna valuline teema (IMMHO - not particularily backed by facts). Ja mida aeg edasi seda valulisem.
|
|
tagasi üles |
|
|
Urmet
HV vaatleja
liitunud: 29.07.2005
|
04.01.2008 14:36:19
|
|
|
tanzanite kirjutas: |
Urmet kirjutas: |
Kui kõik protsessid jagaksid ühte ja sama virtuaalmälu, satuvad programmide tükikesed üksteisest üpris kindlasti kaugemale kui 4GB, mis oli minuteada see piir, mille piires protsessor suudab väga kiirelt ja efektiivselt mälu adresseerida. Suuremate vahemaade puhul muutub kogu töö hüppeliselt aeglasemaks. |
Minuteada vahet pole (vähemalt arvestatavat mitte) - aga kindlalt väita ka ei tea. MS igatahes paigutab kõik OSi asjad kaugele 4GB taha. |
x86_64 arhitektuuris onjuba raua tasemel kaks mälupiirkonda. Füüsiliselt on hetkel protsessoris aadressid 40-48bit pikkused ja puudu olev auk on virtuaalmälu keskel. Kasutajaprogrammid saavad enda 512GB-128TB ruumi virtuaalmälu alguses ja kernel lõpus. See kaugus pole probleem, sest üldjuhul kerneliruumi koodi otse välja ei kutsuta ja minnakse läby syscall või mingi sarnase instruktsiooni. Toimub context switch ja muu hookuspookus, mis on aeglasemgi kui kuskilt väga kaugelt funktsiooni välja kutsumine. Kauge maa tagant funktsioonide välja kutsumine ja mälu mudimine peaks olema ilusasti dokumenteeritud AMD64 ABI dokumentatsioonis, aga seda pole praegul aega välja kaevata..
Ühe lingi küll leidsin, mis väga sügavuti ei lasku teemasse, aga umbes seletab eri mälumudelite olemasolu
http://blogs.sun.com/alblog/entry/amd64_memory_models
tanzanite kirjutas: |
Urmet kirjutas: |
Sealse jutu läbivaks poindiks on see lihtsus, millega saaks sel juhul programmide vahel andmeid jagada. See pole kahjuks eriti mõjuv point, sest mitmetel opsüsteemidel on olemas lahe võimalus nimega shared memory. Ja kuna multitasking opsüsteemid peavad protsessori page table'ga(sellele mingit ilusat eestikeelset vastet on?) niikuinii tegelema aktiivse protsessi vahetumisel, muutub kogu see mitme protsessi vahel jagatud virtuaalse mäluaadressi kasutamine lihtsalt selleks, et opsüsteem kaardistab sama füüsilise aadressi eri protsesside jaoks samale kohale. + Terve aadressiruumi kasutamine on aeglasem, nagu ülevalpool mainisin |
Andmeid jagada ... see pole jah eriti mõjuv. Kas mulle viirastus või oli seal ikka ka rauapoolsest lihtsustamisest juttu - cache ja context switch on multitaskingu juures üsna valuline teema (IMMHO - not particularily backed by facts). Ja mida aeg edasi seda valulisem. |
Aga kuidas sa kujutad ette nendest loobumist? Kogu mälu globaalselt kirjutatavaks jätmine pole just hea mõte. Selleks et kernel ennast programmide eest ja programme üksteise eest kaitsta saab, peab ta olema oma kõrgemas privileegiringis ja sinna pääsemine, et vahetada jooksev programm järgmise vastu ja teisi kaitsta kõikvõimalike puukide vastu, mis võivad programmis peidus olla tähendab ikkagi kahte context switchi.
edit: Kuskilt jäi silma et windowsi x64 versioonides on programmide virtuaalmäluruum piiratud ainult 44 biti laiuseks, kuna esimestel x86_64 prosedel puudus üks kasulik instruktsioon
edit2: Leidsin windowsi piirangu kohta viite üles http://en.wikipedia.org/wiki/X86-64#_ref-7 Seal on ka seda poolitatud virtuaalmälu ilusate pildikestega illustreeritud
|
|
Kommentaarid: 10 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
10 |
|
tagasi üles |
|
|
andreie
HV vaatleja
liitunud: 09.09.2006
|
05.01.2008 19:40:15
|
|
|
Ilus tore, aga kuidas kujutate ette dünaamiliselt laetud teeke globaalses aadressiruumis? Või siis ühest programmist mitut koopiat samaaegselt töös.
_________________ Unix survives only because everyone else has done so badly. |
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
5 |
|
tagasi üles |
|
|
dynamic
HV kasutaja
liitunud: 02.12.2001
|
06.01.2008 12:28:52
|
|
|
Siia sobib link artiklile eksokernelitest, mis ei suru programmeerijale peale abstraktsioone nagu virtuaalne aadressiruum, vaid multipleksib lihtsalt süsteemi resursse ja kontrollib et protsessid üksteisel otsas ei trambiks. Tegelikult äärmiselt huvitav kontseptsioon, soovitan lugeda ka natuke tõsisemat sissejuhatust teemasse [PDF]
|
|
Kommentaarid: 6 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
6 |
|
tagasi üles |
|
|
tanzanite
HV kasutaja
liitunud: 13.05.2006
|
07.01.2008 11:20:09
|
|
|
Urmet kirjutas: |
x86_64 arhitektuuris onjuba raua tasemel kaks mälupiirkonda. Füüsiliselt on hetkel protsessoris aadressid 40-48bit pikkused ja puudu olev auk on virtuaalmälu keskel. Kasutajaprogrammid saavad enda 512GB-128TB ruumi virtuaalmälu alguses ja kernel lõpus. See kaugus pole probleem, sest üldjuhul kerneliruumi koodi otse välja ei kutsuta ja minnakse läby syscall või mingi sarnase instruktsiooni. Toimub context switch ja muu hookuspookus, mis on aeglasemgi kui kuskilt väga kaugelt funktsiooni välja kutsumine. Kauge maa tagant funktsioonide välja kutsumine ja mälu mudimine peaks olema ilusasti dokumenteeritud AMD64 ABI dokumentatsioonis, aga seda pole praegul aega välja kaevata.. |
Hm, siin üht-koma-teist uut minu jaoks - sai ka ABI doke uuritud. väärt inf! tänud.
Urmet kirjutas: |
Aga kuidas sa kujutad ette nendest loobumist? Kogu mälu globaalselt kirjutatavaks jätmine pole just hea mõte. Selleks et kernel ennast programmide eest ja programme üksteise eest kaitsta saab, peab ta olema oma kõrgemas privileegiringis ja sinna pääsemine, et vahetada jooksev programm järgmise vastu ja teisi kaitsta kõikvõimalike puukide vastu, mis võivad programmis peidus olla tähendab ikkagi kahte context switchi. |
Mitte nendest loobumist vaid nende lihtsustamist - aga nagu ütlesin ei saa ma väita, et teaksin kas sealt midagi võita on.
andreie kirjutas: |
Ilus tore, aga kuidas kujutate ette dünaamiliselt laetud teeke globaalses aadressiruumis? Või siis ühest programmist mitut koopiat samaaegselt töös. |
Mul ei teki ühtegi tõrget selle ettekujutamisega (võibolla liiga elav fantaasia ) - milles probleemi näed?
dynamic kirjutas: |
Tegelikult äärmiselt huvitav kontseptsioon, soovitan lugeda ka natuke tõsisemat sissejuhatust teemasse [PDF] |
njah, ... kui vaid aega oleks :/ (sattusin vahepeal hätta borlandi c++ veidrustega - juba pikemat aega on enamus võhma sellele läinud x_x)
|
|
tagasi üles |
|
|
andreie
HV vaatleja
liitunud: 09.09.2006
|
09.01.2008 12:35:06
|
|
|
tanzanite kirjutas: |
andreie kirjutas: |
Ilus tore, aga kuidas kujutate ette dünaamiliselt laetud teeke globaalses aadressiruumis? Või siis ühest programmist mitut koopiat samaaegselt töös. |
Mul ei teki ühtegi tõrget selle ettekujutamisega (võibolla liiga elav fantaasia ) - milles probleemi näed? |
Paneme programmist käima teise eksemplari. Kuidas saab teine eksemplar endale esimesest erineva komplekti globaalsetest muutujatest?
_________________ Unix survives only because everyone else has done so badly. |
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
5 |
|
tagasi üles |
|
|
Urmet
HV vaatleja
liitunud: 29.07.2005
|
09.01.2008 14:21:46
|
|
|
andreie, programme võib laadida mälusse täiesti suvalistele aadressidele ja sealt käivitada. .com failid ja raudkindel koodi laadimine aadressile 0x100 on ammu minevik. Kindlalt paigas ei ole nende globaalsete muutujate ja muude asjade aadressid ka privaatsete mäluruumide puhul. Üks lahendus, mida kasutatakse on andmetele viitamine offseti ja lisaviidaga, mis viitab antud protsessi muutujakomplekti algusele.[1]
Windowsi kohta pole kindel, aga vist kutsuti kõiki dll'ides paiknevaid funktsioone läbi viitade välja.
edit1:
pingviinisüsteemi all ka sama teema teekidest funktsioonide välja kutsumisega
[1] http://www.gentoo.org/proj/en/hardened/pic-guide.xml
edit2:
enne kirjutan, siis mõtlen - bs rimuuvd
viimati muutis Urmet 10.01.2008 12:32:37, muudetud 1 kord |
|
Kommentaarid: 10 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
10 |
|
tagasi üles |
|
|
tanzanite
HV kasutaja
liitunud: 13.05.2006
|
10.01.2008 12:10:00
|
|
|
(ets kae mis ma tabe kinni pannes avastasin, yks HV postitamata vastus ... x_x ... better late than never?)
http://en.wikipedia.org/wiki/Portable_Executable
Windowsi all saab koodi baasaadressi muuta (MZ korral kindlasti [ dos ], väidetavasti ka PE korral aga kuidas see seal täpselt käib - pole huvi tundnud) ja dlle kasutatakse läbi nn. import address table.
btw. ( , see tundub nagu oli alles eile) .com algusaadress on 0x100.
|
|
tagasi üles |
|
|
andreie
HV vaatleja
liitunud: 09.09.2006
|
10.01.2008 14:39:11
|
|
|
Urmet, tänan täpsustuse eest.
Jäbi mulle, PIC on ikka väga vana teema.
_________________ Unix survives only because everyone else has done so badly. |
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
5 |
|
tagasi üles |
|
|
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|