정의 : 메모리에 올라와 리소스를 할당받아 실행하는 프로그램
특징 :
- 다른 프로세스의 자원에 독립된 메모리 영역을 할당 받음.
추상화
위의 특징과 정의를 기반으로 생각나는 것은 바로 스타크래프트 이다! 마치
땅(OS)에 있는 리소스(미네랄)를 해야할 작업(프로세스)에 할당하면 그 작업이 실행되는 것 (스레드) 을 볼 수 있다. 위의 그림에는 프로브 한기가 생성되고있는 프로세스가 실행 중인 것이다.
정의 : 프로세스에 할당된 자원을 이용해 동작하는 실행 단위
특징 :
- 프로세스 Stack만 따로 할당 받고(stack 에 저장된 함수 호출 정보 때문에 공유되면 복잡해짐), Code, Data, Heap영역은 공유한다.
- 하나의 프로세스 내에서 여러 스레드가 있다면 서로 스레드의 결과를 즉시 확인할 수 있다.
추상화:
그렇다면 스레드는 어떤걸까? 한번 배럭을 연상해보자.
예를 들어 우리는 지금 마린을 100기 뽑아야 한다면 마린의 생성 이라는 프로그램, 즉 프로세스를 통해 마린 생성에 들어가는 미네랄(자원) 을 소모해 최종적으로 프로세스가 원하는 작업을 처리하는 것이 스레드 이다.
추가적으로... 마린 100기를 하나의 배럭에 생산을 하면 비 효율적이기 때문에 많은 배럭을 설치해 마린을 동시 다발적으로 생산하는 것이 멀티 스레드로 알려져있다.
장기 스케줄러
단기 스케줄러
중기 스케줄러
뮤텍스는 Locking 메커니즘으로 Lock을 걸은 스레드만 임계 영역을 나갈 때 Lock 해제.
세라포머는 Signaling 메커니즘으로 Lock을 걸지 않은 스레드도 signal을 사용해 Lock을 해제 가능. (세라포머의 카운터를 1로하면 뮤텍스처럼 활용 가능)
동일한 자원을 동시에 접근하는 작업의 코드 영역.
동시에 공유 자원에 접근하는 것을 막기 위해 임계영역에 진입하는 프로세스는 lock을 획득하고 빠져나올 때 lock을 방출 함으로써 동시 접근을 막음. but 시간적인 효율성 측면에서는 좋지 않음