프로세스 관리를 알기 전 프로세스란 무엇일까? 위키백과의 정의를 보자.
프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 종종 스케줄링의 대상이 되는 작업이라는 용어와 거의 같은 의미로 쓰인다. 여러 개의 프로세서를 사용하는 것을 멀티프로세싱이라고 하며 같은 시간에 여러 개의 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 한다.
즉 프로세스는 메인 메모리에 할당되어 실행중인 상태인 프로그램을 말한다.
Ctrl+alt+del 를 눌러서 작업관리자를 띄어보면 현재 내 컴퓨터에서 처리중인 프로세스들을 볼 수 있다.
프로세스들이 차지하는 CPU, 메모리, 디스크, 네트워크 비율까지 보여준다.
컴퓨터는 한번에 하나의 프로세스를 처리할 수 있다. 이 떄 우리가 컴퓨터가 하나의 프로그램을 전부 처리할 때까지 기다려야 한다면 얼마나 답답하겠는가? 또한 여러가지 동시에 실행이 필요한 프로그램을 사용하지 못한다면.... 아주 끔찍하다.
그래서 프로세스 관리를 통해 마치 여러가지 프로그램을 동시에 실행하는 것 처럼 만들 필요가 있다.
이것이 가능한 이유는 OS가 아주 짧은 시간내에 CPU가 실행할 프로세스를 전환할 수 있기 떄문이다.
운영체제는 프로세스의 상태를 실행(running), 준비(ready), 블록(block) 상태로 분류하고 프로세스들을 상태전이(state transition)를 통해 체계적으로 관리한다.
- 사용자가 프로그램을 실행하면 프로세스가 생성되고 준비리스트에 추가된다.
- 프로세스는 프로세서(CPU)가 사용가능한 상태가 되면 CPU를 할당받는다. (이를 준비상태에서 실행상태로 상태전이(state transition)된다고 한다)
- 그 다음 프로세스는 실행상태에서 CPU를 이용해 연산한 후 CPU를 자발적으로 반납하고 작업이 끝나지 않았으면 다시 준비상태에 들어간다. 운영체제는 다시 준비 리스트의 첫번째에 있는 프로세스를 실행상태로 바꾸고 이 과정을 반복한다.
이 1,2과정을 디스패칭(dispatching)이라고 하고 디스패처(dispatcher)가 이 일을 수행한다.
이떄 디스패처는 우선순위에 따라 문맥 전환(context switch)을 일으킨다. 그림에서는 A 프로세스가 실행되다가 우선도가 높은 B 프로세스로 문맥 전환을 하여 B프로세스 실행을 마치고 A 프로세스를 실행하고있다.
이 과정에서 프로세스가 CPU를 반납하지 않고 독점하는 경우를 방지하기 위해서 하드웨어적으로 인터럽팅 클록을 주기적으로 발생시켜 프로세스가 특정 시간 간격동안만 실행할 수 있도록 한다. 인터럽팅 클록이 발생되면 강제로 실행중인 프로세스의 CPU제어권을 운영체제에게 빼앗기고 프로세스는 준비상태로 상태 전이 된다.
참조:
https://bowbowbow.tistory.com/16
https://vmilsh.tistory.com/375