20Aug

Cik atmiņas adreses var manā datorā ieturēt RAM?

click fraud protection

Dažreiz ir jautri skatīties uz datora pieredzes virsmas līmeni, un citās dienās ir patīkami ienirt iekšpusē.Šodien mēs aplūkojam datora atmiņas struktūru un tikai to, cik daudz jūs varat iesaiņot RAM atmiņā.

šodienas jautājums &Atbildes sesija mums priecājas par SuperUser - Stack Exchange, kas ir kopienas un Q & A tīmekļa vietņu grupa.

Jautājums

SuperUser lasītājs Johan Smohan cīnās ar to, kā procesora tips un atmiņas lielums darbojas kopā, lai iegūtu kopējo adrešu skaitu. Viņš raksta:

Cik atmiņas adreses mēs varam iegūt ar 32 bitu procesoru un 1 GB RAM un cik ar 64 bitu procesoru?

Es domāju, ka tas ir kaut kas līdzīgs šim:

1 GB RAM, dalīts ar 32 bitiem 4 biti( ?), Lai iegūtu atmiņas adreses skaitu?

Es izlasīju Wikipēdijā, ka 1 atmiņas adrese ir 32 biti plata vai 4 okteti( 1 oktets = 8 biti), salīdzinot ar 64 bitu procesoru, kurā 1 atmiņas adrese vai 1 vesels skaitlis ir 64 biti plata vai 8 okteti. Bet nezinu, vai arī es pareizi sapratu.

Tie ir jautājumi, kas nakts laikā var saglabāt ziņkārīgu geek. Cik daudz adreses ir pieejamas katrā Johana hipotētiskajās sistēmās?

instagram viewer

Atbilde

SuperUser atbalstītājs Gronostaj piedāvā padziļinātu izpratni par to, kā tiek sadalīta un izmantota RAM:

Īsa atbilde: Pieejamo adrešu skaits ir vienāds ar mazāko no tiem:

  • Atmiņas izmērs baitos
  • Lielākais neparakstīts vesels skaitlis, ko var saglabātCPU mašīnas vārds

Garais atbilde un paskaidrojums par iepriekš minēto:

atmiņa sastāv no baidiem( B).Katrs baits sastāv no 8 bitiem( b).

1 B = 8 b

1 GB RAM ir faktiski 1 GiB( gibibīte, nevis gigabaits).Atšķirība ir šāda:

1 GB = 10 ^ 9 B = 1 000 000 000 B 1 GiB = 2 ^ 30 B = 1 073 741 824 B

Katram atmiņas bairam ir sava adrese neatkarīgi no tā, cik liels ir CPU mašīna vārds. PiemēramIntel 8086 centrālais procesors bija 16 bitu un tas atrisināja atmiņu baitos, tāpat arī modernus 32 bitu un 64 bitu procesorus. Tas ir pirmā ierobežojuma cēlonis - jums nevar būt vairāk adreses nekā atmiņas baiti.

Atmiņas adrese ir tikai baitu skaits, kam CPU ir jāizlaiž no atmiņas sākuma, lai nokļūtu tajā, ko tā meklē.

  • Lai piekļūtu pirmajam baitam, tai ir jāizlaiž 0 baiti, tāpēc pirmā baita adrese ir 0.
  • Lai piekļūtu otrajam baitam, tai ir jāizlaiž 1 baits, tāpēc tā adrese ir 1.
  • ( un tā tālāk. ..)
  • Lai piekļūtupēdējais baits, CPU izlaiž 1073741823 baiti, tāpēc tā adrese ir 1073741823.

Tagad tev jāzina, kas īsti nozīmē 32 bitu. Kā jau minēju iepriekš, tas ir mašīnas vārda lielums.

Automātiskais vārds ir atmiņas apjoms, ko CPU izmanto, lai turētu ciparus( RAM, kešatmiņā vai iekšējos reģistros).32 bitu CPU izmanto 32 bitus( 4 baiti), lai saglabātu ciparus. Atmiņas adreses ir arī cipari, tāpēc 32 bitu CPU atmiņas adrese sastāv no 32 bitiem.

