본문 바로가기
CS/Operating System

[ OS 기초 ] 09. Virtual Memory

by IM조이 2021. 7. 12.

1. 메모리 비연속 할당과 address mapping
2. Paging System - 특징, 주소 매핑, 관리 및 공유, 보호

 

00 개요

앞서 메모리 관리와 연속 할당 기법에 대해 살펴보았고 다음은 비연속 할당에 대한 내용이다. 비연속 할당은 메모리를 어떻게 할당하는 방법이며 연속 할당과의 차이점은 무엇인지, 대표적인 비연속 할당 기법인 paging, segmentation, hybrid paging and segmentation system에 대한 내용을 알아보았다.

 

01 비연속 할당과 address mapping

비연속 할당은 프로세스가 메모리에 올라갈 때 연속된 공간에 올라가는 게 아닌 띄엄띄엄 올라가는 메모리 할당 방식이다. 이때 띄엄띄엄 올리기 위해서는 프로세스를 여러 개의 단위로 분할해주는데 이 단위를 블록이라 하고, 실제 프로그램을 실행할 때에는 필요한 블록만 메모리에 적재하는 방식이다. 현재 필요하지 않은 블록은 swap device에 보관하고 있다가 필요해지면 불러와 메모리에 올리는 방식이며, 비연속 할당 기법에는 크게 paging system, segmentation system, 그리고 이 두 방법을 잘 융합한 hybrid paging and segmentation system이 있다.

01-1 비연속 할당에서의 address mapping
앞서 연속 할당은 연속된 공간에 프로세스를 올리기때문에 상대 주소를 만들어 실제 물리 주소와 연결시켜주는 작업을 해주는 방식이었다. 비연속 할당은 연속된 공간에 올라있지 않기 때문에 virtual address라는 개념이 등장한다. 

  • virtual address : 물리적인 메모리 공간을 고려하기보다, 연속된 메모리 공간에 올라갈 것이라는 가정 하에 프로그램을 개발한 주소로 연속된 메모리 할당을 가정하는 주소 개념.
  • real address : 실제 물리적 메모리 주소. absolute, physical address.

비연속할당에서의 address mapping은 이 virtual address를 real address로 연결시켜 주는 작업을 의미한다. 그리고 이 연결(매핑) 기법 중 하나가 블록 매핑이다.

 

01-2 Block Mapping
사용자의 프로그램, 즉 프로세스를 나눈 단위인 블록을 real address로 연결하는 기법.
- virtual address v는 (b, d)로 구성
- b : 블록 번호
- d : 블록의 시작점으로부터 얼마나 떨어져 있는가 = displacement in a block
- BMT : block map table, 주소 매핑 정보를 담고있는 테이블로 커널 안에 프로세스별로 BMT를 만들어 각 프로세스의 블록정보와 메모리 할당 여부(residence bit), 할당된 주소 정보, b, d, 등의 정보를 담아 관리함

가상 주소를 통해 실제 주소로 찾아 가는 과정은 다음과 같다

  1. 가상 주소가 담고있는 정보인 (b, d)를 통해 b, 즉 블록을 찾아간다
  2. BMT의 b블록의 행에 가서 메모리에 적재되었는지의 여부를 먼저 확인한다(residence bit이 1인지)
  3. 만약 값이 1이라면 (=올라가있다면) 어디에 올라가 있는지 실제 주소(a)를 확인한다(real address)
  4. 받아온 real address 에서 d만큼 떨어져 있는 주소를 찾아간다(a+d)

(만약 적재되어있지 않다면 swap device에서 메모리로 블록을 올린 뒤 다시 순서대로 수행해야 함)

 

02 Paging System

페이징 시스템은 위에서 언급한 블록 단위의 프로세스 분할에서 블록을 페이지로 바꾼 개념이라 보면 된다. 다시 말해 프로세스를 페이지 단위로 분할한 것이다. 

  • 페이지 : 프로그램이 분할된 블록
  • 페이지 프레임 : 페이지의 틀, 메모리가 분할된 영역(메모리를 페이지의 크기대로 나누기 때문)
  • 하나의 프로세스를 여러 페이지로 나눠 swap device에 올려놓고, 사용할 페이지들만 실제 메모리에 올리되 연속된 공간에 올리는 게 아니라 띄엄띄엄 메모리 공간에 올리는 것.
  • 메모리를 페이지 크기대로 분할하는 게 페이징 시스템

 

