운영체제 시리즈 4. 프로세스(Process)
프로세스란 실행 중인 프로그램(program in execution)을 뜻한다.
프로세스 문맥
시분할 방식에서는 시간별로 CPU 제어권을 가진 프로세스가 바뀐다. CPU 제어권을 획득해서 수행할 때 직전에 어디까지 작업했는지 정보를 가지고 있어야 한다. 정확한 재현을 위해 필요한 정보를 프로세스 문맥이라고 한다. 프로세스 문맥은 크게 하드웨어 문맥, 프로세스의 주소공간, 커널상의 문맥으로 나뉘어 진다.
- 하드웨어 문맥 : CPU 수행상태를 나타내는 것으로 프로그램 카운터 값과 각종 레지스터에 저장하고 있는 값
- 프로세스 주소공간 : 독자적인 주소공간 (코드, 데이터, 스택)
- 커널상의 문맥 : 커널 주소공간 중 데이터 영역에 있는 PCB, 커널 주소공간 중 스택에 있는 프로세스A의 커널스택
프로세스 상태
실행(running), 준비(ready), 봉쇄(blocked, wait, sleep)으로 구분할 수 있다.
- 실행 : 프로세스가 CPU를 보유하고 기계어 명령을 실행하고 있는 상태
- 준비 : CPU를 보유하면 당장 실행할 수 있지만 CPU를 할당받지 못해 준비대기하는 상태
- 봉쇄 : CPU를 할당받더라도 당장 명령을 실행할 수 없는 상태 (예, 입출력 진행 중인 상태)
이외에 생성, 종료에 따라 일시적인 상태를 시작, 완료라고 한다. 시작(new)은 프로세스가 시작되어 자료구조는 생성되었지만 아직 메모리를 획득하지 못한 상태이다. 완료(terminated)는 프로세스는 종료되었으나 운영체제가 그 프로세스와 관련된 자료구조를 완전히 정리하지 못한 상태이다.
PCB(Process Control Block)
프로세스 마다 존재하는 커널 내 자료구조를 뜻한다.
- 운영체제가 프로세스 관리상 사용하는 정보 (프로세스 상태, 번호, 우선순위, 스케줄링 정보)
- PC(프로세스 카운터) 값
- CPU 레지스터 값
- CPU 스케줄링 정보
- 메모리 관리정보
- 자원사용 정보
- 입출력 상태 정보 (파일정보)
등 프로세스를 관리하는데 필요한 정보들이 저장된다.
문맥교환(Context Switch)
실행시킬 사용자 프로세스를 변경하기 위해 원래 수행중이던 프로세스의 문맥을 저장하고 새로운 프로세스의 문맥을 설정하는 과정을 문맥교환이라고 한다.
사용자 모드(프로세스 A)에서 입출력을 위한 시스템콜을 통해 커널모드로 들어가고 다시 사용자 모드(프로세스 A)가 되는 경우는 문맥교환이 일어나지 않는다. 이때도 일부 정보를 PCB에 저장하기는 한다. CPU 제어권이 넘어가기 때문에 레지스터의 값 등을 저장해야하기 때문이다. CPU제어권이 커널로 넘어가지만 CPU의 실행모드만 바뀌는 것이기 때문에 문맥교환이 일어났다고 하지 않는다. 사용자 프로세스가 바뀌는 경우에만 문맥교환이 일어난다. 사용자 모드(프로세스 A)에서 커널모드 사용자 모드(프로세스 B)인 경우에는 문맥교환이 일어난다. (오버헤드 : 문맥교환 > 모드변경)
Thread
Thread는 프로세스 내부의 CPU 수행단위가 여러개 있는 것을 의미한다. 이런 의미에서 lightweight process 라고 하기도 한다. 스택 주소공간의 Thread 별로 스택이 존재하고, PCB에도 Thread 별로 PC(프로세스 카운터) 값과 레지스터 값이 저장된다.
- thread가 공유하는 정보 : code, data, os 정보
- thread 별로 존재하는 정보 : CPU 사용정보, stack
장점
- 빠른 응답시간 : 하나의 thread가 봉쇄 상태여도 다른 thread가 실행이 가능하다.
- 성능향상 : 동일한 일을 수행하는 다중 스레드가 처리율이 높다. 병렬성이 높아진다.
- 경제성 : 프로세스를 만들고 일처리를 넘기는 것보다 스레드를 만들고 넘기는 것이 더 경제적이다.
정리
프로세스의 상태와 문맥교환이 일어나는 과정을 정리하였다. 프로세스의 상태는 CPU 제어권의 획득여부와 준비상태로 구분된다. CPU 제어권은 계속 변경되므로 기존 실행정보(프로세스 문맥)를 저장해서 변경에도 원활한 사용이 이루어지게 해야한다. 사용자 프로세스끼리 CPU 제어권이 변경되어 정보저장하고 새로운 프로세스를 위한 정보를 셋팅하는 과정을 문맥교환이라고 한다. 프로세스를 만드는 것보다 쓰레드를 만들어 실행하는 것이 경제적이기 때문에 한 프로세스에서 다중쓰레드로 일처리를 하기도 한다.
운영체제 시리즈는 반효경 교수님의 운영체제 강의 와 "운영체제와 정보기술의 원리"라는 책을 바탕으로 정리한 내용입니다.