본문 바로가기

3학년 1학기/운영체제

Process Swapping, Suspended Process, 7-State-suspend

 

 

프로세스의 세가지 기본 상태(준비,수행,블록)는 프로세스의 행위,행동을 모델링하는데 있어서 체계적인 방법을 제공하고, 운영체제의 설계,디자인,구현 방향에 알려준다. 어떤 운영체제는 이 세가지 기본 상태만을 사용하여 구축하기도 한다. 하지만 이로는 부족하기도 하다.

 

수행될 프로세스는 주기억장치(main-memory)에 완전히 load되어야 하고, 그럼 모든 큐에 있는 모든 프로세스들이 주기억장치에 상주해야한다.

 

프로세스의 수행속도는 운영체제의 입출력 시스템보다 훨씬 빠르기때문에 일반적으로 메모리에 있는 모든 프로세스들은 입출력 장치의 수행이 완료되기까지 기다려야 하므로 상당히 긴 시간을 idle-state에 있게된다.

 

idle state는 유휴상태를 뜻한다.

 

더 많은 프로세스들을 수용하기 위해 주기억장치를 확장할 수 있지만

1) 용량을 추가하려면 비용문제가 발생한다.

2) 프로그램의 메모리 요구량이 증가하고 있기때문에 대용량 메모리를 사용해도 프로세스 수가 증가하는 것이 아니라 프로세스 크기가 늘어날 뿐이다.

 

이에 대한 다른 해결책이 스와핑(swapping)이다.

이것은 프로세스의 일부 혹은 전체를

메인-메모리(주기억장치)에서 디스크(보조기억장치)로 옮기는 방법이다.

★ Swapping = > Main-Memory -> Disk

 

메인메모리에 프로세스들이 꽉차고 다 블록 상태이면 새로운 프로세스들을 수행하기 힘들고, 새로운 프로세스들을 수행시키려면 블록 상태인 프로세스들이 준비 상태로 돌아오길 기다려야하므로 idle-state가 유지될것이다. 그러므로 블록된 상태의 프로세스를 보류 상태(suspend)로 만들고 다른곳에 임시로 보내고 새로운 수행할수 있는 프로세스(즉, 준비된 상태의 프로세스)를 받아들여야 효율적으로 수행할 수 있다.

 

메인메모리에 있는 프로세스 중에서 준비상태에 있는 프로세스가 하나도 없다면, 운영체제는 블록된 프로세스 중 하나를 디스크로 내보내고 보류 큐(suspended-queue)에 넣는다. 이 큐에는 메인메모리로부터 잠시 내쫓겨진 또는 보류된 프로세스(suspended-queue)들의 집합이라고 볼수 있다. 운영체제는 보류 큐에 있는 다른 프로세스를 주기억장치로 들여오거나 새로운 프로세스 요청을 받이들이고, 새로이 도착한 프로세스를 가지고 수행을 계속한다.

 

디스크 입출력은 시스템에서 가장 빠른 입출력 작업이다.

그래서 스와핑은 성능을 향상시킨다.

 

주기억장치에 있는 모든 프로세스가 블록 상태라면, 운영체제는 한 프로세스를 보류상태로 만들고 디스크로 전송을 한다. 이때 메인-메모리에는 여유공간이 생긴다. 이 여유공간은 다른 프로세스를 블러들이는데 사용한다.

 

이로 인해 메인-메모리는 여유공간이 생기고,

이 여유공간을 어떤 프로세스가 제공을 받게 될까?

1) 새롭게 생성된 프로세스를 받아들인다.

2) 보류큐에 있는 보류된 프로세스를 가져온다.

 

시스템 전체의 부하를 증가시키지 않고서 프로세스에 서비스를 제공해주기위해서는

보류 큐에서 보류된 프로세스를 블로오는것이 더 좋다.

 

이 작업을 운영제에의 스와핑 아웃(Swapping-out) 연산이라고 한다.

하지만 스와핑 아웃도 어려운점은 있다.

보류되어있는 프로세스들은 보류될때 블록상태에 있던것들이다.

수행될 준비가 안되어있다면 블록된 프로세스들이 주기억장치로 가져와도

이는 분명히 효과가 없을것이이다.

보류상태인 프로세스들은 어떤 이벤트가 발생되면 수행될 준비로 바뀌기 때문에

이벤트를 기다려야만한다.

블록된 프로세스들이 올라와서

블록된 프로세스들이 수행될 준비 상태가 될때까지 idle state일 것이다.

 

그러므로 운영체제 설계에서 이와 같은 생각을 해봐야할것이다.

 

1) 프로세스가 이벤트를 기다리고 있는가? (즉, 블록 상태인가 아닌가?)

2) 프로세스가 주기억장치로부터 스왑아웃되었는가? (보류상태인가 아닌가?)