주소공간 관련해서 질문 남겨봅니다.
글쓴이: bureokjam / 작성시간: 금, 2013/10/18 - 9:18오후
1.
주소버스의 크기에 따라 기억 장치의 크기가 결정된다라고 알고 있습니다.
예를들면 주소버스의 크기가 32비트라면 컴퓨터에 장착되는 RAM의 크기가 얼마가 되든,
사용할수 있는 메모리의 크기는 4GB가 되는게 맞는거겠지요?
혼란스러운게 실제로 주소버스의 크기가 32비트 컴퓨터 환경에서 8GB의 RAM을 장착해도
전부 인식되는게 아닌것으로 알고 있습니다.
32비트 크기의 주소버스를 가지는 컴퓨터 환경이라도 사용 할 수 있는 최대 메모리 크기가 4GB인것 뿐이니
인식은 전부 되어야 한다는 부분때문에 혼란스럽습니다.
나름 편의상 억지로 운영체제가 전부 인식하기를 거부했다라고만 이해하고 넘어갔던 부분이라 확인차 질문 남겨보았습니다.
2.
32비트 보호 모드에서 태스크나 프로그램은 선형 주소 공간의 주소를 4GB까지 지정할 수 있다라고 합니다.
선형 주소 공간이라는게 컴퓨터에 장착된 RAM의 일부분을 뜻하는건지요?
실제로 장착된 RAM의 크기가 4GB가 안될 경우 여러 프로그램을 실행 중일때를 생각해보면 선형 주소 공간이라는게
무엇인지 감이 안잡혀서 질문 남겨보았습니다.
Forums:
1. x86의 경우 device 가 io bus 또는
1. x86의 경우 device 가 io bus 또는 memory bus 에 연결될 수 있다고 기억합니다. 디바이스가 io bus를 사용하는 경우에는 io address를 점유할테니 메모리하곤 연관이 없겠지만 memory bus를 사용하는 경우에는 memory address를 점유하게 됩니다. 그래서 32bit address 공간에 4GB 의 메모리를 연결한다 하더라도 실제 사용하는 메모리는 4GB 보다 작게 되는 것입니다.
x86 에서 32 bit 공간에서 4GB 이상을 사용하는 경우에도 4GB 이상의 메모리를 인식해서 사용할 수 있는 방법이 있다고 들었습니다. pae를 사용하는 것이죠. 하지만 그런 경우에는 64bit 버전읠 OS를 사용하라고 하는 것 같습니다.
2. 요새 대개의 CPU들은 MMU를 지원합니다(물론 소형 마이크로 컨트롤러들은 이런게 없겠지요). 이게 physical memory 공간을 logical memory 로 번역을 해줍니다. 아마 대부분의 경우에 일반 프로그래머가 physical memory를 고민해야할 필요는 없겠지요. (님이 사용하는 선형 주소 공간이라고 하는게 바로 물리 메모리 공간을 말하는 것 같네요.)
그렇게 해서 32bit linux에서 모든 프로세스는 4GB의 논리적 메모리 공간을 할당받게 됩니다. 그리고 커널에서 프로세스가 실제로 필요한 만큼의 메모리를 매핑해주게 됩니다.
물리 메모리가 1GB인 경우에도 실행중인 4개의 프로세스가 있다면 각각의 프로세스는 4GB 크기의 논리 메모리를 갖게 됩니다(memory bus가 32 bit 일 때).
kernel : 2MB
process 1 - 실제 사용 메모리 : 48 MB
process 2 - 실제 사용 메모리 : 128 MB
process 3 - 실제 사용 메모리 : 1MB
process 4 - 실제 사용 메모리 : 256 MB
예를 들면 이렇게 되는 것입니다. 매핑하는 페이지 크기가 4KB 라면...
책을 찾아서 한 번 그려보세요.
그리고 사용 메모리가 물리 메모리를 넘어선다 하더라도 요즘의 OS들은 대개 swap memory를 가지고 있지요.
답변 감사드립니다.
열심히 공부 해보겠습니다.
댓글 달기