32 비트 프로세서와 1GB 램으로 얼마나 많은 메모리 주소를 얻을 수 있습니까?


11

32 비트 프로세서와 1GB 램에서 얼마나 많은 메모리 주소를 사용할 수 있습니까? 64 비트 프로세서에서 몇 개가 있습니까?

나는 이것이 다음과 같은 것이라고 생각한다.

1GB RAM을 32 비트로 나눈 값 또는 4로 나눈 값? 메모리 주소의 수를 얻으려면?

그러나 나는 확실하지 않다. 그래서 내가 묻는거야.

나는 1 개의 메모리 주소가 32 비트 넓이 또는 4 옥텟 (1 옥텟 = 8 비트)이고, 1 메모리 주소 또는 1 정수가 64 비트 넓이 또는 8 옥텟 인 64 비트 프로세서와 비교할 때 위키 백과에 적색이다. 그러나 내가 그것을 올바르게 이해했는지 모르겠다.


거의 모든 최신 시스템은 바이트 주소로 처리됩니다. 즉, 32 비트가 약 4GB를 처리 할 수 ​​있습니다 (RAM이 많이 설치된 경우). 역사적으로 단어가 12, 15, 16, 17, 24, 32, 36 또는 48 비트이고, 다른 언어가있는 단어와 4 비트 또는 6 비트를 처리하는 십진 기계 단위. 그러나 대부분의 현대 시스템은 가상 메모리를 사용하므로 프로세서가 설치된 것보다 훨씬 많은 메모리를 처리 할 수 ​​있습니다.
Daniel R Hicks

@DanielRHicks 가상 메모리는 얼마나 많은 RAM을 처리 할 수 ​​있는지에 영향을주지 않습니다.
Jamie Hanrahan

@ JamieHanrahan - 가상 메모리가 작동하려면 (단일 프로세스의) 가상 주소 범위에 걸친 일부 주소 지정 메커니즘이 있어야합니다. 이것은 소프트웨어 시뮬레이션으로 수행 할 수 있지만 매우 비효율적입니다. 따라서 대부분의 시스템에서 프로세서의 주소 지정 범위는 프로세스의 최대 주소 공간을 통합 할만큼 충분히 커집니다.
Daniel R Hicks

@ 대니얼 힉스 물론,하지만 그 정도에 영향을주지 않습니다 해결 될 수있다. RAM은 가상 메모리가 아닌 실제 메모리입니다. 가상 주소는 RAM 주소가 아니며 가상 메모리는 RAM이 아닙니다.
Jamie Hanrahan

@ JamieHanrahan - 당신은 아무런 의미가 없습니다. 가상 주소 공간의 RAM 페이지를 주소 지정할 수 없으면 RAM은 쓸모가 없습니다. (나는 가상 메모리가 어떻게 작동하는지 잘 알고 있으며 1972 년부터 가상 메모리 디자인을 연구했다.)
Daniel R Hicks

답변:


36

짧은 답변: 사용 가능한 주소의 수는 다음 중 작은 수와 같습니다.

  • 메모리 크기 (바이트)
  • CPU의 기계어에 저장할 수있는 가장 큰 부호없는 정수

위의 긴 대답과 설명 :

메모리는 바이트 (B)로 구성됩니다. 각 바이트는 8 비트로 구성됩니다 (b).

1 B = 8 b

1GB RAM은 실제로 1 GiB (기가 바이트가 아닌 기가비트)입니다. 차이점은 다음과 같습니다.

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

메모리의 모든 바이트는 CPU 머신 워드의 크기와 상관없이 자체 주소를 가지고 있습니다. 예 : Intel 8086 CPU는 16 비트 였고 메모리를 바이트 단위로 처리 했으므로 최신 32 비트 및 64 비트 CPU를 사용하십시오. 이것이 첫 번째 제한의 원인입니다. 메모리 바이트보다 많은 주소를 가질 수 없습니다.

