티스토리 뷰
프로세스의 상태
프로세스의 상태는 3가지로 나뉜다
- 실행(running)
- 준비(ready)
- 봉쇄(blocked, wait, sleep)
일반적으로 CPU에서 실행 상태에 있는 프로세스는 매시점 하나밖에없다. 준비 상태는 CPU만 할당받으면 당장 명령을 수행할 수 있지만, CPU가 하나밖에 없어 현재 CPU를 할당받지 못한 프로세스 상태를 말한다.
봉쇄 상태는 CPU를 할당받더라도 명령을 수행할 수 없는 프로세스 상태를 말한다. 예를 들어, 입출력 작업이 진행중인 프로세스같은 경우가 해당된다.
준비상태에 있는 프로세스가 실행상태로 변경되는 경우는 실행상태에 있던 프로세스가 입출력 요청 등으로 봉쇄상태가 되거나 또는 실행 상태에 있던 프로세스의 CPU할당 시간이 만료되어 타이머 인터럽트가 발생한 경우등이 있다.
운영체제는 준비상태에 있는 프로세스들을 줄 세우기 위해 준비 큐를 두고 준비 큐의 제일 앞에 줄 서 있는 프로세스에게 제일 먼저 CPU를 할당한다. 준비 큐에 프로세스를 줄 세우는 방법은 CPU 스케줄링 방법에 따라 달라진다.
프로세스를 줄세우는 준비 큐 외에도 운영체제는 특정 자원을 기다리는 프로세스들을 줄 세우기 위해 자원별로 큐를 두고있다.
디스크 입출력 서비스를 요청한 프로세스들은 디스크 입출력 큐에 줄 서게 된다.
디스크 컨트롤러는 디스크 입출력 큐에 줄 서 있는 순서대로 프로세스들의 입출력 작업을 수행하게 된다.
디스크 컨트롤러가 CPU에게 인터럽트를 발생시킨 후 인터럽트 처리 루틴에 의해 디스크 입출력이 완료된 프로세스는 입출력 큐에서 빠져나와 CPU를 기다리는 준비 큐에 줄 서게 된다.
디스크 입출력 큐 외에도 프로그램이 키보드로부터 어떤 입력을 받아야 하는 경우 키보드 입출력 큐에 줄서게 되며, 화면이나 프린터에 처리 결과를 출력해야 할 경우 각각 해당 입출력 큐에 줄선다.
이와 같은 큐는 소프트웨어 자원을 기다리는 경우에도 필요하다. 예를들어 공유 데이터에 대한 접근 권한은 소프트웨어 자원으로 분류될 수 있다. 어떠한 프로세스가 공유 데이터를 사용하고 있는 도중에 다른 프로세스가 같은 데이터를 접근하면 데이터에 대한 일관성이 깨질 수 있다. 따라서 공유 데이터는 매 시점 하나의 프로세스만이 접근할 수 있도록 해야 한다. 이 때 접근한다는 의미가 반드시 CPU가 그 데이터를 사용하고 있다는 의미가 아니라, 공유 데이터를 접근 중인 프로세스가 준비상태나 봉쇄상태로 변경된 경우에도 새롭게 CPU를 할당 받은 프로세스가 동일한 데이터를 접근할 경우 일관성이 깨질수 있으므로 접근을 허락해서는 안된다.
즉 공유 데이터라는 일종의 소프트웨어 자원을 앞서 접근중인 프로세스가 다 사용하고 반납할 때 까지는 다른 프로세스가 CPU를 할당 받더라도 접근하지 않고 기다려야 하는 것이다. 여러 프로세스가 공유 데이터를 동시에 접근하려고 할 경우 공유 데이터를 기다리는 큐에 줄 서게 하여 현재 그 데이터를 사용중인 프로세스가 데이터를 반납하기 전까지는 접근을 못하게 하고, 반납할 경우 큐에 줄 서 있는 순서대로 데이터의 접근 권한을 주는 방법을 사용한다.
프로세스의 상태 관리는 커널의 주소 영역 중 데이터 영역에 다양한 큐들을 두어 관리하게 된다.
각 프로세스들이 CPU를 가르키는지, 입출력을 기다리는지 등의 정보를 커널이 총체적으로 관리하고 있다는 뜻이다. 예를들어 타이머 인터럽트가 발생하면 커널은 자신의 데이터 영역준에 있는 준비 큐의 정보를 참조해 다음에는 어느 프로세스에게 CPU를 할당할지 결정하고 현재 실행되던 프로세스는 준비큐의 제일 뒤로 보낸다.
'OS' 카테고리의 다른 글
[운영체제] 인터럽트의 원리 (6) - 시스템 콜 (0) | 2019.04.04 |
---|---|
[운영체제] 인터럽트의 원리 (5) - 인터럽트 (0) | 2019.04.04 |
[운영체제] 인터럽트의 원리 (4) - 사용자 프로그램이 사용하는 함수 (0) | 2019.04.04 |
[운영체제] 인터럽트의 원리 (3) - 프로그램의 실행 (0) | 2019.04.04 |
[운영체제] 인터럽트의 원리 (2) - 컴퓨터 시스템의 작동 개요 (0) | 2019.04.04 |