[운영체제] Chapter 8. Memory Management (4)
2023. 1. 18. 01:52ㆍCS/운영체제
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값) 보다 작은 값인지 확인
- 세그먼트의 길이를 넘어서는 오프셋 위치에 대한 접근을 시도하면 - 예외상황을 발생시켜 해당 메모리 위치에 대한 접근을 봉쇄해야 한다
- 요청된 세그먼트 번호가 STLR에 저장된 값보다 작은 값인지 확인
- 두 가지 사항을 모두 만족하는 경우에 한해서 유효한 메모리 접근 요청으로 세그먼트 테이블의 세그먼트 번호에서
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(페이지드 세그먼테이션)
- 페이징 기법과 세그먼테이션 기법의 장점만을 취하는 주소 변환 기법으로 프로그램을 의미 단위인 세그먼트로 나누고, 세그먼트 하나가 동일한 크기의 페이지들의 집합으로 구성된다. 그리고 물리적 메모리에 적재하는 단위는 페이지 단위로 한다.
- 장점
- 하나의 세그먼트 크기를 페이지 크기의 배수가 되도록 함으로써 세그먼테이션 기법에서 발생하는 외부조각의 문제점을 해결
- 세그먼트 단위로 프로세스 간의 공유나 프로세스 내의 접근 권한 보호가 이루어지도록 함으로써 페이징 기법의 약점을 해소
- <세그먼트 번호, 오프셋>으로 구성된 논리적 주소를 물리적 주소로 변환
- 외부의 세그먼트 테이블과 내부의 페이지 테이블의 두 단계의 테이블을 이용한다.
- 하나의 세그먼트가 여러 개의 페이지로 구성 → 각 세그먼트마다 페이지 테이블을 가짐
- 논리적 주소의 상위 비트인 세그먼트 번호를 통해 세그먼트 테이블의 해당 항목에 접근
- 세그먼트 길이값과 오프셋값을 비교해서 세그먼트 길이를 넘어서는 메모리 접근 시도인지 여부를 체크한다.
- 세그먼트 길이값 < 오프셋 - 유효하지 않은 위치에 대한 접근 시도이므로 트랩을 발생시킴
- 세그먼트 길이값 > 오프셋 - 오프셋값을 다시 상위, 하위 비트로 나누어 상위 비트는 세그먼트 내에서의 페이지 번호로 사용하고 하위 비트는 페이지 내에서의 변위로 사용하게 된다.
- 페이지 항목을 통해 해당 세그먼트를 위한 페이지 테이블의 시작 위치를 얻었으므로, 그 위치에서 페이지 번호만큼 떨어진 페이지 테이블 항목으로부터 물리적 메모리의 페이지 프레임 위치를 얻게 된다.
- 이 위치에서 오프셋의 하위 비트값인 페이지 내 변위만큼 떨어진 곳이 바로 원하는 물리적 메모리 주소
- 실제로 세그먼테이션 기법은 주로 사용되지 않고, 내부에는 페이지를 사용하는 기법을 사용해야 관리가 수월하다.
[복습]
- 세그먼테이션: 프로세스의 주소 공간을 의미단위의 세그먼트로 나누어 물리적 메모리에 올리는 방식
- 의미 단위: 코드, 스택, 데이터
- 세그먼트 테이블: 세그먼테이션 기법에서 주소 변환을 위해 사용한다. base(세그먼트 시작 위치)와 limit(세그먼트 길이)으로 구성
- 주소 변환
- segment-table base register: 물리적 메모리에서 segment table 위치
- segment-table length register: 프로그램이 사용하는 segment의 수
- 세그먼트 번호 < STLR && 세그먼트 길이 < 오프셋
- base register + 오프셋
- 세그먼테이션 기법은 세그먼트의 최대 길이는 오프셋으로 표현할 수 있는 비트수 이상이 될 수 없다. 세그먼트가 어디서 시작되는지 정확한 byte 단위의 주소로 base 위치를 매겨줘야 한다. 세그먼트의 개수가 상당히 적어 테이블을 위한 공간 낭비가 덜하다.
- 세그먼트는 의미 단위로 나누어져 있기 때문에 공유와 보안의 측면에서 효과적이다. 하지만 외부조각이 발생하게 되어 allocation 문제가 발생한다.
- Paged Segmentation: 프로그램을 의미 단위인 세그먼트로 나누고, 세그먼트 하나가 동일한 크기의 페이지들의 집합으로 구성
- 물리적 메모리에 적재하는 단위는 페이지 단위
- 세그먼트의 크기는 페이지 크기의 배수 -> 외부조각문제 해결, 세그먼트 단위로 프로세스 간 공유, 접근하기 때문에 접근권한 보호가 이루어짐
- 외부 세그먼트 테이블 + 내부 페이지 테이블
- 하나의 세그먼트당 여러 개의 페이지 테이블이 존재한다.
이화여자대학교 반효경 교수님의 [2014년 1학기 운영체제], [2017년 1학기 운영체제] 강의 정리입니다.
반효경 교수님의 [운영체제와 정보기술의 원리] 교재를 참고하였습니다. 감사합니다.
https://core.ewha.ac.kr/publicview/C0101020140502151452123728?vmode=f
https://core.ewha.ac.kr/publicview/C0101020140509142939477563?vmode=f
728x90
'CS > 운영체제' 카테고리의 다른 글
[운영체제] Chapter 9. Virtual Memory (2) (0) | 2023.01.19 |
---|---|
[운영체제] Chapter 9. Virtual Memory (1) (0) | 2023.01.19 |
[운영체제] Chapter 8. Memory Management (2), (3) (0) | 2023.01.16 |
[운영체제] Chapter 8. Memory Management (1) (0) | 2023.01.16 |
[운영체제] Chapter 7. Deadlock (1), (2) (0) | 2023.01.05 |