프로세스와 스레드

sooyuni·2022년 8월 30일
0

📚 이 게시글은 강의 또는 책을 읽고 직접 정리한 내용입니다. 📚

1. 프로세스와 스레드

- 프로그램(Program)

하드 디스크 등에 저장되어 있는 실행 코드

- 프로세스(Process)

컴퓨터에서 실행되고 있는 프로그램.
CPU 스케줄링의 대상이 되는 작업(Task)라는 용어와 거의 같은 의미로 쓰인다.
즉, 프로그램이 메모리에 올라가면 프로세스가 되는 인스턴스화가 일어나고, 이후 운영체제의 CPU 스케줄러에 따라 CPU가 프로세스를 실행한다.

예시)
프로그램은 구글 크롬(chrome.exe)과 같은 실행 파일이며,
이를 두 번 클릭하면 구글 크롬 '프로세스'가 시작된다.

- 스레드(Thread)

프로세스의 실행 가능한 가장 작은 단위. 기본적으로 프로세스마다 최소 1개의 스레드를 소유할 수 있으며, 여러 스레드를 가질 수 있다.
스레드마다 각자 고유한 TLS(thread local storage)를 가지고 있는데, 그 범위는 프로세스 수준으로 제공되며 그 범위는 OS(운영체제)가 제공한 공간으로 한정된다.

프로세스의 메모리 구조

운영체제는 프로세스에 적절한 메모리를 할당하는데 다음의 구조를 기반으로 한다.

정적 영역

  • Code 영역 : 프로그램에 내장되어 있는 소스 코드가 들어가는 영역이다.
    수정 불가능한 기계어로 저장되어 있다.

  • Data 영역 : 전역 변수, 정적 변수가 저장된다. 정적인 특징을 갖는 프로그램이 종료되면 사라지는 변수가 들어 있는 영역이다. BSS와 Data영역으로 나뉜다.

    	- BSS Segment : 초기화가 되지 않은 변수가 0으로 초기화 되어 저장됨.
    
    	- Data Segment : 0이 아닌 다른 값으로 할당된 변수들이 저장됨.

동적 영역

  • Heap : 동적 할당 시 사용되며 런타임 시 크기가 결정된다.
  • Stack : 지역 변수, 매개 변수, 함수가 저장되고 컴파일 시에 크기가 결정된다.
    스택 영역은 함수가 함수를 재귀적으로 호출하면서 동적으로 크기가 늘어날 수 있는데, 이때 힙과 스택의 메모리 영역이 겹치면 안되기 때문에 힙과 스택 사이의 공간을 비워놓는다.

스레드는 Stack만 따로 할당 받고 나머지 영역은 서로 공유한다.
하나의 프로세스가 생성될 때, 기본적으로 하나의 스레드가 같이 생성된다.

2. 프로세스와 스레드의 차이점

프로세스는 자신만의 고유 공간과 자원을 할당 받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용한다는 차이가 존재한다.

profile
기록하고, 기록하자. 남는건 기록 뿐📝

0개의 댓글