개발자는 기록이 답이다

기술 면접 대비 CS 핵심 요약 - 프로세스 상태, 멀티 프로세스 vs 멀티 스레드 본문

CS/운영체제

기술 면접 대비 CS 핵심 요약 - 프로세스 상태, 멀티 프로세스 vs 멀티 스레드

slow-walker 2023. 9. 8. 23:59

2023.09.06 - [CS] - 기술 면접 대비 CS 핵심 요약 - 운영체제

 

기술 면접 대비 CS 핵심 요약 - 운영체제

📕본 포스팅은 "기술면접 대비 CS 전공 핵심 요약집" 책을 공부하면서 정리한 내용입니다. 기술 면접에서 출제 빈도가 높은 메모리, 프로세스 스레드 등의 개념을 이해하려면 운영체제에 대한

strong-park.tistory.com

2023.09.07 - [CS] - 기술 면접 대비 CS 핵심 요약 - 프로세스의 생성

 

기술 면접 대비 CS 핵심 요약 - 프로세스의 생성

2023.09.06 - [CS] - 기술 면접 대비 CS 핵심 요약 - 운영체제 📕본 포스팅은 "기술면접 대비 CS 전공 핵심 요약집" 책을 공부하면서 정리한 내용입니다. 1.2 프로세스 프로세스 관련 질문이 나왔을 때

strong-park.tistory.com

 

📕본 포스팅은 "기술면접 대비 CS 전공 핵심 요약집" 책을 공부하면서 정리한 내용입니다.


 

 

1.2.4 프로세스 상태도  ( 중요도 ★★★ )

 

모든 프로세스는 CPU에 의해 생성되고 소멸하는 과정을 거침.

 

프로세스 상태도

  • 생성(new) : 프로세스가 PCB를 가지고 있지만 OS로부터 승인 받기 전
  • 준비(ready) : OS로부터 승인 받은 후 준비 큐에서 CPU할당을 기다림
  • 실행(running) : 프로세스가 CPU를 할당받아 실행
  • 대기(wating) : 프로세스가 입출력이나 이벤트 발생을 기다려야 해서 CPU사용을 멈추고 기다림
  • 종료(terminated) : 프로세스 실행 종료

 

  • 실행 ➨ 준비 : 생성 상태의 프로세스가 OS로부터 승인을 받아 준비 상태의 프로세스가 모여 있는 자료 구조로 준비 큐(ready queue)에 추가됨
  • 준비 ➨ 실행 : 준비 큐에 있는 프로세스 중 우선순위가 높은 프로세스가 디스패치 되어 실행됨
  • 실행 ➨ 준비 : CPU 독점을 방지하기 위해 타임아웃되어 준비 상태로 변경됨
  • 실행 ➨ 대기 : 입출력 또는 이벤트 때문에 대기 상태로 변경됨
  • 대기 ➨ 준비 : 입출력 또는 이벤트가 완료되어 준비 상태로 변경됨
  • 실행 ➨ 종료 : 실행 중인 프로세스가 정상적으로 끝나서 종료 상태로 변경됨
승인(admit) : CPU를 제외한 다른 자원이 준비되어 해당 프로세스가 준비 상태가 될 수 있도록 OS가 허락하는 것
디스패치(dispatch) : 프로세스에 CPU자원을 할당해 해당 프로세스가 준비 상태에서 실행 상태가 되는 것을 의미

 

 

1.2.5 멀티 프로세스 와 멀티 스레드 ( 중요도 ★★★ )

멀티 프로세스와 멀티 스레드 개념을 이해하려면 동시성병렬성을 알아야 함

 

동시성(concurrency)

  • 하나의 코어(싱글 코어)에서 여러 작업을 번갈아 가면서 처리하는 방식
  • CPU는 한 번에 하나의 작업만 처리할 수 있어서 여러 작업을 조금씩 돌아가면서 처리함
  • 이렇게 하나의 CPU에서 여러 작업을 번갈아 가면서 처리하기 위해 처리 중인 작업을 교체하는 걸 콘택스트 스위칭 이라함

병렬성(parallelism)

  • CPU가 여러 개(멀티 코어)있어서 각 CPU에서 각 작업을 동시에 처리하는 방식
  • 물리적인 시간 관점에서 동시 여러 작업이 처리 됨

동시성과 병렬성 : 출처 아래 링크

 

멀티 프로세스

  • 응용 프로그램 하나를 여러 프로세스로 구성하는 것을 의미
  • 멀티 프로세스 환경에서는 한 프로세스가 죽어도 다른 프로세스에 영향을 주지 않는다
  • 그래서 응용 프로그램을 프로세스 하나로 구성하는 것보다 여러 개로 구성하는게 안정적이다.
  • 하지만 시간과 메모리 공간을 많이 사용한다는 단점 존재

CPU는 하나의 작업만 처리할 수 있어서 여러 프로세스를 처리하려면 CPU에서 처리 중인 프로세스를 교체하는 콘텍스트 스위칭 작업이 이뤄져야 한다. 이때 CPU에서 기존에 처리하던 프로세스가 할당받은 메모리 영역을 다른 프로세스에서 사용할 수 있게 교체하면서 시간과 메모리가 필요한데, 이를 오버헤드(overhead)라고 한다

 

