CS/OS (2022-1)

[OS] Memory Management - 3

샤아이인 2022. 11. 30.

본 글은 반효경 교수님의 운영체제 강의를 들으며 정리하는 글 입니다.

 

2. Segmentation

프로그램은 의미 단위인 여러 개의 segmentation으로 구성될 수 있다.

  • 작게는 프로그램을 구성하는 하나 하나를 세그먼트로 정의
  • 크게는 프로그램 전체를 하나의 세그먼트로 정의 가능
  • 일반적으로는 code, data, stack 부분이 하나씩의 세그먼트로 정의됨
  • 의미를 어떻게 나누는지에 따라 달라짐

 

세그먼트는 다음과 같은 logical unit이다.

  • main()
  • function
  • global variables
  • stack
  • symbol table
  • arrays

 

2 - 1) Segmentation 기법

논리적 주소는 <세그먼트 번호(s), 오프셋(d)>으로 나뉘어 사용된다.

세그먼트 번호(s)는 해당 논리적 주소가 프로세스 주소 공간 내에서 몇 번째 세그먼트에 속하는 지를 나타낸다.

오프셋은(d) 그 세그먼트 내에서 얼마만큼 떨어져 있는 지에 대한 정보를 나타낸다.

 

segmentation table을 사용하여 주소를 변환한다.

  • segmentation table에 저장된 각 entry는 기준점(base)과 한계점(limit)을 가지고 있다.
  • base는 물리적 메모리에서 그 세그먼트의 시작 위치를 나타내고, limit은 그 세그먼트의 길이를 나타낸다.

 

segmentation-table base register(STBR)segmentation-table length register(STLR)을 사용한다.

  • STBR은 현재 CPU에서 실행 중인 프로세스의 segmentation-table이 메모리의 어느 위치에 있는지 그 시작 주소를 담고 있다.
  • STLR은 그 프로세스의 주소 공간이 총 몇 개의 세그먼트로 구성되는지, 즉 총 세그먼트의 개수를 나타낸다.
  • 이는 위에서 바로 직전에 말한 base, limit과는 다르다, segment-table에 관한 정보이다!

 

2 - 2) Segmentation 하드웨어

우선 segment-table에는 2가지 정보가 담겨 있다.

limit이라는 segment의 길이와, base라는 물리적 메모리상의 시작 위치이다.

논리적 주소를 물리적 주소로 변환하기 전에 두 가지 사항을 확인한다.

 

요청된 세그먼트 번호(s)가 STLR에 저장된 값보다 작은 값인가? 예를 들어 프로그램이 segment 3개로 구성되어 있는데, s가 5번이면 이는 잘못된 요청이다. 즉, "s < STLR의 segment수" 이여야 한다.

  • 그렇지 않다면, 존재하지 않는 세그먼트에 대한 접근 시도이므로 예외 발생

논리적 주소의 오프셋 값(d)이 그 세그먼트의 길이(limit)보다 작은 값인가?

  • 그렇지 않다면, 세그먼트 길이를 넘어서는 오프셋 위치이므로 예외 발생

 

2 - 3) 메모리 보호 기법과 공유 세그먼트

2 - 3 - 1) 메모리 보호 기법

  • 각 세그먼트 별로 보호 비트가 있다.
    • 보호 비트는 각 세그먼트에 대해 읽기/쓰기/실행 등의 권한이 있는 지를 나타낸다.
  • 각 세그먼트 별로 유효 비트가 있다.
    • 유효 비트는 각 세그먼트의 주소 변환 정보가 유효한지, 즉 해당 세그먼트가 현재 물리적 메모리에 적재되어 있는 지를 나타낸다.

 

2 - 3 - 2) 공유 세그먼트

여러 프로세스가 특정 세그먼트를 공유하여 사용하는 개념이다.

공유 세그먼트는 이 세그먼트를 공유하는 모든 프로세스의 주소 공간에서 동일한 논리적 주소에 위치해야 한다.

 

2 - 4) Segmentation의 장점과 단점

2 - 4 - 1) 장점

