[OS] Thread

정민경·2023년 4월 25일
0

Operating_System

목록 보기
4/8

- Objection

  1. Process 와 thread 의 차이
  2. multithread 사용

1) Process 와 thread 의 차이

  • process : 실행 및 스케줄링되는 형태(?) ( 자원들의 집합 )
  • Thread : 프로세스 내부 실행 단위 ( instruction 들의 집합 )
  • 기본적으로 1개의 프로세스에는 1개의 thread 존재 ( 기본적으로 생성 )
    -> 사용자가 원할 경우에는 thread 추가 가능
  • 프로세스와 thread 각각이 가지고 있는 resources
    • process
      • PCB ( code, data, stack, Memory for register context )
    • thread
      • Stack
      • Thread control block ( Memory for register context )

thread 의 좋은 점

  • 프로세스보다 생성시간이 짧다.
    -> 프로세스는 전부 생성, thread 는 TCB 만 생성
  • 프로세스보다 terminate 시간이 짧다
  • thread 끼리 switch 하는 시간이 process switch 보다 짧은 시간 소요
  • 프로세스간의 소통보다 더 짧은 시간에 소통 가능하다.
    -> thread communication 은 process 의 data 영역을 공유해 사용하면 됨.
    -> 개념 자체는 IPC 의 shared memory 와 동일하지만, OS 요구하지도 않고, 새롭게 공간을 생성하지도 않는다.

2) multithread 사용

  • Multithread : 1개의 process 안에 여러개의 thread 실행
  • 각각의 thread 는 concurrent 하게 진행.
  • 앞에서 봤던 block 상태가 된다는 것은 thread 가 block 이 된다는 뜻임.
    -> 지금까지 봤던 경우는 single thread process 였으므로, thread 가 block 되었지만 하나뿐이라 process 자체가 block 된 것처럼 보임.
  • thread 각각 다른 CPU 할당받으면 parallel 하게 실행되므로 성능이 좋아진다.
  • 효율에 따른 방법
    1. 1 process, 1 thread
      -> 실행되고 있던 thread 가 input wait 상태로 들어가면 기존에 입력받았던 데이터 처리 불가
    2. multiprocesses
      -> process 간 소통 시 IPC 를 사용해 느리다. ( OS 를 거쳐야 하므로 )
      -> 각 프로세스마다 PCB 를 할당해줘야 하므로 main memory 가 많이 필요함. ( 자원을 많이 사용 )
    3. multiple thread
      -> multi processes 와 효과는 동일하지만 단점을 보완하는 방법임.
  • 어디에 구현되냐에 따른 thread
    • User-level thread : user space 에 multi thread 존재
      • user level 에서는 multi thread 지만 kernel level 에서 봤을 때는 single thread
      • 즉 1개의 thread 만 block 이 되어도 kernel 입장에서는 process 에 있는 thread 가 모두 block 이 된것으로 보여 process 자체를 block 시킴.
        -> process 에 있는 모든 thread block 됨.
    • kernel-level thread
      • kernel 이 봤을때도 이제 multi thread 로 인식 가능한 방법
  • user-level thread 의 장점
    • kernel-level thread 보다 overhead 가 작다.
      -> user-level thread 는 응용프로그램이 생성
      -> kernel-level thread 는 kernel 이 생성.
      -> kernel-level 은 mode change 필요
      -> kernel-level 에서 thread 생성하고자 kernel 로 갔을 때 생성만 하고 바로 user-level 로 돌아오는 것이 아닌 kernel 이 해야하는 일들을 모두 수행하고 돌아오기 때문에 속도가 느림.
    • 기본 OS 의 스케줄링 알고리즘에 방해주지 않고, 사용자 수준의 스케줄링 알고리즘을 맞출 수 있다.
    • 모든 OS 에서 thread 를 실행할 수 있다.
  • user-level thread 의 단점
    • thread 하나가 block 되면 process 자체가 즉, 다른 thread 들도 block 된다.
    • multiprocessing 의 장점을 활용할 수 없음.

0개의 댓글