Tagad padomājiet par to: ja jums ir viens bits, jūs varat saglabāt divas vērtības uz to: 0 vai 1. Pievienojiet vēl vienu bitu un jums ir četras vērtības: 0, 1, 2, 3. Trīs bitiem jūs varat ietaupīt astoņusvērtības: 0, 1, 2. .. 6, 7. Tas faktiski ir binārā sistēma, un tā darbojas tāpat:

Binārais decimāls 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 10 1010 111011 12 1100 13 1101 14 1110 15 1111

Tas darbojas tieši tāpat kā parasti, bet maksimālais skaitlis ir 1, nevis 9. Decimal 0 ir 0000, tad jūs pievienojat 1 un saņemat 0001, pievienojiet vēl vienu reizi, un jums ir 0010. KasTurpmāk šeit ir tāds pats kā ar decimāldaļa 09 un pievienojot vienu: jūs maināt 9 līdz 0 un palielināt nākamo ciparu.

No iepriekš redzamā piemēra var redzēt, ka vienmēr ir maksimālā vērtība, kuru var saglabāt skaitlī ar pastāvīgu bitu skaitu - jo, ja visi biti ir 1 un jūs mēģināt palielināt vērtību par 1, visi biti kļūs 0, tādējādi pārkāpjotnumurs. To sauc par veselo skaitļu pārplūdi un rada daudzas nepatīkamas problēmas gan lietotājiem, gan izstrādātājiem.

11111111 = 255 + 1 ----------- 100000000 = 0( šeit 9 bitu, tādēļ 1 ir apgriezts)
  • 1 bitu lielākā vērtība ir 1,
  • 2 biti - 3,
  • 3 biti -7,
  • 4 biti - 15

Vislielākais iespējamais skaitlis vienmēr ir 2 ^ N-1, kur N ir bitu skaits. Kā jau iepriekš teicu, atmiņas adrese ir numurs, un tam ir arī maksimālā vērtība. Tāpēc mašīnu vārda lielums ir arī pieejamo atmiņas adreses skaita ierobežojums - dažreiz jūsu CPU vienkārši nevar apstrādāt pietiekami daudz, lai pievērstu vairāk atmiņas.

Tāpēc 32 bitiem jūs varat saglabāt skaitļus no 0 līdz 2 ^ 32-1, un tas ir 4 294 967 295. Tas ir vairāk nekā lielākā adrese 1 GB RAM, tāpēc jūsu konkrētajā gadījumā RAM būs ierobežojošs faktors.

RAM robeža 32 bitu CPU teorētiski ir 4 GB( 2 ^ 32) un 64 bitu CPU ir 16 EB( exabytes, 1 EB = 2 ^ 30 GB).Citiem vārdiem sakot, 64 bitu CPU varētu adresēt visu internetu. .. 200 reizes;)( aprēķināts ar WolframAlpha).

Tomēr reālā operētājsistēmā 32 bitu CPU var apstrādāt apmēram 3 GiB RAM.Tas ir saistīts ar operētājsistēmas iekšējo arhitektūru - dažas adreses ir rezervētas citiem mērķiem. Wikipēdijā varat lasīt vairāk par šo tā saukto 3 GB barjeru. Jūs varat paaugstināt šo ierobežojumu, izmantojot fizisko adresātu pagarinājumu.

Runājot par atmiņas risināšanu, man vajadzētu minēt dažas lietas: virtuālā atmiņa , segmentācija un meklēšana .

Virtuālā atmiņa

Kā citā atbildē norādīja Danielis Ritskss, operētājsistēmas izmanto virtuālo atmiņu. Tas nozīmē, ka lietojumprogrammas faktiski nedarbojas uz reālām atmiņas adresēm, bet no tām, ko nodrošina operētājsistēma.

Šī metode ļauj operētājsistēmai pārvietot dažus datus no RAM uz tā saukto Pagefile( Windows) vai Swap( * NIX).Cietais disks ir nedaudz lielāks par lēnāku nekā RAM, taču tas nav nopietna problēma reti piekļūt datiem, un tas ļauj operētājsistēmai iesniegt vairāk RAM nekā to, kas faktiski ir instalēts.

peidžeru sistēma

Par to, ko mēs runājām līdz šim, sauc par vienotas adresēšanas shēmu.

