1. 스왑 영역(swap area)
스왑 영역이 도입되기 이전에는 한정된 물리 메모리 공간으로 인해 많은 프로세스를 관리할 수 없었다. 이를 해결하기 위한 방법으로 보조기억장치 공간을 활용하는 방법이었고 이 공간을 스왑영역(swap area) 이라 부른다. 스왑영역은 사용하지 않는 프로세스를 보조기억장치 일부 영역에 임시로 저장하는 공간이며, 오랜 기간 사용하지 않는 프로세스는 스왑 아웃(swap out) 하여 보조기억장치로 프로세스 정보를 보내고, 프로세스 정보를 가져올 경우 스왑 인(swap in) 하여 메모리(RAM) 로 프로세스 정보를 가져온다.
스왑 영역을 활용하면 운영체제(OS)가 한정된 물리 메모리 공간 보다 더욱 많은 프로세스를 관리할 수 있어 더욱 많은 프로세스의 동시 실행이 가능하다.
다만 프로세스가 스왑 인(swap in) 하는 경우 스왑 아웃(swap out) 하기 전 메모리 물리 주소와 다른 주소에 적재될 수 있다.
2. 메모리 적재 방식
스왑 영역에서 메모리로 스왑-인(swap-in) 과정에서 프로세스 메모리를 물리 메모리(RAM) 에 적재해야 한다. 적재하는 방식은 크게 3가지가 존재하며 최초 적합(first-fit), 최적 적합(best-fit), 최악 적합(worst-fit) 이 있다.
최초 적합(first-fit)
- 프로세스가 적재될 수 있는 공간을 발견하는 즉시 메모리를 프로세스를 배치하는 방식이다.
- 검색 시간을 최소화할 수 있으며 결과적으로 빠른 메모리 할당이 가능한 장점이 있다.
최적 적합(best-fit)
- 프로세스가 적재될 수 있는 빈 공간 중 가장 작은 공간에 프로세스를 배치하는 방식이다.
- 가장 작은 공간을 할당하는 방식이기 때문에 내부 단편화를 최소화할 수 있는 장점이 있다.
최악 적합(worst-fit)
- 프로세스가 적재될 수 있는 빈 공간 중 가장 큰 공간에 프로세스를 배치하는 방식을 말한다.
- 이 방식의 목표는 큰 프로세스를 처리할 수 있는 큰 메모리 블럭을 가능한 유지할 수 있는 장점이 있다.
3. 외부 단편화(external fragmentation)
프로세스를 적재하다 보면 작은 여유 공간으로 인해 물리 메모리가 낭비되는 경우가 있다. 이러한 작은 메모리 공간으로 인해 프로세스를 적재하지 못하고 낭비되는 공간을 외부 단편화(external fragmentation) 라 부른다. 가상 메모리가 도입되기 이전에는 압축(compaction) 을 통해 이 문제를 해결하고자 했다. 메모리를 재배치하여 흩어진 공간을 하나로 모으는 방식이다. 하지만 메모리를 재배치하는 동안 시스템을 중지해야 하는 오버헤드(overhead)가 발생하는 단점이 있었다. 하지만 가상 메모리(virtual memory) 과 페이징(paging) 기법이 도입되면서 시스템이 중지되는 문제를 해결할 수 있다.
4. 가상 메모리(Virtual Memory)
(1) 가상 메모리 & 페이지
가상 메모리는 실행하고자 하는 프로세스 일부만 메모리에 적재하는 방법이다. 프로세스 일부만 적재하기 때문에 물리 메모리 총 크기를
물리 메모리 크기보다 큰 프로세스 실행이 가능하고 앞서 이야기한 외부 단편화를 개선할 수 있어 물리 메모리를 더 효율적으로 관리할 수 있게 되었다.
그렇다면 가상 메모리는 어떻게 프로세스 일부만 메모리를 적재할 수 있었을까?
바로 페이징 기법(paging) 이다. 페이징 기법은 페이지(page) 라는 일정 단위로 자른 프로세스의 논리 주소 공간과 프레임(frame) 이라는 일정 단위로 자른 물리 메모리 주소 공간을 이용하는 방법이다. 프로세스에 필요한 페이지를 스왑-인(swap-in) 하는 과정을 페이지-인(page-in), 반대로 내보내는 과정은 페이지-아웃(page-out) 이라 한다.
(2) 페이지 테이블
메모리로 작은 조각을 가져오더라도 불연속적인 배치로 인해 CPU 가 실행할 명령어를 찾기 어려운 단점이 있었다. 이를 해결하기 위해 페이지 테이블(page table) 이 도입되었다. 페이지 테이블은 불연속적인 프레임의 물리 주소를 CPU 가 실행할 명령어를 찾는데 도움을 주는 테이블이다. 물리 주소가 불연속적으로 배치되어 있더라도 논리 주소는 연속적으로 배치하여 현재 어떤 페이지가 어떤 프레임에 할당되어 있는지 알 수 있어 CPU 가 실행할 명령어를 쉽게 알 수 있다.
페이지 테이블은 별도의 메모리 영역에 할당되며, 각 프로세스는 각 페이지 테이블을 가지고 있다. 또한 CPU 는 작업 중인 프로세스의 페이지 테이블을 CPU Register 종류 중 하나인 PTBR(Page Table Base Register) 을 공간을 통해 참조하고 있다.
하지만 페이지 테이블이 만능은 아니다. 페이지 테이블을 통해 메모리에 접근을 위해서 2번의 메모리 접근을 해야 하는 문제가 있다.
첫 번째로 페이지 테이블을 참조하고, 두 번째로 프로세스의 메모리를 참조해야 해야되는 번거로움이 있었다.
(3) TLB(Translation Lookaside Buffer)
페이지 테이블을 이용하면 메모리 참조할 때마다 2번씩 메모리에 접근해야 하는 문제가 있었다. 이 문제를 해결하기 위해 page table 을 CPU cache memory 에 캐싱하였다. 캐싱한 메모리의 영역을 TLB(Translation Lookaside Buffer) 이다. 만약 CPU 가 참조하고자 하는 논리 주소가 존재하지 않은 경우, 페이지 테이블을 접근하고 페이지 테이블 정보를 캐싱한다. 그리고 다음 작업을 진행할 때, 캐싱된 값을 활용하여 사용할 메모리 주소만 참조한다.
(4) 페이지 폴트 (page fault)
가상 메모리는 필요한 메모리만 할당하기 때문에 페이지-인(page-in), 페이지-아웃(page-out) 과정을 반복한다. 이 과정을 반복하다보면 페이지에 알맞는 프레임이 할당되어 있지 않는 경우가 발생하는데 이를 페이지 폴트(page fault) 라 한다. 페이지 폴트가 발생하면 해당 페이지를 가상 메모리(virtual memory) 에서 찾아야 하고 그만큼의 오버헤드가 발생한다. 페이지 폴트에 관련된 내용은 다음에 따로 한번 다루도록 해보자.
Reference
'cs' 카테고리의 다른 글
캐시 정리 (Cache Summary) (0) | 2025.03.09 |
---|---|
해시 테이블(Hash Table) (0) | 2024.02.19 |
Multi Programming, Processing, Tasking, Threading (1) | 2024.02.16 |
thread type & model (1) | 2024.02.15 |