x86에 대해 읽었는데 세그먼트 크기가 최대 4GB(32비트) 아키텍처까지 올라갈 수 있다고 언급했습니다.
세그먼트 크기가 한도를 초과하는 것을 알고 있거나 경험한 사람이 있나요? 아니면 실제 생활에서 세그먼트 크기의 한계는 무엇입니까? 최대 한도를 초과하면 서로 다른 크기의 세그먼트로 분할되는데 세그먼트 간 전환을 어떻게 관리합니까? 여러 세그먼트를 수용할 수 있을 만큼 RAM이 작은 경우
답변1
운영 체제는 할당 테이블에서 처리할 수 있는 것보다 더 많은 메모리를 사용하지 않습니다.
32비트로 표현할 수 있는 최대 바이트 수는 4 294 967 296이므로 메모리 제한은 4GB이다. 따라서 64비트 시스템에서 최대값은 18 446 744 073 709 551 616바이트(16 777 216TB)이며 이는 분명히 수십 년 동안 문제가 되지 않을 것입니다. 64비트 시스템의 메모리 제한은 하드웨어가 적극적으로 처리할 수 있는 메모리 양에 따라 달라집니다.
최대 파일 크기에는 일반적으로 동일한 제한이 적용되지만 일부 시스템에서는 이 제한을 극복하기 위한 방법을 구현합니다.
답변2
대부분의 최신 운영 체제는 Intel 80286에서 도입한 세그먼트 개념을 사용하지 않는 플랫 메모리 모델로 설계되었으며 Linux도 그중 하나입니다.
OS kernel
성능을 향상시키기 위해 사용자 프로세스 메모리 공간은 커널에 의해 직접 주소 지정이 가능해야 하므로 2^32 주소 공간은 커널과 사용자 공간 프로세스 간에 나누어집니다. 32비트 Linux의 경우 비율은 1:3입니다. 가상 주소 공간의 상위 1G는 커널과 드라이버용으로 예약되고, 가상 주소 공간의 하위 3G는 프로세스용으로 예약됩니다.
많은 작업에는 3G RAM이면 충분합니다. 그러나 일부 응용 프로그램은 주소 지정이 가능한(물리적으로 사용 가능한) RAM과 해당 성능 간에 직접적인 종속성을 갖습니다. 좋은 예는 다음과 같습니다관계형 데이터베이스, 다양한 데이터 분석, 이미지 처리, 과학 컴퓨팅 등