- 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 요구하지도 않고, 새롭게 공간을 생성하지도 않는다.
- Multithread : 1개의 process 안에 여러개의 thread 실행
- 각각의 thread 는 concurrent 하게 진행.
- 앞에서 봤던 block 상태가 된다는 것은 thread 가 block 이 된다는 뜻임.
-> 지금까지 봤던 경우는 single thread process 였으므로, thread 가 block 되었지만 하나뿐이라 process 자체가 block 된 것처럼 보임.- thread 각각 다른 CPU 할당받으면 parallel 하게 실행되므로 성능이 좋아진다.
- 효율에 따른 방법
- 1 process, 1 thread
-> 실행되고 있던 thread 가 input wait 상태로 들어가면 기존에 입력받았던 데이터 처리 불가- multiprocesses
-> process 간 소통 시 IPC 를 사용해 느리다. ( OS 를 거쳐야 하므로 )
-> 각 프로세스마다 PCB 를 할당해줘야 하므로 main memory 가 많이 필요함. ( 자원을 많이 사용 )- 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 의 장점을 활용할 수 없음.