ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2015.01.18 프로세스의 상태 변화
    Legacy/뇌자극 - WinSysProg 2015. 1. 18. 14:45
    728x90
    프로세스의 상태 변화


    1. S(Strart)에서 Ready 상태로의 전이

      여기서 S는 프로세스가 생성되었음을 의미한다. 프로세스는 생성과 동시에 Ready 상태로 들어간다. Ready 상태에 있는 프로세스는 CPU에 의해 실행되기를 희망하는 상태이다. 이때

     "프로세스가 생성되었으면, 바로 실행(Running)되어야 하는 것 아닌가?"

      라는 의문을 품을 수도 있지만, 현재 CPU에 의해서 임의의 프로세스가 실행 중에 있을 것이다. 새로운 프로세스가 생성되었다고 해서 현재 실행중인 프로세스를 무조건 멈추게 할 수는 없는 일이므로, 스케줄러에 의해 선택되기를 바라며, Ready 상태가 된다.


    2. Ready 상태에서 Running 상태로의 전이

      Ready 상태에 있는 프로세스들은 스케줄러에 의해서 관리되는 프로세스들이다. Ready 상태에 있는 프로세스 중 스케줄러에 의해 선택된 프로세스가 Running상태가 되어 실행될 것이다.


    3. Running 상태에서 Ready 상태로의 전이

      프로세스에도 우선순위라는 개념이 존재한다. 프로세스 생성 시 중요도에 따라서 우선순위(Priority)가 매겨진다. 우선순위가 프로세스 A > 프로세스 B 라고 가정하자. 현재 프로세스 B가 실행 중이다. 그런데 갑자기 우선순위가 높은 프로세스 A가 생성되었고, A는 Ready 상태가 되었다. 이러한 경우 일반적으로 스케줄러는 B의 실행을 멈추고 우선순위가 높은 A를 실행시킨다. 이때 B는 Ready 상태가 된다.


    여기서 잠깐

    우선순위가 높은 프로세스가 실행 중일 경우, 우선순위가 낮은 프로세스는 실행되지 않는다.

    현재 우선순위가 낮은 프로세스가 실행 중일지라도, 우선순위가 높은 프로세스가 실행될 경우, 우선순위가 낮은 프로세스는 Ready 상태로 들어가고, 우선순위가 높은 프로세스가 실행된다.


    4. Running 상태에서 Blocked 상태로의 전이

      실행 중인 프로세스가 실행을 멈추는 상태(Blocked)로 들어가는 것. 일반적으로 데이터 입출력에 관련된 일을 하는 경우에 발생한다. Blocked 상태에서는 스케줄러에 의해서 선택될 수 없다. 입출력에는 많은 시간이 소모되므로, 입출력이 진행되는 동안에는 프로세스가 실행되지 않도록 하여 좀 더 효율적으로 다른 프로세스의 실행이 일어날 수 있도록 한다.


    5. Blocked 상태에서 Ready 상태로의 전이

      Blocked 상태에서는 스케줄러에 의해서 선택될 수 없다. 이것이 Ready 상태와의 가장 큰 차이점이다. Ready 상태와 Blocked 상태는 둘 다 프로세스가 실행되지 않는 상태이다. 그러나 Ready 상태는 스케줄러에 의해 선택되어 지금 당장이라도 실행 가능한 상태이고, Blocked 상태는 스케줄러에 의해서 선택될 수 없는 상태이다.(추가로 프로세스를 종료시킬 경우 Blocked 상태를 거쳐 E(Exit) 상태로 갈 수 있다. 상황 6번)


    컨텍스트 스위칭(Context Switching)

      스케줄링을 하는 과정에서 실행 중인 프로세스를 바꿀 때 컨텍스트 스위칭이 필요함.

    "CPU 내에 존재하는 레지스터들은 현재 실행 중에 있는 프로세스 관련 데이터들로 채워짐"



    위처럼 A가 실행 중인 상태에서 B를 실행시키려고 한다. 이 때 A에 있는 데이터는 메모리로 내려놓고, 메모리에 있는 B의 데이터를 레지스터에 올려주는 과정이 필요하다. 이 과정을 컨텍스트 스위칭이라고 한다.

    "실행되는 프로세스의 변경과정에서 발생하는 컨텍스트 스위칭은 시스템에 많은 부담을 준다."

    이 과정은 레지스터 개수가 많은 시스템일수록, 또한 프로세스별로 관리되어야 할 데이터 종류가 많을수록 더하다. 이것이 멀티 프로세스 운영체제의 단점이다. 그래서 이러한 컨텍스트 스위칭의 부담을 최소화하기 위해 많은 노력을 기울이기도 한다.


    프로세스의 생성

    "프로그램 실행 중에 또 하나의 프로세스 생성"

    CreateProcess 함수

    Windows는 프로세스 생성을 돕기 위해서 CreateProcess 함수를 제공하고 있다. 이때 CreateProcess 함수를 호출하는 프로세스를 부모 프로세스(Parent Process)라고 하고, CreateProcess 함수 호출에 의해 생성된 프로세스를 자식 프로세스(Child Process)라고 한다.

    CreateProcess 함수에 대해선 다음을 참조 

    http://iwantadmin.tistory.com/entry/CreateProcess-%ED%95%A8%EC%88%98

Designed by Tistory.