본문 바로가기
IT 및 프로그래밍

프로세스와 스레드 중 프로세스의 상태 변화에 대해

by 데이터 석사 2024. 10. 21.

운영체제는 프로세스의 수행을 통제한다. 그리고 프로세스는 수행하면서 상태가 변하므로 운영체제는 프로세스 제어에 필요한 상태를 점하고 프로세스를 조정한다. 여기서는 프로세스의 상태 변화를 알아본 후 프로세스의 상태 정보를 저장하는 프로세스 제어 블록을 살펴볼 것이다.

프로세스와 스레드의 프로세스의 상태 변화에 대해

프로세스의 상태 변화와 상태 정보

프로세스의 상태는 대략 실행 상태와 비실행 상태로 구별할 수 있다. 실행 중인 프로세스는 새로운 자원을 할당받으려고 프로세서를 기다리는 비실행 상태로 교체되기도 한다. 운영체제가 프로세스를 만들면 비실행 상태로 초기화해서 수행을 기다린다. 실행 중인 프로세스를 종료하거나 인터럽트가 일어나면 비실행 프로세스 중에서 결정한 프로세스를 실행 상태로 바꾼다. 이때 인터럽트 된 프로세스는 비실행 상태가 된다.

프로세스의 상태 변화

운영체제의 종류에 따라 프로세스의 상태를 다르게 표현하기도 하지만, 어느 한순간 대다수의 프로세스가 준비나 기다리는 상태로 전환되면서 하나만 실행 상태가 된다는 점이 중요하다. 프로세스의 실행과 비실행 상태는 준비, 실행, 대기로 더 세세하게 분류할 수 있다.

 

프로세스는 시스템에서 준비, 실행, 대기, 상태로 전환하면서 실행하고 종료하는데, 시스템을 떠날 때까지 이 과정을 계속한다. 작업 스케줄러는 스풀러가 디스크에 저장한 작업 중 수행할 일을 선정하고 준비 리스트에 삽입하여 다중 프로그래밍의 정도를 결정한다. 그리고 프로세스 스케줄러는 선정한 작업의 상태를 변화시키며 프로세스의 생성에서 끝날 때까지 과정을 실행한다. 프로세스의 상태 변화는 운영체제가 작업 스케줄러와 프로세스 스케줄러 같은 프로세서 스케줄러를 사용하여 관리한다.

 

대기  상태인 프로세스는 대기 원인을 삭제하면 준비 상태로 교체되고, 디스패치가 준비 상태인 프로세스에 프로세스를 나누어주면 다시 실행 상태로 바뀐다. 실행 상태의 프로세스를 자발적으로 바꾸기 전에 할당된 시간이 지나면 이 프로세스는 준비 상태가 된다. 그리고 프로세스를 수행하다 입출력 명령이 발동하면 대기 상태가 된다.

 

프로세스의 상태 변화가 준비부터 실행이면 다중 프로그래밍 운영체제에서는 실행 상태인 프로세스가 나눠준 시간만큼만 프로세서를 이용하도록 하여 특정 프로세스가 프로세서를 계속 차지하는 것을 방지한다. 준비 큐 맨 앞에 있던 프로세스가 프로세서를 차지하는 것을 디스패치라고 한다.

 

실행부터 준비면 프로세스가 일정 시간이 지나가도, 곧 타임아웃 되어도 프로세서를 전환하지 않으면 클록이 인터럽트를 발생시켜 운영체제에 프로세서 통제권을 제공하는 것이다. 그리하면 실행 상태의 프로세스는 준비 상태가 되고, 준비 리스트의 가장 먼저 프로세스가 실행 상태가 된다. 운영체제는 실행 상태의 프로세스가 프로세서를 계속 차지하지 않도록 인터럽트 클록을 두어 특정 프로세스가 할당된 시간 동안만 프로세스를 차지하게 한다.

 

실행부터 대기 상태면 나누어준 시간 이전에 실행 상태의 프로세스에 입출력 계산 등이 필요하거나 새로운 자원 요구 등의 문제로 프로세스를 스스로 양도하면 대기 상태가 된다.

 

대기에서 준비 상태로 바뀌면 프로세스는 입출력 작업이 끝나고 깨움으로 대기에서 준비 상태가 된다.

프로세스 제어 블록

프로세스가 만들어지면 메모리에 프로세스 통제 블록을 만들고, 프로세스가 실행 종료하면 해당 프로세스 통제 블록도 제거한다. 운영체제의 모든 모듈이 이 정보를 읽고 고쳐 쓸 수 있다. 운영체제가 프로세스를 통제할 때 필요한 프로세스 상태 정보는 프로세서 제어 블록에 저장된다. 프로세스 제어 블록은 특정 프로세스 정보를 저장하는 데이터 블록이나 레코드로 작업 통제 블록이라고도 한다.

 

프로세스 제어 블록에는 프로세스 식별자, 프로세스 상태, 프로그램 카운터, 레지스터 저장 영역, 프로세서 스케줄링 정보, 계정 정보, 입출력 상태 정보 및 메모리 관리 정보 등이 들어있다.

 

프로세스 식별자는 각 프로세스의 고유 식별자(숫자 색인 항목 등), 프로세스 상태는 생성, 준비, 실행, 대기, 중단 등 상태를 표시, 프로그램 카운터는 프로세스를 수행하는 다음 명령의 주소 표현, 레지스터 저장 영역 누산기, 인덱스 레지스터, 스택 포인터, 조건 코드, 범용 레지스터 등 인터럽트가 일어나면 프로그램 카운터와 함께 저장하여 재실행할 때 원래대로 복귀가 가능하다. 컴퓨터 구조에 따라 수나 형태가 다르다

 

프로세서 스케줄링 정보는 프로세스의 우선순위, 스케줄링 큐의 포인터, 기타 스케줄의 매개변수다. 계정 정보는 프로세서 사용 시간, 실제 사용 시간, 사용 한계 시간, 계정 번호, 일이나 프로세스 번호 등 입출력 상태 정보 및 메모리 관리 정보는 특별한 입출력 요청 프로세스에 나누어준 입출력장치, 열린 파일 리스트와 운영체제가 이용하는 메모리 시스템에 따른 제한적인 레지스터, 페이지 테이블이나 세그먼트 테이블 비용 등이 있다.

 

프로세스의 문맥 교환

프로세스 문맥 교환이 발생하면 프로세서의 레지스터에 있던 내용을 나중에 이용할 수 있도록 지니게 한다. 인터럽트나 시스템 호출 등으로 수행 중인 프로세스의 통제를 다른 프로세스에 넘겨 실행 상태가 되도록 하는 것을 프로세스 문맥 교환이라고 한다.

 

결론 및 요약

•운영체제는 프로세스의 수행을 통제하고 프로세스의 상태 변화를 관리한다. 

• 프로세스의 상태는 실행 상태와 비실행 상태로 구분되며, 실행 중인 프로세스는 비실행 상태로 교체되기도 한다. 

• 프로세스의 상태 변화는 준비, 실행, 대기로 더 세세하게 분류할 수 있다. 

• 프로세스 제어 블록에는 프로세스 식별자, 프로세스 상태, 프로그램 카운터, 레지스터 저장 영역, 프로세서 스케줄링 정보, 계정 정보, 입출력 상태 정보 및 메모리 관리 정보 등이 들어있다. 

• 프로세스 문맥 교환은 인터럽트나 시스템 호출 등으로 수행 중인 프로세스의 통제를 다른 프로세스에 넘겨 실행 상태가 되도록 하는 것을 말한다.