본문 바로가기

CS/운영체제(OS)

OS - 메모리관리: 페이징

728x90

컴퓨터구조 CPU, RAM, DISK

 

위 사진은 CPU의 논리주소를 RAM의 물리주소로 바꾸는 작업을 수행하는 일반적인 컴퓨터구조이다.

외부 단편화

램은 하나하나 프레임으로 구성된다. 그리고 각 하나의 같은 크기를 갖고 있는데 만약 위처럼 4바이트로 구성되었다고 하자. 그리고 빨간색으로 칠해진 곳은 사용중이라 하면 8바이트짜리 프로세스가 램에 로드하려 한다. 지금 4바이트 짜리 프레임이 3칸 12바이트가 있으니까 로드할 수 있을까?

 

로드할 수가 없다! 왜냐하면 CPU는 연속적으로 램에 들어있어야 읽을 수 있기 때문이다. 그럼 지금 램에는 3칸의 빈칸이 있는데도 램에 자리가 없다고 판단되어 시스템에 지장을 준다. 이것을 외부 단편화라 한다.

 

페이징

위의 외부 단편화를 해결하기 위한 방법으로 페이징이 있다. 페이징은 프로세스를 페이징 단위로 나눈다. 

 

페이징으로 나눈 후

 

페이징으로 나눈 후엔 이렇게 로드할 수 있다. 이렇게 되면 이제 MMU는 페이지 테이블이된다. 

즉, 프로세스는 페이지의 집합, 메모리는 프레임의 집합이라고 볼 수 있다. 

 

주소 변환

논리주소 (Logical address)

– CPU 가 내는 주소는 2진수로 표현 (전체 m 비트)

– 하위 n 비트는 오프셋(offset) 또는 변위(displacement)

– 상위 m-n 비트는 페이지 번호

 

논리주소 → 물리주소 (Physical address)

– 페이지 번호(p)는 페이지 테이블 인덱스 값

– p 에 해당되는 테이블 내용이 프레임 번호(f)

– 변위(d)는 변하지 않음

 

예제

- Page size = 4 bytes

- Page Table: 5 6 1 2 

- 논리주소 13 번지는 물리주소 몇 번지?

 

위 주소 변환처럼 순서대로 구현해보자.

13 -> 1101

페이지 사이즈의 크기가 4바이트이므로 2^2 -> 2비트

 

11 | 01 

 

오른족 01 비트가 오프셋이므로 페이지 테이블의 3번을 봐야한다.

 

0 | 5 

1 | 6

2 | 1

3 | 2

 

즉 3 -> 2 

 

13번지는 물리주소 2번지가 된다. 즉 물리주소는 1001 이 되는 건데 이것은 9가 되고 4바이트, 4바이트, 4바이트 하여 0, 1, 2 번 중 2번으로 들어가게 되는 것이다.

 

내부단편화

그런데 과연 이러면 최적으로 메로리를 사용할 수 있을까?

만약 9바이트짜리 프로세스가 올라온다고하자. 그렇다면 4 4 4 3개의 프레임을 사용할 것인데 마지막 프레임은 3바이트가 남게된다. 이것을 내부단편화라고 하는데 이것은 사실 미미하기 때문에 딱히 신경쓰지 않는다.

 

페이징 테이블

페이징 테이블은 캐시(S-RAM)으로 만들게 된다. 그렇기 때문에 캐시 hit, miss 가 일어날 수 있다.

논리주소가 페이지 테이블로

 

논리주소가 페이지 테이블에서 값을 찾는데 현재 값이 없는 상태다 즉, 캐시 미스가 일어났다. 

 

유효 메모리 접근 시간 Effective Access Time을 알아보자

Tm = 메모리에서 값을 가져오는 시간

Tb = 버퍼에서 값을 가져오는 시간

 

두가지 경우가 있을 것이다.

 

1. 캐시 히트시 - hit확률 * ( Tm + Tb )

2. 캐시 미스시 - 1 - hit * ( Tm + Tm + Tb )

 

왜 미스시 Tm이 두번일까? 왜냐하면 테이블을 메모리에서 한 번 더 가져와야하기 때문이다.

 

예제: Tm = 100ns, Tb = 20ns, hit ratio = 80%

 

TimeEff = 0.8 * ( 100 + 20 ) + 0.2 ( 100 + 100 + 20 ) = 140ns

 

실제 상용 컴퓨터들은 hit ratio가 95퍼센트 이상이기 때문에 훨씬 더 성능이 좋다.