본문 바로가기
운영체제

프로세스(PROCESS) , 스레드(THREAD) #1

by 성장하는 Sap린이 2020. 1. 9.

프로세스(Process)

 

  • 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
  • 종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다.
  • 운영체제로부터 시스템 자원을 할당받는 작업의 단위

 

프로세스와 프로그램의 차이

1) 프로그램(Program)

프로그램이란 어떤 작업을 위해 실행할 수 있는 파일을 뜻한다.

 

2) 프로세스(Process)

 

프로세스란 메모리에 올라와 CPU를 할당받고 프로그램이 실행되고 있는 상태를 말한다.

즉, 프로그램은 정적인 개념으로 실행파일들을 의미하고 프로세스는 동적인 개념으로 실행된 프로그램을 의미한다.

 


 

프로세스의 구조

 

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html (그림참조)

 

  • 프로세스는 각각 독립된 메모리 영역 (Code, Data, Stack, Heap)을 할당받는다.
  • 기본적으로 하나의 프로세스안에는 메인 스레드가 생성된다.
  • 각 프로세스는 별도의 주소 공간에서 실행되며 한 프로세스는 다른 프로세스의 변수나 자료 구조에 접근 못한다.
  • 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간 통신 (IPC)을 사용한다.

1. Code 영역

코드 영역으로 기계어로 저장되는 메모리 영역이다.

 

2. Data 영역

데이터 영역에는 전역 변수와 정적 지역 변수(static)가 포함되어 있다.

 

3. Stack 영역

지역 변수, 함수, return address를 포함하고 있다.

 

4. Heap 영역

프로그램이 실행되는 동안 동적으로 사용할 데이터들이 저장된다.

 


 

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

 

- 프로세스 제어블록(PCB)는 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는, 운영체제 커널의 자료구조이다.

작업 제어블록(Task Control Block) 또는 작업 구조라고도 부른다.  PCB는 운영 체제가 프로세스를 표현한 것이다.

 

- 운영체제가 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보를 가지고 있는 데이터베이스를 PCB라고 한다.

 

- 운영체제에서 프로세스는 PCB로 나타내어지며 PCB는 프로세스에 대한 중요한 정보를 가지고 있는 자료이다.

 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거된다.

 

1. POINTER

부모 프로세스의 주소를 기억하는 부모 프로세스에 대한 포인터, 자식 프로세스의 주소를 기억하는 자식 프로세스에 대한 포인터, 프로세스가 위치한 메모리 주소에 대한 포인터, 할당된 자원에 대한 포인터 정보 등.

 

2. PROCESS STATE

프로세스의 현재 상태가 준비단계, 대기단계, 실행단계인지에ㅐ 대한 상태 정보를 가지고 있다.

 

3. PROCESS NUMBER

프로세스를 구별할 수 있는 고유 번호

 

4. PROGRAM COUNTER

이 프로스가 다음에 실행할 명령어의 주소를 가리킨다.

 

5. REGISTER

레지스터에 관련된 정보, 프로그램 카운터에 대한 정보

 

6. SCHEDULING

스케줄링 정보 및 프로세스가 실행될 우선순위에 대한 정보

 

7. MEMORY

페이지 테이블, 세그먼트 테이블에 관한 정보

 

8. ACCOUNTING INFORMATION

cpu 사용시간, 실제 사용시간, 한정된 시간에 관한 정보

 

9. STATUS INFORMATION RELATED to I/O

입출력 장치, 개방된 파일 목록에 관한 정보

 


 

스레드(THREAD)

 

  • 프로세스가 할당받는 자원을 이용하는 실행 단위
  • 프로세스 내에서 실행되는 흐름의 단위

어떤 프로그램을 실행시킨게 프로세스라고 하면

그 프로세스는 운영체제로부터 프로그램을 돌리기 위해 얼마만큼의 메모리를 포함해서 이것저것 필요한 자원을 할당받는다. 그리고 스레드는 프로세스에 할당된 자원을 공유하면서 작업을 처리한다.

 

 

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html (그림참조)

 

  • 스레드는 프로세스 내에서 각각 Stack 영역만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
  • 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유하지만 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
  • 각각의 스레드는 별도의 레지스터와 스택을 갖고 있다.
  • 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스테드도 그 변경 결과를 즉시 볼 수 있다.
  • 스레드는 프로세스가 가지고 있는 주소 공간이나 자원을 공유할 수 있다.

1. 단일 스레드

 

하나의 프로세스에서 하나의 스레드가 존재

 

2. 멀티 스레드

 

한 개의 프로세스에 처리해야 할 작업이 많을 때, 다수 개의 스레드를 통해 동시에 처리하기 위해서 나왔다.

프로세스 내에는 다수의 스레드가 존재할 수 있다. 같은 프로세스 내에 존재하는 다수의 스레드는 운영체제 자원들을 공유하여 자원의 생성과 관리의 중복성을 최소 하하여 수행능력을 향상한다. 이때 스레드들은 각각 독립적인 작업을 수행해야 하기 때문에 각자의 독립적인 스택과 스레드 ID, 프로그램 카운터, 레지스터 집합을 가지고 있다.