윈도우의 프로세스와 스레드 (1)
윈도우의 프로세스와 스레드
시분할 멀티테스킹(Time sclicing Multitasking)
운영체제는 인간의 입장에서 본다면 동시에 많은 프로그램을 수행하고있는것처럼 보이지만 실제로는
아주 짧은 하나의 실행단위동안 운영체제의 일부와 조합된 특정 코드가 시스템 전체를 장악하고
있습니다. 사람이 느끼지 못할정도로 빠르게 전환되면서 마치 동시에 작업이 수행되는 것처럼 착각하게됩니다.
이것이 시분할 멀티 태스킹 입니다.
CPU 사용 점유율
CPU 의 사용 점유율을 이야기할때 시분할 멀티테스킹 개념을 사용하게 되며,
특정 프로그램이 CPU 의 10%를 점유 하고있따는 말은 1시간동안 컴퓨터 사용시 0.1 시간동안 특정프로그램을 위해 사용하고있다는 의미입니다.
시분할 멀티테스킹은 협업(cooperative) 와 선점형(preemptive) 멀티태스킹으로 구분
비선점형(협업) 멀티태스킹은 운영체제가 강제로 작업 제어권을 획득 할수없으며 각종 자원의 점유로 인해 시스템에서
불필요하게 소모되는 시간이 많습니다.
현재 운영되고있는 실제 운영체제는 선점형 멀티 태스킹을 사용하는 경우가 많습니다.
선점형 멀티태스킹은 운영체제에 의해 프로그램 수행 여부가 결정되며 운영체제의 동작 역시 백그라운드(유닉스의 백/포그라운드 의미와 다름)로 동작합니다.
운영체제에 의해 시스템 자원이 배분되고 프로세스의 동작이 결정되기 때문에 특정 프로세스의 자원 점유로 인한 시스템 안정도 하락도 거의 발생하지않습니다.
스케줄링
시분할로 멀티테스킹을 한다면 일정시간동안 어떤 순서로 프로그램을 수행시킬것인가 문제도 생깁니다.
윈도우 시스템에서는 이 단위를 퀀텀(Quantum) 이라고 하며 근본적으로는 20ms 의 수행 시간 간극을 가지고있습니다.
스레드 자체도 위계실서를 가지고있다
항상 위계 질서가 높은 스레드가 수행우선권(priority) 를 갖고, 수행 우선권이 가장 높은 작업이 먼저 수행됩니다.
윈도우에서는 스케줄링 퀀텀이 스레드에게 배분됩니다.
유닉스에서는 프로세스단위로 스케줄링이 배분되는데 여기서 차이가 발생합니다.
유닉스와는 달리 윈도우에서는 스케줄의 기본단위가 프로세스가 아닌 스레드라는것은 모든 프로세스는
기본적으로 스레드를 갖게 된다는 말입니다.
프로세스
프로세스는 애플리케이션에서 사용되는 리소스를 관리하는 가장 큰 체계입니다.
프로세스는 일정 고유 영역의 메모리를 할당받고 운영되며, 프로세스는 전역 변수와 환경 변수및 힙과 스레드 스택 및 코드를 가지고있습니다.
스레드는 프로세스의 일부분에 속한 개념입니다.
윈도우프로세스와 유닉스 개념의 프로세스와 큰 차이는 없습니다. 하지만 프로세스 자체가 포괄하는 개념적인 측면이 더 많기 때문에 근본적으로는
그 규모가 더 크게 보이며 윈도우 시스템이 멀티스레딩을 기준으로 설계되어있기때문에 다량의 프로세스가 발생할시 시스템 속도가 저하되는 문제점을 만들수있습니다.
프로세스 단위로 멀티태스킹이 수행되는것은 전통적인 윈도우 방식이지만 이는 몇가지 한계점을 가지고있습니다.
먼저 프로세스 상호간 통신방법상의 한계정이 가장 큽니다.
각각 프로세스는 모드 다른 사용자 권한을 갖고 있으며 구분되는 메모리 영역을 갖고있기때문에 별도의 프로그램적 과정이 필요합니다.
보통 파이프 라고 불리우는 프로세스 상호간의 통신수단과 IPC(Interprocess Call)를 사용할수있게 코드가 작성되어야 프로세스 간의 데이터 이송을 할수있습니다
IPC 가 프로세스 상호간의 통신을 담당하지만 실제 IPC 를 쓰는것은 DCE/RPC 를 사용할때 외에는 그렇게 많이 존재하지는 않습니다.
로컬 컴퓨터에서는 멀티 태스킹으로 애플리케이션이 수행될경우 멀티 스레딩으로 처리하기 때문에 프로세스 상호간의 변수 전달과 같은 문제들이
발생하지 않습니다.
Reference
https://karfn84.tistory.com/entry/%ED%8E%8C%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%9C%88%EB%8F%84%EC%9A%B0%EC%9D%98-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C