줘이리의 인생적기

가상메모리, 페이징 시스템 본문

공부/운영체제

가상메모리, 페이징 시스템

줘이리 2021. 11. 22. 23:00
728x90

실제 사용하는 메모리는 작지만, 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기에 한계가 있다.

그래서 나온 가상 메모리는 물리 메모리의 한계를 극복하기 위해 나온 기술이다.

 

프로세스간 공간 분리로, 프로세스 이슈가 전체 시스템에 영향을 주지 않을 수 있다.

실제 메인메모리에는 각 프로세스의 데이터가 조각으로 씌워져 있다.

 

가상 메모리의 기본아이디어는 프로세스는 가상 주소를 사용하고, 데이터를 읽고 쓸 때만 물리 주소로 바꿔주기이다.

가상 주소(virtual address)프로세스가 참조하는 주소이며, 물리 주소(physical address)실제 메모리 주소이다.

 

여기서 MMU(Memory Management Unit)이 등장하는데, 가상 주소 메모리 접근이 필요할 때, 해당 주소를 물리 주소 값으로 변환해주는 하드웨어 장치이다.(빠르기 때문)

 


페이징 시스템

크기가 동일한 페이지로 가상 주소 공간과 이에 매칭 하는 물리 주소 공간을 관리한다.

페이지 번호를 기반으로 가상/물리 주소 매칭 정보를 기록/사용하며, Intel(x86)에서는 4KB, 2MB, 1GB 페이징을 지원, 리눅스에서는 4KB로 페이징 한다.

 

page table은 물리 주소에 있는 페이지 번호와 해당 페이지의 첫 물리 주소 정보를 매칭 한 표다.

 

가상 주소 v가상 메모리 페이지를 나타내는 pp안에서 참조하는 위치 변위 d로 표현할 수 있다.

가상 주소(virtual Address) v = (p, d)

 

 즉, 페이징 시스템의 동작은 

1. 프로세스의 PCB에 page table의 첫 페이지 base 주소를 알아낸다.

2. page table에 있는 물리 주소를 알아낸다.

3. 물리 주소 + 변위(d) 만큼 떨어진 물리 주소의 데이터를 알아낸다.

순으로 동작한다.

 


다중 단계 페이징 시스템

4GB의 프로세스를 4KB로 모두 쪼개어 페이지를 관리하고 사용하는 것은 매우 비효율적이다.

그래서 필요한 페이지만 페이지 테이블을 만들어서 관리하는 것을 다중 단계 페이징 시스템이라고 한다.

 

32bit 시스템에서 4KB 페이징 시스템은 상위 10bit가 페이지 디렉터리, 다음 10bit가 페이지 테이블, 다음 12bit가 오프셋을 나타낸다.


페이징 시스템의 장점

1. 프로세스 간(부모, 자식) 동일한 물리 주소를 가리켜 공간 절약과 메모리 할당 시간을 절약할 수 있다.

 

2. 부모, 자식 프로세스 중 하나의 프로세스가 동일한 물리 주소를 가리키는 데이터를 수정할 시, 물리 주소를 복사할 수 있다. 

복사한 이후 데이터를 수정한 프로세스의 페이지 테이블을 변경하여, 공간 절약을 할 수 있다.

 


TLB(Translation Lookaside Buffer)

TLB가상 주소에서 물리 주소로 한번 변환된 페이지 정보를 저장해놓는 캐시 보조 하드웨어이다.

이후로는 가상 주소를 MMU에 요청할 때 TLB를 먼저 들른다.


요구 페이징(demand paging), 선행 페이징(anticipatory paging)

요구 페이징은 프로세스의 모든 데이터를 메모리로 적재하지 않고, 실행 중 필요한 시점에만 메모리로 적재한다.

더 이상 필요하지 않은 페이지 프레임은 다시 저장매체로 내린다.

선행 페이지는 요구 페이징과 반대되는 개념으로 미리 프로세스 관련 모든 데이터를 메모리에 올려놓고 실행한다.

 

요구 페이징을 사용할 때 필요한 인터럽트는 페이지 폴트(page fault) 인터럽트이다.

이 인터럽트가 일어나면 해당 페이지를 물리 메모리에 올린다.

 

하지만 매번 이런 페이지 폴트가 일어난다면 느려지기 때문에 실행되기 전에 해당 페이지를 물리 메모리에 올려야 한다.

 


페이지 교체 정책(page replacement policy)

운영체제가 특정 페이지를 물리 메모리에 올려야 하는데 물리 메모리가 다 차있는 경우가 있다.

이때 어떤 정책으로 어떤 페이지를 저장매체로 내릴 수 있는지 알아보겠다.

 

1. FIFO(First In First Out) : 가장 먼저 들어왔던 페이지를 내리는 교체 알고리즘이다

2. OPT(OPTimal) : 최적 페이지 교체 알고리즘으로 앞으로 가장 오랫동안 사용하지 않을 페이지를 내리는 정책이지만, 신의 영역이므로 불가능하다

3. LRU(Least Recently Used) : 가장 오래전에 사용된 페이지를 내리는 알고리즘이다.

4. LFU(Least Frequently Used) : 가장 적게 사용된 페이지를 내리는 알고리즘이다.

5. NUR(Not Used Recently) : LRU와 마찬가지로 최근에 사용하지 않은 페이지를 내리는 알고리즘이다. 각 페이지마다 참조 비트(R), 수정 비트(M)를 두어 R, M 순으로 (0, 0), (0, 1), (1, 0), (1, 1) 순으로 페이지를 교체한다.

 


스레싱(Thrashing)

페이지 폴트 인터럽트 <-> 페이지 스왑만 일어나 실제로는 아무일도 하지 못하는 상황이다.

RAM을 더 구매하거나, 프로그램을 적게 띄우는 것이 해결방법이다.

'공부 > 운영체제' 카테고리의 다른 글

파일 시스템  (0) 2021.11.26
세그멘테이션 기법  (0) 2021.11.24
IPC(InterProcess Communication)  (0) 2021.11.19
Thread  (0) 2021.11.17
PCB(Process Context Block), Context switching  (0) 2021.11.15