프로세스와 스레드의 차이
[프로그램 - > 프로세스]
- 프로그램 : 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태를 말한다.
- 프로그램을 실행하는 순간 해당 파일은 컴퓨터 메모리에 올라가게 되고, 이 상태를 동적인 상태라고 하며 이 상태의 프로그램을 프로세스라고 한다.
[프로세스 → 스레드]
스레드 : 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위
스레드는 프로세스와 다르게 스레드 간 메모리를 공유하며 작동된다. 스레드끼리 프로세스의 자원을 공유하면서 프로세스 실행 흐름의 일부가 되는 것이다.
즉, 스레드는 프로세스의 코드에 정의된 절차에 따라 실행되는 특정한 수행 경로다.
[프로세스와 스레드의 작동 방식]
프로세스가 메모리에 올라갈 때 운영체제로부터 시스템 자원을 할당받는다. 이 때 운영체제는 프로세스마다 각각 독립된 메모리 영역을, Code/Data/Stack/Heap의 형식으로 할당해 준다. 각각 독립된 메모리 영역을 할당해 주기 때문에 프로세스는 다른 프로세스의 변수가 자료에 접근할 수 없다.
이와 다르게 스레드는 메모리를 서로 공유할 수 있다. 프로세스가 할당받은 메모리 영역 내에서 Stack 형식으로 할당된 메모리 영역은 따로 할당받고, 나머지 Code/Data/Heap 형식으로 할당된 메모리 영역을 공유한다. 따라서 각각의 스레드는 별도의 스택을 가지고 있지만 힙 메모리는 서로 읽고 쓸 수 있게 된다.
만약 한 프로세스를 실행하다가 오류가 발생해서 프로세스가 강제로 종료된다면 공유하고 있는 파일을 손상시키는 경우가 아니라면 아무런 영향을 주지 않는다.
그런데 스레드의 경우는 Code/Data/Heap 메모리 영역의 내용을 공유하기 때문에 어떤 스레드 하나에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제로 종료된다.
스택을 스레드마다 독립적으로 할당하는 이유?
- 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소 값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간
- 스택 메모리 공간이 스레드에 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고 이는 독립적인 실행 흐름이 추가되는 것
- 따라서 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당
PC Register를 스레드마다 독립적으로 할당하는 이유?
- PC 값은 스레드가 명령어의 어디까지 수행하였는지를 나타냄
- 스레드는 CPU를 할당 받았다가 스케줄러에 의해 다시 선점당함
- 그렇기 때문에 명령어가 연속적으로 수행되지 못하고 어느 부분까지 수행했는지 기억할 필요가 있음
- 따라서 PC 레지스터를 독립적으로 할당함
멀티 프로세스 / 멀티 스레드
[멀티 프로세스]
- 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것
<장점>
- 메모리 침범 문제를 OS 차원에서 해결
- 여러 자식 프로세스 중 하나에 문제가 발생하여도 그 프로세스만 타격, 확산되지 X
<단점>
- 각 프로세스가 독립된 메모리 영역(Code, Data, Heap, Stack)을 가지고 있기 때문에 작업량이 많아지면 오버헤드가 발생함(Context Switching)
- 프로세스 간의 복잡한 통신(IPC)가 필요함
[멀티 스레드]
- 하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것
<장점>
- 메모리 공간, 시스템 자원의 효율성 증가
- Data, Heap 영역을 이용해 데이터를 주고 받으므로 스레드간 통신이 간단함
- 교환해야 할 정보가 적으니 context switching시 비용이 적음 → 시스템 처리량 향상, 프로그램 응답 시간 단축됨
<단점>
- 서로 다른 스레드가 Stack을 제외한 메모리 공간을 공유하기 때문에 동기화 문제가 발생할 수 있음
- 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받음
- 주의 깊은 설계가 필요하며 디버깅이 까다로움
References
- https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
- https://you9010.tistory.com/136
'CS > OS' 카테고리의 다른 글
[OS] 09. 디스크 관리 (0) | 2022.01.03 |
---|---|
[OS] 08. 가상메모리 (0) | 2022.01.01 |
[OS] 07. 메모리 관리 (0) | 2021.12.27 |
[OS] 06. CPU 스케줄링 (0) | 2021.12.26 |
[OS] 스핀락, 뮤텍스, 세마포어 (0) | 2021.12.22 |
댓글