메모리 주소는 CPU가 메모리의 처음부터 건너 뛸 바이트 수입니다.

  • 첫 번째 바이트에 액세스하려면 0 바이트를 건너 뛸 수 있으므로 첫 번째 바이트의 주소는 0입니다.
  • 두 번째 바이트에 액세스하려면 1 바이트를 건너 뛰어야하므로 주소는 1입니다.
  • (기타 등등...)
  • 마지막 바이트에 액세스하기 위해 CPU는 1073741823 바이트를 건너 뜁니다. 따라서 주소는 1073741823입니다.

이제 32 비트가 실제로 무엇을 의미하는지 알아야합니다. 앞에서 언급했듯이 기계 단어의 크기입니다.

기계어 란 CPU가 숫자를 저장하는 데 사용하는 메모리 양 (RAM, 캐시 또는 내부 레지스터)입니다. 32 비트 CPU는 32 비트 (4 바이트)를 사용하여 숫자를 저장합니다. 메모리 주소도 숫자이므로 32 비트 CPU에서 메모리 주소는 32 비트로 구성됩니다.

이제 이것에 대해 생각해보십시오. 하나의 비트가 있다면 0 또는 1의 두 값을 저장할 수 있습니다. 하나 더 비트를 추가하면 네 개의 값인 0, 1, 2, 3이 있습니다. 3 비트에서 8 개의 값을 저장할 수 있습니다 : 0, 1, 2 ... 6, 7. 이것은 실제로 바이너리 시스템이며, 다음과 같이 작동합니다 :

Decimal Binary
0       0000
1       0001
2       0010
3       0011
4       0100
5       0101
6       0110
7       0111
8       1000
9       1001
10      1010
11      1011
12      1100
13      1101
14      1110
15      1111

이것은 보통의 덧셈과 똑같이 작동하지만 최대 숫자는 9가 아닌 1입니다. 10 진수는 0입니다. 0000, 1을 더하고 get 0001, 한번 더 추가하면 0010. 여기서 일어난 일은 십진법을 갖는 것과 같습니다. 09 하나 추가 : 9를 0으로 변경하고 다음 자릿수를 증가시킵니다.

위의 예에서 상수 값을 가진 숫자에는 항상 최대 값이 있음을 볼 수 있습니다. 모든 비트가 1이고 값을 1 씩 늘리려고하면 모든 비트가 0이되어 번호. 이는 정수 오버플로라고 불리며 사용자와 개발자 모두에게 많은 불쾌한 문제를 일으 킵니다.

   11111111    = 255
+         1
-----------
  100000000    = 0   (9 bits here, so 1 is trimmed)
  • 1 비트의 경우 최대 값은 1이며,
  • 2 비트 - 3,
  • 3 비트 - 7,
  • 4 비트 - 15

가능한 최대 수는 항상 2 ^ N-1입니다. 여기서 N은 비트 수입니다. 앞에서 말한 것처럼 메모리 주소는 숫자이며 최대 값을가집니다. 그렇기 때문에 기계어의 크기가 사용 가능한 메모리 주소의 수에 대한 제한이기도합니다. 가끔씩 CPU가 더 많은 메모리를 처리 할만큼 큰 숫자를 처리 할 수없는 경우가 있습니다.

따라서 32 비트에서 0에서 2 ^ 32-1까지의 숫자를 유지할 수 있으며 4 294 967 295입니다. 1GB RAM에서 가장 큰 주소보다 많기 때문에 특정 경우에 RAM의 양이 제한 요소가됩니다.

32 비트 CPU의 RAM 제한은 이론적으로 4GB (2 ^ 32)이며 64 비트 CPU의 경우 16 EB (엑사 바이트, 1 EB = 2 ^ 30 GB)입니다. 즉, 64 비트 CPU는 전체 인터넷을 처리 할 수 ​​있습니다 ... 200 번;) ( 울프 램 알파 ).

그러나 실제 운영 체제에서 32 비트 CPU는 약 3 GiB의 RAM을 처리 할 수 ​​있습니다. 운영 체제의 내부 아키텍처 때문입니다. 일부 주소는 다른 용도로 예약되어 있습니다. 이 소위에 대해 더 많이 읽을 수 있습니다. Wikipedia의 3GB 장벽 . 이 한도를 실제 주소 확장 .


