본문 바로가기
Programming/Basic

[OS] 프로세스, 쓰레

by Blemish 2022. 7. 1.

Goal

  • 프로세스와 쓰레드를 이해한다.

 

프로세스(Process)

  • 운영체제로부터 할당받은 하나의 단위
  • 메모리 영역에서 실행되고 있는 프로그램의 인스턴스
  • 프로세스에는 Code, Data, Stack, Heap 영역이 존재한다.
  • 프로세스에는 최소 한 개 이상의 쓰레드가 존재한다.
  • 다른 프로세스의 데이터에 접근할 수 없다.

쓰레드(Thread)

  • 프로세스내에서 실행되는 단위를 나타낸다
  • 프로세스내에 쓰레드는 여러 개가 존재할 수 있다.
  • 쓰레드에는 오직 Stack 영역이 할당되고 다른 쓰레드와 프로세스 내의 다른 자원들을 공유할 수 있다.

 

 

멀티 프로세스와 멀티 쓰레드

  • 멀티 프로세스란 하나의 응용 프로그램을 실행할 때 여러 개의 프로세스가 하나의 작업을 처리하는 방식이다.
    • 장점
      • 한 개의 프로세스에 오류가 발생해도 프로그램이 동작한다.
    • 단점
      • 오버헤드가 발생할 가능성이 높다. 여러 개의 프로세스가 번갈아 작업을 하기 때문에 Context Switching이 발생하며 과정 속에서 메모리 초기화 등의 생각보다 비용이 많이 드는 작업을 하기 때문에 오버헤드가 발생한다.
  • 멀티 쓰레드란 프로세스내에서 여러 개의 쓰레드가 하나의 작업을 처리하는 방식이다.
    • 장점
      • 오버헤드가 적다. 쓰레드 단위로 작업을 하기 때문에 Context Switching이 발생하는 경우가 적다.
      • 멀티 프로세스처럼 프로세스를 생성하여 사용하는 작업 소모를 줄일 수 있다.
    • 단점
      • 동기화 작업이 필요하다.
      • 쓰레드에 오류가 발생하면 다른 쓰레드에 영향을 줄 수 있다.

 

문맥 교환(Context Switching)

  • 실행 중인 프로그램의 여러 개의 프로세스 중 하나의 프로세스가 대기 상태에 있다가 다시 사용 상태로 복귀하는데 걸리는 시간(비용)을 의미한다.

 

동시성과 병렬성

  • 동시성이란 한 개의 코어에서 두 개의 쓰레드가 동시에 작업을 처리하는 것을 의미한다. 한 개의 코어에서는 하나의 작업밖에 하지 못하므로 실제로는 두 개의 쓰레드가 서로 Context Switching을 하면서 작업을 처리하게 된다. 
  • 싱글 코어에서 멀티쓰레드 방식

  • 병렬성이란 여러 개의 코어에서 동시에 작업을 처리하는 것을 의미한다. 이 때 코어들은 작업은 동시에 시작해야한다.

 



 

 

 

동시성 프로그래밍은 여러 쓰레드에서 공유하고 있는 자원에 접근이 가능하기 때문에 공유 자원에 대해서 경쟁 상태나 교착 상태가 발생할 수 있다.

 

경쟁 상태

  • 동시에 인풋이나 조작에 의해서 공유 자원의 결과값에 영향을 미칠 수 있는 상태를 의미한다. 이는 공유 자원의 결과값을 보장할 수 없는 상태를 나타낸다.

교착 상태

  • 여러 개의 프로세스, 쓰레드가 서로 필요한 공유 자원을 미리 점유하고 필요한 다른 자원(다른 프로세스, 쓰레드가 미리 점유한 자원)을 사용하기 위해서 계속 대기 중인 상태를 의미한다.

뮤텍스(Mutext)

  • 동시 프로그래밍에서 공유 불가능한 자원을 동시에 사용하지 못하게하는 알고리즘
  • Object 객체(key)가 존재하고 공유 자원을 사용하기 위해서는 key를 소유한 프로세스, 쓰레드만 공유자원을 사용할 수 있는 상호배제 기법이다.

세마포어(Semaphore)

  • 공유 자원을 지정한 수 만큼 사용할 수 있도록 통제하는 방법

 

'Programming > Basic' 카테고리의 다른 글

메모리 구조  (0) 2022.07.03
가비지 컬렉션(Garbage Collection, GC)  (0) 2022.07.02
SOLID 원칙 (1)  (0) 2021.05.11
객체지향의 원리 - 캡슐화  (0) 2021.05.07
객체지향의 원리 - 추상화  (0) 2021.05.03

댓글