컴퓨터의 저장공간은 역시 성능이 좋을 수록 비싸다. 때문에 메모리를 계층화시키고 이를 효율적으로 이용하기 위한 연구가 계속 되고 있다.
메모리의 계층 구조
캐시 메모리 - 메인메모리 - 디스크 스토리지
따라서 위와 같이 메모리를 계층화하여 용도에 맞게 사용한다.
메모리의 추상화
각 프로세스는 자신만의 주소공간
(프로그램에 적재될 수 있는 추상화된 주소집합)을 갖는다.
A 프로세스의 28번 주소
B 프로세스의 28번 주소
위 두 28번 주소는 달라야 한다.
따라서 논리주소만 고려할 수 있도록 조치가 필요하다.
재배치
- 동적 재배치 : 프로그램 실행시, MMU 통해 동적으로 배치
but 덧셈을 매번 해야 하는 단점이 있다..
- 정적 재배치 : 적재한 초기 위치부터 주소 재배치(적재기 Loader 통해)
그러나…
1) 실수나 의도적으로 OS 파괴가 가능하다.
2) 여러 프로그램 동시에 실행이 어렵다.
가용메모리 공간 관리
실제 메모리보다 사용 메모리가 더 클 경우에 이것을 어떻게 대처할 것인가?
스와핑
실행되지 않는 것, 디스크로 내림. 스왑 될때 재배치가 필요.
어떤 메모리를 스와핑 할 것인가? 리스트를 활용하여 가용메모리 공간을 관리한다.
1) 최초적합 : 빈공간 발견시 할당
2) 다음적합 : 지난번 위치의 다음부터 검색
3) 최적적합 : 모두 검색-> 가장 근접 공간에 할당 <-> 최악적합
4) 빠른적합 : 공통크기 메모리 공간 -> 서로 다른 리스트로 관리
그러나 스와핑은 너무 느리다.
오버레이
프로세스를 작은 조각으로 나누어 실행한다.
그러나 그것은 프로그래머의 몫으로, 너무 복잡하다.
가상메모리
가용 메모리 공간을 종결할, 가상 메모리.
프로세스는 자신의 고유한 주소공간
(프로그램에 적재될 수 있는 추상화된 주소집합)을 가지며, 주소공간은 페이지
라는 조각으로 구성된다.
페이징 기법
을 활용하면, 여러 프로그램의 부분들이 물리 메모리에 동시 존재
할 수 있다.
페이징 기법
어떻게 가상 메모리가 페이징 기법을 사용해서 매핑되는지 보자.
- 프로그램이 메모리의 주소(가상메모리)를 참조한다.
- 가상메모리는
16bit 메모리
는4bit/8bit
로 나누어 지는데,4bit
로페이지테이블
을 검색한다. - 4bit
0 0 1 0
은 10진수로2
이므로페이지테이블
2번과 매핑되고, 해당 페이지 테이블을 살펴보니1 1 0 1
로 4번째1
은 present/absent bit 이므로, 현재 메모리에 적재되어 있다는 것을 알 수 있다. - 페이지 테이블에서 찾은
1 1 0
과 8bit 메모리 주소0 0 0 0 0 1 0 0
을 합친 주소가 실제 물리 메모리 주소이다. MMU를 이용하여, 실제 물리 메모리 주소로 매핑된다.
만약 present bit가 0으로 매핑되어 있지 않으면, 페이지 폴트가 일어나고 페이지 프레임 내용이 교체 된다.
페이지 테이블 구조
|캐싱가능여부|참조|수정|보호|present/absent|페이지 프레임 Num
페이징 속도 향상
페이지 테이블 전체를 적재하여, 구현 비용이 커진다. TLB(Translation Lookaside Buffer)를 이용하여 페이지 테이블 참조없이 가상주소를 물리주소에 매핑한다. MMU 내부에 존재하며 순서 없이 한 번에 찾는다.
페이지 교체 알고리즘
페이지 프레임 교체 대상은 누구인가?
- 최적 페이지 교체 알고리즘(OPT) : 가장 먼 미래에 참조될 캐시 퇴출(그러나 미래를 알 수 없음;;)
- LRU(Least Recently Used) : 시간상 최근 참조 -> 최근에 다시 참조
- LFU(Least Frequently Used) : 빈도상 많이 참조 -> 미래에도 많이 참조(maxheap으로 구현)
- FIFO(First-In First-Out) : 먼저 들어온게 먼저 나감.
- Second-Chance 페이지 교체 알고리즘, 클록 페이지 교체 알고리즘
대상인지 아닌지 확인할 때 R=1 이면, 0으로 바꾸고 넘어감. R이 0이라면 대상.
- 작업집합 페이지 교체 알고리즘 : 프로세스가 현재 자주 참조하는 페이지들의 집합인지 확인. 문맥교환시 - 선페이징 통해 프로세스 시작전 작업집합들 페이지 적재.
페이지 교체시 쟁점
지역 페이지 교체 : 자기 프로세스에 속해있는 페이지중 고려.
전역 페이지 교체 : 전체 프로세스 중에 고려, 실행에 따라 작업집합의 크기 변할 때 유리.
혼합 : 전역 알고리즘 사용, 크기에 비례하여 페이지 할당. 페이지 폴트 빈도수(PFF)에 맞추어 추가 할당/반납 -> 상한/하한
페이지 크게 : 페이지 폴트 적게 일어남, 관리 쉽다, 페이지 테이블 작아짐, but 내부 단편화 심함.
페이지 작게 : 내부 단편화 줄어듬, But 많은 페이지 필요
Reference
운영체제론 - 노삼혁