프로세스의 생명주기
프로세스를 프로그램의 인스턴스 라고 하는데 그러한 인스턴스들은 전부 생명주기를 가진다. 태어나고 끝나고 그 사이에서 상태변환을 하기도 한다. 프로세스의 상태변화는 기본적으로 ready, waiting, run 이 있다.
제일 처음에 프로세스가 생성된다(New) 그리고 준비 상태로 가고(Ready) 프로세스가 하나라면 바로 실행이 되겠지만 멀티프로그래밍으로 여러 프로세스가 메모리 안에 있기 때문에 그 중 하나에는 CPU를 할당해준다. CPU를 할당해주는 것은 스케줄러가 해준다.
A, B, C, D 네개의 프로세스가 있다고 할 때 동시에 실행 시킬 수 없으므로
위와 같이 프로세스를 시분할 방식으로 실행시킨다. 그러면 프로세스를 실행하다가 작업이 종료되면 Terminate 하고 작업이 종료되지 않았으면 Time out 이 걸리게 된다. 이때 할당된 자원을 다른 프로세스에게 넘기고 다시 실행하게 되는데 이것을 preempt 라고 한다. 운영체제가 CPU라는 자원을 뺏어온 것이다.
wainting state 로 들어가는 경우는 자의적으로 들어가는 경우, 다시말해서 수행할 작업이 없어서 대기하는 경우로 아직 실행할 수 있는 여건이 되지 못하는 것이다. sleep() 함수를 사용하는것도 이에 해당한다. 프로세스가 실행될 준비가 되면 Ready 상태로 들어간다.
종료에는 정상종료(exit, terminate)와 비정상 종료(abort)가 있다. 비정상 종료는 예외발생에 의해서 운영체제가 종료시키거나 ctrl + c 입력에 의해서 끝나는 경우 등이 있다.