본문 바로가기
학교 공부/시스템

[운영체제] 프로세스란? (+ 문맥전환이란?)

by 그적 2020. 3. 3.

프로세스란?
프로세스(process)란 실행 중인 프로그램을 의미한다. 고로 레지스터, 스택, 포인터, 실행 중인 프로그램, 데이터 등으로 구성된 집합체이다. 프로세스 내부에는 최소 하나의 스레드(thread)를 가지고 있다.

조금 이해하기 어려울 수 있지만, 하드디스크에 프로그램을 실행하면, 행을 위한 메모리 할당이 이루어지고, 할당된 메모리 공간으로 바이너리 코드가 올라가게 되는데 이것을 "프로세스"라고 부른다.


스레드란?
스레드(thread)란 프로세스 내부의 작업의 흐름, 단위를 의미하는 것으로, 프로세스에서 실행의 개념만을 분리한 개념이다. 스레드가 여러개 존재하는 것을 멀티스레드(multithread)라고 하는데, 멀티스레드에서 각 스레드끼리는 프로세스의 일정 메모리 영역을 공유한다.



                                                                              ■프로세스와 스레드 비교■

프로세스 스레드
System Call Library Call
 
call 종료 시까지 정체 자원 blocking 요청 스레드만 blocking
 
자원 할당을 위한 기본 구분 단위 CPU를 이용하는 기본 작업
 

Context Switching으로 인한 부하 발생
프로세스 자원 할당 시 부하 발생

프로세스보다 상대적으로 부하 발생이 적음


멀티 스레드에서 살짝 언급했다시피 일정 메모리 영역을 공유하는 스레드가 동일한 프로세스 내부의 스레드 간 문맥 전환(context switching) 할 때, 프로세스끼리의 문맥 전환(context switching) 할 때보다 빠르다. 상대적으로 스위치 해야 할 메모리 영역이 적기 때문이다.
  // 문맥전환에 대한 설명은 아래에서 더 자세하게 다루겠다.


지금부터 프로세스가 진행되는 과정을 알아볼 것이다. 앞서 프로세스가 실행하기 위해 메모리 할당이 이루어진다고 언급했다. 이렇게 프로세스가 CPU를 점유하는 과정을 "프로세스 상태전이"라고 부른다. 

프로세스 실행 결정 및 필요한 자원을 할당하는 과정, 프로세스 상태 전이(Process State Transition)를 위해 O/S는 작업 스케줄러(Job Schedulaer), 프로세스 스케줄러(Process Scheduler) 두 종류의 CPU 스케줄러를 사용한다. 


■프로세스 상태 변화■
 ① Admit (생성->준비)
  :  프로세스가 실행되면 모든 프로세스는 OS 커널에 존재하는 준비 큐(Ready Queue)에 들어간다.

 ② Dispatch (준비->실행) 
  : 준비 큐에 있는 프로세스들 중에서 프로세스 스케줄러를 이용하여 OS가 실행상태로 가야 할 하나의 프로세스를 선택하여 CPU를 할당한다.

 ③ Timer Run out (실행->준비) 
  : CPU를 할당받은 프로세스가 주어진 사용시간을 다 쓴 경우
  : CPU 스케줄링에 따라 우선순위가 높은 프로세스에게 CPU를 양보할 경우

 ④ Blocked (실행->슬립)
  : CPU를 할당 받은 프로세스가 입출력(I/O) 이벤트를 요구하거나 CPU 이외의 서비스를 요구할 때 발생한다.

 ⑤ Wake up (슬립->준비)
  : 입출력(I/O) 이벤트나 그 외 서비스 처리가 끝났을 때 발생한다.

 ⑥ Release (실행->종료)
  : 프로세스 종료



문맥전환(Context Switching)이란?
 : CPU가 이전 상태의 프로세스를 PCB에 보관하고, 또 다른 프로세스를 PCB에서 읽어 레지스터에 적재하는 과정.

**PCB(Process Control Block)란?
 : 운영체제가 프로세스를 제어하기 위해 프로세스의 상태 정보를 저장 장소.
   프로세스 생성 시 만들어지며, 주기억장치에 유지된다.

PCB에서 유지되는 정보


예를 들어, CPU에 우선순위가 높은 프로세스를 처리해달라고 요청이 왔을 경우, 기존에 작업 중이던 프로세스를 PCB에 보관해두었다가 급한 프로세스 처리가 끝난 후에 이전에 중단된 상태를 그대로 복원하여 중단된 이후 상태부터 작업을 진행하는 것이다. 해당 과정에서 Context Switching 개념을 이해할 수 있을 것이다.

그 외에 문맥교환은 인터럽트가 발생했을 때실행 중인 프로세스가 허가받은 시간을 모두 소모한 경우(Time Quantum)I/O 입출력을 위해 대기해야 하는 경우에 발생한다. 

 

댓글