티스토리 뷰

면접에서 OS 관련 질문으로 빠지지 않은 주제인 프로세스와 스레드,
둘의 차이는 무엇인지, 멀티 프로세스와 멀티 스레드의 장단점은 무엇인지 알아보겠습니다.


1. 용어 정리

  • 실행단위: cpu core 에서 실행되는 하나의 단위로 process / thread 를 포괄하는 개념
  • 프로세스: 하나의 스레드만으로 이루어진 단일 스레드 프로세스 
  • 동시성: 한순간에 여러가지 일을 한꺼번에 진행하는 것이 아닌 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것

프로세스의 정의에 대해 의아하신 분들이 계실텐데, 본 포스터에서는 스레드와 프로세스의 비교를 위해 특별한 언급이 없다면,
프로세스를 위와 같이 단일 스레드 프로세스로 정의하겠습니다.

 


2. 프로세스

  • 프로그램: 어떤 상황에서 어떻게 작동해야 하는지 적혀있는 컴퓨터의 행동지침서, 사실상 코드파일
  • 프로세스: 실행되고 있는 프로그램, 즉 컴퓨터가 특정한 행동지침(프로그램)을 따라서 특정한 행동을 하고 있는 상태

"프로그래밍을 한다." 라는 단어를 생각했을때 떠오르는 이미지는 어떤게 있나요? 
대부분의 사람들은 검은 화면에 열심히 키보드를 눌러서 무언가 코드 덩어리들을 입력하는 모습을 생각할 것 같습니다.

 

프로그래밍을 한다는건 코드 파일을 만든다는 것을 의미하고, 프로그래밍의 결과물인 프로그램은 우리가 입력해서 만든 코드 파일입니다.
이러한 코드파일은 컴퓨터가 어떤 상황에 어떤 방식으로 작동해야 하는지에 대한 정보가 적혀있는 컴퓨터의 행동지침입니다.

하지만 우리가 열심히 만든 코드파일은 어딘가 컴퓨터에서 실행되기 전까지 아무런 동작을 하지 않습니다.
우리는 프로그램을 작동시켜, 우리가 원하는대로 컴퓨터가 작동하게 만들어야합니다. 
이때 실행되고 있는 프로그램프로세스라고 합니다.


프로그램이 프로세스가 되면서 발생하는 일은 다음과 같습니다.

  1. 프로세스가 필요로 하는 재료들이 메모리에 올라간다.
  2. 해당 프로세스에 대한 정보를 담고 있는 PCB(process control block)이 만들어진다. 

Firefox.exe 라는 프로그램이 메모리에 올라감. cpu에서 메모리에 올라간 파일을 실행


3. context switching

1개의 코어를 가진 cpu에서 유튜브 playlist 를 틀고, 지뢰찾기 게임을 하고 있다고 생각해 봅시다.
이때 cpu 는 두개의 일을 동시에 한꺼번에 처리할 수 없습니다.
하지만 두개의 일을 매우 빠르게 번갈아 가면서 처리해서 마치 동시에 실행되는 것처럼 보일 수는 있습니다. 

이때 운영체제는 하나의 프로세스가 cpu를 사용 중인 상태에서 다른 프로세스가 cpu를 사용하도록 하기 위해, 이전의 프로세스의 상태를 보관하고 새로운 프로세스의 상태를 적재하는 작업을 하게 되는데, 이를 context switching 이라고 합니다.

Process Context Switching(출처:  https://www-sys-aics.riken.jp/ResearchTopics/os/ulp/ )

위의 그림에서 ULP 는 user level process 를 의미하고 본 포스트의 프로세스와 동일합니다.

 

지뢰찾기 프로세스로 옮겨가기 위해 cpu는 직전에 사용했던 유튜브 프로세스의 정보를 저장하고, 메모리 캐시에 있는 유튜브 프로세스 관련 데이터를 삭제합니다. 이후 지뢰찾기 프로세스와 관련된 데이터를 캐싱하고 지뢰찾기 관련 프로세스를 실행시킵니다. 

이 처럼 프로세스는 다음 프로세스로 옮겨가기 위해서 기존에 사용했던 재료들을 전부 삭제하고 새로 로드합니다. 


하지만 만약 우리가 유튜브 영상을 켜둔채로 다른 유튜브 영상을 검색중이라면 어떨까요? 
유튜브 영상을 재생하는 것과 유튜브 검색을 하는것은 서로 겹치는 많은 자원이 있습니다.
이런 경우에는 겹치는 재료들을 공유하면서 서로 다른 재료만 새로 불러오와서 사용하는 것이 효율적일것 같습니다.


4. multi process / multi thread

  • 스레드: 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 경량화된 프로세스
  • 경량화
  • 멀티 프로세스: 부모 process 가 자식 process 를 fork() 해서 자식 프로세스를 여러개 만들어서 일을 처리하도록 한다. 이때 자식 process 는 부모와 별개의 메모리 영역을 가진다.
  • 멀티 스레드: 한 프로세스 내에서 구분지어진 여러개의 실행단위를 이용하여 일을 처리하도록한다. 각 스레드는 자신만의 stack 영역만 가지고 code, data. heap 메모리는 서로 공유할 수 있다.

멀티 프로세스와 멀티 스레드를 올바르게 비교하기 위해서는 하나의 어플리케이션이 여러가지 일을 동시에 처리하는 상황에서 라는 전제조건이 필요합니다. 
완전히 다른 두개의 어플리케이션을 동시에 실행하는 경우에는 두 어플리케이션이 서로 겹치는, 공유되는 자원이 존재하지 않아 멀티스레드 환경을 사용하기 적합하지 않기 때문입니다. 

 

multi threading / processing (출처: https://velog.io/@sehrltjr/Thread)

멀티 스레드 환경

  • 공유 자원을 이용한 통신절감
  • 메모리의 효율적인 이용 (캐싱 적중률 높음)
  • context swtiching 비용 적음
  • 공유 자원에 대한 추가적인 관리가 필요함

멀티 프로세스 환경

  • 각 process가 독립적 메모리 공간을 가짐
  • IPC(Inter-Process Communication) 를 이용한 통신
  • switching 비용이 큼
  • 공유자원이 없기 때문에 동기화 작업이 필요 없음

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함