Basiskennis informatica/Primair geheugen: verschil tussen versies

 
Een computer bezit een geheugen, dit geheugen is een soort gigantisch kladblok waar data in geschreven kan worden, om makkelijk data terug te vinden zijn er geheugen adressen. Een 32 bit computer heeft zo geheugenadressen die bestaan uit 32 bits. Zo kunnen dus <math>2^{32}</math> verschillende geheugenlocaties aangesproken worden. Indien een geheugenlocatie (de kleinste adresseerbare hoeveelheid) bijvoorbeeld 1 byte bevat beslaat het geheugen maximaal <math>2^{32}</math> bytes
(of 4.294.967.296 byte, zijnde een geheugenlimiet van 4 gigabyte op een standaard x86 machine). Het opslaan van een enkele byte is dus geen enkel probleem. Wanneer men 0xAF wegschrijft op adres 0x12341234 dan zal dit perfect lukken en dan zal deze byte er steeds zo uitkomen. Nu kan een enkele byte niet bijster veel informatie bevatten, amper 256 <math>2^{8}</math> verschillende waarden. De oplossing is simpel, gebruik gewoon meer bytes gebruiken. Een mooi voorbeeld is een standaard IP adres. Neem 192.168.1.1 bijvoorbeeld, dit is een 32 bits getal en vereist dus 4 bytes. Wanneer dit omgerekend wordt naar hexadecimaal geeft dit 0xC0A80101 of de volgende bytes die in het geheugen gestockeerd moeten worden: 0xC0,0xA8,0x01 en 0x01. Nu zijn er twee manieren om deze byte op te slaan in het geheugen. Er is de Big Endian benadering en de Little Endian benadering:
 
=== Big endianEndian ===
 
Bij een Big Endian system wordt de meest significante byte op het laagste geheugenadres geplaatst. Een mnemonic is: ''big end in'', of het meest significante wordt eerst geplaatst.
=== Little endian ===
 
<pre>
Adres: Inhoud:
0x12341234 0xC0
0x12341235 0xA8
0x12341236 0x01
0x12341237 0x01
</pre>
 
Big Endian wordt vooral toegepast in Motorola 6800, Sparc en PowerPC processorarchitecturen.
=== Little endianEndian ===
 
Een alternatieve benadering voor hetzelfde ip adres in Little Endian is het volgende, hierbij wordt de minst significante byte op het laagste geheugenadres geplaatst:
<pre>
Adres: Inhoud:
0x12341234 0x01
0x12341235 0x01
0x12341236 0xA8
0x12341237 0xC0
</pre>
 
Little Endian wordt vooral gebruikt op de Intel x86 architectuur.
 
Indien niet een byte maar bijvoorbeeld een word (16 bit) de kleinste adresseerbare unit zou zijn zou het probleem er alsvolgt uitzien:
<pre>
Adres: Inhoud (Big Endian): Inhoud (Little Endian):
0x12341234 0xC0A8 0x0101
0x12341235 0x0101 0xC0A8
</pre>
Hierbij wijst een opeenvolgende geheugenadres dus naar een groep van 16 bits. Intern in de kleinst adresseerbare unit wordt er dus geen endian conversie gedaan, tussen de cellen natuurlijk wel.
=== Fouten bij omzetting ===
 
Problemen treden op wanneer Little Endian output terecht komt op een Big Endian machine en vice versa indien een van de beide machines daar niet aan aangepast is. Wanneer een protocol tussen twee machines gedefinieerd wordt (bijvoorbeeld een netwerk protocol) dient afgesproken te worden welke de endianess is die gebruikt zal worden voor de datatypes (meestal zal men geneigd zijn hier Big Endian te gebruiken, maar geen van beiden hebben een significant voordeel tegenover de andere). In het geval van een ipadres kan men zo 1.1.168.192 uitlezen in plaats van 192.168.1.1. Een goede oefening voor de lezer is na te gaan wat er gebeurd indien 0x00000001 hetzelfde lot ondergaat.
 
== Cache geheugen ==
187

bewerkingen

Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.