메모리 어드레싱에 관해서는 언급해야 할 몇 가지 사항이 있습니다. 가상 메모리 , 분할 페이징 .

가상 메모리

@Daniel R Hicks이 또 다른 대답으로 지적한 것처럼 OSes는 가상 메모리를 사용합니다. 이것이 의미하는 것은 응용 프로그램이 실제로 실제 메모리 주소에서 작동하는 것이 아니라 OS에서 제공하는 것입니다.

이 기술을 통해 운영 체제는 RAM에서 소위 페이지 파일 (Windows) 또는 스왑 (* NIX)으로 일부 데이터를 이동시킬 수 있습니다. HDD는 RAM보다 속도가 느리지 만 드물게 액세스되는 데이터에는 심각한 문제가 아니며 OS가 실제로 설치 한 것보다 많은 RAM을 응용 프로그램에 제공 할 수 있습니다.

페이징

지금까지 우리가 얘기 한 것은 평면 주소 지정 체계라고합니다.

페이징은 평면 모델에서 일반적으로 한 기계 단어로 할 수있는 더 많은 메모리를 처리 할 수있는 대체 주소 지정 체계입니다.

4 글자 단어로 가득 찬 책을 상상해보십시오. 각 페이지에 1024 개의 숫자가 있다고 가정 해 보겠습니다. 번호를 지정하려면 두 가지를 알아야합니다.

  • 해당 단어가 인쇄되는 페이지 번호입니다.
  • 그 페이지에서 당신이 찾고있는 단어는 어느 것입니까?

이제 그것이 바로 최신 x86 CPU가 메모리를 처리하는 방법입니다. 그것은 4 KiB 페이지 (각각 1024 기계 단어)로 나뉘며 그 페이지에는 숫자가 있습니다. (실제로 페이지는 4 MiB 또는 2 MiB가 될 수 있습니다. PAE ). 메모리 셀을 주소 지정하려면 해당 페이지에서 페이지 번호와 주소가 필요합니다. 각 메모리 셀은 정확히 한 쌍의 숫자로 참조되며 세그멘테이션에는 해당되지 않습니다.

분할

글쎄, 이것은 페이징과 아주 비슷하다. 그것은 하나의 예제를 명명하기 위해 인텔 8086에서 사용되었습니다. 주소 그룹은 페이지가 아닌 메모리 세그먼트라고합니다. 차이점은 세그먼트가 겹칠 수 있으며 중복되는 부분이 많다는 것입니다. 예를 들어 8086에서 대부분의 메모리 셀은 4096 개의 다른 세그먼트에서 사용할 수있었습니다.


예 :

우리가 8 바이트의 메모리를 가지고 있다고 가정 해 봅시다. 모두 4 번째 바이트를 제외하고는 0을 가지고 있습니다. 이것은 255와 같습니다.

평면 메모리 모델에 대한 그림 :

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

페이징 메모리에 대한 그림 4 바이트 페이지 :

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

세그먼트 화 된 메모리에 대한 그림 4 바이트 세그먼트가 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  |
                                 -----   -----   -----   -----

보시다시피 네 번째 바이트는 네 가지 방식으로 처리 할 수 ​​있습니다. (0부터 주소 지정)

  • 세그먼트 0, 오프셋 3
  • 세그먼트 1, 오프셋 2
  • 세그먼트 2, 오프셋 1
  • 세그먼트 3, 오프셋 0

항상 같은 메모리 셀입니다.

실제 구현에서 세그먼트는 1 바이트 이상 이동합니다 (8086의 경우 16 바이트).

세분화에 대해 나쁜 점은 복잡하다는 것입니다 (그러나 나는 이미 알고 있다고 생각합니다.) 좋은 점은 모듈 식 프로그램을 만드는 데 영리한 기술을 사용할 수 있다는 것입니다.

