🧐 학습 목표
- 프로세스에 대하여 설명 할 수 있다.
- 쓰레드에 관하여 설명 할 수 있다.
프로그래머들은 코드를 작성하고 메모리를 할당 받아 실행 시킨다.
ps -ef | grep 프로세스
를 통하여 우리는 실행 중인 프로세스를 확인 할 수 있다.
프로그램의 가장 기본적인 연산 단위인 Process와 Thread에 대하여 학습해보자.
컴퓨터 자원인 디스크에 저장되어 있는 프로그램 의 명령어들과 데이터가 메모리에 적재되어 프로세서 (CPU) 에 의하여 실행 과정에 있을 때 Process 라고 합니다.
우리는 유투브를 통해 음악을 들으면서 블로그를 쓰고, 카카오톡을 통해 채팅을 쓰는 등 여러 가지 프로세스들을 실행시킨다. 이는 프로세스들이 다수 생성되어 프로세스 스케줄링 을 통해 빠른 속도로 프로세스들을 번갈아가면서 실행시키는 것이다.
❌ 프로세스는 디스크에 존재하는 프로그램 파일이다.
❌ 하나의 프로세서(CPU)는 여러 개의 프로세스를 동시에 실행된다.
프로세스 상태
New : 프로세스가 막 생성된 상태
Ready : 프로세스가 CPU에 실행되기 위해 대기하는 상태
Running : 프로세스에 포함된 명령어가 실행되고 있는 상태
Waiting : 프로세스가 특정 자원이나 이벤트를 기다리는 상태
Terminated : 프로세스가 실행을 완료한 상태
메모리 구조
Code : 프로그램을 실행시키는 실행 파일 내의 명령어들이 위치하는 공간
Data : 전역변수, static 변수들이 위치하는 공간
Heap : 동적할당을 위한 메모리 영역( malloc(), new 등)
Stack : 함수 호출과 관련된 지역 변수, 파라미터(함수에 전달되는 인자)가 위치하는 공간
프로세스 내에서 실제로 작업을 수행하는 주체 이다.
프로세스가 할당 받은 자원을 이용하는 실행 단위이다.
두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 한다.
프로세스와의 차이를 간략하게 보자면 Thread 는 Register 와 Stack 만 개별적으로 생성 이 된다.
⛔ 주의
각 스레드가 Stack을 제외한 메모리 공간을 공유하기 때문에 동기화 문제 가 발생할 수 있다. 따라서 프로그래머는 공유 자원에 주의하여 설계를 해야한다.
💡 정리
Process
- 프로세스는 프로그램이 실행되어 메모리를 할당 받아 CPU에 의해 실행되고 있는 상태를 말한다.
- 프로세스 스케줄링을 통해 다수의 프로세스 빠르게 번갈아가며 실행 된다.
- 메모리 구조는 Code, Data, Heap, Stack 영역으로 나뉘어 할당 받는다.
- 각, 프로세스 간에는 직접적인 데이터 접근이 불가능하며 공유하기 위해서는 통신이(IPC) 필요하다.
Thread
- 프로세스를 실행하는 주체이자 실행의 흐름 단위이다.
- 프로세스 내부에서 1개 이상 생성이 되며 메모리 구조 상 Stack 영역을 제외한 자원을 공유한다.
- 자원을 공유하기 때문에 동기화 문제에 주의해야 한다.