It is just my opinion, so don't you attack me. please!
But if this posting has some incorrect informations, you comment about that
Please!!
Process & thread
Process 상속
· Process를 fork()를 통해 생성할 경우, Parent Process로부터 text영역은 공유하게 되고 code, stack영역은 별도로 할당 됩니다. 또한 여러가지 자원들도 상속됩니다. PC register는 같지만 다른 문맥을 갖게 됩니다.
· exec()를 호출하면 text, code, stack의 내용이 부모와 달라지게 됩니다. 하지만 부모와의 관계, 할당된 자원은 그대로 유지됩니다.
· 만약 자식은 살아있는데 부모가 exit()를 호출한다면? 부모가 사라졌기 때문에 자식을 Pointing할 수가 없어지겠죠. 또한 자식의 주소공간이 사라지고, 자원 할당에 대한 정보도 사라질 것입니다. 하지만 PCB는 그대로 남게 됩니다. 이런 경우를 좀비 상태라고 합니다.
· 이런 상태를 방지하기 위해, 부모에서는 Abort()라는 함수를 호출하고 다른 자식 프로세스를 끝내라고 명령합니다. 그래서 부모에서 fork()함수를 호출 했을때 리턴 값이 자식 프로세스의 id인 것입니다.Process vs. thread
· OS 는 프로세스를 만들고 프로세서 위에서 실행됩니다. (processor는 H/W적인 측면에서 "컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛"입니다. 또는 CPU라고도 합니다.)
· Thread는 프로세서를 사용하는 최소 단위입니다.
· process의 단점: 공유 변수를 갖기 어렵고, OS가 제공하는 특수 구조체 및 공유파일을 사용합니다.
· Thread: code와 data는 공유하고 stack과 register 상태만 따로 갖는 형태입니다.
광역 변수를 thread간 통신 수단으로 활용할 수 있고, thread는 생성이 빠르고 자원 점유가 적습니다. 또한 thread는 running flow가 다르고, call stack이 서로 다릅니다.
· Thread의 장점: 응답성이 좋고, 자원 공유하기 편하고, 경제적이고, 다중처리구조를 활용합니다.
· Process는 반드시 thread 자료구조를 만들어야하고 그 후 main 을 얻어와 만들어진 메인 thread에서 작동되도록 해야하고, 또한 thread는 여러 개가 하나의 프로세스 내에 만들어 질 수 있습니다.User thread vs. Kernel thread
· User thread
User가 library를 이용하여 구현, library가 관리하며 Kernel에서 User thread는 인식할 수 없습니다. 만약 한 개의 User thread가 blocking I/O(System call) 상태이면, 다른 thread들도 모두 blocking상태가 됩니다.
· Kernel thread
OS가 직접 생성하고, 지원하며, 스케줄링도 해주고 관리는 커널 단에서 진행합니다. 커널에서 인식할 수 있기 때문에 thread 단위로 스케줄링이 가능. 단점으로는 관리가 느리다점이 있습니다.