예를 들어, 일부 모듈을 세그먼트에로드 한 다음 세그먼트가 실제 크기보다 작다고 가정하고 (모듈을 보유 할 정도로 작음) 의사 크기가 작은 세그먼트와 겹치지 않는 첫 번째 세그먼트를 선택하고 다음 모듈을로드하십시오 , 등등. 기본적으로이 방법은 가변 크기의 페이지입니다.


1
OS는 사용자 프로세스에 전체 4GiB 가상 주소 공간 (아마도 1 페이지 - x86 용 4KiB)을 줄 수 있지만 주소 공간을 변경해야하기 때문에 시스템 호출이 더 비쌉니다. PAE 및 유사한 메커니즘을 사용하면 주소가 여전히 32 비트로 제한되지만 시스템에서 처리 할 수있는 실제 메모리의 양을 늘릴 수 있습니다.
Paul A. Clayton

그것은 내가 무엇을 찾고 있었는지는 모르지만, 그것은 좋은 정보입니다. 최대의 좋은 설명을 가져 주셔서 감사합니다. 바이너리 및 십진수 테이블 비교를 위해 2 진수 (1 = 최대 9 진수 9). 이것에 관해 정말로 생각하는 좋은 방법. 나는 새로운 것을 배웠다. :) 감사!
johan smohan

이 Gibi와 Giga는 너무 혼란 스럽습니다 ... 일부 사이트에서 저는 Gibi와 Giga에있는 다른 사람들에게 메모리가 측정되었다고 읽었습니다 ... 당신은 좋은 / 신뢰할 수있는 소스를 가지고 있습니까?
johan smohan

위키피디아가있다. 기사 일부 역사적인 배경을 포함하여 바이너리 접두어로 대부분의 하드웨어 관련 숫자는 10 진수 접두사를 사용하며 가장 주목할만한 예외는 아마도 RAM이고 색상 스케일 일 수 있습니다 - 예 : 16M 컬러 LCD는 3 개의 8 비트 컬러 채널 (2 ^ 24)을 가지고 있습니다. 직접 질문에 답변 :이 경우 RAM은 바이트 단위로 주소가 지정되므로 사용 가능한 주소 수는 메모리 바이트 수와 같습니다. 32 비트 CPU는 최대 2 ^ 32B, 64 비트 1 - 2 ^ 64를 처리 할 수 ​​있습니다.
gronostaj

감사! 나는 학교 시험을 위해서 이것을 필요로한다. :) 나는 내가 지금 대부분의 것을 이해한다고 생각한다. 아직도 나를 괴롭히는 유일한 이유는 그것이 32 비트 프로세서가 아닌 32byte라면 2 ^ 32B가 될까요?
johan smohan

3

위와 더불어, 가상의 주소 지정은 여러 주소 공간 . 따라서 RAM이 1GB 밖에 없더라도 프로그램은 개념적으로 최대 4GB의 가상 메모리를 사용할 수 있습니다 (대부분의 운영 체제에서는 이보다 작게 제한됩니다). 그리고 개념적으로 (거의) 무한대의 그러한 4GB 주소 공간을 가질 수 있습니다.

RAM 크기는 프로그램의 최대 크기 또는 실행할 수있는 프로그램 수를 제한하지 않고 성능을 제한합니다. 실제 메모리가 "과도하게 커밋 (over-committed)"되고 시스템이 RAM과 디스크간에 메모리의 "페이지"를 "교환"하면서 "스 래시 (thrash)"하기 시작하면 성능이 급속히 떨어집니다.


2

1GB의 RAM은 1024 * 1024 * 1024 바이트 또는 1,073,741,824 바이트를 차지합니다.

32 비트 프로세서는 항상 4 * 1024 * 1024 * 1024 바이트 또는 4,294,967,296 바이트의 주소 공간 이 공간에는 1GB의 RAM이 나타납니다. Intel 프로세서에서 일부 RAM은 인터럽트 벡터의 주소 0에 있어야하므로 실제 RAM은 주소 0에서 시작하여 가동됩니다.

BIOS 및 옵션 ROM (첫 번째 1Mbyte의 상위 384KB), I / O 장치 (APIC와 같은) 및 비디오 RAM과 같은 주소 공간에 다른 것들이 나타납니다. 어떤 이상한 것들은 아직 완전히 이해하지 못하는 시스템 관리 모드 "SMRAM"을 사용합니다.

