본문 바로가기
컴퓨터 공학/운영체제

Chapter 9. 메인 메모리 - 2부

by 조엘 2020. 12. 1.

안녕하세요 파피몬입니다! 운영체제 9단원에 대해 공부해 보았습니다. 1부입니다!

Abraham Silberschatz의 Operating System Concepts 10th edition과 학부 수업을 듣고 정리한 내용입니다. 오개념이 있다면 알려주세요~~

 

2부에서는 1부에서 알아본 연속 메모리 할당의 한계점을 페이징을 통해 극복해 나가는 과정을 그립니다!

 

<페이징>

기존의 연속 메모리 할당에서는, 프로세스의 물리 주소 공간이 연속적이어야 한다. 이는 단편화 문제를 야기했다. 

하지만 페이징이 도입되면서, 외부 단편화와 압축의 필요성을 피할 수 있게 되었다.

운영체제와 하드웨어의 도움이 모두 필요한 페이징을 하나씩 알아보자. 

 

기본 방법

물리 메모리를 frame, 논리 메모리를 page라는 이름으로 같은 사이즈의 블록으로 분리한다. 

프로세스가 실행되면, 프로세스의 page는 디스크에서 가용한 메인 메모리 frame으로 적재된다. 

디스크 역시 메모리 크레임의 크기 혹은 프레임의 묶음으로 관리된다. 그림을 통해 이해해 보자. 

 

CPU에서 생성된 논리 주소는 p-페이지 번호/d-페이지 오프셋으로 나뉜다. 

물리 메모리의 물리 주소는 f-프레임 번호/d-프레임 오프셋으로 나뉜다. 

p - 페이지 번호는 페이지 테이블에 접근할 때 사용한다.

f - 프레임 번호는 해당 접근 물리 메모리의 시작 주소이다. 

d - 페이지 오프셋은 참조되는 페이지 혹은 프레임 안에서의 위치이다. 

 

페이지 테이블이란 물리 메모리의 각 프레임의 시작 주소를 저장하고 있는 자료구조이다. 

 

CPU의 논리 주소를 MMU는 다음과 같은 과정을 통해 변경한다. 

  1. 페이지 번호 p를 추출해 페이지 테이블의 인덱스로 사용

  2. 페이지 테이블에서 해당 프레임 번호 f를 추출

  3. 논리 주소의 페이지 번호 p를 프레임 번호 f로 바꾼다. 

 

같은 사이즈의 페이지/프레임을 가동하면서 외부 단편화 문제와 압축의 필요성을 없앨 수 있었다. 

하지만 여전히 내부 단편화의 문제는 남아있게 된다. 프레임 사이즈에 비해 필요한 공간이 작으면 발생하기 때문이다. 

페이징의 가장 중요한 특징은 메모리에 대한 프로그래머의 인식과 실제 내용이 서로 다르다는 것이다. 

 

하드웨어 지원

페이지 테이블은 프로세스 별로 하나씩 필요하게 된다. 따라서 PCB에 다른 레지스터 값들과 함께 저장된다. 

페이지 테이블들은 메인 메모리에 저장되고, 해당 프로세스의 페이지 테이블이 필요할 때마다 Page Table Base Register(PTBR)가 이를 가리키도록 해야 한다. 이러한 하드웨어 지원을 통해 문맥 교환 오버헤드를 줄일 수 있다. 

 

하지만 이 역시 더 발전시킬 여지가 있다고 생각한 컴공 선배님들은 TLB라는 소형 하드웨어 캐시를 도입하였다. PTBR 오프셋을 통해 페이지 테이블 항목을 찾고 (한 번), 얻은 프레임 번호와 페이지 오프셋을 결합해 실제주소에 액세스 (두 번) 하는 방법은 메인 메모리에 총 두 번 접근해야 한다. 따라서 TLB에서는 최근에 쓰인 페이지 테이블 엔트리를 저장해 두어 빠른 접근을 가능케 한다. 

 

 

<페이지 테이블의 구조>

페이지 테이블은 각 프로세스 별로 하나씩 저장한다고 했다. 하지만 시스템에 몇 백개의 프로세스가 돌아간다면 이를 모두 메인 메모리에 저장해 사용하는 것은 굉장히 메모리를 낭비하게 된다. 따라서 현재 운영체제에서는 페이지 테이블을 구성할 때 계층적 페이징, 해시 페이지 테이블, 역 페이지 테이블 등을 사용한다. 하나씩 알아보자. 

 

