1. 세그멘테이션 시스템(Segmentation System)
- 프로그램을 논리적인 단위로 분할(segment)하는 방식
- 블록의 크기가 서로 다를 수 있음
- 고정크기로 분할하는 방식이 아니기때문에 메모리를 미리 분할해둘 수 없음
=> 가변 분할 방식(Variable Partition Multi-Programming)과 유사 - 가변 분할 방식과 마찬가지로 내부 단편화는 발생하지 않으나 외부 단편화는 발생할 수 있음
- 페이징 시스템에 비해 주소 매핑과 메모리관리의 오버헤드가 큼
- 프로그램의 논리적 흐름을 고려한 분할방식이기에 블록(세그먼트)의 공유, 보호가 쉬움
2. 주소 매핑(Address Mapping)
- (segment number, offset) 의 쌍으로 이루어진 가상 주소를 사용
- SMT(Segment Map Table)을 사용하여 가상주소를 실제주소에 매핑
- SMT에서는 세그먼트가 메모리에 적재되어있는지 여부를 나타내는 residence bit와
swap device 상의 어느 위치에 저장되어있는지를 나타내는 secondary storage address(= 실제주소),
메모리상의 주소(segment address in memory), 세그먼트의 길이(segment legnth),
세그먼트 보호를 위한 protection bits 등의 값을 관리한다. - 프레임 번호만 알면 실제 메모리에서의 위치를 알 수 있었던 페이징 시스템과 달리 세그먼트의 길이가
서로 다르기 때문에 segment length 가 추가적으로 필요해진다. - 페이징 시스템에서는 페이지가 논리적으로 분할된 블록이 아니기에 protections bits를 사용한 권한 관리가
복잡했지만 세그멘테이션 시스템의 경우 한 블록이 하나의 논리적인 단위이기에 세그먼트 단위로 권한을
관리할 수 있어 세그먼트 보호가 훨씬 용이해진다. - 주소 변환 과정
- SMT의 시작주소가 b이고 세그먼트 번호는 s, offset은 d 일 때
- SMT에 접근하여 세그먼트(s)의 엔트리 위치를 탐색(b + (entry_size * s)
- 해당 세그먼트의 residence bit를 체크, 메모리에 적재되지 않은 상태라면 segment fault가
발생하고 페이징 시스템의 page fault 때와 마찬가지로 커널에 요청하여 세그먼트를 메모리에 적재 - offset(d) 이 세그먼트의 범위를 벗어나는 경우 overflow 가 발생, 이를 처리하는 루틴을 거침
- protection bits 를 체크하여 허용되지 않은 연산을 시도할 경우 예외가 발생, 이를 처리하는 루틴을 거침
- 문제가 없다면 실제 주소(r = entry_address + d)를 계산하여 메모리에 접근
- SMT의 시작주소가 b이고 세그먼트 번호는 s, offset은 d 일 때
3. 세그멘테이션 시스템의 메모리 관리
- 페이징 시스템이 FPM과 유사했듯이 세그멘테이션 시스템은 VPM과 유사한 방식으로 메모리를 관리
- 세그먼트 적재시 크기에 맞춰 메모리를 분할하여 적재, Partition Table을 통해 이를 관리한다.
- 파티션 테이블(Partition Table)
- 페이징 시스템의 프레임 테이블에 대응하는 메모리 관리를 위한 테이블
- 시작 주소(start address)
- 파티션의 시작 주소
- 파티션의 시작 주소
- 크기(size)
- 파티션의 크기
- 파티션의 크기
- PID(Process ID)
- 해당 파티션을 사용중인 프로세스의 ID
- 해당 파티션을 사용중인 프로세스의 ID
- 세그먼트 번호(segment number)
- 해당 파티션에 적재된 세그먼트의 번호
- 해당 파티션에 적재된 세그먼트의 번호
- 기억장치 접근권한(storage protection key)
- 해당 파티션에 대한 접근 권한 정보
- 해당 파티션에 대한 접근 권한 정보
- 페이징 시스템의 프레임 테이블에 대응하는 메모리 관리를 위한 테이블
- 세그먼트 공유(Segment Sharing)
- 페이징 시스템의 경우 페이지가 논리적 단위가 아니기 때문에 특정 페이지에서 branch(=jump)가
발생할 경우 프로세스에 따라 목적지 주소가 달라져야하는 모호한 경우가 생길 수 있었으며
이를 공유하는 페이지에 대한 정보는 PMT의 같은 엔트리에 저장하는 등의 방식으로 해결하였음 - 세그먼트의 경우 애초에 논리적인 단위로 프로그램을 분할하였기에 jump가 세그먼트 내에서 발생하므로
이러한 문제가 발생할 일이 없어 세그먼트 공유가 용이함
- 페이징 시스템의 경우 페이지가 논리적 단위가 아니기 때문에 특정 페이지에서 branch(=jump)가
- 세그먼트 보호(Segment Protection)
- 페이징 시스템의 경우 하나의 페이지가 하나의 논리적 흐름을 가지는 것이 아니기에 페이지 보호가 복잡했음
- 세그멘테이션 시스템의 경우 하나의 세그먼트는 하나의 논리적 단위이기에 세그먼트 단위로 protection bits를
적용하는 것만으로 간단하게 세그먼트 보호가 가능해짐
- 페이징 시스템의 경우 하나의 페이지가 하나의 논리적 흐름을 가지는 것이 아니기에 페이지 보호가 복잡했음
'CS > 운영체제' 카테고리의 다른 글
#16 가상 메모리 관리(Virtual Memory Management) (0) | 2022.01.19 |
---|---|
#15 가상 메모리(Virtual Memory) - 하이브리드(Hybrid) (0) | 2022.01.18 |
#13 가상 메모리(Virtual Memory) - 페이징(Paging) (0) | 2022.01.14 |
#12 가상 메모리(Virtual Memory) - 개념 (0) | 2022.01.11 |
#11 연속 메모리 할당(Continuous Memory Allocation) (0) | 2022.01.10 |