본문 바로가기
CS/Operating System

[ OS 기초 ] 09. Virtual Memory (2)

by IM조이 2021. 7. 13.

(앞에서 이어) 비연속 메모리 할당 기법과 각각의 특징, 주소 매핑, 메모리 관리, 공유 및 보호
1. segmentation system
2. hybrid paging and segmentation system

 

00 개요

운영체제의 주 기능 중 하나인 메모리 관리는 크게 메모리 연속 할당과 비연속 할당으로 구분할 수 있다. 앞서 연속 할당 방법의 Uni-programming, Multi-programming(FPM, VPM)에 대해 알아보았고 대표적인 비연속 할당 방법(Paging System, Segmentation System, Hybrid) 중 페이징 시스템까지 알아보았다. 이번 차시에서는 남은 두 방법인 세그멘테이션 시스템과 페이징시스템을 세그멘테이션 시스템과 결합한 하이브리드 시스템에 대해 살펴보았다.

(참고 - Non-continuous memory allocation은 모두 Virtual Storage Method로 필요한 것만 메인 메모리에 올려두고 사용하며 나머지는 모두 스왑 디바이스에 보관하며, 필요할 때 올려서 사용함, swap device는 가상 메모리 시스템)

 

01 Segmentation System

01-1 특징
앞서 살펴 본 페이징 시스템(프로그램을 페이지로 나눠 메모리도 페이지 프레임의 크기대로 나누어 할당하는 방식)과의 가장 큰 차이는 프로그램을 논리적인 단위로 나누어 메모리에 올린다는 점이다. 따라서 단순히 크기가 아닌, 논리적 단위 개념이 반영되어 세그먼트의 공유나 보호가 보다 용이하다는 장점이 있다

  • 프로그램을 논리적 기준에 따라 분할한다
  • 세그먼트 : 논리적 기준에 따라 분할된 블록
  • 세그먼트의 크기 : 분할된 블록의 크기, 세그먼트마다 다를 수 있음
  • 크기가 세그먼트마다 다를 수 있기 때문에 미리 분할해놓을 수 없다는 점에서 연속 할당의 멀티프로그래밍 방식 중 Variable Partition Multiprogramming 방식과 유사함
  • 논리적 단위로 나뉘어 있어 공유와 보호가 더 용이하다는 장점이 있음
  • 세그먼트마다 크기가 달라 이를 관리하는 과정에서 오버헤드가 발생함
  • 세그먼트 크기에 따라 메모리를 나누기 때문에 내부 단편화는 발생하지 않지만 외부 단편화는 발생할 수 있음

 

01-2 address mapping
페이징 시스템의 주소 매핑은 v = (p,d) 였다면, 세그멘테이션 시스템의 주소 매핑은 v = (s, d)로 페이지만 세그먼트로 바뀌었다고 생각하면 된다. 또 주소 매핑 과정에서 페이징시스템은 PMT를 만들어 정보를 기록하는 반면 세그멘테이션 시스템은 SMT을 만들어 필요한 정보를 보관한다.

SMT
- 앞에서 살펴봤던 Map Table 과의 가장 큰 차이점은 Segment length, Protection Bits 필드를 추가로 담고 있다는 점
- 다른 테이블처럼 SMT도 세그먼트의 id, 메모리 적재 여부, 스왑 디바이스 상에서의 주소, 메모리 적재 시 메모리 상의 주소 등의 정보를 담고 있음

  • Segment length : 세그먼트의 크기
  • Protection Bits : 세그먼트에 대한 권한 - 세그먼트는 논리 단위로 나뉘어지기 때문에 권한을 설정해 보호 가능
    • R/W/X/A

 

Direct Mapping
- 앞서 살펴본 다이렉트 매핑 방법들과 매우 유사하며 단지 (p, d)로 주어지던 정보가 (s, d)로 주어진다고 생각하면 됨
- 과정

  1. SMT로 접근함 (base = b)
  2. SMT에서 원하는 세그먼트의 번호의 엔트리를 찾아감 (b+s*entrySize)
  3. 해당 엔트리에서 메모리 적재여부를 확인(residence bit로 확인)
  4. 적재되어 있다면, 해당 메모리 주소(a)를 얻어오고 거기에 상대적인 위치 개념의 displacement(d)를 더해 실제 주소 값을 계산 (끝)
  5. 적재되어 있지 않다면 이 상황이 Segment fault
  6. swap device에서 해당 세그먼트를 메모리로 적재한 뒤 다시 위 과정을 반복해야 함

 

이때 세그먼트를 스왑디바이스에서 메모리로 올리는 과정에서 여러 익셉션이 발생할 수 있다. 이 경우 해당 익셉션 처리 모듈을 호출하게 된다. 만약 별 문제가 없다면 정상적으로 실제 주소를 찾아 mapping 할 수 있게 된다.

  • 만약 d의 값이 세그먼트의 길이(length)보다 크다면? => Segment Overflow Exception
  • 만약 허가되지 않은 작업을 하려고 한다면? => Segment Protection Exception

 

01-3 memory management
메모리 관리 방법도 VPM과 유사하다. 세그멘테이션 시스템은 세그먼트의 크기에 맞게 메모리를 분할한 뒤 세그먼트를 적재하고, 파티션 테이블(스테이트 테이블)을 통해 주요 정보를 관리한다.
- 주요 정보 : 분할된 각 메모리의 id, 시작하는 주소, 크기, 어떤 프로세스가 해당 메모리를 사용 중인지, 그 세그먼트의 id, storage protection key, 등등 기타 정보

 

