programmingu

프로세스 vs 스레드 (+ 멀티프로세스, 멀티스레드) 본문

Computer Science/운영체제

프로세스 vs 스레드 (+ 멀티프로세스, 멀티스레드)

예진잉구 2022. 1. 6. 05:57

프로세스


cf) 프로그램

  • 어떤 작업을 실행할 수 있는 파일
  • 파일이 저장장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태 ⇒ 즉 사용자가 눌러서 실행하기 전의 파일. 코드 덩어리

프로세스 정의


  • 프로그램을 실행하는 순간 파일은 컴퓨터 메모리에 올라가게 되고(⇒ 동적인 상태). 이 실행중인 프로그램을 프로세스라고 한다.
  • 운영체제로부터 시스템 자원을 할당받는 작업의 단위

프로그램 → 프로세스


  • 운영체제는 프로그램을 실행하기 위해 프로그램을 메모리의 적당한 위치로 가져온다. 그리고, 운영체제는 프로세스를 관리하기 위해 PCB(Process Control Block)를 생성한다.
  • 프로세스 생애주기
    • 생성 상태 : 프로그램을 메모리에 가져와 실행 준비가 완료된 상태, PCB가 생성된다.
    • 준비 상태 : 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태
    • 실행 상태 : 선택된 프로세스가 CPU를 사용하는 상태
    • 대기 상태 : 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때 까지 기다리는 상태
    • 완료 상태 : 프로세스가 종료된 상태, PCB가 삭제된다.

프로세스의 구조


  • 위에서 운영체제로부터 시스템 자원을 할당받는 작업의 단위가 프로세스라고 했다.
    • 시스템 자원의 예: CPU 시간, 운영되기 위해 필요한 주소 공간, Code, Data, Static Heap의 구조로 되어 있는 독립된 메모리 영역
  • 프로세스는 각각 별도의 독립된 주소공간 할당 . 독립된 메모리 영역 할당. ⇒ 만약 한 프로세스를 실행하다가 오류가 발생해서 프로세스가 강제로 종료된다면, 공유하고 있는 파일을 손상시키는 경우가 아니라면 아무런 영향을 주지 않는다.

  • Code(text) : 코드 자체를 구성하는 메모리 영역(프로그램 명령) 정적영역
  • Data : 전역변수, 정적변수, 배열 등 정적 영역
    • 초기화 된 데이터는 data 영역에 저장
    • 초기화 되지 않은 데이터는 bss(Block Stated Symbol) 영역에 저장
  • Heap : 동적 할당 시 사용 (new(), malloc() 등) 동적영역
  • Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역) 동적 영역

 

 

스레드


스레드의 정의


  • 프로세스가 할당받은 자원을 이용하는 실행의 단위.
  • 스레드는 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 한다.
  • 프로세스는 단순한 껍데기일 뿐, 실제 작업은 스레드가 담당한다. 프로세스 생성 시 하나의 주 스레드가 생성되어 대부분의 작업을 처리하고 주 스레드가 종료되면 프로세스도 종료된다.
  • 스레드는 프로세스마다 최소 1개(메인 스레드 포함). 여러 개 생길 수 있다.
  • 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다. ⇒ 어떤 스레드 하나에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제로 종료된다. (코딩할 때 어떤 함수에서 오류 발생하면 프로세스 실행 끝내버림)

 

 

 

멀티프로세스


하나의 컴퓨터에 여러 CPU 장착 → 하나 이상의 프로세스들을 동시에 처리(병렬)

  • 두개 이상 다수의 프로세서(CPU)가 협력적으로 하나 이상의 작업(Task)을 동시에 처리하는 것이다. (병렬처리)
  • 프로세스 간에 Code, Data, Heap, Stack 영역 모두 서로 공유하지 않는다.

장점

  • 독립된 구조로 안전성 (메모리 침범 문제를 OS 차원에서 해결)
  • 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아, 작업속도가 느려지는 손해정도는 생기지만 정지되거나 하는 문제는 발생하지 않는다. 동작은 함

단점

  • 각각 독립된 메모리 영역을 갖고 있어, 작업량 많을 수록 오버헤드 발생.
  • Context Switching으로 인한 성능 저하

 

 

멀티 스레드


하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것

  • 스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해줌

장점

  • Context-switching할 때 공유하고 있는 메모리만큼 메모리 자원을 아낄 수 있다.
  • 프로세스의 Stack영역을 제외한 모든 메모리를 공유하기 때문에 통신 부담이 적어 응답 시간이 빠르다.

단점

  • 스레드 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료될 수 있다.(안정성 낮음)
  • 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수밖에 없다. (병목현상, 데드락)
  • 디버깅이 어렵다.
  • 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다.

종류                   장점                                                                 단점

멀티 프로세스 하나의 프로세스가 죽어도 다른 프로세스에게는 영향을 끼치지 않는다. 각각 독립된 메모리 영역을 갖고 있어 작업량이 많을 수록 오버헤드가 발생하고 Context Switching으로 인한 성능 저하를 유발한다.
멀티 스레드 프로세스의 응답시간이 단축되고 시스템의 처리율이 향상된다. 또한 코드영역과 데이터 영역을 공유하기 떄문에 자원 소모가 적다. 프로그램 디버깅이 어렵고 하나의 스레드에 문제가 생기면 전체적인 프로세스에 영향을 끼치게 된다.

 

 

추가


멀티 프로그래밍

  • 프로세서가 입출력 작업의 종료를 대기할 동안 하나의 프로세서에서 다른 프로그램을 수행할 수 있도록 하는 것 ( cpu 하나당 1개의 프로세스 처리함)

멀티 태스킹 (Multi-taking)

  • 멀티 태스킹은 task를 OS의 스케쥴링에 의해 여러개의 task를 번갈아가며 수행하는 것을 의미한다.

⇒ 멀티 프로그래밍은 프로세서의 자원낭비를 막기 위함이고, 멀티태스킹은 정해진 시간동안 각각의 task를 번갈아가며 수행하는 것을 의미한다.

Context Switching이란?

  • 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정
  • 즉, 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구하는 과정을 말함
  • → 프로세스는 각 독립된 메모리 영역을 할당받아 사용되므로, 캐시 메모리 초기화와 같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재함

총 정리


  • 프로세스: 운영체제로부터 시스템 자원을 할당받는 작업의 단위
  • 스레드: 할당 받은 자원을 이용하는 실행의 단위
  • 프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용하는 차이가 존재함
  • 프로그램→프로세스→스레드

 

 

 

참고자료

https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Operating%20System/Process%20vs%20Thread.md

 

GitHub - gyoogle/tech-interview-for-developer: 👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖

👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.

github.com

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

 

[OS] 프로세스와 스레드의 차이 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

http://terms.tta.or.kr/dictionary/dictionaryView.do?word_seq=058048-1 

 

TTA정보통신용어사전

한국정보통신기술협회(TTA)는 정보통신 기술 발전과 타 분야와의 기술 융합에 따라 무수히 생성되는 정보통신용어를 해설하고 표준화하여, 전문가뿐만 아니라 비전문가들도 올바르게 활용할 수

terms.tta.or.kr

https://kyun2da.dev/CS/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C/