Hello.
Az operativtarral kapcsolatos dolgokrol tanultam, de nem minden volt szamomra tiszta. Tudnatok segiteni rendberakni?
Szoval ahogy tudom a regebbi Intel processzorok hagyomanyait tartva a mai processzoroknak is 16bites cimbusza van. Ezzel ugyebar 64k-t lehet kozvetlenul megcimezni. Regebben amig ez eleg volt, erre a cimtartomanyra osztottak ki a RAM es ROM-okat is. Viszont ez a tar eleg hamar kevesnek bizonyult.
Azzal nem vagyok tisztaban, hogy hogyan mukodik a felhasznalo altal is bovitheto RAM-ok (es az alap ROM-ok) cimzese a mai szamitogepekben. Valaki ossze tudna foglalni? Vagy valami hasznos link esetleg?
koszonom
- 1340 megtekintés
Hozzászólások
"...a regebbi Intel processzorok hagyomanyait tartva a mai processzoroknak is 16bites cimbusza van"
Mondjuk az i386-nak már assszem 24bites cím- és 16bites adatbusza volt. A Pentium Pro és a PII vonal 36 bites címbuszt tudott (és ők már a PAE-t is támogatják).
P4: 36bit cím, 64bit adatbusz...
Itt egy P4 adatlap - ebben benne lehet, amit keresel.
_m.
- A hozzászóláshoz be kell jelentkezni
Ertem, akkor itt tevedtem. Hiszen 2^32 bit cimet tud kozvetlenul megcimezni 32 bit cimbusz.
- A hozzászóláshoz be kell jelentkezni
mar a 8086/8088 is 20 bittel cimzett, ket 16 bites regiszter kombinaciojaval (szegmens+offszet) lehet(ett) cimezni ebben a cpu modban (valos/real). akkor regen ugy mukodtek pl. a memoria bovitok (1 MB felett), hogy egy a 640kb-1024kb tartomanyon belul eso reszen, ahova a romok, periferiak dolgai vannak mappelve, egy 64kbyte-os reszre tudott mappelni az 1 MB feletti reszrol, es igy mar meg lehetett cimezni es hasznalni. persze elotte mindig meg kellett neki mondani, hogy epp melyik reszt mappelje oda. emlekeim szerint az EMS igy mukodott.
- A hozzászóláshoz be kell jelentkezni
Remlik valami. Ez volt talan a 'Felso memoria'.
- A hozzászóláshoz be kell jelentkezni
huhh. Koszi a valaszt. ra is keresek erre az intersecrets-re...
- A hozzászóláshoz be kell jelentkezni
Csak egy kicsit igazítanám ki, az EMS az "Expanded Memory Specification"-t jelenti, az EM kezelését az "Expanded Memory Manager" végzi, pl. EMM386, QEMM386.
Ráadásul a 640kB és 1MB közti terület kezelése sem egyszerű, továbbá az A20vonallal elérhető legmagasabb címen, azaz a 0xFFFFH-n levő 64kB-os szegmens is az extended memoriához tartozik. Ennek szabványszerű definíciója az "Expanded Memory Specification". Managerek pl. a VCPI, a Himem.sys, de a DPMi is, és az EMM386 az expanded memoriát az extendedre képezi le, emulálja, valós módban.
A 386-ostól kezdve a címbusz 32 bites, ez a fizikai cím határát jelüli ki. A virtuális cím egy szegmensszelektorból és egy offsetből áll, és a virtuális címtartomány így 46 bit, 64 terabyte. Asszem az ufs-nél a file méret éppen ennyi.
A 36 bit széles címsin egy ideig vmi titok volt, ha jól emlékszem, a felső 4 bit kicsit el van rejtve, hirtelen meg nem mondom, melyik vezérlő bittel állítható.
A szegmensek mérete kétféle lehet, vagy egy byte-tól 1 MB-ig, vagy 4kB-tól 4GB-ig. A lapméret is változtatható, alapértelmezett érték a 4kB, átállítható 2MB-ra.(ebben az értékben nem vagyok biztos, fix me.)
Még annyit, hogy a Unix csak a lapozást engedi, a szegmentálást nem, a Linux viszont mindkettőt.
Az Intel honlapján lehet találni leírásokat (vagy AMD...), de érdekes az Intelsecrets-re rákeresni.
(A "felső memória " így nem egyértelmű, az Upper Memory a 640 és 1024 kB közti terület, a High Memory Area pedig az 1024 és 1088kB közti 64 kB-os tartomány.)
- A hozzászóláshoz be kell jelentkezni
"A virtuális cím egy szegmensszelektorból és egy offsetből áll, és a virtuális címtartomány így 46 bit, 64 terabyte. Asszem az ufs-nél a file méret éppen ennyi."
A virtuális cím az 32 bites. A szelektor egy index a GDTben vagy a LDTben, onnan olvassa ki az adott szegmens alapcímét, ehhez adja hozzá az ofszetet, mindkettő 32 bites. Az x86_64nél vannak 48 bites virtuális címek.
- A hozzászóláshoz be kell jelentkezni
Én is gondolkoztam, hogy legassam -e, de értelmezhetjük 46 bitnek.
- A hozzászóláshoz be kell jelentkezni
bocs, de nem értem, honnan jön az a 46 bit? tudomásom szerint egy szelektorban lehet 13 bitet használni indexelésre, 1 bit megmondja, hogy az illető szelektor ldt vagy gdtben van, a maradék kettő pedig privilege level.
- A hozzászóláshoz be kell jelentkezni
szerk:
ldt/gdt is cim bitnek tekintve.
Szerinted elvetendő gondolat, hogy címtartománynak tekinthessük ?
- A hozzászóláshoz be kell jelentkezni
nah. a 8086 -nak 20 bites cimbusza volt. az mas kerdes, hogy ezt a 20 bitet hogyan rakta ossze. ( Seg * 16 + offset ) a 80286 -nak mar 24 bites cimbusza volt. a 'highmem' az egy bug a 80286 -os intel processzorban :D) ugyanis az a lenyeg, hogy ami a 8086 cimbuszan az alabbi cimzessel FFFF:0011 = 00001 lett, az a 80286 -nal 10001 azaz a legfelso 4 bitet real modban nem nullazta ki a proci...
ami az ems -t illeti, az arrol szolt, hogy az akkortajt ritkan lakott 640K - 960K kozotti tartomanyba lehet belapozni az 1MB feletti cimeket, ami (pedig elvileg a 640K-ba minden belefer az urban legend szerint) mar akkoriban is igen jol jott bizonyos alkalmazasoknak.
A lapmeretet most nem feszegetem, asszem 16K lehetett, de ennek mar nagyon utana kellene neznem. Es lon i386 es lon 32 bites cimbusz. Kesobb a DR dos feltalalta, hogy a 386-os mar tud mindenfele kunsztot, es feltalalta az umb-t, hogy az os es segedei azt hasznalhatjak, igy az 'also 640K-ba' beferjenek a programok. No ezt az ms is gyorsan atvette, mert lata, hogy jo. Es lon emm386 , ami az i386 cpu kepessegeit kihasznalva szepen tudott ems -t emulalni, de ha arra kertuk, csinalt emm-et, es lon umb, meg telleg DPMI mer aztis, es szerencses esetben es jo konstrukcioju alaplapon akar eccere mindet, es ettol ritkan fagyott a gep. de inkabb surun, mert kulonben is DOOM es Tajvanon akkoriban lestek el a nagyok alaplapgyarto tudomanyat...
Mar a 286-ban (hogy egy korabeli szakkonyvet idezzek : "az IBM -tol az Intel fele aramlo szaktudas eredmenyekeppen" // ha valakit erdekel, nezzen utana, hogy a regebbi IBM mainframe-k cimzese mennyire hasonlit az i286/i386 -hoz ! //) megjelent a vedett mod, es levenek descriptorok meg miegymas. Es ez a 386-ban csak tovabb bonyolodott, mert ott mar 32 bites cimbusz stb. De ehhez ki kell jozanodnom, mert egyreszt elo kell asni a regi konyveket a temaban, masreszt meg kib* hosszu lenne, es meg bele is zavarodnek igy az x.-ik so:r utan....
- A hozzászóláshoz be kell jelentkezni
I/O portok(címek) vannak limitálva 64k-ra.
- A hozzászóláshoz be kell jelentkezni
Ez igaz, (32 bites prociknál), én itt a valós módú memóriakezelésre gondoltam, bocs, ha félreérthető volt.
- A hozzászóláshoz be kell jelentkezni
$ cat /proc/iomem
00000000-0009fbff : System RAM
00000000-00000000 : Crash kernel
0009fc00-0009ffff : reserved
000f0000-000fffff : reserved
00100000-3ffeffff : System RAM
00200000-007367d1 : Kernel code
007367d2-009279cf : Kernel data
3fff0000-3fff7fff : ACPI Tables
3fff8000-3fffffff : ACPI Non-volatile Storage
add00000-cdcfffff : PCI Bus #01
b0000000-bfffffff : 0000:01:00.0
cddfe000-cddfefff : 0000:00:0a.0
cddfe000-cddfefff : bttv0
cddff000-cddfffff : 0000:00:0a.1
cde00000-cfefffff : PCI Bus #01
ce000000-ceffffff : 0000:01:00.0
ce000000-ceffffff : nvidia
cfee0000-cfefffff : 0000:01:00.0
cffc0000-cffdffff : 0000:00:0b.0
cfff0000-cfff7fff : 0000:00:08.0
cfff0000-cfff7fff : 0000:00:08.0
cfffbd00-cfffbdff : 0000:00:10.4
cfffbd00-cfffbdff : ehci_hcd
cfffbf00-cfffbfff : 0000:00:0b.0
cfffbf00-cfffbfff : r8169
d0000000-d7ffffff : GART
d0000000-d7ffffff : aperture
fec00000-fec00fff : IOAPIC 0
fec00000-fec00fff : reserved
fee00000-fee00fff : Local APIC
fff80000-ffffffff : reserved
Mint látod fizikai memoria cim tartomanyba van a tenyleges RAM mellett egy smás. ROM -ok, biz. harware eszközök memóriái.
(Védet modban 0 selectorral a fizkia memóriát cimzed,az Offset címmel x86 -on)
- A hozzászóláshoz be kell jelentkezni
Igen, látom:-)
(Hogy a szelektorral mit is címzek, az a szelektor által kiválasztott deszkriptor határozza meg, a fenti címek pedig logikaiak, de sejtem, hogy a kérdező erre egyenlőre nem is kíváncsi, a memory mapped I/O-ra meg végképp nem.)
- A hozzászóláshoz be kell jelentkezni
de-de :) minden erdekel. Szoval, amit latunk az a tenyleges fizikai cimtartomany kiosztasa. Vagy ez a virtualis-e?
- A hozzászóláshoz be kell jelentkezni
namostan ezen majd nemsokara ossze fogsz zavarodni, mert ugye valamikor aztat hivtuk virtualis memorianak, ami nem kezzelfoghato rammodul volt (swapfile / swap particio) de nemreg jol osszebalheztam egy szakival, aki ertette is, amit mond, azota tudom, hogy a programok szempontjabol minden memoria virtualis. inkabb igyunk.
- A hozzászóláshoz be kell jelentkezni
A fenti cimekbe lapozás nem szol bele, GDT bejegyzés nem szol bele, ha a selector 0.
GDT 0. bejegyzése "használaton kívül van".
- A hozzászóláshoz be kell jelentkezni
Bocs, nem jártam erre. Egyetértünk, a fenti címekbe se a lapozás, se a GDT nem szól bele. A szelektor nemigen lehet nulla, mert abból semmi nem lesz. A GDT-ben viszont kell lennie egy null-deszkriptornak, ami nemcsak hogy használaton kívül van, de nem is használható semmire. Az Intel mérnökeit kéne megkérdezni, hogy ezt - többek között - minek csinálták. Mindenesetre a GDT csak 8191 bejegyzést tartalmazhat, a LDT viszont 8192-t, mert ott nincs null-deszkriptor.
Viszont a fenti címekhez hasonlóan nálam is vannak 512MB felettiek, pedig a gépben csak annyi van, szóval ezek erősen logikaiak. Az LGDT, SGDT és tsai utasítások privilegizáltak (ring0), úgyhogy a táblázatok tartalma, így a fizikai címek sem érhetők el konzolból sehogy, root-ként sem.
- A hozzászóláshoz be kell jelentkezni
"Viszont a fenti címekhez hasonlóan nálam is vannak 512MB felettiek, pedig a gépben csak annyi van, szóval ezek erősen logikaiak."
Még a fizkai címzés alatt is vannak dolgok. A System RAM-ot (valódi ram), perifiriák RAM -ját,..stb-t, be kell mappolni a fizikai cím tartományba.
"úgyhogy a táblázatok tartalma, így a fizikai címek sem érhetők el konzolból sehogy, root-ként sem."
mmap /dev/mem és minden elerhető.
"Konzolból" remek kernel modulokat lehet írni, ha valamit még se találnál.
- A hozzászóláshoz be kell jelentkezni
A map-okat mostmár hagyjuk... való igaz, a járható út a kernelmodul.
- A hozzászóláshoz be kell jelentkezni
"szelektor", "deszkriptor" MEDVE ANYAM
- A hozzászóláshoz be kell jelentkezni