세그먼트는 의미 단위로 나누어져 있기 때문에 공유와 보안의 측면에서 페이징 기법에 비해 훨씬 효과적이다.

주소 공간의 일부를 공유하거나 특정 주소 공간에 write-only등의 접근 권한 제어를 하고자 할 경우, 이는 단순히 크기 단위가 아닌 어떤 의미 단위로 권한을 적용할 수 있기 때문이다.

 

페이지 단위로 나누는 경우애는 애매한 경우가 있다.

 

2 - 4 - 2) 단점

세그먼테이션 기법에서는 프로그램을 의미 단위로 나누기 때문에 segment의 길이가 균일하지 않다.

따라서 물리적 메모리 관리에서 외부 조각이 발생하게 되며, 연속 할당 메모리 관리의 가변 분할 방식에서의 동일한 문제점이 발생한다.

즉, 중간 중간에 hole이 생겨버린다.

 

2 - 5) Paged Segmentation

Segment를 여러개의 page로 구성하는 방식이다.

Paged Segmentaion기법은 프로그램을 의미 단위의 세그먼트로 나누되, 세그먼트가 동일한 크기의 페이지로 나뉘게 된다.

즉, Paged Segmentaion기법에서는 하나의 세그먼트 크기를 페이지 크기의 배수가 되도록 함으로써 세그먼테이션 기법에서 발생하는 외부 조각의 문제를 해결하며, 동시에 세그먼트 단위로 프로세스 간의 공유나 프로세스 내의 접근 권한 보호가 이루어지도록 함으로써 기존 페이징 기법과 세그먼트 방식의 약점을 해결하였다!

 

주소 변환을 위해 외부의 세그먼트 테이블과 내부의 페이지 테이블, 이렇게 두 단계의 테이블을 이용한다.

하나의 세그먼트가 여러 개의 페이지로 구성되므로 각 세그먼트마다 하나의 전담 페이지 테이블을 가지게 된다!, 2단계 페이지 테이블과 유사한 구조이다.

 

<세그먼트 번호 s, 오프셋 d>으로 구성된 논리적 주소를 물리적 주소로 변환하는 과정은 다음과 같다.

 

  1. 논리적 주소의 상위 비트인 세그먼트 번호(s)를 통해 세그먼트 테이블의 해당 항목에 접근한다.
    • 이 세그먼트 항목에는 세그먼트 길이와 그 page-table의 시작 주소가 들어 있다.
  2. 오프셋 값(d)을 통해 세그먼트 내에서의 페이지 번호(p), 페이지 내에서의 변위(d’)로 사용하도록 둘로 나눈다.
  3. page-table의 시작주소와 페이지 번호(p)를 알았으니, p만큼 떨어진 entry에 가면 물리적 메모리의 frame주소 f를 알아낸다.
  4. f와 d’을 이용하여 물리적 메모리에 접근한다.
  5. frame번호 + Page offset(d')을 사용하면 이게 물리적 메모리의 주소이다.

 

이러한 과정은 OS가 하는 것 이 아니라, 하드웨어가 수행하는 일 이다!

 

출처

https://core.ewha.ac.kr/publicview/C0101020140509142939477563?vmode=f 

 

반효경 [운영체제] 21. Memory Management 4

설명이 없습니다.

core.ewha.ac.kr

https://steady-coding.tistory.com/561

 

[반효경 운영체제] Memory Management 2 & 3 & 4

operating-system-study에서 스터디를 진행하고 있습니다. 페이징 기법 페이징 예시 논리적 메모리는 페이지 단위로 분할이 되고, 물리적 메모리는 프레임 단위로 분할이 되어 서로 매칭된다. 이때 논

steady-coding.tistory.com

 

'CS > OS (2022-1)' 카테고리의 다른 글

[OS] Virtual Memory - 2  (1) 2022.11.30
[OS] Virtual Memory - 1  (0) 2022.11.30
[OS] Memory Management - 2  (0) 2022.11.30
[OS] Memory Management - 1  (0) 2022.11.29
[OS] Deadlock  (1) 2022.11.29

댓글