OS

프로세스와 스레드 외 여러가지

자몽포도 2022. 5. 11. 12:55

프로그램 - 어떤 작업을 하기 위해 OS 위에서 실행할 수 있는 파일 EX) 브라우저, 카카오톡

프로세스 - 실행 중인 프로그램

프로세서 - CPU를 의미, 프로세스가 동작할 수 있도록 도와줌

 

 

작업 관리자를 열어보면 쉽게 위 3가지를 구분할 수 있다.

 

작업 관리자를 열면 현재 실행중인 프로그램(프로세스)들을 보여준다. 그리고 옆 컬럼을 보면 CPU 사용률이 나온다.

마치 CPU가 프로세스들을 관리하는 것 같은 모습이다. 이것을 CPU 스케줄링이라 부른다.

 

참고로 프로그램을 실행중이려면 메모리에 올려야 한다. 

 

 


프로세스

앞서 프로세스는 실행중인 프로그램 했습니다. 프로그램이 실행되려면 즉, 프로세스가 되려면 Resource, Thread를 필요로 합니다.

 

Resource - CPU, 메모리와 같은 자원을 의미한다.

참고로 프로세스는 CPU, Memory와 같은 Resource를 O/S로 부터 받는다. 그래고 한 프로세스 내에는 다수의 스레드가 존재할 수 있다. 이것을 멀티스레드라고 부른다. 대부분의 프로그램은 멀티스레드를 지원한다.

 

Thread - 프로세스 내에서 실행되는 흐름의 단위를 말한다. 프로세스 = 공장/ 스레드 = 일꾼에 비유하곤 합니다.

 

프로세스와 스레드는 모두 실행되는 작업 단위라는 점에서 의미가 비슷하다. 둘의 차이는 스레드는 프로세스 내부의 구성 요소입니다. 스레드에 대한 설명은 아래서 추가로 다루겠습니다.

 

프로세스의 문맥

시분할 운영체제 환경에서 CPU는 매 순간 하나의 작업만을 처리한다. 그래서 프로세스를 오며가며 task를 수행한다. 이를 원활하게 수행하기 위해서는 프로세스의 문맥에 대해 알고 있어야 한다.

 

프로세스가 현재 어떤 상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보를 의미한다. 1 .프로세스의 주소 공간(코드, 데이터, 스택 상태), 2. 레지스터에 어떤 값을 가지고 있었는지 3. 프로세스 관련 커널 자료 구조(PCB, 커널스택)를 포함한다.

 

프로세스 제어블록(Process Control Block:PCB)

O/S가 시스템 내 프로세스를 관리하기 위해 프로세스마다 유지하는 정보들을 담는 커널 내의 자료구조를 뜻한다.

 

 

PCB의 주요 구성요소

1. OS가 관리상 사용하는 정보
- 프로세스의 상태(process state) : Ready, Running, Blocked . . .

- CPU 스케줄링 정보, 우선순위 :  우선순위가 제일 높은 프로세스에 CPU를 할당하기 위한 요소
 
2. CPU 수행 관련 하드웨어 값
- 프로그램 카운터(Program Counter) : 프로세스의 주소를 가지고 있다. 해당 주소는 다음에 실행될 명령어  

3. 메모리 관련
- 코드, 데이터, 스택의 위치 정보 : 프로그램이 실행되면 코드, 데이터, 스택으로 구성된 주소 공간이 만들어진다. 

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

 

 

Program Counter

PCB에서 언급 했지만 중요하니 한 번 더 언급 Program Counter는 CPU 내부 레지스터, 프로세스의 주소를 가지고 있다. 이 주소는 다음에 실행될 명령어의 주소입니다. 더 자세히 설명하면 프로그램이 실행을 위해 메모리에 적재되면 프로세스를 위한 독자적인 공간을 생성합니다. 이는 Code, Data, Stack 등으로 구성된 메모리 주소 공간입니다. 메모리 구성 요소 중 Code 영역에는 명령어가 들어갑니다.앞서 pc는 다음에 실행될 명령어의 주소라고 했습니다. 더 자세하 말하면 pc는 다음에 실행될 프로세스 내 메모리의 Code 영역의 명령어를 가르킵니다.

 

 

문맥 교환(Context Switch)

시분할 운영체제 환경에서는 CPU가 매 순간 한 task를 처리한다고 했다. 이것을 무척이나 빠르게 해서 우리는 동시성을 느낄 수 있다. 여튼 매 순간 한 Task만을 처리하기 때문에 여러프로세스가 있으면 CPU는 이리저리 왔다갔다해야함 CPU가 이리저리 왔다갔다하는 것을 문맥교환이라고 함, 더 정확히는 프로세스에서 다른 프로세스로 CPU의 제어권이 넘어가는 과정

 

그래서 System Call, Interrupt가 발생했다고 무조건 문맥 교환이 일어나는 것이라고 볼수는 없다. 예를 들면 프로세스가 System Call을 해서 I/O작업을 하는 동안 CPU제어권을 뺐기고 I/O작업이 끝나면 다시 동일한 프로세스로 돌아오는데 이것을 문맥 교환이라고 말하지는 않는다.

 

돌아와서 문맥교환의 효율성에 대해서 잠시 정리하겠다. 앞서 말했던 문맥 교환은 프로세스간 CPU제어권의 이전이다. 시스템 입장에선 이 문맥 교환에 소요되는 시간이 오버헤드다. 멀티스레드를 이용하면 문맥교환의 오버헤드 비용을 줄일 수 있다.

 

 

스레드(Thread)

프로세스 내 CPU 수행 단위입니다. 그렇기 때문에 프로세스는 기본적으로 하나의 스레드를 가집니다.

참고로 멀티스레드는 프로세스 내 스레드가 여러개인 것을 말합니다. 

 

멀티스레드 환경에서 스레드는 프로세스 내 여러가지를 공유합니다. 대표적으로 메모리 내 Code, data 영역, 프로세스의 상태, CPU스케쥴링 정보와 같은 OS Resource공유합니다. 

프로세스는 메모리에 올라가면 Code, Data, Stack으로 구성된 주소 공간을 형성합니다. 스레드들은 독자적인 pc값을 가집니다. 이로 인해서 독자적인 stack을 가집니다. 메서드들은 stack 영역에 쌓이기 때문입니다.

 

정리하겠습니다. Thread마다 독자적으로 가지고 있는 요소

  • program counter
  • Stack space
  • register set

 

스레드는 이외 Code, Data, OS Resource등을 공유하고 이를 Task라고 부릅니다. 이것이 시사하는 바를 체감하려면 동일한 프로그램의 프로세스를 2개 생성하는 것과 프로세스 내 스레드를 2개 생성하는 것을 비교해보면 됩니다. 이를 이해했다면 스레드를 활용하면 자원을 절약할 수 있습니다.

 

한편, 멀티스레드를 구성할 때는 동시화 문제, 교착상태 문제 등을 고려해야 합니다.

 

참고자료 Thread : wikipedia

반효경, 운영체제(2014) 6. process, 이화여자대학교

프로세스 vs 스레드, 우아한형제들 테코톡 컨텐츠, youtube

자바의 정석 - 기초편 ch13 -1 스레드, youtube

운영체제와 정보기술의 원리 개정판, 반효경 지음