본문 바로가기
CS 기초/Operating System

[OS] 프로세스(Process)에 관하여 알아보자

by woohyeon 2020. 5. 31.
반응형

개인적으로 학습하는 내용이라 틀린 내용이 있을 수 있습니다.

참고 도서: 개념 이해를 위한 운영체제

[프로세스란?]
프로세스란 보통 실행 중인 프로그램으로 잘 알려져 있다. 하지만 경우에 따라 이 설명은 한계가 있을 수 있다. 운영체제에서 프로세스는 다음과 같이 다양한 개념으로 정의될 수 있다.

  • 실행 중인 프로그램
  • CPU를 할당하는 대상
  • 시스템 내부에서의 작업 단위
  • PCB에 존재하는 개체

위의 정의들을 이해하기 위해 프로세스의 다양한 속성들을 알아보자.


[프로세스 상태]
프로세스는 우선 실행 중인 프로그램일 수도 있지만, 그렇지 않을 수도 있다. 프로세스는 기본적으로 프로그램이 메모리에 적재되어 있는 상태는 맞다. 이때부터, 프로그램은 프로세스로 분류되어 다음과 같이 세 가지 상태를 가질 수 있게 된다.

출처: 개념 이해를 위한 운영체제 (21세기사)

최초의 프로세스는 운영체제가 시스템 부팅 시 생성해주며, 새로운 프로세스는 응용 프로그램을 실행시키거나 프로그램 안에서 시스템 호출을 통해 생성될 수 있다. 생성된 프로세스는 기본적으로 준비 상태로 들어간다. 준비 상태의 프로세스는 언제라도 CPU로부터 선택되어 실행될 수 있는 상태를 말한다. 만약 CPU가 해당 프로세스를 선택하게 되면, 즉 해당 프로세스에 CPU가 할당이 되면 프로세스는 실행 상태로 들어가게 된다.

프로세스가 실행되는 도중 입출력처럼 CPU가 계속해서 일을 할 수 없는 사건을 요청받으면 프로세스는 대기 상태로 들어가게 된다. 그러다 입출력 처리가 완료되면, 다시 실행 상태로 가는 것이 아닌 준비 상태로 들어가 다시 CPU가 할당될 때 까지 기다린다.

하나의 프로세스가 CPU를 독점하는 것을 방지하기 위해 각 프로세스마다 CPU를 점유할 수 있는 시간이 정해지는데, 이것을 CPU 할당 시간(time quantum)이라 한다. 만약 실행 상태의 프로세스가 할당된 시간내에 작업을 완료하지 못하면 준비 상태로 돌아가 다음 차례를 기다리게 된다. 물론 시간 내에 작업을 완수하면 해당 프로세스는 종료된다. 이처럼 프로세스는 3가지의 상태를 가질 수 있고, 항상 실행 중인 상태는 아니다. 따라서 처음에 정의했던 "실행 중인 프로그램"이란 말은 이러한 관점에선 한계가 있을 수 있다.


[프로세스 영역]

프로그램을 실행시키기 위해선 하드 디스크와 같은 보조 기억 장치에 있던 파일이 반드시 프로세스의 형태로 메모리에 적재되어 있어야 한다. 메모리에 적재되어 있는 프로세스의 구조는 파일로서 저장되어 있던 구조와 다르다. 파일은 코드 영역과 데이터 영역으로 구성되지만, 프로세스는 코드, 데이터, 스택 영역으로 구성된다.

 

[프로세스 제어 블록(Process Control Block: PCB)]
여러개의 프로세스가 번갈아가며 실행되는 다중 프로그래밍 환경에선, 작업을 완료하지 못한 프로세스의 정보를 임시로 저장해두고, 복구시키는 작업이 필요하다. 이를 위해 프로세스의 정보를 어딘가에 저장하고 관리할 수 있는 자료구조가 필요한데, 운영체제가 사용하는 이러한 자료구조를 프로세스 제어 블록(PCB)이라 한다. 프로세스가 생성되면 운영체제는 PCB에 프로세스의 정보를 등록하고, 프로세스가 종료되면 해당 정보를 삭제한다. PCB엔 많은 종류의 정보들이 저장되는데, 대표적으로 다음과 같은 것들이 존재한다.

  • 프로세스 식별자(PID)
  • 프로세스의 상태
  • 스케줄링 우선순위
  • 프로세스가 적재된 메모리 주소
  • CPU 레지스터 값
  • CPU 사용 시간

 

[프로세스의 문맥 교환(Context Switch)]
실행 상태의 프로세스가 CPU 할당 시간을 초과하여 준비 상태로 돌아가고, 새로운 프로세스가 실행 상태로 진입하기 위해선 각 프로세스의 정보를 저장하고, 복구하는 작업이 필요하다. 이처럼 현재 실행 중인 프로세스의 정보를 PCB에 저장하고, 새로운 프로세스의 정보를 PCB로부터 복구하는 작업을 문맥 교환(Context switch)이라 한다. 문맥 교환이 완료되면 CPU는 커널모드에서 유저모드로 전환되고, PCB로부터 새로운 프로세스의 CPU 레지스터 값을 복구하여 실행한다. 문맥 교환은 프로세스의 정보량, 메모리의 속도, 레지스터의 크기 등 하드웨어 환경에 따라 그 속도가 달라진다. 문맥 교환이 일어나는 동안 CPU가 일을 하지 못하기 때문에, 문맥 교환이 자주 발생하면 성능 저하가 생긴다. 다음은 두 프로세스 간의 문맥 교환 과정을 나타낸 그림이다.

https://www.crocus.co.kr/1364

 P0가 실행 상태에 있다가 인터럽트 또는 시스템 호출로 인해 CPU가 실행을 중지하고, 운영체제가 P0의 정보를 PCB에 저장한다. 그 다음으로 스케줄러에 의해 P1이 선택되면 P1을 실행하기 위해 PCB로부터 정보를 복구한다. 이후 CPU는 P1을 실행하다가 인터럽트 또는 시스템 호출이 발생하면 동일한 과정을 수행한다. 

 




댓글