Operating System : 운영체제

본 토픽은 현재 준비중입니다. 공동공부에 참여하시면 완성 되었을 때 알려드립니다.

5) Multithreading

@ 외부에서 입력을 받았을 때,

    // 이를 처리해주는 서버 아키텍처를 생각해 보겠습니다.

        > 웹 서버나 메일 서버 등이 있을 것입니다.

            .. request가 있을 때 적절하게 reactive해주는 역할을한다고 생각하면됩니다.

    

@ request가 request queue르 이용하여 서버로 전달됩니다.

    // 서버 내부에서는 무한루프를 도는 루프가 있습니다.

        > 일정한 방식으로 깨어납니다.

    // request queue에서 정보를 dequeue해서 처리합니다.

 

@ 위의 방식에는 두 패턴이 있습니다.

    // iterative server 방식입니다.

        > 서버가 깨어나 request 처리를 하고 스스로 처리를 하는 겁니다.

    // Concerrent server

        > 스스로 처리하는 것이 아니라 / Child Process Worker를 fork해서 처리하게 합니다.

            .. 이 동안 서버 프로세스는 request를 또 받아서 다른 Worker를 불러서 처리하게 합니다.

            .. 병렬적 처리를 합니다.

        

? Querstion 어떤 것을 많이 쓸까요?

    // 후자인 Concerrunt server를 많이 씁니다.

        > H/W가 좋아 병렬적 서비스가 가능합니다.

            .. Response time을 줄일 수 있습니다.

    // iterative server는 단순하지만

        > 지금 H/W로 하기에는 비효율적입니다.

    

@ Concerrent server의 가장 큰 부담은 무엇일까요?

    // request의 개수 만큼 프로세스가 생성되어야 합니다.

        > 사람들이 이를 부담스러워 하기 시작했고

            .. 그 해결책이 Multithread를 사용합니다.

            .. Concerrency는 높이고 execution Process를 만드는 부담은 줄이는 방법론이라고 생각하면됩니다.

 

@ 시스템 전체를 디자인할 수 있는 패턴을

    // Architechture라고 부릅니다.

    

@ 인터넷 서버를 디자인해야 하는데,

    // Overhead(부담)가 너무 많았습니다.

    

@ Multithread가 필요한 부분이 더 생깁니다.

    // 과학 연산하는 부분에서 필요하게 됩니다.

        > 컴퓨터가 등장한 시기는 미소 냉전시기 포탄 탄도 계산에 사용되었습니다.

            .. 수치해석 및 매트릭스 연산에 필요했습니다.

            .. 이를 하기 위해서는 병렬적으로 계산할 필요가 많아지게 되었습니다.

            .. 이 때 이entity를 해결하는 것은 Process였고, 이를 계속해서 만들어내는 것은 부담으로 다가옵니다.

    // 그 때 Multithread가 등장합니다.

    

@ Multithread는 무엇일까요?

    // Process를 먼저 봐야 합니다.

        > Context

            .. 자원

        > Execution stream

            .. Thread of Control

            .. 사람들은 하나의 Process안에 여러 Thread를 넣을 수 있지 않을까 생각합니다.

            .. 자원은 유지합니다.

                .. Thread들이 공유하게 됩니다.

 

@ Process에게 할당된 자원은 변화가 없으니

    // Thread들을 보겠습니다.

        > Execution entity이며 CPU를 할당받는 주체입니다.

            .. State Transition을 Thread들이 가지게 됩니다.

                .. 하나의 Thread가 수행될 때, 다른 Thread는 쉬고 있습니다.

            

@ Thread는 어떻게 구현될까요?

    // Stack으로 구현됩니다.

        > Execution Stream은 Sequence of Executed Function이기 때문에 그렇습니다.

 

@ 하나의 process가 여러개의 Stack을 가지는것이

    // Multithread라고 생각하면됩니다.

        > 그리고 각 Thread들은 ID를 부여받게 됩니다.

            .. 이를 저장하는 Thread Control Block에 정보를 저장하는 Table이 생깁니다.

    

@ Multithread는 어떻게 구현되는지 기존의 UnitThread와 비교해보겠습니다.

    single Thread, Multi Thread

    // UNIX를 살펴보겠습니다. (UNIX Process)

        > Stack이 나눠진 이유는 mode 때문입니다.

        

@ Process의 두가지 측면 기억하시나요?

    // Design Time

        > 복잡한 시스템을 설계할 때 Decomposition하여 독립적으로 수행할 Task가 나옵니다.

            .. Design Time Process는 Task라고 부릅니다.

    // Run Time 

        > OS가 자원을 할당하고 수행을 시키는 주체들입니다.

            .. Multithread에서는 이가 조금 더 세분화 되어 Thread까지 확인하게 됩니다.

    // 이 때 Task들이 Run Time Process와 One to One Matching시킬 수 없게 됩니다.

    

@ Process equal Task(Process에게 부여된 Resource들) + Thread

    // 이렇게 부르기도 했습니다.

    

@ Linux에서는 User mode에서는 Process와 Thread를 나누지만

    // Kernel mode에서는 이를 나누지 않고

        > 전부다 Task라고 부릅니다.

댓글

댓글 본문
버전 관리
박천명
현재 버전
선택 버전
graphittie 자세히 보기