02-1 특징
- 프로세스를 자르는 단위 = 페이지 크기
- 페이지의 크기 != 논리적인 분할
- 페이지는 대충 크기로 분할한 것으로 특정 기준(ex. function)을 단위로 분할한 게 아니기 때문에 공유나 보호 면에서 더 복잡
- 분할 자체는 타 기법 대비 간편하고 효율적
- 외부 단편화가 발생하지 않음 : 프로그램을 페이지 단위로 나누고, 메모리도 페이지 단위로 나누기때문에 공간이 있으면 무조건 올라가고 없으면 못 올라가는 방식.
- 내부 단편화는 발생할 수 있음 : 페이지 크기대로 자르다보면 마지막 페이지가 남은 메모리 공간에 비해 용량이 적을 수는 있어 일부 메모리가 낭비될 수는 있음

tmi ) SSD 설치 후 가상 메모리를 더 빠른 곳으로 옮기면 전체적인 메모리 성능이 향상될 수 있음

 

02-2 address mapping
위에서 블록 매핑 방식과 유사한데 다만 (b,d)가 (p, d)인 것만 다르다고 봐도 됨
- p : 페이지 넘버
- d : displacement
- PMT(Page Map Table) 로 정보 관리 : 페이지 넘버, 메모리 적재 여부, 메모리 공간 주소, swap device 상의 주소(secondary storage address) 등의 정보를 담고 있음
- 페이징 시스템의 주소 매핑 기법 : direct mapping, associative mapping, hybrid direct and associative mapping

