Process & Thread

Choco·2023년 7월 13일
post-thumbnail

Process

프로세스는 OS로 부터 자원(cpu,memory)를 할당받아 실행되는 작업의 단위이다.

프로그램과의 차이점은 프로그램은 실행되지 않는 정적인 파일(실행 가능한 파일 자체)이고 프로세스는 실행 시킨 상태이다. 프로그램 자체는 OS로 부터 자원을 받지않고 HDD 같은 보조기억장치에 있고 실행을 시켜야 프로세스가 생기면서 자원을 할당받는다. 이러한 프로세스는 작업관리자에서 쉽게 확인 가능하다.

Thread

스레드는 프로세스안에서의 실행 흐름의 단위이다.

프로그램이 복잡해지면 코드가 하나의 흐름으로만 가기엔 무리가 있다. 그래서 프로세스 안에는 여러 코드흐름의 실행 단위인 스레드가 있다. 스레드와 프로세스의 차이점은 같은프로세스 안에서의 스레드는 서로 일부의 자원들을 공유한다. 하지만 프로세스 끼리는 처음에 실행될때 얻은 자원으로 작업을 진행하기 때문에 서로의 자원을 공유하지 않는다. 스레드를 크롬 브라우저로 예를 들어보면 크롬 브라우저를 이용하면서 우리는 다양한 작업을 동시에 할 수 있다. 크롬 프로세스안에 스레드가 여러개여서 가능하다. 만약 하나의 스레드만 있으면 한 작업 실행 도중에 다른 작업을 할 수가 없게된다.

해당 그림이 스레드 동작의 예시인데,이 그림같이 멀티 스레드를 사용한다고 cpu가 실제 같은시간에 일처리를 하지는 못한다. 하지만 중간중간 스레드가 빠른속도로 번갈아 가며 실행되어서 사용자 입장에선 마치 동시에 실행되는것 처럼 보인다.

프로세스의 메모리 내부 구조

프로세스의 메모리 내부 구조 다음과 같은 영역이 있다.

Stack

지역 변수와 같은 호출한 함수가 종료되면 필요없는 임시적인 데이터를 저장한다. Stack은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면(return)을 하면 기존 데이터들은 POP을 통해 삭제 된다.

Heap

코드에서 동적으로 할당되는 데이터를 저장한다. 생성할때 마다 만들어지는 인스턴스나 LinkedList,Tree 같은 동적 할당이 가능한 데이터 구조들이 Heap에 저장된다.

메모리 접근을 할때 heap에 직접 접근하지 않고 stack에서 주소를 통해 접근 한다.즉,stack에 해당 부분을 참조하는 heap address가 없다면 이는 사용하지 않는 객체이고 GC의 대상이 된다.

heap의 일정량 이상이 되면 trigger를 통해 GC가 발생합니다. 이는 Compaction이 되어서 중간에 여유 공간을 없앱니다. 이런 과정에서 stack에서 참조하는 heap address또한 변경될 수 있습니다.

Data

전역 변수,정적 변수 데이터들이 저장된다. 좀 더 세부적으로도 나뉜다.
+).data,.BSS,.rodata

Text

작성한 코드가 컴파일 되어 기계어로 저장되어있다.Read-only 이다.

스레드의 자원 공유

한 프로세스안에서 스레드는 Code,Data,Heap을 공유한다. Stack만을 복사하여 할당 받는다.

profile
주니어 백엔드 개발자 입니다:)

0개의 댓글