[운영체제] Process와 Thread의 차이

김우경·2020년 12월 3일
1

Thread와 Process


process

: 실행중인 프로그램
-> 운영체제로부터 시스템 자원을 할당받는 작업의 단위
-> 독립적인 address space를 갖고, 독립적인 resource를 가진다

thread

: 경량화된 프로세스로 process가 갖는 resource 전부 공유
-> 생성, 사용에 대한 오버헤드가 적음
-> 병렬성 향상
-> context switch시 빠름 ∵ 캐쉬 메모리 비울 필요 x

  • thread는 single process에 <-> process는 여러개의 thread 가질 수 있음
  • thread가 스케줄링/컨텍스트 스위치의 단위가 됨
    : process는 각 thread가 동작하는 컨테이너의 역할만

Process


Process의 정의

  • 실행 중인 프로그램
    -> 운영체제로부터 시스템 자원(CPU)을 할당받는 작업의 단위

특징

  • OS의 실행을 위한 추상화
    -> 실행, 스케줄링의 단위
  • job, task, sequential process라고도 불림
  • 독립된 메모리 영역을 가짐
    : virtual address space, code, data, SP, PC 등
  • OS에서의 process는 유니크하게 구분 가능한 ID를 가짐 -> PID
  • 각 프로세스는 별도의 주소공간에서 실행 -> 다른 프로세스의 변수, 자료구조 접근 x
  • 다른 프로세스의 자원 접근시 프로세스 간 통신(IPC) 이용

생성

  • 한 process가 다른 process를 생성
    : unique한 ID를 갖게 되고, 권한은 보통 물려받음
  • fork()
    : 새 PCB 만들고 초기화 -> 새 address space 생성 -> parent process의 address space 전체 복사해서 address space 초기화-> kernel resources는 parent의 resource로 초기화
  • exec()
    : 새 process가 자신의 메모리 이미지 변경하고 새 프로그램 수행

종료

  • 종료의 조건
    • normal exit
    • error exit
    • fatal exit : os의 판단 아래
    • killing by another process : process가 가진 resource 전부 반환

상태

  • ready : 실행가능하지만 다른 process가 CPU 사용중 -> CPU할당 시 아무 문제없이 사용 가능
  • running: executing on the CPU
  • blocked : 외부 이벤트가 발생할 때 까지 실행x

Thread


Thread의 사용

  • sequential process에서 순차적으로 처리하므로 CPU 4개나 1개나 성능이 같음
    -> parallel programming 도입
    -> 문제점? CPU를 활용 가능한 algorithm은??

  • process가 1개일때 각 function이 다른 CPU에서 돌기 위한 조건은?
    -> CPU의 상태가 여러개가 됨으로 각자의 CPU상태를 저장해야함
    -> 각 CPU가 메모리를 사용하므로 stack이 겹치지 않게 분리해야함

-> 연산의 결과 전달은 ??
(i) file : I/O라 너무 느림
(ii) shared memory : system call 이용하므로 오버헤드가 큼
(iii) socket : 오버헤드가 큼

-> process는 한개지만 각 function을 다른 CPU에서 실행할 수 있게 Thread 사용

Thread란

  • address space를 공유 -> 모든 code, data, privileges, resource를 공유
  • 각각의 thread는 각자의 hw execution stack을 가짐
    -> PC, registers, stack pointer, stack
  • execution state, light weight process라고 불림

Thread 이용의 장점

  • 한번에 여러 동작 가능
    -> Thread의 programming model이 더 단순함
  • thread가 process보다 가벼움: 생성, 제어에 용이
  • 성능 개선 : overlapping I/O, CPU activities, blocking system calls
profile
Hongik CE

0개의 댓글