= Static Partition Multiprogramming
✅ 멀티프로그래밍을 하되, Parition을 고정하는 기법이다.
✅ 하나의 프로세스에는 하나의 파티션을 할당한다. (1 Process ↔ 1 Partition)
메모리를 먼저 여러개의 고정된 파티션 공간으로 구분한다.
한 파티션은 한 프로세스에 의해서만 할당될 수 있으며, 한 프로세스는 하나의 파티션만 사용할 수 있다.✅ 파티션의 개수 = k라면, Maximum Multiprogramming Degree = k이다.
파티션 c에서 p2가 실행중인데, swap-out되었다고 가정하자. 그리고 swap-in 하려고 할 때, 이미 c에는 p3가 실행중인 상황이다.
따라서 p2가 진입할 때에는 파티션 e에 들어가야 한다.
🔔 컴파일 바인딩은 absolute translation, absolute loading이기 때문에, 특정 파티션에서 실행중인 프로세스가 다른 파티션에서 실행될 수 없다.
🔔 다만 로드타임 바인딩, 런타임 바인딩은 Relocatable Translation, loading이 가능하므로 다른 파티션에서 실행 가능하다.
커널 공간에 접근하지 못하도록 막을 뿐 아니라 다른 파티션에도 접근하지 못하도록 막아야 한다.
따라서 커널과 파티션 간의 모든 경계를 boundary address를 register에 저장한다.
그리고 각 프로세스는 자신의 파티션 내부에만 접근가능하게 한다.
런타임 바인딩을 가정하자.
시작주소는 relocation register에 저장되어 있고, 크기정보는 limit register에 저장되어 있다.
logical address는 시작주소를 0번지로 생각하고 되어있을 것이므로, limit register 값(s)과 비교해서 접근하려는 주소가 s-1보다 같거나 작은지 검사한다. 만약 작으면 통과해서 relocation register값을 더해서 physical address로 접근한다.
Context Switching을 할때 relocation register와 limit register에 값을 넣어주면 된다.
📌 Fragmentation
메모리공간이 작은 조각이 되면서, 또 낭비되는 현상
📌 Internal Fragmentation
한 파티션에는 한 프로세스만 들어가기 때문에, 각 파티션당 남는 공간이 있을 경우 그 공간은 아무도 쓰지 못하고 낭비된다.
모든 파티션에 낭비되는 공간을 'Internal Fragmentation'이라 한다.📌External Fragmentation
p1이 30mb 파티션에 있고 p2는 25mb 파티션에 있다. 22mb짜리 p3가 들어가려고 하는데 남은 파티션은 모두 20mb, 10mb이다. 이 경우 p3는 20, 10mb짜리 파티션에 모두 들어가지 못하므로 낭비가 발생한다.