프로세스 이미지를 논리적 블록(=Segment)으로 분할한다.
일률적 같은 크기로 분할하는 것이 아니라, 서로 다른 크기의 블록으로 분할된다.
Paging system은 주기억장치(memory)를 페이지 크기와 동일한 크기의 페이지 프레임으로 분할하고, 페이지 프레임 넘버를 붙인다.
Segment는 크기가 각각 다르기 때문에 분할된 Segment가 메모리에 로딩되기 위해서는 메모리를 동일크기로 분할할 수 없다.
Paging 시스템의 메모리관리는 미리 분할해둘 수 있으므로 FPM기법을 닮았고, Segment 시스템은 VPM 기법과 유사하게 해야 한다.
논리적으로 분할했기 때문에 Segment sharing과 protection이 편리하다.
Address Mapping을 할 때와 메모리 관리를 할 때 오버헤드가 크다.
프로세스 Pa가 5개로 분할되어 있다.
이중 1번, 3번 segment는 Memory에 들어가 있다.
중간중간 어떤 영역은 empty이기도 하다. 즉, vpm 기법!
Virtual Address : v = (s,d)
s = segment number
d = displacement in a segment
direct mapping, associative mapping, hybrid mapping, register 등 모두 Paging System과 동일하다!
Direct Mapping을 대표적으로 살펴 보자.
(read write 가능, read execute 가능, read write append 가능 등)
CPU에 프로세스 a가 실행중이라고 생각해 보자.
1) residence bit이 1인지 검사한다.
➡ bit이 0이면 context switching, sleep 후 다시 실행2) displacement가 segment length보다 작은지 검사한다.
➡ 더 크면 segment overflow exception : 오류 발생. 그 프로세스는 이 exception으로 강제 termination 된다.3) protection bit이 적합한지 검사한다.
예를 들어 virtual address를 generation하면서 pa가 'write'을 하려고 하는데, protection bit에 read only로 되어 있다면 메모리를 접근하지 못하게 관리할 수 있다. ➡ exception 발생.
➡ 가능하지 않은 접근이면 segment protection exception. 잘못된 접근이므로, 그 프로세스는 이 exception으로 강제 termination 된다.✅ 정리: 1번은 virtual system으로 인한 exception으로서, segment fault로 정상적인 것이기에 괜찮지만 2번 3번은 프로세스가 죽게 된다.
Placement 기법도 First Fit, Best Fit, Worst Fit, Next Fit이 있으며 유사하다.