또한 프로세스는 독립적인 메모리를 할당받음. 프로세스 간 공유할 자원이 있다면 IPC(Inter Process Communication)를 통해 프로세스간에 자원을 공유해야 한다. 그래서 공유할 메모리를 직접 참조하는 것 보다 비효율적임

 

 

멀티 스레드

  • 스레드를 여러 개 생성해 스레드들이 각자 다른 작업을 처리하는 것을 의미
  • 멀티 스레드는 스레드 간에 힙, 데이터, 코드 영역을 공유
  • 콘텍스트 스위칭할 때 오버헤드가 적게 발생하고 IPC를 사용하지 않음
  • 독립적인 메모리 공간을 갖는 프로세스를 여러개 생성하는 것 보다 스레드를 여러 개 생성하는 것이 자원을 효율적으로 사용할 수 있음
  • 스레드 간 자원 공유가 프로세스 간 자원 공유보다 시스템 처리 비용이 적고 프로그램 응답 시간도 단축됨
  • 하지만 스택 영역을 다른 스레드와 함께 사용하므로 공유 자원에 대한 동기화가 필수
  • 또한 스레드 문제가 생기면 프로세스 내 다른 스레드에 영향을 미칠 수 있음

 

 

1.2.6 콘텍스트 스위칭 ( 중요도 ★★★ )

 

콘텍스트 스위칭을 이해하려면 인터럽트를 알아야한다

 

  • 콘텍스트 : CPU가 처리하는 프로세스의 정보
  • 인터럽트 : CPU에서 프로세스를 처리하다가 입출력 관련 이벤트가 발생하거나 예외 상황이 발생할 때 이에 대응할 수 있게 CPU에 처리를 요청하는 것을 의미
  • 1.2.4의 프로세스 상태도 참고
  • 인터럽트가 발생하는 경우, 입출력이 발생할 때 CPU 사용 시간이 만료되었을 때, 자식 프로세스를 생성할 때이다.
  • CPU는 하나의 프로세스만 처리할 수 있으므로 멀티 프로세스를 처리하려면 CPU스케줄러에 의해 인터럽트가 발생하면서 콘텍스트 스위칭이 이뤄진다.

즉, 멀티 프로세스 환경에서 CPU가 처리 중인 프로세스의 정보를 바꾸는 것을 의미

 

콘텍스트 스위칭 과정

 

 

처리중인 프로세스를 P1, 다음에 처리할 프로세스를 P2라고 가정

 

CPU가 P1을 처리하던 중 운영체제에 의해 인터럽트 발생  P1은 유휴 상태(idle)로 변함 스케줄러는 레지스터에 있는 처리 중인 작업 정보를 P1의 PCB를 저장 P2의 PCB에 있는 정보를 가져와 레지스터에 로드 CPU는 P2를 처리하기 시작

 

P1의 정보를 P1의 PCB에 저장된 정보를 레지스터에 로드하는 동안 CPU는 아무 일도 못하게 된다.

어떤 처리를 하는데 간접적인 처리 시간과 메모리가 소요되는 경우를 '오버헤드가 발생한다'라고 함

 

  • 멀티 스레드를 처리할 때도 콘텍스트 스위칭이 이뤄지지만, 멀티 프로세스의 콘텍스트 스위칭보다 시간과 메모리 자원을 적게 사용
  • 멀티 스레드는 스택을 제외한 힙, 데이터, 코드 영역을 공유하므로 레지스터에 저장하고 로드해야 하는 데이터 상대가 적기 때문 
  • CPU에서 처리 중인 프로세스가 중간에 변경되어도 이전에 실행하던 코드를 이어서 실행할 수 있는 이유는 PCB에 프로그램 카운터와 스택 포인터 값이 저장되어 있기 때문이다. 실행할 명령어의 주소 값이 무엇인지, 데이터가 스택에 어디까지 채워져 있는지 알고 있으므로 콘텍스트 스위칭이 원활하다.
프로그램 카운터 : 프로세스가 이어서 처리해야 하는 명령어의 주소 값
스택 포인터 : 스택 영역에서 데이터가 채워진 가장 높은 주소 값

 

참고 링크 

https://seamless.tistory.com/42

 

동시성(Concurrency) vs 병렬성(Parallelism)

서점에 가면 다양한 언어별로 동시성을 다루는 책들을 많이 볼 수 있습니다. 프로그래밍을 하다 보면 이러한 동시성 처리가 필요한 경우가 있습니다. 그런데 동시성이라는 말을 종종 병렬성과

seamless.tistory.com

https://resilient-923.tistory.com/217

 

[운영체제(OS)] 프로세스와 컨텍스트 스위칭(Context Switching)이란?

이번 시간에는 운영체제, 그리고 개발자의 상식에서 빼놓을 수 없는 프로세스에 대해서 알아보려고 합니다. 사실 일상생활에서도 많이 쓰이는 단어이기도 하죠. 0. 그럼 프로세스(Process)란 뭘까

resilient-923.tistory.com