[CS] OS 스레드 , 프로세스 차이(멀티스레드와 멀티프로세스차이, PCB)

jake·2022년 10월 27일
0
post-thumbnail

스레드, 프로세스 차이

프로세스

프로그램

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


프로세스

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

  • 실제 메모리에 적재되어 프로세서에 의해 실행되고 있는 컴퓨터 프로그램
    = 실제 CPU를 차지해서 수행중인 프로그램


프로그램 → 프로세스

운영체제는 프로그램을 실행하기 위해 프로그램을 메모리의 적당한 위치로 가져온다. 그리고, 운영체제는 프로세스를 관리하기 위해 PCB(Process Control Block)를 생성한다.


PCB : 프로세스 제어 블록

  • 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 OS 커널의 자료구조
  • OS가 프로세스 스케쥴링을 위해, 프로세스에 관한 모든 정보를 가지고 있는 데이터베이스 같은 것

 

프로세스 생애주기

생성 상태 : 프로그램을 메모리에 가져와 실행 준비가 완료된 상태, PCB가 생성된다.
준비 상태 : 실행을 기다리는 모든 프로세스가 자기 순서를 기다리는 상태
실행 상태 : 선택된 프로세스가 CPU를 사용하는 상태
대기 상태 : 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때 까지 기다리는 상태
완료 상태 : 프로세스가 종료된 상태, PCB가 삭제된다.

 

프로세스의 구조

프로세스는 운영체제로부터 시스템 자원을 할당받는 작업의 단위가 프로세스라고 했다.
프로세스는 각각 별도의 독립된 주소공간 할당 . 독립된 메모리 영역 할당받는다

 




스레드

프로세스가 할당받은 자원을 이용하는 실행의 단위.
스레드는 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 한다.
프로세스는 단순한 껍데기일 뿐, 실제 작업은 스레드가 담당한다. 프로세스 생성 시 하나의 주 스레드가 생성되어 대부분의 작업을 처리하고 주 스레드가 종료되면 프로세스도 종료된다.
모든 프로세스는 한 개 이상의 스레드(메인 스레드)가 존재한다.
이때 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 한다.
스레드는 프로세스 내에서 각각 Stack만 따로 할당받는다. 각각의 스레드는 별도의 Register 와 Stack 을 갖고 있지만, Code, Data, Heap 영역은 공유한다. 따라서 어떤 스레드에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제로 종료된다. 또한 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(Sibling Thread)도 그 변경 결과를 즉시 확인할 수 있다.




멀티프로세스 vs 멀티스레드

멀티프로세스

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


장점

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


단점

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

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


멀티 스레드

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


장점

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


단점

  • 스레드 하나가 고장나면 해당 스레드가 속해있는 프로세스가 종료될 수 있다.(안정성 낮음)
  • 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수밖에 없다. (병목현상, 데드락)
  • 디버깅이 어려움

 

 

정리

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

0개의 댓글