프로세스와 쓰레드

프로세스와 스레드

Process(프로세스)

프로세스란?

  • 컴퓨터에서 연속적으로 실행되는 컴퓨터 프로그램
  • 프로그램을 구동하여 메모리상에서 실행되는 작업단위
  • OS로 부터 독립된 메모리 영역을 할당받는다.

프로세스의 구조

프로세스는 아래와 같은 구조를 가진다.

  • Code : 코드 자체를 구성하는 메모리 영역
  • Data : 전역변수, 정적변수, 배열등을 저장
  • Heap : 동적 할당시 사용(new(), malloc() 등)
  • Stack : 지역변수, 매개변수, 리턴값 등을 임시적으로 저장하는 영역

왜 이렇게 나눈걸까?

1
2
공유 할 수 있는 데이터는 공유하여 메모리의 사용량을 줄이기 위해서
Stack과 Data를 나눈 이유는 스택의 특성과 전역변수를 활용하기 위해서

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

특정 프로세스에 대한 정보(Process MetaData)를 저장하고 있는 자료구조(Linked List)
아래와 같은 데이터가 저장되어 있다.

  • Process MetaData
    • Process ID : 프로세스의 식별번호
    • Process State : 프로세스의 상태(new, ready, running, waiting, terminated)
    • Program Counter : 이 프로세스 다음에 실행할 명령어의 주소
    • CPU Registers
    • CPU 스케줄링 정보: 우선 순위, 최종 실행시각, CPU 점유시간 등
    • 메모리 관리 정보: 해당 프로세스의 주소 공간 등
    • 프로세스 계정 정보: 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등
    • 입출력 상태 정보: 프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등

PBC는 CPU에서 프로세스의 상태에 따라 교체작업(Context Switching)이 이루어질때 PBC에서 저장되어있는 내용들을 불러와 이전 종료시점부터 다시 작업을 재실행한다.

Thread(스레드)

Thread란?

  • 프로세스 내부에 존재하는 실행 단위
  • 하나의 프로세스가 생성될때 내부에 적어도 하나의 스레드가 같이 생성된다.
  • 스레드는 Stack만 따로 할당받고, 나머지 Code, Data, Heap은 공유

image

프로세스와 스레드의 차이

  • 프로세스는 고유한 공간과 자원을 할당받아서 사용하지만(프로세스간 공유하지 않음) 스레드는 고유한 메모리(Stack)를 프로세스로 부터 할당받긴 하지만, 서로 공유하는 메모리(Code, Data, Heap)가 존재함

Stack를 스레드마다 독립적으로 할당 받는 이유

  • 독립적인 실행 단위로써 스레드를 사용하기 위해서는 독립적인 메모리 공간이 필요하고, 이를 만족시키는 최소조건이 Stack을 제공하는것 이기 때문이다.
Author

KyuBum Shin

Posted on

2021-10-02

Updated on

2021-10-03

Licensed under

댓글