본문 바로가기

프로그래밍/CS

[OS] 프로세스와 스레드

 

프로그램 : 컴퓨터에서 어떤 작업을 위해 실행할 수 있는 파일

 

프로세스

  • 프로그램을 실행 시켜 동작하는 상태
  • 메모리에 적재되고, CPU 자원을 할당 받음
  • 코드, 데이터, 스택, 힙 영역으로 구성되어 있음

스레드

  • 프로세스의 한계를 해결하기 위해 등장
  • 하나의 프로세스 내에서 동시에 진행되는 작업 갈래
  • 하나의 프로세스 안에 여러개의 스레드가 존재
  • 프로세스의 스택을 할당받음 => 스레드 별 고유한 스택이 존재
  • 스레드끼리 프로세스의 자원(코드, 데이터, 힙) 공유가 가능

관계

하나의 프로그램 ⊃ 하나 이상의 프로세스 ⊃ 하나 이상의 스레드

 

프로세스 간의 자원 공유

일반적으로는 한 프로세스는 다른 프로세스의 자원에 접근 할 수 없음

 

접근 방법

  • IPC (Inter-Process Communication)
  • LPC (Local inter-Process Communication)
  • 공유 메모리

그러나 멀티 프로세싱은 단순히 CPU 레지스터 교체 뿐만이 아닌, CPU 사이의 캐시 메모리까지 초기화 되기 때문에 자원 부담이 큼

=> 멀티 스레딩이 훨씬 효율적


작업 처리 방식

병렬성 (Parallelism)

여러개의 프로세스, 스레드를 병렬로 동시에 수행

 

동시성 (Concurrency)

병렬성은 물리적으로 동시에 실행 시키는 것이라 볼 수 있으나, 동시성은 동시에 실행 되는 것 처럼 보이게 함

=> 여러개의 프로세스를 번갈아가면서 조금씩 처리하여 프로그램이 동시에 실행 되는 거 처럼 보이게 함 (Context Switching)


멀티 프로세스

  • 하나의 부모 프로세스가 여러개의 자식 프로세스를 생성
    • 부모 프로세스는 자식 프로세스의 PID를 알고 있고, 이를 이용하여 제어
    • 자식 프로세스는 PPID (Parent Process ID)를 알고 있어 부모 프로세스와 통신 가능
    • 그러나 둘은 별개의 프로세스로 독립적으로 실행
  • 장점
    • 프로그램 안정성 : 한 프로세스가 비정상적으로 종료 되어도, 다른 프로세스에 영향 X
    • 프로그램 병렬성
    • 시스템 확장성 : 각 프로세스는 서로 독립적이므로 새로운 기능을 추가 하거나 수정할 때 다른 프로세스에 영향 X => 손쉽게 확장 가능
  • 단점
    • Context Switching Overhead
    • 자원 공유 비효율성
  • 예시) 웹 브라우저의 탭

멀티 스레드

  • 장점
    • 스레드는 프로세스보다 가벼움
    • 자원의 효율성
    • Context Switching 비용 감소 (Context Switching이 존재하긴 함)
    • 응답 시간 단축
  • 단점
    • 안전성 문제 : 하나의 스레드에서 문제 발생 시, 프로그램이 종료 될 수 있음
    • 동기화로 인한 성능 저하 (병목 현상 발생) => 임계영역, 세마포어, 뮤텍스로 해결
    • 데드락 발생 가능 (무한정 대기) => 상호배제, 점유와 대기, 비선점, 순환 대기로 피하기
    • Context Switching Overhead 존재..
    • 디버깅이 어려움
  • 예시) 웹 서버

Reference)

[프로세스와 스레드의 차이

[멀티 프로세스와 멀티 스레드]

'프로그래밍 > CS' 카테고리의 다른 글

공유자원과 교착상태  (0) 2023.11.05
Recent Posts
Popular Posts