[운영체제] Chapter 8. Memory Management (4)

2023. 1. 18. 01:52CS/운영체제

728x90

//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎

 

 

Segmentation, Segmentation Architecture, Segmentation Hardware, Sharing of Segments, Segmentation with Paging, Address Translation Architecutre

 

5. 물리적 메모리의 할당 방식

5-1. 연속 할당 (Contiguous allocation)

  • 각각의 프로세스가 메모리의 한 곳에 연속적인 공간에 적재되도록 하는 것

5-2. 불연속 할당 (Noncontiguous allocation)

  • 하나의 프로세스가 메모리의 여러 영역에 분산되어 적재될 수 있는 것

5-2-1. Paging(페이징 기법)

  • 프로세스의 주소 공간을 동일한 크기의 페이지 단위로 나누어 물리적 메모리의 서로 다른 위치에 페이지들을 저장하는 방식

5-2-2. Segmentation(세그먼테이션)

  • 프로세스의 주소 공간을 의미 단위의 세그먼트로 나누어 물리적 메모리에 올리는 방식
  • 세그먼트: 주소 공간을 기능 단위 또는 의미 단위(code, data, stack)로 나누는 것을 뜻한다.
    • 작게는 프로그램을 구성하는 함수 하나하나를 세그먼트로 정의
    • 크게는 프로그램 전체를 하나의 세그먼트로 정의
    • 일반적으로는 code, data, stack 부분이 하나씩의 세그먼트로 정의
    • 세그먼트는 특정 크기 단위로 나눈 것이 아니라 의미를 가질 수 있는 논리적인 단위(logical unit)로 나눈 것이기 때문에 크기가 균일하지 않다.

5-2-2-1. Segmentation Architecture & Hardware

  • 논리적 주소: <segment-number, offset>으로 나뉘어 사용됨
    • segment-number: 논리적 주소가 프로세스 주소 공간 내에서 몇 번째 세그먼트에 속하는지
    • offset: 그 세그먼트 내에서 얼마만큼 떨어져 있는지에 대한 정보
  • segment table: 세그먼테이션 기법에서 주소 변환을 위해 사용
    • 세그먼트의 각 항목은 base(기준점)과 limit(한계점)을 가지고 있다.
    • base: 물리적 메모리에서 그 세그먼트의 시작 위치
    • limit: 세그먼트의 길이: 세그먼트의 길이가 균일하지 않으므로 세그먼트의 위치 정보와 길이정보를 모두 보관
  • 주소 변환에 사용되는 레지스터
    • segment-table base register(STBR, 세그먼트 테이블 기준 레지스터): 물리적 메모리에서의 segment table의 위치
    • segment-table length register(STLR, 세그먼트 테이블 길이 레지스터): 프로그램이 사용하는 segment의 
  • 논리적 주소 → 물리적 주소 변환 
    • 요청된 세그먼트 번호가 STLR에 저장된 값보다 작은 값인지 확인
      • 세그먼트 번호가 더 크다면 - 존재하지 않는 세그먼트에 대한 접근 시도로 예외상황을 발생시켜 메모리 접근을 봉쇄해야 한다.
    • 논리적 주소의 오프셋값이 그 세그먼트의 길이(세그먼트 테이블의 limit값) 보다 작은 값인지 확인
      • 세그먼트의 길이를 넘어서는 오프셋 위치에 대한 접근을 시도하면 - 예외상황을 발생시켜 해당 메모리 위치에 대한 접근을 봉쇄해야 한다
  • 두 가지 사항을 모두 만족하는 경우에 한해서 유효한 메모리 접근 요청으로 세그먼트 테이블의 세그먼트 번호에서
    base register값(물리적인 메모리 상의 시작 위치) + 오프셋(d)으로 주소 변환 작업이 이루어진다.
  • 페이징 기법과 세그먼테이션 기법의 차이점
    • 페이징 기법은 페이지의 크기가 균일하기 때문에 오프셋의 크기가 페이지의 크기에 의해 결정되지만
    • 세그먼테이션 기법은 오프셋에 해당하는 부분은 미리 결정되어야 한다. 세그먼트의 최대 길이는 오프셋으로 표현할 수 있는 비트수 이상이 될 수 없다.
    • 페이징 기법은 물리적 메모리도 페이지와 같은 크기의 프레임으로 나누어져 있기 때문에 시작 주소가 프레임 번호로 주어진다.
    • 세그먼테이션 기법은 세그먼트의 크기가 다 다르기 때문에 세그먼트가 어디서 시작되는지 정확한 바이트 단위의 주소로 base 위치를 매겨줘야 한다.
    • 페이징 기법은 페이지의 개수가 굉장히 많아서 테이블을 위한 공간 낭비가 심하다.
    • 세그먼테이션 기법은 세그먼트의 개수가 상당히 적다. (예. 5개 ~)
  • 세그먼테이션 기법의 장점과 단점
    • 세그먼트는 의미 단위로 나누어져 있기 때문에 공유와 보안의 측면에서 페이징 기법에 비해 훨씬 효과적이다.
      • 접근 권한 제어를 하고자 할 경우, 이는 어떤 의미 단위로 이루어지지 단순히 크기 단위로 수행되지 않기 때문
    • 테이블을 위한 메모리 낭비를 따지자면 세그먼테이션 기법의 낭비가 페이징 기법보다 적다.
    • 하지만 세그먼트의 길이가 균일하지 않기 때문에 물리적 메모리 관리에서 외부 조각이 발생하게 되며, 세그먼트를 어느 가용 공간에 할당할 것인지 결정하는 문제가 발생한다. - first fit / best fit
  • 보호비트와 유효비트
    • 보호비트는 각 세그먼트에 대해 Read/Write/Execution 등의 권한이 있는지를 나타낸다
    • 유효비트는 해당 세그먼트가 현재 물리적 메모리에 적재되어 있는지를 나타낸다.

