#
윈도우의 프로세스는
윈도우 커널에서 관리된다고 한다
객체로 구현되어있으며, 새 프로세스를 생성하거나 copy 해서 생성
싱글 프로세스 안에는 멀티 스레드가 제공될수 있고
이것들을 synchronization 하는 기능 제공 


구조는 크게 다르지 않으나 OOP로 구현되어 있기에 프로세스 오브젝트가 있고


윈도우도 프로세스와 스레드 관리를 따로 하게 되고 앞에서 이야기한것과 같다
user job, application 에 대응해서 프로세스가 만들어져서 관리되고
스레드는 dispatchable unit 이 되고 이것을 interrupt 할수도 있고 관리된다.


PCB와 TCB




읽어보기





스레드의 상태, 기본적으로는 거의 같다




윈도우는 SMP를 지원
멀티 스레드가 싱글 프로세스 안에서 잘 돌수 있다
코어가 여러개 있으니 어느 스레드를 어디에 할당할지 문제가 남는다
soft affinity - 한번 할당되어도 다른곳에 할당될수 있도록 함 (문제 생겼을시 다른 프로세스 쓸 수 있다)
hard - 한번 할당되면 그 app를 특정 프로세서에 고정 (캐시가 보존될수 있다. 빠른 처리 기대가능)





# 솔라리스의 프로세스 구성



솔라리스의 스레드 상태




#


프로세스나 스레드 중간에 인터럽트가 들어오면 현재 진행중인 프로세스를 중단시키고 다시 처리하고 돌아오는 구조
인터럽트가 여러개가 들어오면? - 여러 문제 생긴다
어떤것이 우선순위가 높은가, 복잡한 스케줄링 문제

기존 운영체제는 여러 해결책을 내고있지만 잘 해결하지 못하는 문제가 있다.
솔라리스는 좋은 해결책을 제공

각각의 인터럽트를 커널스레드로 독립시켜서 
커널이 그것을 스케줄링해서 synchronize해서 상호배제 해서 인터럽트도 스레드를 이용해서 스케줄링 해주는..




# 리눅스

task_struct 자료구조 사용해서 PCB구현, 그 안에 정보를 담고있다.




리눅스는 스레드와 프로세스간의 구분의 사실 없다.
user level 스레드를 kernel process로 맵핑한다.
스레드의 개념을 포함하는 프로세스를 만들게 하는것 - 구현이 간단하다




# Mac OS


#

스레드는 프로세스중 프로세서관리와 관련된 부분을 따로 떼어내서, 문맥교환을 효율적으로 할수 있게 한것

ULT - 스레드 library를 둬서 그것을 사용해서 스레드를 스케줄링해서, 모드 스위칭이 필요없지만, IO요청하시 나머지 스레드들도 모두 블럭되는 단점이 있다.
ex) java virtual machine 
KLT - 커널 안에 TCB를 만들어서 커널이 스레드의 스케줄링과 관리를 책임진다. 스위칭시 mode switching 필요, kernel level 서비스 요청시 커널 모드로 전환이 필요하고 오버헤드가 따르지만 더 자연스럽게 프로그래밍 가능. 한 스레드가 block 되더라도 다른 스레드는 정상적으로 작동한다

프로세스는 나머지 resource를 관리하는 단위
스레드는 프로세스에 비해 cpu에 관련된 부분만 관리하는 단위가 된다.