메인 메모리, RAM, 주기억장치를 뜻한다. 프로그램 실행 시 필요한 주소, 정보들을 저장하고 가져다 사용할 수 있게 만드는 공간이다. 즉 작업을 위해서 사용되는 공간이라고 할 수 있다. 하드디스크에 비해 속도가 매우 빠르고 컴퓨터가 꺼지면 저장된 모든 데이터가 날아가는 휘발성 장치이다.
보통 CPU 레지스터와 캐시, 메인메모리를 묶어서 주기억장치라고 부른다.
프로그램 시작시에 드라이브에서 프로그램을 읽고, 메모리에 로드하고, 메모리에 있는 정보를 CPU에서 가져다 쓴다. CPU는 메모리에 접근할 때, 페이지 테이블을 사용한다. 가상주소를 물리주소로 바꾸기위해 페이지 테이블을 이용해서 메모리에 접근하는 것이다. 이때 CPU 내부에서 미리 자주 사용하는 주소는 가지고 있자는 아이디어를 통해 캐시에 저장해놓기도 한다.
MMU(Memory Management Unit)는 CPU 내부에 탑재되어 논리 주소를 실제 메모리의 물리 주소로 변환해주는 하드웨어이다.
주소 변환
Execution time binding은 실제로 명령어를 실행하는 시점에 주소 변환을 하는 Address binding 기법이다.
위 사진에서 0x198000번지에 저장되어 있는 data에 10을 저장하기 위해 store #98000, 10 명령어를 사용하고 있다. 하지만 명령어의 주소를 보면 알 수 있듯이 98000번지를 참조한다고 작성되어 있지만, 이는 상대 주소 즉 논리 주소로 실제 data의 물리 주소가 아니다. 그렇기에 CPU는 명령을 실행할 때, MMU를 거쳐서 상대주소에 프로그램의 시작 주소를 base로 더하여 물리 주소를 필요한 순간마다 변환한다. (Base + 논리 주소)
이런 방식은 Load time binding과 달리, 메모리에 프로그램을 올릴 때 주소 변환을 한 번에 하지 않기 때문에 메모리 적재 시 오버헤드가 감소한다.
이 MMU는 Contiguous allocation 즉, 연속 할당을 사용하는 과정에서만 논리 주소를 물리 주소로 변환해줄 때 사용된다.
메모리 보호 (Memory protection fault)
주소 변환 뿐만 아니라 논리 주소가 올바른 메모리 주소를 참조하려고 하는가에 대해서도 검증하는 역할을 수행한다. 논리 주소가 Base address보다 크거나 같은지, Base + Limit보다 작은지 확인하는 과정을 통해 메모리에서 프로세스의 범위를 벗어나지 않는지 검증하고 변환한 값을 CPU의 PC로 가져오는 것이다.
만약 범위를 벗어나면 CPU가 자신에게 발생시키는 interrupt인 Memory protection fault를 발생시킨다. 이를 OS가 대신 처리하도록 요청하는 것이다. 이를 Exception이나 trap이라고도 부른다.
https://dapsu-startup.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COperating-System-%EB%A9%94%EB%AA%A8%EB%A6%ACMemory
https://blog.naver.com/hope5872/221852325167
https://itstory1592.tistory.com/99
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Operating%20System/Memory.md
https://xn--velog-vo7u.io/@ayoung0073/OS-Memory-Management