[운영체제] Process와 Thread의 차이

김성록·2023년 3월 5일
0

운영체제

목록 보기
1/14

Process와 Thread의 차이에 대해 설명해보세요


Process(프로세스)란?

  • 프로세스란 메모리 상에서 실행중인 프로그램을 의미한다.

  • 프로세스는 실행될 때 운영체제로부터 주소 공간, 메모리 등의 시스템 자원을 독립적으로 할당 받는다.

  • 프로세스 내부에는 최소 하나의 스레드(Thread)를 가지고 있고, 스레드 단위로 스케줄링(Scheduling)을 한다.


프로세스의 상태

  • 프로세스의 다양한 상태가 있다.
    - New
    : 프로세스가 막 생성된 상태

    - Ready
    : 프로세스가 CPU에 실행되기 위해 대기하는 상태

    - Running
    : 프로세스에 포함된 명령어가 실행되고 있는 상태

    - Waiting(Blocked)
    : 프로세스가 특정 자원이나 이벤트를 기다리는 상태

    - Terminated
    : 프로세스가 실행을 완료한 상태


프로세스의 메모리 구조

- Code 영역
: 프로그램을 실행시키는 실행 파일 내의 명령어들이 기계어 형태로 저장된 영역이다.

- Data 영역
: 전역 변수와 정적 변수가 저장되는 영역이다.

- Stack 영역
: 지역 변수, 함수 호출 시 전달되는 인자를 위한 메모리 영역이다

- Heap 영역
: 동적 할당을 위한 메모리 영역이다


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

  • PCB는 특정 프로세스에 대한 중요한 정보를 저장하고 있는 운영체제의 자료 구조이다.

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

  • 프로세스 전환이 발생하면 진행하던 작업을 모두 PCB에 저장하고, 다시 CPU를 할당받게 되면 PCB에 저장되어 있던 내용을 불러와 이어서 처리한다.

  • 프로세스 식별자, 상태, 카운터, 그리고 CPU, 메모리 등의 정보가 PCB에 저장된다.


프로세스의 문제점

  • 프로세스를 생성할 때 많은 시간이 소요된다.

  • 프로세스 사이의 통신을 위해 IPC(Inter-Process Communication)을 사용해야 한다.


Thread(스레드)란?

  • 스레드는 프로세스의 실행 흐름, 단위이다.

  • 스레드는 한 프로세스에 적어도 하나 존재한다.

  • 스레드는 Stack만 따로 할당받고, Code, Data, Heap 영역은 공유한다.

    • Stack 메모리 공간에서 독립적인 함수 호출이 가능하므로, 독립적인 실행 흐름을 추가하기 위해 독립된 Stack을 할당한다.
  • 스레드는 독립적인 작업 수행을 위해 PC Register를 독립적으로 할당한다.


결론

프로세스는 운영체제로부터 독립된 메모리 영역을 할당받습니다. 따라서 프로세스는 서로 각각의 변수나 자료에 접근할 수 없습니다. 반면에 스레드는 Stack 영역은 독립적으로 할당받지만, 나머지 Code, Data, Heap 영역은 공유하여 서로 읽고 쓸 수 있습니다.
또한 프로세스는 생성에 많은 시간이 소요되고 프로세스 간의 통신은 IPC를 사용해야 하므로 부담이 듭니다. 하지만 스레드를 사용함으로써 시스템 자원을 효율적으로 관리할 수 있고, 프로세스 간의 통신보다 스레드 간의 통신 비용이 적어 작업들 간의 통신 부담이 줄어들게 됩니다. 하지만 스레드 간의 영역 공유는 전역 변수를 이용하므로 동기화 문제에 신경써줘야 합니다.

profile
예비 개발자

0개의 댓글