5-2-2-2. Sharing of Segments(공유 세그먼트)

  • 여러 프로세스가 특정 세그먼트를 공유해 사용하는 공유 세그먼트 개념을 지원한다.
  • 공유 세그먼트는 이 세그먼트를 공유하는 모든 프로세스의 주소 공간에서 동일한 논리적 주소에 위치해야 한다.
    • 물리적 주소에서도 1개의 copy로 모든 프로세스가 참조

5-2-3. Paged Segmentation(페이지드 세그먼테이션)

  • 페이징 기법과 세그먼테이션 기법의 장점만을 취하는 주소 변환 기법으로 프로그램을 의미 단위인 세그먼트로 나누고, 세그먼트 하나가 동일한 크기의 페이지들의 집합으로 구성된다. 그리고 물리적 메모리에 적재하는 단위는 페이지 단위로 한다.
  • 장점
    • 하나의 세그먼트 크기를 페이지 크기의 배수가 되도록 함으로써 세그먼테이션 기법에서 발생하는 외부조각의 문제점을 해결
    • 세그먼트 단위로 프로세스 간의 공유나 프로세스 내의 접근 권한 보호가 이루어지도록 함으로써 페이징 기법의 약점을 해소
  • <세그먼트 번호, 오프셋>으로 구성된 논리적 주소를 물리적 주소로 변환
    • 외부의 세그먼트 테이블과 내부의 페이지 테이블의 두 단계의 테이블을 이용한다.
    • 하나의 세그먼트가 여러 개의 페이지로 구성 → 각 세그먼트마다 페이지 테이블을 가짐 
      1. 논리적 주소의 상위 비트인 세그먼트 번호를 통해 세그먼트 테이블의 해당 항목에 접근
      2. 세그먼트 길이값과 오프셋값을 비교해서 세그먼트 길이를 넘어서는 메모리 접근 시도인지 여부를 체크한다.
        • 세그먼트 길이값 < 오프셋 - 유효하지 않은 위치에 대한 접근 시도이므로 트랩을 발생시킴
        • 세그먼트 길이값 > 오프셋 - 오프셋값을 다시 상위, 하위 비트로 나누어 상위 비트는 세그먼트 내에서의 페이지 번호로 사용하고 하위 비트는 페이지 내에서의 변위로 사용하게 된다.
      3. 페이지 항목을 통해 해당 세그먼트를 위한 페이지 테이블의 시작 위치를 얻었으므로, 그 위치에서 페이지 번호만큼 떨어진 페이지 테이블 항목으로부터 물리적 메모리의 페이지 프레임 위치를 얻게 된다.
      4. 이 위치에서 오프셋의 하위 비트값인 페이지 내 변위만큼 떨어진 곳이 바로 원하는 물리적 메모리 주소
  • 실제로 세그먼테이션 기법은 주로 사용되지 않고, 내부에는 페이지를 사용하는 기법을 사용해야 관리가 수월하다.

 

 

[복습]

    1. 세그먼테이션: 프로세스의 주소 공간을 의미단위의 세그먼트로 나누어 물리적 메모리에 올리는 방식
      • 의미 단위: 코드, 스택, 데이터
    2. 세그먼트 테이블: 세그먼테이션 기법에서 주소 변환을 위해 사용한다. base(세그먼트 시작 위치)와 limit(세그먼트 길이)으로 구성
    3. 주소 변환
      • segment-table base register: 물리적 메모리에서 segment table 위치
      • segment-table length register: 프로그램이 사용하는 segment의 수
      • 세그먼트 번호 < STLR && 세그먼트 길이 < 오프셋 
        • base register + 오프셋
    4. 세그먼테이션 기법은 세그먼트의 최대 길이는 오프셋으로 표현할 수 있는 비트수 이상이 될 수 없다. 세그먼트가 어디서 시작되는지 정확한 byte 단위의 주소로 base 위치를 매겨줘야 한다. 세그먼트의 개수가 상당히 적어 테이블을 위한 공간 낭비가 덜하다.
    5. 세그먼트는 의미 단위로 나누어져 있기 때문에 공유와 보안의 측면에서 효과적이다. 하지만 외부조각이 발생하게 되어 allocation 문제가 발생한다.
    6. Paged Segmentation: 프로그램을 의미 단위인 세그먼트로 나누고, 세그먼트 하나가 동일한 크기의 페이지들의 집합으로 구성
      • 물리적 메모리에 적재하는 단위는 페이지 단위
      • 세그먼트의 크기는 페이지 크기의 배수 -> 외부조각문제 해결, 세그먼트 단위로 프로세스 간 공유, 접근하기 때문에 접근권한 보호가 이루어짐
      • 외부 세그먼트 테이블 + 내부 페이지 테이블
      • 하나의 세그먼트당 여러 개의 페이지 테이블이 존재한다.

 

 

 

 


이화여자대학교 반효경 교수님의 [2014년 1학기 운영체제], [2017년 1학기 운영체제] 강의 정리입니다.

 반효경 교수님의 [운영체제와 정보기술의 원리] 교재를 참고하였습니다. 감사합니다.

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

 

반효경 [운영체제] 20. Memory Management 3

설명이 없습니다.

core.ewha.ac.kr

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

 

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

설명이 없습니다.

core.ewha.ac.kr

 

728x90