Process & Thread

wshan·2023년 6월 13일
0

🧐   학습 목표

  1. 프로세스에 대하여 설명 할 수 있다.
  2. 쓰레드에 관하여 설명 할 수 있다.

👉   KeyWord 를 통해서 기억하자 !


개요

프로그래머들은 코드를 작성하고 메모리를 할당 받아 실행 시킨다.
ps -ef | grep 프로세스 를 통하여 우리는 실행 중인 프로세스를 확인 할 수 있다.
프로그램의 가장 기본적인 연산 단위인 ProcessThread에 대하여 학습해보자.


Process 란 ?

컴퓨터 자원인 디스크에 저장되어 있는 프로그램 의 명령어들과 데이터가 메모리에 적재되어 프로세서 (CPU) 에 의하여 실행 과정에 있을 때 Process 라고 합니다.

  • 디스크 : 보조기억 장치 (HDD, SSD)
  • 프로그램 : 카카오톡, 게임, 스프링 부트 프로그램 ...
  • 메모리 : 주기억 장치 (ROM, RAM)

우리는 유투브를 통해 음악을 들으면서 블로그를 쓰고, 카카오톡을 통해 채팅을 쓰는 등 여러 가지 프로세스들을 실행시킨다. 이는 프로세스들이 다수 생성되어 프로세스 스케줄링 을 통해 빠른 속도로 프로세스들을 번갈아가면서 실행시키는 것이다.

❌   프로세스는 디스크에 존재하는 프로그램 파일이다.
❌   하나의 프로세서(CPU)는 여러 개의 프로세스를 동시에 실행된다.

특징

  • 프로세스 상태
    New : 프로세스가 막 생성된 상태
    Ready : 프로세스가 CPU에 실행되기 위해 대기하는 상태
    Running : 프로세스에 포함된 명령어가 실행되고 있는 상태
    Waiting : 프로세스가 특정 자원이나 이벤트를 기다리는 상태
    Terminated : 프로세스가 실행을 완료한 상태

  • 메모리 구조
    Code : 프로그램을 실행시키는 실행 파일 내의 명령어들이 위치하는 공간
    Data : 전역변수, static 변수들이 위치하는 공간
    Heap : 동적할당을 위한 메모리 영역( malloc(), new 등)
    Stack : 함수 호출과 관련된 지역 변수, 파라미터(함수에 전달되는 인자)가 위치하는 공간

  • 자원 공유
    다른 Process 의 변수나 데이터에 직접 접근이 불가능하다
    자원을 공유하기 위해서는 IPC 통신이 필요하다.

Thread 란 ?

프로세스 내에서 실제로 작업을 수행하는 주체 이다.
프로세스가 할당 받은 자원을 이용하는 실행 단위이다.
두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 한다.

특징

  • 메모리 구조

프로세스와의 차이를 간략하게 보자면 Thread 는 Register 와 Stack 만 개별적으로 생성 이 된다.

  • 자원 공유
    Thread 는 Process 내에서 Stack 만 할당 받고 Code, Data, Heap 영역은 공유 한다.

⛔ 주의
각 스레드가 Stack을 제외한 메모리 공간을 공유하기 때문에 동기화 문제 가 발생할 수 있다. 따라서 프로그래머는 공유 자원에 주의하여 설계를 해야한다.

  • 상태
    프로세스와 동일하게 ( 실행, 준비, 대기 등 ) 의 실행 상태를 가지며
    실행 상태 변경(Context Switching) 을 통해 작업을 수행한다.

💡 정리

Process

  1. 프로세스는 프로그램이 실행되어 메모리를 할당 받아 CPU에 의해 실행되고 있는 상태를 말한다.
  2. 프로세스 스케줄링을 통해 다수의 프로세스 빠르게 번갈아가며 실행 된다.
  3. 메모리 구조는 Code, Data, Heap, Stack 영역으로 나뉘어 할당 받는다.
  4. 각, 프로세스 간에는 직접적인 데이터 접근이 불가능하며 공유하기 위해서는 통신이(IPC) 필요하다.

Thread

  1. 프로세스를 실행하는 주체이자 실행의 흐름 단위이다.
  2. 프로세스 내부에서 1개 이상 생성이 되며 메모리 구조 상 Stack 영역을 제외한 자원을 공유한다.
  3. 자원을 공유하기 때문에 동기화 문제에 주의해야 한다.

0개의 댓글