01-4 segment sharing and protection
앞서 페이징 기법 대비 세그먼트 시스템은 세그먼트의 공유와 보호가 보다 용이하다고 했는데 그 근본적인 이유는 세그먼트가 논리 단위로 분할되어 있기 때문이다. 페이징 시스템에서 발생하던 코드 점프의 문제도 세그먼트에서 발생할 경우 어차피 같은 세그먼트 내부에서의 점프가 되기 때문에 특별히 다른 문제가 생기지 않는다. 또 보호의 경우 보호 비트를 활용해 원활하게 보호할 수 있다.

 

세그멘테이션 시스템에 대해 간단히 다시 정리해보면 다음과 같다.
- 프로그램은 논리 단위의 세그먼트로 나누어 메모리에 적재하는 방식으로 내부 단편화는 발생하지 않음
- SMT를 활용해 address mapping을 함, 이때 메모리에 추가적으로 접근해야 한다는 단점은 HW활용으로 개선 가능
- 논리 단위로 나뉘어 있어 세그먼트 공유와 보호는 용이하지만 관리하기 복잡해 오버헤드가 생긴다는 문제도 있음
- 비연속 할당 방법으로 페이징 시스템과 마찬가지로 필요한 세그먼트만 메모리에 올려 사용하기 때문에 메모리를 효율적으로 활용할 수 있는 기법

 

02 Hybrid Paging/Segmentation System

페이징 시스템은 같은 크기로 분할해 오버헤드가 적지만 공유나 보호가 복잡한 반면 세그멘테이션 시스템은 논리적으로 분할하기 때문에 오버헤드가 생기지만 세그먼트의 공유나 보호가 용이하다는 각각의 장단점이 있다. 따라서 이 둘의 장점을 잘 융합해 하이브리드 paging, segmentation 시스템을 활용할 수 있다.

 

02-1 특징
paging system과 segmentation system의 장점을 결합한 것으로 핵심은 다음 두 가지다.

  • 프로그램을 논리적인 단위인 세그먼트로 분할한다
  • 각 세그먼트를 다시 페이지로 분할해서 페이지를 메모리에 적재한다

 

02-2 address mapping & memory management

  • v = (s, p, d)
  • s : segment number
  • p : page number
  • d : displacement
  • SMT, PMT를 모두 사용해 각 프로세스마다 하나의 SMT와 PMT를 갖고 있음
  • direct mapping과 associated mapping 모두 활용 가능
  • 메모리 관리의 경우 실제 메모리에 적재되는 단위는 페이지 이기 때문에 페이징 시스템과 유사하게 관리함

 

SMT
- 메모리에 적재되는 기준이 아니기 때문에 레지던스 비트는 없음
- 해당 세그먼트에 대한 PMT의 위치 정보를 갖고 있어야 함

PMT
- 각 세그먼트에 대해 하나씩 있고, 메모리에 적재되는 단위이기 때문에 레지던스 비트가 존재함
- 페이지 프레임 넘버를 보유하고 있음

과정

  1. 세그먼트를 확인하기 위해 먼저 SMT의 주소인 b에 접근
  2. 세그먼트에서 원하는 엔트리로 이동하기 b + s*SMTentrySize
  3. 해당 엔트리에서 PMT의 주소 찾아 주고 b*에 접근
  4. PMT에서 원하는 페이지의 엔트리로 이동 b* + p*entrySize
  5. 해당 엔트리에서 적재 여부 확인 후 페이지 프레임 넘버를 읽어옴
  6. 페이지 프레임 * 페이지 사이즈 + d를 통해 실제 주소를 구할 수 있음

이 과정에서 총 3번의 메모리 접근이 필요하기 때문에 오버헤드가 생기지만, 하이브리드 시스템을 통해 페이징과 세그멘테이션 시스템의 장점을 모두 취할 수 있어 많이 사용하고, TLB와 같은 하드웨어로 단점을 보완해 사용할 수 있음

특히 논리적 분할과 고정된 크기 분할을 결합해 페이지 공유와 보호를 용이하게 하면서 실제 메모리 관리는 프레임 단위로 해서 관리의 오버헤드는 줄였고, 외부 단편화도 발생하지 않는다는 장점을 갖게 된다. 동시에 여러 테이블을 관리해야 함에 따른 오버헤드가 생겨 메모리 소모가 크고 주소 매핑 과정이 복잡해지기 때문에 다른 여러 기법을 통해 이를 해결할 수 있다.

 

03 정리

우리가 직접 컴퓨터의 운영체제를 만들지는 않지만, 어떤 한 시스템이 돌아가게끔 관리하는 체제라는 점에서 우리가 만드는 애플리케이션도 하나의 작은 운영체제라고 생각해볼 수 있다. 따라서 이 안에서 어떻게 메모리를 관리하는지 공부하고 시스템의 작동 방식을 이해한다면 우리가 프로그램을 짤 때에도 분명 도움이 되어 보다 효율적이 프로그램 구조를 짤 수 있기 때문에 운영체제를 공부하면 도움이 많이 된다.

 

**  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

댓글