이것은 커널의 관점에서 볼 때 물리적 주소 공간입니다. MMU는이 모든 것을 사용자 공간 프로세스에 어떤 방식 으로든 재정렬 할 수 있습니다.


나는 1 개의 메모리 주소가 32 비트 넓이 또는 4 옥텟 (1 옥텟 = 8 비트)이고, 1 메모리 주소 또는 1 정수가 64 비트 넓이 또는 8 옥텟 인 64 비트 프로세서와 비교할 때 위키 백과에서 빨간색이다. 당신은 4 * 1024 * 1024 * 1024 바이트 주소 공간에 대해 정확하지만 나는 1GB / 32bits라고 생각되는 메모리 주소 공간을 찾고 있었지만 여전히 정확한지는 알 수 없습니다. :) 답변 주셔서 감사합니다!
johan smohan

Np. 인텔 CPU에는 두 개의 주소 공간이 있습니다 : "메모리"및 "I / O". RAM이 아닌 다른 것들은 "메모리"공간에 ​​나타납니다. I / O 장치 나 ROM과 같은 다른 것들은 RAM에 비어있는 스팟에있을 수 있습니다. 일반적으로 I / O 장치 만 I / O 주소 공간에 나타납니다.
LawrenceC

@ johansmohan 귀하의 번호도 로렌스의 대답도 정확하지 않습니다. 프로세서의 "비트 너비"와 사용할 수있는 RAM 주소의 너비 사이에는 고정 된 관계가 없습니다. 32 비트 전용 x86 프로세서는 64GB RAM을 처리 할 수 ​​있습니다. x64 프로세서는 40 비트 물리적 주소 공간에서 시작되었으며 현재 52 비트입니다. 가상 주소 공간은 다른 주소를 사용할 수도 있습니다. x64에서는 가상 주소가 64 비트로 저장되지만 48 비트 만 구현되므로 64 비트에서 기대할 수있는 16 EiB 대신 256 TiB의 VAS를 구현할 수 있습니다.
Jamie Hanrahan

0

32 비트 프로세서는 최대 2 ^ 32 개인 메모리 바이트 (약 4GB)를 주소 지정할 수 있지만 1GB 메모리를 사용하면 1 * 1024 * 1024 * 1024 주소 지정 가능 (2 ^ 32 가상 주소 공간 ). 64 비트 CPU는 2 ^ 64 개별 바이트를 처리 할 수 ​​있지만, 대부분의 시스템은 상한을 만드는 메모리 주소에 대해 48 비트만을 사용한다고 생각합니다. 주소 지정 가능 바이트 2 ^ 48.


1,0 * 1024 * 1024가 아니라 1024 * 1024 * 1024를 의미합니까?
johan smohan

32 비트 프로세서는 최대 2 ^ 32 옥텟 또는 비트를 처리 할 수 ​​있습니까? 내가 확실히 알아야하기 때문에 확인 만하면된다.
johan smohan

@ johan smohan 올바른, 1 * 1024 * 1024 * 1024 여야합니다.
AcId

@ 32 비트 프로세서는 최대 2 ^ 32 바이트를 주소 지정할 수 있으며, 1 바이트는 8 비트 (1 옥텟 비트)입니다.
AcId

0

허용 된 대답은 좋은 설명을 제공합니다. 그러나 그것이 그것이 답이라고 생각하지 않습니다. 그것에 대해 아무것도 포함되어 있지 않습니다. 어드레스 버스 . 그리고 그 크기가 실제로 메모리 제약의 주된 이유입니다. 예를 들어 8080은 8 비트 프로세서입니다 ( 데이터 버스 8 비트)이지만 16 비트 주소 버스를 가지고 있습니다. 2 ^ 16 = (2 ^ 6) * (2 ^ 10) = 64 * 1024 바이트 = 64KB를 처리 할 수 ​​있습니다.

더 많은 것을 찾을 수 있습니다. 여기 (32 비트) '기술 기록'섹션에 있습니다.


