티스토리 뷰

Study/OS

[Study] Task / Thread

생각많은 소심남 2013. 2. 15. 15:54

Mint64OS를 구현할 때 MultiTasking이나 MultiThreading에 관한 내용을 다뤘지만 그 개념에 대해서 더 자세히 다뤄볼 필요가 있을 듯 해서 정리한다.


사용자가 PC를 사용한다는 것은 다르게 표현하면 사용자가 원하는 서비스를 호출해서 디바이스들이 상호 유기적으로 수행한다고 할 수 있다. 그런데 사용자가 원하는 서비스는 PC가 만들어진 시점에서는 아무런 정의가 되어 있지 않기 때문에 바로 사용할 수 없다. 어딘가에 정의되어 있는 서비스들을 호출할 수 있으면 그 때부터는 PC를 다룬다 라고 표현할 수 있을 듯 하다. 이렇게 보통 그 어딘가 라고 하는 것은 메모리가 대부분을 차지하고 있으며, 이렇게 메모리 상에 정의된 서비스 호출에 따른 과정을 task라고 할 수 있다.조금 비약적으로 예를 들자면 문서 프로그램을 다루기 위해서 사용자가 시스템에 요구할 경우, 시스템은 저장 장치 상에 어떤 경로에 문서 프로그램이 위치해 있는지를 반환해줘야 한다. 또한 사용자의 문서를 화면상에 띄워져야 하며, 실시간으로 들어오는 키보드 입력을 받는 기능도 필요하다. 추가적으로 저장이나 수정을 할 시 필요한 기능들도 있을 것이다. 이 모든 과정하나하나가 task가 될 듯 하다. 물론 문서를 작성하면서 인터넷도 검색할 수 있고, 음악도 들을 수 있으니 여기에도 task 라는 것들이 포함된다.

 실제로 우리가 pc를 통해서 다루는 작업 하나하나가 task가 되고, 간단히 이야기 하면 일의 단위? 정도가 될 것 같다. 그래서 전에 이야기 했던 MultiTasking이라는 것은 문서작업을 하면서 음악도 듣고, 인터넷도 하는 등의 task를 동시에 처리하는 개념으로 여겨진다.

이 Task를 효율적으로 처리하기 위해서 OS에는 Scheduler라는 것이 있으며, Scheduler 상에서 Thread가 task를 수행한다. 앞에서 나온 개념을 인용하자면 Thread는 Memory 상의 Task를 유지시키면서 사용자가 요구하는 서비스를 수행한다는 의미로 보면 될 것 같다. 즉, 다르게 말하면 Task를 처리하는 가장 기본적인, 또는 가장 작은 단위가 될 것이다. 물론 Process라는 개념 역시 task를 처리하는 기본 단위로 정의되어 있지만, 요즘과 같이 기본적으로 MultiThreading이 보편화된 시기에서는 Process는 Thread의 집합체라고 할 수 있다.


<http://en.wikipedia.org/wiki/Thread_%28computing%29>


그러면 두가지 의문점이 발생할 수 있다. 과연 Task와 Thread의 차이는 무엇이고, Thread와 Process의 차이는 무엇이냐에 대해서 말이다.

사실 첫번째 질문은 사실 답변하기가 애매모호하다. Task라는 개념이 존재하는 OS가 있고, 아닌 OS가 있기 때문이다. 그렇다고 Task 개념이 있는 OS에서도 Task와 Thread간의 구분을 대부분 불분명하고, 어쩌면 거의 동일시하는 내용으로 포함되어 있다. 그냥 개인적으로 이해한 바로는 Task가 일감이고, Thread가 일꾼이라고 비유를 들고 싶다. 그렇게 따지면 Process는 하나의 노동 조합이 될 듯하다. 아무튼 지금 읽고 있는 논문에서는 이 둘의 구분을 다음과 같이 하고 있다.

 Task : A Collection of System Resources

 Thread : A Basic Unit of Computation

  위 내용을 곱씹어보자면 Task 는 Resource의 집단이기 때문에 Resource를 사용하고 있을 것이고, 이를 위해서는 어딘가의 Memory가 할당 되어 있을 것이다. 따라서 Task는 그 존재를 위해서 자신만의 Memory space가 존재하고 통신하기 위한 port도 필요할 것이다. 반면 Thread는 Task를 수행하기 위한 대기 상태로 Memory 상에 항상 상주해있다. 그렇기 때문에 Task를 생성하는데 있어서는 새로운 Memory Space와 port를 활성화시키기 위해 overhead가 많이 발생하지만 Thread는 Task를 수행하던 대로 지속적으로 돌려 쓸 수 있기 때문에 Task에 비해서 상대적으로 overhead가 적다.

 참고로 앞에서 언급했던 MultiTasking과 MultiThreading의 차이는 일을 다중으로 할 수있다.와 일을 다중으로 처리할 수 있다 의 정도로 기억하면 될 것 같다. 그러니까 굳이 Thread가 하나더라도 알고리즘만 적절히 적용하면 MultiTasking을 구현할 수 있는 것이고, 거기에 MultiThreading을 적용하면 더 효율적으로 Task를 처리할 수 있는 것이다.


<http://www.dell.com/content/learnmore/learnmore.aspx?c=us&l=en&s=gen&~id=cpu&~line=workstations&~lt=popup&~series=precn>


그럼 두번째 의문인 Thread와 Process의 차이는 앞에서 이야기 했던 개인과 집단의 차이이다. Process는 응용 프로그램의 실행 단위를 말하며 이 실행 단위를 CPU 상에서 처리할 수 있게 하는 실행 단위가 Thread가 되는 것이다. 앞에서 잠깐 언급했던 것처럼 과거에는 one process에 one Thread였기 때문에 process와 thread간의 구분이 없었지만, 지금은 차이가 조금 있다.

일단 Thread와 Process간의 큰 차이는 Switching에서 나타난다. Task를 수행하면서 Task의 전환이 이뤄지는 경우가 발생하는데 이때는 Process가 관여하는 경우이고, 한 Task 내에서 나눠서 처리하는 경우가 Thread가 관여하는 경우이다. 물론 Thread는 하나의 Process내에 존재하기 때문에 Thread간의 switching 이 빠르게 이뤄진다. 반면 Process switching 자체는 또다른 Task를 수행하는 과정이기 때문에 switch간 overhead가 더 크게 작용한다.  


<http://lovingod.host.sk/tanenbaum/Processes-and-threads.html>

'Study > OS' 카테고리의 다른 글

[Process] Process / Process Control Block  (2) 2013.06.19
[Study] POSIX  (0) 2013.02.21
[Study] Virtual Memory  (0) 2013.02.20
[Study] Monolithic Kernel / Microkernel  (2) 2013.02.14
[Study] Copy On Write (COW)  (9) 2013.02.14
[OS] Mint64OS 31절 Symmetric I/O mode  (0) 2013.02.12
[OS] Mint64OS 29,30절 Multi Processor 활성화  (0) 2013.02.08
댓글