프로그램, 프로세스, 스레드
📘 프로그램 (Static Program)
-
컴퓨터에서 실행할 수 있는 파일을 통칭
ex) *.exe, *.dmg
-
저장 장치에는 있지만 메모리에는 올라가 있지 않은 정적인 코드 덩어리를 의미한다.
📘 프로세스 (Process)
- 프로그램이 돌아가고 있는 상태
- 메모리에 적재되고 CPU 자원을 할당받은 상태로 프로그램의 동적인 상태이다.
- 프로세스는 반드시 적어도 하나 이상의 스레드를 갖는다.
📖 프로세스의 자원 구조
https://giwon512.github.io/cs/memory/
힙과 스택의 차이에 대해 공부하면서 메모리 구조에 대해 정리해두었던 것을 발견했다.
프로세스는 프로그램의 실행 단위이므로, 만약 내가 크롬, 카카오톡, 노션, 이클립스를 띄워 놓았다면 램에 이와 같은 영역이 4개가 각각 할당이 된다. 프로세스는 다른 프로세스의 할당된 메모리에 직접 접근할 수 없다.
📖 프로세스의 자원 공유
- IPC(Inter-Process Communication)
- LPC(Local IPC)
- Shared Memory
📘 스레드 (Thread)
- 하나의 프로세스 내에서 동시에 진행되는 작업 흐름의 단위
만약 크롬에서 내가 다운로드를 받고 있다면, 다운로드가 끝날 때까지는 해당 프로그램에서 다른 작업을 수행할 수 없고, 그렇다고 크롬에 대해서 여러 개의 프로세스를 만들면 CPU에 할당된 자원이 중복된다. 스레드는 이런 프로세스의 한계를 해결해준다.
📖 스레드의 자원 구조
스레드는 프로세스와 다르게 stack 영역만 할당받고, 나머지 영역은 다른 스레드들과 공유하는 형태를 가진다. 스택 영역이 함수를 호출한 정보가 저장되는 부분이므로, 독립적인 스택 영역을 할당받음으로써 독립적인 실행 흐름을 가지게 된다. 다른 메모리는 공유하기 때문에 서로 다른 스레드에서 값을 가져와 읽고 쓸 수 있다.
참고
댓글남기기