동의한다. 16 비트 PDP-11의 최신 모델은 22 비트 주소 버스를 가지므로 (4MB RAM을 처리 할 수 ​​있음), "16 비트"인 HP 1000MX는 결국 16MB RAM에 도달합니다 (24 비트 어드레스들); VAX는 32 비트 CPU 였지만 30 비트의 물리적 주소 공간을 가졌지 만 절반은 I / O 공간을 위해 예약되었으며 RAM 제한은 512MB입니다. "16 비트"8086, 1MB; "16 비트"80286, 16MB; 펜티엄 프로와 함께 PAE가 도입되었을 때, 32 비트 x86은 64 비트 RAM (24 비트 물리적 주소 공간, 비록 하위 3 비트가 실제로 CPU에서 나오지는 않지만)을 처리 할 수있었습니다.
Jamie Hanrahan

-2

나는이 대화에서 가장 기본적인 정보가 없어 졌다고 믿고 여기에 내 대답은 :

"이것은 32 비트 프로세서입니다"라고하면 한 번에 CPU가 이해하고 작동 할 수있는 명령 크기 또는 명령 크기가 32 비트임을 의미합니다. 64 비트 프로세서와 마찬가지로 : 최대 64 비트의 명령어를 처리 할 수 ​​있습니다.

이것을 오래된 기계식 계산기처럼 생각하십시오. 숫자가 너무 많기 때문에 더 이상 숫자를 입력 할 수 없습니다.

이제 CPU가 사용할 수있는 주소도 같은 공간에 맞아야하므로 32 비트 프로세서의 경우 사용하는 주소도 최대 32 비트 밖에 될 수 없습니다. 여기에서 우리는 간단히 최대 주소 수 (CPU가 사용할 수있는 최대 RAM 용량)를 계산할 수 있습니다.

2 ^ 32 = 4294967296 (= 4GB)

또는

2 ^ 64 = 18446744073709551616 (= 그 이상의 방법;)

재미있는 예로서, 제 오래된 Commodore 64는 16 비트 CPU를 가지고있어서 다음과 같은 메모리를 관리 할 수있었습니다 :

2 ^ 16 = 65536 바이트 (= 64KB)

이것은 기본 논리이지만, 앞에서 설명한 것처럼 가상 주소 공간, 메모리 매핑 등과 같이이 제한을 해결할 수있는 방법이 있습니다.


2
32 비트와 64 비트 프로세서 간의 중요한 차이점은 주소 범위입니다 (가상 주소 공간에 "실제"이상 영향을 미침). 프로세서는 많은 트릭을 사용하여 실제 데이터 경로 너비를 말하기는 어렵습니다. 그리고 명령 길이는 프로세서 "너비"와 크게 관련이 없습니다.
Daniel R Hicks

설명은 완벽합니다. "프로세서 너비"라고 말할 때 실제 칩 크기가 센티미터 단위 인 것을 의미하지 않는다고 가정하면 관련이 없다고 말하는 것이 옳은 경우 메모리 매핑 기술 / 가상 주소 공간을 실제 메모리 주소 지정과 혼동하는 것입니다. 또한 커널 구현과 관련이 있다고 말하면 PAE Linux 커널을 확인하는 것이 좋습니다.
Tuncay Göncüoğlu

2
명령어의 길이는 현대 시스템에서 프로세서의 "너비"와 전혀 관련이 없습니다. 가장 적절한 값은 레지스터의 너비 (사기성 일 수 있지만), 프로세서와 메모리 사이의 전송 경로에서 너비 및 메모리 주소의 비트 수입니다. 그러나이 3 가지 값은 서로 매우 다를 수 있습니다.
Daniel R Hicks

1
@ 대니얼 힉스 대니얼 힉스가 맞습니다. CPU의 "비트 폭"은 반드시 "명령 크기 또는 명령 크기"와 관련이 없습니다. 그런 방식으로 만들어진 CPU가 있지만 오늘날의 범용 프로세서 (x86 / x64)는 그 중 하나가 아닙니다.
Jamie Hanrahan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.