[>32 bit adressering] Wat is "bottom of 32-bit"?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • TD-er
  • Registratie: Januari 2000
  • Laatst online: 20-09 16:06
Ik was vandaag even voor iemand met een nieuw i7 boardje met uiteraard meer dan 4 GB ram aan het kijken hoe het ook alweer in de BIOS heet wanneer je een memory-hole wilt plaatsen tussen de 3 en 4 GB adres-ruimte.
Dus ik ben ook weer even mijn eigen BIOS in gedoken (beide Gigabyte) en kwam o.a. deze instelling tegen:
code:
1
bottom of 32-bit[31:24] IO

Afbeeldingslocatie: http://got.td-er.nl/20081229-IMG_4857.jpg
Uiteraard net boven de benaming die ik zocht ;)

Maar ik ken die setting helemaal niet en ik weet ook niet precies wat je ermee kunt instellen.
Mijn vermoeden is dat je ermee kunt instellen hoe groot dat "gat" in de adres-ruimte moet zijn, maar wat de min en max-waarde dan voorstellen... geen idee.

Na wat googlen bleek dat heel veel mensen ook geen idee hebben, dus ik vroeg me af of iemand hier een idee had?

Dit kwam ik tegen in een stukje source-code van coreboot project van AMD zelf:
code:
1
2
3
00638 /*Memory Map/Mgt.*/
00639 #define NV_BottomIO             40      /* Bottom of 32-bit IO space (8-bits)
00640                                             NV_BottomIO[7:0]=Addr[31:24]*/


Dit zou suggereren dat die waarde de 8 meest significante bits voorstellen in de adressering, maar waarom zou je dan uberhaupt zoiets laags als 0000 willen gebruiken? Dan zou je effectief maar zo'n 16 MB ram hebben voor die memory-hole en bij totaal 4 GB ram dus de adressering door laten lopen tot bijna 233.
Een logische waarde zou dan kunnen zijn "00C0", oftewel 3/4 van de adres-ruimte, oftewel de 3 GB grens. (even aangenomen dat er geen videokaarten in zitten met idioot veel videogeheugen)

Dit staat er in de handleiding van een MSI-mainboard met de zelfde Nvidia-chipset als mijn Gigabyte GA-K8NF9:
Bottom of 32-bit [ 31:24] IO
When the User Config mode is set to [Manual], the field is adjustable. This field
specifies the memory which could be remapped to another address higher than
00E0. (This item only activities in 64-bit OS) The settings are: [0000~00E0].
Eigenlijk hoop ik dat ik hiermee (eindelijk) mijn probleem onder Vista (64bit), dat ik effectief maar 3 GB gebruik zou kunnen oplossen.

Edit: (@2:29)
Ik heb dmv Babelfish ook nog wat kunnen vinden op deze Russische pagina.
Zij beweren dat deze instelling de eerste (msb) 8 bits zijn van het MMIO-base-address.
Oftewel een hex-waarde van D0 legt het start-adres van de memory-hole op D0000000, oftewel een mem-hole van 768 MB.
E0 maakt de grootte van het mem-hole dus 512 MB, F0 256 MB, etc.
Hiermee kun je dus de grootte van de overlap van je werkgeheugen en de gereserveerde ruimte onder de 4 GB adres-ruimte verkleinen, of beter aan laten sluiten.
Ik verwacht dat verhogen van deze waarde nogal vervelend kan zijn in 32-bits OS-en, wanneer je echt 4 GB aan ram in je PC hebt zitten en je videokaart heeft redelijk veel geheugen.
Nog niet getest, maar ik vermoed dat je met bijv een instelling van "C0" en een 32-bits OS (of met remap uit) je de (max) hoeveelheid zichtbaar geheugen voor je OS op 3 GB zet.

En even een schematische weergave voor het overzicht:
Afbeeldingslocatie: http://img371.imageshack.us/img371/8106/mmioid2.jpg

[ Voor 28% gewijzigd door TD-er op 30-12-2008 02:30 ]

Een goedkope voeding is als een lot in de loterij, je maakt kans op een paar tientjes korting, maar meestal betaal je de hoofdprijs. mijn posts (nodig wegens nieuwe layout)


Acties:
  • 0 Henk 'm!

  • TD-er
  • Registratie: Januari 2000
  • Laatst online: 20-09 16:06
Niemand gereageerd verder :(

Ik heb zelf nog even wat getest... In Linux staat in /var/log/messages wat de RAM-layout is volgens de BIOS.
Met die waarde op "D0" (en totaal 4 GB RAM), krijg ik het volgende:
code:
1
2
3
4
5
6
7
8
9
10
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cfff0000 (usable)
BIOS-e820: 00000000cfff0000 - 00000000cfff3000 (ACPI NVS)
BIOS-e820: 00000000cfff3000 - 00000000d0000000 (ACPI data)
BIOS-e820: 00000000d0000000 - 00000000e0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)


Met die waarde op "C0", krijg ik het volgende:
code:
1
2
3
4
5
6
7
8
9
10
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000bfff0000 (usable)
BIOS-e820: 00000000bfff0000 - 00000000bfff3000 (ACPI NVS)
BIOS-e820: 00000000bfff3000 - 00000000c0000000 (ACPI data)
BIOS-e820: 00000000d0000000 - 00000000e0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000140000000 (usable)


Het grote verschil is dus op het eerste gezicht dat het blok van ACPI-data net onder die grens komt te liggen (een waarde van "C0" in de BIOS slaat dus op base-address &h 00000000c0000000)
De usable address-space boven de 4 GB-grens (vanaf adres 0000000100000000) is dan ook precies met dat verschil (256MB) toegenomen. Elke stap hoger instellen van die waarde is een stap van 16 MB en een stap van &h 10 is uiteraard een stap van 256MB in de adres-ruimte.
De gereserveerde adres-ruimte tussen 00000000d0000000 en 0000000100000000 lijkt mij verband te houden met mijn videokaart (256 MB, oftewel D0.... tot E0...) en nog wat andere hardware (20 MB tussen FEC00000 en de 4 GB grens)

Kortom, zoals het er nu naar uitziet, heeft deze BIOS-instelling waarschijnlijk alleen effect wanneer je in een 32-bit OS werkt, omdat als het goed is een 64 bits OS gewoon transparant elke indeling van de adres-ruimte zou moeten gebruiken en prima de adres-ruimte boven de 4 GB kan gebruiken. Bij een 32-bits OS zal aanpassen van deze instelling dus kunnen leiden tot een minder bruikbare hoeveelheid geheugen.

[ Voor 7% gewijzigd door TD-er op 03-01-2009 23:00 ]

Een goedkope voeding is als een lot in de loterij, je maakt kans op een paar tientjes korting, maar meestal betaal je de hoofdprijs. mijn posts (nodig wegens nieuwe layout)


Acties:
  • 0 Henk 'm!

  • ParkOverall
  • Registratie: Maart 2004
  • Laatst online: 19:27
Interessante materie!

Acties:
  • 0 Henk 'm!

  • silentsnake
  • Registratie: September 2003
  • Laatst online: 24-09 07:18
Inderdaad interessant. Ik heb hier nooit echt naar gekeken dus ik zou het zelf niet zo weten. Maar als je nog wat meer informatie er over vind lees ik het graag!