운영체제 - Process(4)

2020-09-18

OS를 공부하면서 정리를 한 내용들 입니다.

이번 챕터는 Process에 관련해 정리한 챕터입니다.


Thread

  • 다중 쓰레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked(waiting) 상태인 동안에도
    동일한 태스크 내의 다른 쓰레드가 실행(running)되어 빠른 처리를 할 수 있습니다.

  • 동일한 일을 수행하는 다중 쓰레드가 협력하여 높은 처리율(throughtput)과 성능 향상을 얻을 수 있습니다.

같은 일을 하는 프로세스를 여러개 띄워놓게 되면 각각의 메모리에 올라가기 떄문에 낭비가 심하게 됩니다.
하나의 프로세스 안에 스레드만 여러개 두게 된다면 성능향상이 가능합니다.

  • 쓰레드를 사용하면 병렬성을 높일 수 있습니다.

Benefits of Threads(쓰레드를 통해 얻게 되는 이득)

크게 4가지로 요약을 할 수 있습니다.

Responsiviencess(응답성)

사용자의 입장에서 빠른겁니다.

왜 빠른가하면, Web 브라우저가 쓰레드를 여러개 가지고 있게 된다를 예로 듭니다.

포털사이트의 홈페이지에서 제일먼저 HTML을 받게 되고, 이 문서안에 다양한 img들이 있습니다.

그거를 웹브라우저가 해석해서 이미지들을 서버에 요청을 하게 되고, 이미지들이 다 도착하면

텍스트도 넣고, 이미지도 넣고, 웹페이지를 완성하게 됩니다.

그런 과정에서 이미지들을 웹서버에게 요청할 때(오래걸리는 작업) 프로세스를 Block하게 됩니다.

따라서 사용자의 입장에선 답답함을 느끼게 됩니다.

그러나 여러개의 쓰레드를 사용한다면 네트워크 요청을 한 해당 쓰레드만 Block이 되고

나머지 쓰레드들은 작업을 그대로 진행하게 됩니다. 일종의 비동기식 입출력이라 할 수 있습니다.

Resource Sharing(자원의 공유)

같은 일을 하는 프로그램이 여러개 있을 때, 별도의 프로세스를 사용하는것 보다

하나의 프로세스를 만들고 CPU수행단위만 다르게 만들면 code, data, resource를 공유를 하게됩니다.

그럴 때 자원을 조금 더 효과적으로 사용하는 효과를 얻습니다.

Economy(경제성)

응답성이랑 다른 의미로 빠릅니다.

컨텍스트 스위치가 일어날 때 오버헤드가 크지만, 프로세스 내부에서 쓰레드간의 CPU 스위치는 매우 간단합니다.

동일한 주소공간을 사용하기 때문에 문맥은 거의 동일하게 사용합니다.

따라서, 프로세스 하나를 생성하고 CPU를 스위치하는것보다 쓰레드를 사용해서 스위치하는게 더 좋습니다.

CPU가 여러개있는 환경(Multi processor)에서의 장점

프로세스는 하나지만 쓰레드가 여러개 있으면 각각의 쓰레드가 서로 다른 CPU에서 병렬적으로 일을 할 수 있습니다.

그렇게 되었을 때 결과를 조금 더 빨리 얻을 수 있습니다.

쓰레드 구현 방법

Kernel과 library를 통해 지원받음으로써 Kernel threads와 User threads로 구별합니다.

Kernel threads

쓰레드가 여러개 있다는 사실을 운영체제 Kernel이 알고 있습니다.

하나의 쓰레드에서 다른 쓰레드로 CPU가 넘어가는 것도 Kernel이 넘겨줍니다.

User threads

쓰레드가 여러개 있다는 사실을 운영체제가 모르는 상태입니다.

유저 프로그램이 library의 지원을 받아서 스스로 여러개의 쓰레드를 관리하는 겁니다.