26_메모리 스와핑(Swapping)
프로세스가 실행되기 위해서는 메모리에 있어야 하지만 필요한 경우 프로세스는 실행도중에 임시로 보조 메모리로 보내어졌다가 다시 메모리로 되돌아 올 수 있다. 라운드로빈 스케줄링을 하는 경우 다중 프로그램 환경에서 한 프로세스가 CPU 할당 시간이 끝나면 메모리 관리기(MMU)가 이 프로세스를 보조 메모리로 보내고 다른 프로세스를 메모리로 불러올 수 있다.
CPU 스케줄러는 메모리 내의 다른 프로세스에게도 시간 할당량(time quantum)을 정해 놓고 그 할당량을 모두 소비했을 때 그 프로세스도 스왑시킬 수 있다. CPU 스케줄러는 할아 시간이 만료 되어 CPU를 새로 스케줄 할 때마다 메모리 관리기가 메모리 내에 준비시켜 놓은 여러 프로세스들 중 하나를 고르기만 하면 된다.
시간 할당량은 스왑 작업을 고려하여 원활한 작업 처리가 이루어 질 수 있도록 충분히 길어야 한다. 스와핑 정책은 시간 할당 외에도 우선순위 방식으로 바꿀 수도 있다. 이러한 스와핑의 변형을 롤인(roll-in), 롤 아웃(roll_out)이라고 한다.
스와핑은 보조 메모리를 필요로 하며 보통 디스크를 사용한다. 시스템은 실행 준비가 된 모든 프로세스를 모아 준비 완료 큐(Ready queue)에 가지고 있어야 한다. CPU가 스케줄을 고를 때 디스패처(dispatcher)를 호출하고 디스패처는 준비 완료 큐(Ready queue)에 있는 다음 프로세스가 메모리에 올라와 있는지 확인하여 메모리에 없다면 디스크로부터 읽어 들인다. 그런데 메모리에 이 프로세스에 대한 공간이 없다면 공간을 만들기 위해 현재 메모리에 올라와 있는 프로세스를 내보내고(swap out) 원하는 프로세스를 불러들인다. 그리고 나서 CPU의 모든 레지스터를 실행해야 할 프로세스의 것으로 다시 적재하고 제어권을 그 프로세스에게 넘긴다.
[문맥 교환 시간]
- 사용자 프로세스 크기 10MB
- 보조 메모리의 전송률 : 초당 40MB
10MB의 프로세스를 전송하는데 걸리는 시간 10,000KB / 40,000 kb = 1/4초 = 250ms
헤드 탐색 시간이 없다고 가정하고 평균 8 밀리초의 회전 지연시간을 가정 했을 때 스왑시간은 258ms가 된다. 스왑 시간의 대부분은 디스크 전송 시간이다.
한 프로세스를 스왑 아웃하고 다른 프로세스를 스왑인 해야 하므로 총 스왑시간은 516ms 가 필요하다. 효과적인 CPU 사용을 위해서 각 프로세스의 실행 시간은 스왑 시간보다 충분히 길어야 한다. 라운드 로빈 스케줄링의 경우 최소 0.516초보다 커야 한다.
[스와핑에 따른 제약]
한 프로세스를 스왑하기를 원한다면 그 프로세스는 완전히 유휴상태인지 확인해야 한다. 그 프로세스가 입출력 장치와 어떤 신호를 주고 받는 중이라면 입출력 에러가 발생하기 때문에 스왑하면 안된다. 이 문제를 해결하기 위해 입출력이 종료되지 않은 프로세스를 스왑하지 말거나 입출력은 항상 프로세스로 직접 하지 말고 운영체제의 버퍼만 하도록 한다. 운영체제와 프로세스 사이의 전송은 단지 프로세스가 스왑되어 들어온 상태에서만 하면 된다.
[참고자료]
Operating System Concepts / 홍릉과학출판사
'SW Engineering > OS Concept' 카테고리의 다른 글
28_메모리 페이징 (Paging) (0) | 2015.07.16 |
---|---|
27_연속 메모리 할당 (Contiguous Memory Allocation) (0) | 2015.07.16 |
25_메인 메모리(Main Memory) (1) | 2015.07.16 |
24_교착 상태(Deadlock) (0) | 2015.07.16 |
23_원자적 트랜잭션 (Atomic Transaction) – 직렬화, 락킹 프로토콜, 타임스탬프 프로토콜 (0) | 2015.07.16 |