계층적 페이징

계층적 페이징의 일례로 2단계 페이징 기법을 소개한다. 페이징 테이블 자체가 다시 페이징되게 하는 기법이다.

논리 주소를 기존에는 p-페이지 번호/d-페이지 오프셋으로 나눴다면,

2단계 페이징 기법에서는 p1-바깥 페이지 테이블 인덱스/p2-안쪽 페이지 테이블 인덱스/d-페이지 오프셋으로 나뉜다. 

그림을 통해 직관적으로 이해할 수 있다. 

 

해시 페이지 테이블

주소 공간이 32비트 보다 커지면 주로 가상 주소를 해시로 사용하는 해시 페이지 테이블을 많이 쓴다. 해시 페이지 테이블의 각 항목은 연결 리스트를 가지고 있다. 충돌을 일으킨 해시된 원소들이 연결된다. 

각 원소들은 가상 페이지 번호 - 사상되는 페이지 프레임 번호 - 연결 리스트 상 다음 포인터로 구성되어 있다. 

알고리즘은 다음과 같다. 

가상 주소 공간으로 부터 페이지 번호가 오면 해싱한다.

해당 결과값으로 해시 페이지 테이블의 연결 리스트를 따라가며 각 원소와 가상 페이지 번호를 비교한다. 

  - 일치 한다면: 그에 대응하는 프레임 번호를 얻어 물리 주소를 얻는다. 

  - 일치 하지 않으면: 리스트의 다음 원소를 탐색한다. 

 

역 페이지 테이블

기존의 페이지 테이블은 가상 주소를 오름차순으로 정렬하여, 원하는 물리 페이지에 계산하여 접근한다. 

이 방식은 많은 양의 물리 메모리를 소비하는 방식이다. 

 

이번엔 반대로 가보자. 이미 적재된 물리 메모리 프레임마다 하나의 페이지 테이블 엔트리를 할당하는 것이다. 

각 엔트리에는 프레임에 올라와 있는 페이지의 주소와 페이지 소유자의 PID를 표시해 놓는다. 

 

이는 시스템에 페이지 테이블을 하나만 유지할 수 있게 해 준다. (오 좋은데?)

 

근데 단점이 있다. 바로 공유메모리를 사용할 수 없다는 것이다. 

기존의 페이지 테이블은 다른 가상 페이지를 같은 물리 프레임으로 사상할 수 있었다. 

하지만 하나의 물리 프레임 당 하나의 가상 페이지를 지칭해야 하는 역 페이지 테이블은 이와 같은 활용이 불가능하다. (오 안 좋은데?)

 

<스와핑>

프로세스가 실행되기 위해서는 프로세스의 명령어와 데이터가 메모리에 적재되어야 한다고 설명했다.

여기서 프로세스 혹은 프로세스의 일부분은 실행 중에 임시로 백업 저장장치(ex. 디스크)로 내보내 졌다가 실행을 계속하기 위해 다시 메모리로 되돌아올 수 있는데, 이를 스와핑이라고 부른다. 

스와핑을 통해 모든 프로세스의 물리 주소 공간 크기의 총합이 시스템에 설치된 실제 물리 메모리 공간보다 크더라도 동시에 실행을 가능케 한다. (다중 프로그래밍 정도의 증가)

 

기본 스와핑

기본 스와핑은 전체 프로세스를 메인 메모리와 디스크 사이에서 이동시킨다. 

스왑 아웃된 프로세스에 대한 메타데이터를 유지해야 복원이 가능하다. 

 

페이징에서의 스와핑

거의 모든 운영체제는 페이지 단위의 스와핑을 적용한다. 

앞선 기본 스와핑과의 용어 차이를 위해 이는 페이징이라 일컫는다.

이는 10장 가상 메모리와 함께 강력한 기능을 제공하게 해준다.

반응형

'컴퓨터 공학 > 운영체제' 카테고리의 다른 글

Chapter 9. 메인 메모리 - 2부  (0) 2020.12.01
Chapter 9. 메인 메모리 - 1부  (0) 2020.12.01
Chapter 8. 교착 상태 - 2부  (2) 2020.11.18
Chapter 8. 교착 상태 - 1부  (0) 2020.11.18
Chapter 7. 동기화 예제  (0) 2020.11.14
Chapter 6. 동기화 도구들 - 3부  (0) 2020.11.13

댓글0