본문 바로가기
  • 시 쓰는 개발자
1일 1개념정리 (24년 8월~)/운영체제

1일1개 (3) - 멀티 프로세스

by poetDeveloper 2024. 8. 11.
반응형

1일 1개념정리 24.08.09.금 ~ 

 

큰 결정에 큰 동기가 따르지 않을 때도 있다. 하지만 큰 결심이 따라야 이뤄낼 수 있다.

무조건 무조건 1일 1개의 개념 정리하기 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!


#3. 멀티 프로세스

멀티 스레드에 대해서 지난 시간에 배웠다.

https://100won-developer.tistory.com/entry/1%EC%9D%BC1%EA%B0%9C-2-%EB%A9%80%ED%8B%B0-%EC%93%B0%EB%A0%88%EB%93%9C

 

1일1개 (2) - 멀티 쓰레드 (spring 동시 요청 처리)

1일 1개념정리 24.08.09.금 ~  큰 결정에 큰 동기가 따르지 않을 때도 있다. 하지만 큰 결심이 따라야 이뤄낼 수 있다.무조건 무조건 1일 1개의 개념 정리하기 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!#2. 멀티 쓰레드

100won-developer.tistory.com

 

근데 글을 읽다보면 스레드 보다 더 큰 단위가 프로세스처럼 보이는데, 이 둘은 구체적으로 왜 나누는 것일까?? 그리고 멀티 프로세스는 무엇인가 ?? 살짝 겹치는 내용도 있겠지만 복습한다 셈 치고 읽어보자.

프로세스 vs 스레드

일단 프로세스와 스레드에 대해서 간단하게 다시 알아보자.

  1. 프로세스 : OS에 의해 HDD에 저장된 프로그램이 메모리에 올라오면, 그 프로그램은 프로세스가 된다. 즉 실행되는 프로그램의 단위이다. 각 프로세스는 독립적인 메모리 공간을 가지고, 다른 프로세스와 메모리 공간을 공유하지 않는다. 이 때문에 프로세스 간의 통신은 꽤 복잡하고 이때 IPC(Inter-Process Communication) 같은 메커니즘이 필요하다.
  2. 스레드 : 스레드는 프로세스 내에서 실행되는 작은 실행 단위이다. 스레드들은 동일한 프로세스 내에서 메모리 공간(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시 아래와 같은 이유로 오버헤드가 발생한다.

  1. 메모리 맵핑 & 페이지 테이블 스위칭 : 프로세스는 독립적인 메모리 공간을 가지기 때문에, CPU는 다른 프로세스로 전환할 때 메모리 맵핑을 변경해야 한다. 프로세스를 변경할 때 페이지 테이블을 포함한 메모리 관리 데이터를 전환한다는 것을 뜻하는데 이때 시간과 자원을 소모하게 된다.
  2. 캐시 무효화 : 한 프로세스에서 사용하던 데이터가 캐시 메모리에 남아 있을 수 있다. 하지만 다른 프로세스로 전환할 때, 이 캐시 데이터를 비워야 하거나 새로운 데이터로 교체해야 할 수 있다. 이것또한 성능에 영향을 미친다.
  3. 프로세스 간 통신(IPC)의 비용: 프로세스 간에는 서로 메모리를 공유하지 않기 때문에, 데이터를 주고받기 위해서는 IPC 메커니즘을 사용한다. 이는 스레드보다 더 복잡해서 비용이 많이 든다.
반응형