02-2-1 direct mapping(직접 사상) - block mapping과 유사
- PMT를 커널 안에 저장
- PMT entry size : PMT 한 행의 사이즈
- Page size : 프로세스가 나뉜 페이지의 사이즈
- 과정

  1. PMT에서 해당 페이지가 메모리에 적재되어 있는지 확인(PMT의 주소에 원하는 페이지의 행을 찾아가야 하는데, 시작 행의 페이지 주소는 p, 한 칸의 크기는 entry size라서 p*(entry size)
  2. 테이블을 읽고 메모리에 적재되어있음을 확인했다면, 해당 행에서 페이지 프레임 번호를 읽어 페이지로 찾아감
  3. p*(page size) + displacement 로 원하는 실제 주소 값을 읽어올 수 있음 
  4. 만약 메모리에 올라가있지 않다면 이를 page fault★ 라고 부르는데, 이 경우 swap device에서 해당 페이지를 들고 와 메모리에 올린 후 PMT를 갱신하고, 이후의 작업을 이어나가면 됨 => 이때 오버헤드가 크기 때문에 가능하면 피하거나 줄여야

 

direct mapping 의 경우 원하는 메모리 공간에 접근하려면 결국 매번 PMT를 확인하고, (이때 PMT는 메모리의 커널 영역에 있음) 확인한 뒤 다시 메모리 공간에 찾아가야 하는 과정을 거쳐야 한다. 즉 원하는 데이터에 접근하기 위해 메모리에 2번이나 접근해야하고 이로 인한 성능 저하가 야기될 수 있다는 단점이 있으며 PMT를 메모리에 다 저장해야 한다는 문제도 있다. 따라서 이러한 문제들을 해결하기 위해 associative mapping 방법을 활용할 수 있다.

 

02-2-2 associative mapping(연관 사상)
associative mapping 방법을 관통하는 키워드는 TLB (Translation Look-aside buffer)다. TLB는 말 그대로 바뀔 때 확인하는, 즉 주소를 매핑할 때 옆에 두고 활용하는 특별한 장치라고 생각하면 된다. TLB는 associative high-speed memory, PMT를 조회하는 빠른 하드웨어로 PMT를 TLB에 적재해둔 뒤 주소를 찾아달라 요청하면 TLB에서 병렬 탐색을 통해 결과를 한 번에 빠르게 보내준다. 따라서 메모리까지 가서 접근할 필요 없이 TLB만 읽어 원하는 실제 주소를 찾아올 수 있으며 병렬 탐색을 활용하기 때문에 오버헤드가 적으면서 속도가 빠르다는 장점이 있다. 물론, 매우 비싸고 용량은 적어 큰 PMT를 다루기 어렵다는 단점도 있다.

 

02-2-3 hybrid direct and associative mapping
앞서 나온 direct mapping과 associative mapping의 장단점을 고려해 절충한 하이브리드 매핑 방법은 PMT를 위한 전용 기억장치(공간)을 사용하는 방법이다. 비싼 TLB 사용은 줄이되, TLB의 장점을 활용하기 위한 벙법으로 PMT의 일부만 TLB에 올려 쓰되 나머지는 메모리 커널 공간에 저장하는 방식이다. 그렇다면 어떤 페이지 엔트리(행)을 TLB에 적재할 것인가가 주요 관건인데, 이때 등장하는 개념이 (캐시 메모리에서 잠시 공부했던) 지역성 개념이다
- 최근에 사용한 페이지들에 대한 엔트리를 저장
- 지역성 : 프로그램 수행 과정에서 한 번 접근했던 영역을 다시 접근하거나 인접 영역에 다시 접근할 가능성이 높음

하이브리드 기법의 과정은 앞의 과정에 한 단계만 추가해주면 된다
- PMT가 TLB에 있는지 체크한 뒤 있으면 associative mapping으로, 없으면 direct mapping으로
- 그리고 그 PMT entry로 TLB를 업데이트해주기

 

02-3 관리(memory management)

페이징 시스템의 메모리 관리 방법은 쉽게 '메모리를 일정한 크기(페이지의 크기)로 잘라 페이지 프레임을 만들어 놓고 사용한다' 라 생각하면 된다. 앞서 공부한 연속 할당 기법의 FPM과 비슷하다. 그래서 페이지 프레임마다 하나의 엔트리를 만들어 프레임 테이블을 만들고 이를 관리하는 방식으로 메모리를 관리한다.

  • Frame table : 페이지 프레임의 집합, 페이지 프레임 하나 당 하나의 엔트리(행)를 가짐
  • 테이블의 열(보유한 정보) : 할당 여부, 페이지 id, Link field(for free list - 사용 가능한 fp 연결), AV(Available - free list header pointer)
    • 각 페이지의 프레임 번호
    • 쓰고 있는지를 나타내는 비트
    • 누가 할당되었는지
    • 빈 공간을 관리 하는 데이터 구조가 AV 포인터 = 가장 처음으로 비어있는 엔트리
    • 그 엔트리 끝의 link는 내 이후에 비어있는 엔트리로 연결 : linked list 형태
  • AV : 비어있는 엔트리에 대한 linked list에서의 시작 포인터

 

02-4 공유 및 보호(page sharing and protection)

만약 프로그램에서 어떤 함수가 범용적이라면 해당 함수가 담긴 페이지를 공유해야 하는 상황이 생긴다. 페이징 시스템은 기본적으로 비연속 할당이기 때문에 페이지 공유가 가능하다. 공유 방법은 페이지 이름을 통일시키는 것이며 이때 공유 가능한 페이지는 Procedure page, data page가 있다.

  • procedure page : function page, 즉 pure 한 코드를 담고 있는 reenter code
  • data page : read-only data, read-write data와 같은 특정 권한이 부여되어 있어 허락되는 행위만 할 수 있게끔 만들 필요가 있고, 병행성 제어 관리 기법 하에서만 가능하며 상호 배제 문제가 발생할 수 있다.

만약 페이지를 공유할 수 있다면, 동시에 보안 문제도 생길 수 있다. 이때 보호를 위해서는 protection bit를 사용할 수 있는데 RWE, read write execution으로 할 수 있는 동작을 명시해 공유되는 페이지에 대한 접근 권한을 관리할 수 있다.

 

페이징 시스템을 정리해보면, 프로그램을 고정된 페이지의 크기로 분할해 페이지 프레임이라는 페이지 크기대로 분할한 메모리 공간에 적재하는 방식으로 이 방법을 사용하면 외부 단편화는 발생하지 않지만 내부 단편화는 발생할 수 있다. 이때 페이지를 나누는 과정에서 논리적인 구조에 대한 고려는 없기 때문에 공유나 보호가 복잡한 반면 나누는 방법은 쉽고 효율적이다. 또, 필요한 페이지만 메모리에 올려놓고 사용하기 때문에 효율적이지만, 페이지 매핑 오버헤드가 존재한다. 이 오버헤드에 대한 개선 방법으로 TLB활용을 할 수 있으나 TLB 비용 또한 고려할 필요가 있다. 다음에는 페이징 기법 다음으로 세그멘테이션 기법에 대해 공부.

 

**  KOREATECH 무료 OS강의(클릭) 학습 후 나름대로 이해한 뒤 정리한 내용입니다. **

 

[Course] Operating System (CPA310) - 운영체제 강의

o Operating System (운영체제), CPA310, KOREATECH o Instructor: Duksu Kim (김덕수) o Course homepage: https://sites.google.com/view/hpclab/courses/operating-system 운...

www.youtube.com

 

댓글