1. Main Memory
- cpu가 직접 전근 가능한 기억 장치
- 프로세스가 실행되려면 프로그램이 메모리에 올라와야 함
- 주소가 할당된 일련의 바이트들로 구성되어 있음
2. Memory Management Unit
- 논리 주소를 물리 주소로 변환
- 메모리 보호나 캐시 관리 등 CPU가 메모리에 접근하는 것을 총 관리해주는 하드웨어
2.1. MMU의 메모리 보호
- 프로세스는 독립적인 메모리 공간을 가져야 하며, 자신의 공간만 접근해야 함
- 프로세스마다 주소 영역을 설정하고, 잘못된 접근이 오면 trap을 발생시키며 보호
- base와 limit 레지스터를 활용한 메모리 보호 기법
- base 레지스터: 메모리상의 프로세스 시작주소를 물리 주소로 저장
- limit 레지스터: 프로세스의 사이즈를 저장
base <= x < base + limit
- 영역 밖에서 접근을 요구하면 trap을 발생
- 안전성을 위해 base와 limit 레지스터는 커널모드에서만 수정 가능하도록 설계
3. 메모리 과할당(Over Allocation)
- 실제 메모리의 사이즈보다 더 큰 사이즈의 메모리를 프로세스에 할당
- 과할당 상황을 들키는 경우
- 프로세스 실행 도중 페이지 폴트 발생
- 페이지 폴트를 발생시킨 페이지 위치를 디스크에서 찾음
- 메모리의 빈 프레임에 페이지를 올려야 하는데, 모든 메모리가 사용중이라 빈 프레임이 없음
- 위와 같은 과할당 상황을 피하기 위해 빈 프레임을 확보할 수 있어야 함
- 메모리에 올라와 있는 한 프로세스를 종료시켜 빈 프레임을 얻음
- 프로세스 하나를 swap out하고, 이 공간을 빈 프레임으로 활용
4. swap out 과정
- 프로세스 실행 도중 페이지 부재 발생
- 페이지 폴트를 발생시킨 페이지 위치를 디스크에서 찾음
- 메모리에 빈 프레임이 있는지 확인
- 빈 프레임이 있다면 사용
- 빈 프레임이 없다면, victim 프레임을 선정해 디스크에 기록하고 페이지 테이블을 업데이트함
- 빈 프레임에 페이지 폴트가 발생한 페이지를 올리고, 페이지 테이블 업데이트