본문으로 바로가기


오늘의 포스팅 주제는 프로세스 입니다.

프로세스는 무엇일까요? 

먼저 프로세스를 설명하기에 앞서 프로그램과 프로세스는 같은 말 일까요? 

결론부터 말하자면 엄연히 다른 말입니다.


바탕화면에 lol.exe 파일이 있다고 가정해보겠습니다.

lol.exe 파일은 하드디스크에 저장되어 있고 이것 자체는 현재 프로그램이라고 불립니다.

그럼 프로세스는 무엇일까요?

lol.exe 파일을 더블클릭이나 enter키를 눌러 실행하게 되면 이것은 메모리에 올라가게 되고 CPU가 연산을 하면서 프로그램이 실행됩니다.

이것을 프로세스라고 합니다.

또 다른 예를들어 보자면 우리는 웹 브라우저를 여러개 실행 시켜서 사용할것입니다.

익스플로어 실행파일은 iexplorer.exe 프로그램이고 2개 실행 시키면 2개의 프로세스, 3개 실행 시키면 3개의 프로세스를 생성한것이 됩니다.

 

결론)

프로세스란? 메인메모리로 이동하여 실행중인 프로그램입니다.


그런데 실행중인 프로그램이다? 실행중인 프로그램이란 범위가 궁금하지 않으신가요?


필자가 공부를 해본결과 프로세스는 프로그램이 실행되기 위해 관련되는 부분들의 집합인것 같다는 생각이 드네요.

프로그램이 실행되긴 위해서 메인메모리로 올라가야하고 연산을 하기 위해서는 레지스터에 저장되어야하고 등등




그럼 프로세스의 상태변화에 대해 알아보겠습니다.

프로세스의 상태의 변화는 우리가 사용하는 멀티프로세스가 돌아가는 원리를 알기 반드시 알아야하는 부분입니다.




1번의 경우(Start -> Ready)

: S는 프로세스가 생성됨을 의미합니다. 프로그램을 실행시키면 바로 실행되는것이 아니라 Ready 상태로 빠지게 됩니다.

Ready 상태는 프로세스가 Cpu에 의해 실행되기를 희망하는 상태입니다. 그 이유는 이미 실행되고 있는 (Running) 프로세스를 강제로 멈추게 할수는 없기 때문입니다.


2 번의 경우(Ready -> Running)

: Ready 상태에 있는 프로세스들은 스케줄러에 의해서 관리되는 녀석들입니다.

 스케줄러는 프로세스의 우선순위등을 고려해서 적절히 실행될수 있도록 도와주는 녀석입니다. 

 즉, 스케줄러에 선택된 녀석만이 Running 상태로 갈수 있습니다.


3 번의 경우(Running-> Ready)

: 우리가 작업을 할때도 우선순위가 있듯이 프로세스에도 우선순위가 있습니다.

 만약 A라는 프로세스가 실행중인데 우선순위가 더 높은 B 프로세스가 생성되어서 Ready 상태에 있다면 스케줄러는 이것을 보고 

 A는 Ready 상태로 보내고 B는 Running 상태로 보내게 됩니다.


4 번의 경우(Running -> Blocked)

: 실행중인 프로세스가 Blocked로 빠지게 되면 실행을 멈추게 됩니다.

  보통 입출력에 관련된 일을 할때 Blocked 상태로 빠지게 됩니다. 입출력을 할때는 시간이 많이 걸리고 CPU에 의해 프로세스가 실행될수 없기 때문에

  효율적인 관리를 하기 위해서 입출력이 진행중인 프로세스는 blocked 상태로 보내고 실행가능한 프로세스를 Running 상태로 보내는 것입니다.


5 번의 경우(Blocked -> Ready)

: Blocked 상태는 스케줄러에 의해 선택될수 없는데 이것이 Ready 상태와 가장 큰 차이점이다.

 Ready,Blocked 둘다 프로세스가 실행되지 않는 상태이지만

 Ready의 경우 스케줄러에 의해 선택되어 당장이라고 실행가능한 상태이지만

 Blocked의 경우 스케줄러에 의해 선택 받을수 없습니다.

 그렇기 때문에 파일입출력이 완료된 프로세스는 Ready 상태로 빠져야 합니다.