1일 1개념정리 24.08.09.금 ~
큰 결정에 큰 동기가 따르지 않을 때도 있다. 하지만 큰 결심이 따라야 이뤄낼 수 있다.
무조건 무조건 1일 1개의 개념 정리하기 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#3. 멀티 프로세스
멀티 스레드에 대해서 지난 시간에 배웠다.
근데 글을 읽다보면 스레드 보다 더 큰 단위가 프로세스처럼 보이는데, 이 둘은 구체적으로 왜 나누는 것일까?? 그리고 멀티 프로세스는 무엇인가 ?? 살짝 겹치는 내용도 있겠지만 복습한다 셈 치고 읽어보자.
프로세스 vs 스레드
일단 프로세스와 스레드에 대해서 간단하게 다시 알아보자.
- 프로세스 : OS에 의해 HDD에 저장된 프로그램이 메모리에 올라오면, 그 프로그램은 프로세스가 된다. 즉 실행되는 프로그램의 단위이다. 각 프로세스는 독립적인 메모리 공간을 가지고, 다른 프로세스와 메모리 공간을 공유하지 않는다. 이 때문에 프로세스 간의 통신은 꽤 복잡하고 이때 IPC(Inter-Process Communication) 같은 메커니즘이 필요하다.
- 스레드 : 스레드는 프로세스 내에서 실행되는 작은 실행 단위이다. 스레드들은 동일한 프로세스 내에서 메모리 공간(ex. 힙 메모리)을 공유한다. 따라서 스레드 간 통신이 훨씬 효율적이며, 컨텍스트 스위칭이 프로세스보다 상대적으로 빠르다.
멀티 프로세스
모든 처리를 스레드가 처리할 순 없다. 만약 프로세스간 메모리 구분이 필요하거나, 독립적인 주소를 가져야할 때는 프로세스를 사용해야한다. 결국 스레드든 프로세스든 현재의 관점에서 보면 각자 역할이 다르고 장단점이 있으니 구별해서 사용하고 있지 않겠는가 ??
장점
- 애당초 프로세스간 독립적이기 때문에 안정적이다. 그래서 어떤 요청이 오류났다고 해서 시스템 전체에 문제가 생기지 않는다. 위 사진처럼 내가 크롬 탭을 여러개 켰는데 모두 개별적으로 실행되고 있지 않는가?
단점
- Context Switching 비용 비쌈 : 스레드에서 이야기했듯이, 프로세스는 스레드보다 무겁기 때문에 context switching이 자주 발생한다면 오버헤드가 커서 성능이 저하될 수 있다. 이러한 이유는 "독립적인 메모리 공간"을 가지기 때문이다. 위에 프로세스vs스레드에서 말했듯이 프로세스간 통신은 IPC같은 매커니즘을 사용해야해서 더 복잡하다. 근데 스레드는 자원을 공유하고 가볍기 때문에 context switching이 상대적으로 저렴하다. 비용은, 어제 말했듯이 cpu와 메모리 사용 시간 등을 의미한다.
- 자원 공유 안되므로 비효율적 : 이는 장점이자 단점이다. 분리되어 있어서 장점이라고 했는데, 그렇기 때문에 자원을 공유해야하는 상황에선 단점이다. 이때 IPC같은 매커니즘을 사용하기 때문에 그 자체로 오버헤드가 발생한다.
Context Switching이란 ?
말 그대로 어떤 맥락을 전환하는 것이다. 내가 파워포인트 작업 하다가 음악을 켜기 위해 유튜브를 가면 Context가 Switching된다. 근데 이는 프로세스와 쓰레드 둘 다 일어날 수 있는 일이다. 프로세스가 Context Switching 할 땐 원래 하던 작업의 정보를 PCB(Process Control Block)에 저장하고, 쓰레드가 스위칭을 할 땐 TCB(Thread Control Block)에 원래 하던 일을 저장한다. 여기에 어떤 요소가 저장되어 있는지 알아보자.
PCB 주요 요소
PCB는 OS가 각 프로세스에 대해 관리해야 할 정보를 저장한다.
- 프로세스 식별자 : 각 프로세스를 고유하게 식별하기 위한 ID.
- 프로세스 상태 : 프로세스의 현재 상태(예: 실행 중, 준비 상태, 대기 상태 등).
- 프로세스 우선순위 : 프로세스의 실행 우선순위.
- 프로그램 카운터 (PC값) : 프로세스가 실행 중인 명령의 주소를 가리킴.
- 레지스터 : CPU 레지스터의 값(일반 목적 레지스터, 스택 포인터, 플래그 등).
- 메모리 관리 정보
- 페이지 테이블(Page Table) 또는 세그먼트 테이블(Segment Table): 프로세스의 메모리 관리와 관련된 정보.
- 기억 장소 주소(베이스 주소 및 경계 주소): 프로세스가 사용하는 메모리 범위.
- 프로세스 스케줄링 정보 : 프로세스의 우선순위, 스케줄링 큐 포인터 등.
- 입출력 상태 정보 : 프로세스가 사용하는 입출력 장치와 파일에 대한 정보.
- 계정 정보 : 프로세스의 CPU 사용 시간, 실행 시간, 프로세스 생성 시간 등.
- 프로세스 간 통신 정보 (IPC, Inter-Process Communication) : 프로세스가 다른 프로세스와 통신하는 방법에 대한 정보.
TCB의 주요 요소
같은 맥락으로, TCB는 스레드가 기억할 정보를 저장한다. TCB는 일반적으로 PCB보다 가볍다.
- 스레드 식별자 : 각 스레드를 고유하게 식별하기 위한 ID.
- 스레드 상태 : 스레드의 현재 상태(예: 실행 중, 준비 상태, 대기 상태 등).
- 프로그램 카운터 (PC값) : 스레드가 실행 중인 명령의 주소를 가리킴.
- 레지스터 : 스레드가 사용하는 CPU 레지스터 값.
- 스택 포인터 : 스레드의 스택 메모리를 가리키는 포인터.
- 스레드 우선순위 : 스레드의 실행 우선순위.
- 스레드 로컬 저장소 (TLS) : 각 스레드에 대한 개별적인 데이터 공간.
- 스레드 컨텍스트 정보 : 스레드의 실행에 필요한 컨텍스트 정보.
이처럼 PCB가 TCB보다 저장할 정보가 많다. 그래서 Context Switching을 할 때 PCB에 저 많은 정보를 다 저장하고 넘어가야 하므로 프로세스가 스레드보다 Context Switching 비용이 크다는 것이다.
"독립적인 메모리 공간"과 오버헤드의 관계
프로세스, 스레드 관련해서 독립적인 메모리~~ 오버헤드가 크다 작다~~ 이런 이야기가 많다. 구체적으로 정리해보자.
일단 프로세스는 독립적인 메모리 공간을 가지고 있어서 프로세스간의 Context Switching시 아래와 같은 이유로 오버헤드가 발생한다.
- 메모리 맵핑 & 페이지 테이블 스위칭 : 프로세스는 독립적인 메모리 공간을 가지기 때문에, CPU는 다른 프로세스로 전환할 때 메모리 맵핑을 변경해야 한다. 프로세스를 변경할 때 페이지 테이블을 포함한 메모리 관리 데이터를 전환한다는 것을 뜻하는데 이때 시간과 자원을 소모하게 된다.
- 캐시 무효화 : 한 프로세스에서 사용하던 데이터가 캐시 메모리에 남아 있을 수 있다. 하지만 다른 프로세스로 전환할 때, 이 캐시 데이터를 비워야 하거나 새로운 데이터로 교체해야 할 수 있다. 이것또한 성능에 영향을 미친다.
- 프로세스 간 통신(IPC)의 비용: 프로세스 간에는 서로 메모리를 공유하지 않기 때문에, 데이터를 주고받기 위해서는 IPC 메커니즘을 사용한다. 이는 스레드보다 더 복잡해서 비용이 많이 든다.
'1일 1개념정리 (24년 8월~) > 운영체제' 카테고리의 다른 글
1일1개 (62) - 싸울때) 너가먼저 놔라 vs 너 놓을 때 까지 나도 안놓는다 (0) | 2024.10.16 |
---|---|
1일1개 (60) - 실제 메모리 아닌데~ 실제 메모리 아닌데~ (0) | 2024.10.14 |
1일1개 (27) - 동시성 문제 (2) | 2024.09.06 |
1일1개 (22) - 동기 vs 비동기 (0) | 2024.08.31 |
1일1개 (2) - 멀티 쓰레드 & spring 동시 요청 처리 (1) | 2024.08.10 |