peidžeri ir alternatīva adreses shēma, kas ļauj pievērst vairāk atmiņas, ko jūs parasti varētu ar vienu mašīnu vārdu plakanā modeli.

Iedomājieties grāmatu, kas ir piepildīta ar 4 burtu vārdiem. Pieņemsim, ka katrai lapai ir 1024 numuri. Lai risinātu numuru, jums jāzina divas lietas:

  • Lapas numurs, uz kura tiek drukāts šis vārds.
  • Kuru vārdu šajā lapā ir tā, kuru jūs meklējat.

Tagad tieši tas, kā mūsdienu x86 procesori apstrādā atmiņu. Tas ir sadalīts 4 KiB lapās( katrs 1024 mašīnrakstīšanas), un tajās lapās ir numuri.(patiesībā lapas var būt arī 4 MiB lielas vai 2 MiB ar PAE).Ja vēlaties vērsties pie atmiņas šūnas, šajā lapā ir nepieciešams lapas numurs un adrese. Ievērojiet, ka katrai atmiņas šūnai ir atsauce tieši ar vienu ciparu pāri, tas nebūs segmentācijas gadījumā.

Segmentation

Nu, šis ir diezgan līdzīgs peidžeru sistēmai. Tas tika izmantots Intel 8086, tikai, lai nosauktu vienu piemēru. Adresu grupas tagad sauc par atmiņas segmentiem, nevis lapām. Atšķirība ir tas, ka segmenti var pārklāties, un tie pārklājas daudz. Piemēram, 8086 lielākā daļa atmiņas šūnas bija pieejamas 4096 dažādos segmentos.

Piemēram:

Pieņemsim, ka mums ir 8 baiti atmiņas, visi saimniecības nulles, izņemot 4. baitu, kas ir vienāds ar 255.

ilustrācija plakanas atmiņas modelim:

_____ |0 ||0 ||0 ||255 |. ||0 ||0 ||0 ||0 |-----

Ilustrācija ielādētajai atmiņai ar 4 baitu lapām:

PAGE0 _____ |0 ||0 ||0 |PAGE1 |255 |. |_____ ----- |0 ||0 ||0 ||0 |-----

Ilustrācija segmentētajai atmiņai ar 4 baitu segmentiem, kas pārnesta uz 1:

SEG 0 _____ SEG 1 |0 |_____ SEG 2 |0 ||0 |_____ SEG 3 |0 ||0 ||0 |_____ SEG 4 |255 |. ||255 |. ||255 |. ||255 |. |_____ SEG 5 ----- |0 ||0 ||0 ||0 |_____ SEG 6 ----- |0 ||0 ||0 ||0 |_____ SEG 7 ----- |0 ||0 ||0 ||0 |_____ ----- |0 ||0 ||0 ||0 |----- ----- ----- -----

Kā redzat, 4. baitu var risināt četros veidos:( adresējot no 0)

  • 0. segments, ieskaita 3
  • 1. segments,kompensēt 2
  • 2. segments, kompensēt 1
  • 3. segments, kompensēt 0

Tā vienmēr ir viena un tā pati atmiņas šūna.

Reālos realizācijas realizācijas segmentos tiek novirzīti vairāk nekā 1 baits( 8086 bija 16 baiti).

Cik slikti par segmentāciju, ir tas, ka tas ir sarežģīti( bet es domāju, ka jau to zināt;) Labi, ka varat izmantot dažas gudras metodes, lai izveidotu moduļu programmas.

Piemēram, jūs varat ielādēt kādu moduli segmentā, tad izlikties, ka segmenta izmērs ir mazāks par to, kas patiešām ir( pietiekami mazs, lai turētu moduli), un pēc tam izvēlieties pirmo segmentu, kas nepārklājas ar šo pseidomēra mazāko un ielādējietnākamais modulis un tā tālāk. Būtībā, ko jūs iegūstat šādā veidā, ir lappuses ar mainīgu izmēru.

Vai kaut kas jāpievieno paskaidrojumam? Skatieties komentāros. Vēlaties lasīt citas atbildes no citiem tehnoloģiju savvy Stack Exchange lietotājiem?Šeit skatiet pilnu diskusiju pavedienu.