CS/운영체제(OS)

프로세스와 프로세스 문맥, 문맥 교환(Context Switch)

hyunah 2022. 4. 19. 10:53

프로세스란?

 

프로세스란 프로그램을 실행시켜 메모리에 로드한 것으로, 다르게 말하면 프로세스는 곧 살아 움직이는 프로그램이라고 할 수 있다.

 

 

 

 

 

프로세스 문맥이란?

 

프로세스 문맥, 프로세스 컨텍스트란 프로세스를 설명하는 다양한 실행 정보들이다. 프로세스 컨텍스트에는 다음과 같은 것들이 해당된다.

 

 

1. 하드웨어 문맥

 

CPU 수행 상태를 나타내는 하드웨어 문맥은, Program counter(프로그램 코드 중 몇 번째 라인을 수행하고 있는지)와 프로그램 실행 시에 사용되는 data들을 저장하고 있는 각종 레지스터를 포함한다.

 

 

 

2. 프로세스 주소 공간

code 영역, data 영역 그리고 stack 영역으로 구성된 프로세스의 개별적인 주소 공간을 의미한다. 프로세스 주소 공간에 대한 자세한 설명은 여기를 참고하자.

 

 

 

3. 프로세스와 관련된 커널 자료 구조

*Process Control Block, PCB와 커널 스택(커널모드로 들어왔을 때의 stack data)이 이것에 해당한다.

 

 

 

*PCB(Process Control Block)

 

PCB는 운영체제가 각 프로세스를 관리하기 위해서 프로세스마다 유지하는 정보들을 담는다. 구체적인 구성 요소는 다음과 같다.

 

1. OS가 관리상 사용하는 정보 : *프로세스 상태, 프로세스 ID, 스케줄링 정책과 우선순위

 

2. 프로세스의 하드웨어 문맥 : Program counter, 각종 register들

 

3. 메모리 관련 정보 : code, data, stack의 dram 상의 위치 정보

 

4. 파일 관련 정보 : 프로세스가 오픈한 파일 정보

 

 

 

 

*프로세스 상태(Process State)

 

프로세스는 상태가 변경되며 수행되는데 이때 프로세스 상태에는 크게 6가지가 존재한다.

 

 

 

1. Running : 프로세스가 CPU를 차지하고 명령을 수행 중인 상태다.

 

2. Ready : 메모리 등의 다른 조건을 모두 만족하여 CPU에 바로 넣어 실행할 수 있는 수준으로 CPU를 기다리고 있는 상태다.

 

3. Blocked(Wait, Sleep) : CPU를 받아도 당장 명령을 수행할 수는 없는 상태로 프로세스가 직접 요청한 I/O와 같은 이벤트가 완료되지 않아 기다리는 상태가 이에 해당한다. 구체적인 예로는 디스크에서 파일을 읽어와야 하는 경우가 있다.

 

4. Suspended(Stopped) : 외부적인 이유로 인해 프로세스의 수행이 정지된 상태다. 예를 들어 사용자가 프로그램을 일시 정지시키거나 메모리에 너무 많은 프로세스가 올라와 있는 등의 이유로 시스템이 프로세스를 잠시 중단시킨 경우가 이에 해당된다. 프로세스가 통째로 디스크에 swap out된다. 

 

5. New : 프로세스가 생성 중인 상태로 Ready가 되기 전까지의 상태다.

 

6. Terminated : 프로세스 수행이 끝난 상태다.

 

 

 

 

 

 

 

문맥 교환(Context Switch)이란?

 

문맥 교환, 컨텍스트 스위칭이란 CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정으로 이 과정이 일어날 때 운영체제는 다음과 같은 일을 수행한다.

 

▷ CPU를 내어주는 프로세스의 문맥을 해당 프로세스의 PCB에 저장한다.

 

▷ CPU를 새롭게 얻는 프로세스의 문맥을 해당 프로세스의 PCB에서 읽어온다.

 

 

 

System call이나 Interrupt가 발생하였다고 해서 반드시 context switch가 일어나는 것은 아닌데, 커널모드에 진입했다가 다시 유저모드로 돌아올 때 같은 프로세스가 CPU를 가져간다면 문맥 교환이 일어나지 않은 것이다. 물론 CPU 수행 정보와 같은 프로세스 문맥의 일부를 해당 프로세스의 PCB에 저장하게 되는 것은 동일하나 문맥 교환이 일어나는 경우보다는 부담이 훨씬 적다. 

 

timer interrupt가 발생하거나 I/O를 요청하는 system call이 들어온 경우에는 문맥 교환이 일어나서, 사용자 프로세스 A에서 커널 모드로 변경되었다가 다시 유저모드로 복귀할 때는 다른 프로세스 B가 CPU를 가져간다.