Operating System : 운영체제

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

(2) Implimentation

@ 지금부터는 MultiThread 구현을 배워보도록 하겠습니다.

 

@ 크게 세가지 방식으로 구현할 수 있습니다.

    // 커널이 전혀 모르게

    // 커널이 완변하게 지원하도록

    // Mixture

    

@ User-Level Thread

    // Thread Stack

    // Thread Control Block (in User mode)

    // User level에 Scheduler가 있어야 합니다.

        > 구현은 커널과 비슷합니다.

            .. User Level의 함수로 구현하고

            .. 이를 묶어 Library를 만듭니다.

                .. Thread를 생성하고 삭제하는 코드

                

@ User-Level Thread를 구현할 때, key가 되는 동작은 무엇일까요?

    // 한 Thread에서 다른 Thread로 넘어가는 스케쥴링이 문제입니다.

        > 특히 Pre-emptive scheduling에서 interrupt가 필요합니다

            .. 근데 이 때에는 interrupt가 내부 Thread까지 들어가야 하는 상황이 필요하게 됩니다.

            .. 그런데 Thread가 Interrupt를 알아듣는 것이 가능하기 힘듭니다.

    // Read System 문제입니다.

        > Read System Call이 발생하면

            .. Proccess를 Blocking 시키게 되는데

            .. 수행할 수 있는 Thread들도 수행을 멈추게 되는 문제가 발생할 수 있게 됩니다.

 

@ User-Level Thread의 장점도 존재합니다.

    // OS를 고치지 않고도 사용할 수 있게 됩니다.

    // Reactive system(중간에 입력을 받는 시스템)이 아닌 곳에서는 유용합니다.

        > 과학 연산 시스템 등

        

@ Kernel-Level Thread

    // Task가 생성되고 소멸하는 것을 직접하며

        > 그 후 모든 매니징을 직접하는 것입니다.

            .. 이렇게 되면 Interrupt문제 및 Blocking 문제들도 모두 해결됩니다.

    // Linux 등 많은 OS가 이 방법을 차용하고 있습니다.

    

@ Kernel-Level Thread의 장점은

    // User-Level의 단점들은 모두 해결되지만

    // 추가적인 Overhead가 많이 발생합니다.

        > 과학 연산 시스템 등에서는 그런 문제들이 발생합니다. 

 

@ 그렇게 Combined User-level Kernel-Level MultiThread 시스템이 발생합니다.

    // 상당히 많은 부분을 User-Level에서 처리하고

        > Interrupt가 오면 User-Level Scheduler에서 어떤 Process가 수행되어야 할 지 알려줍니다.

    // Pre-emptive가 가능하도록 만든 것이 Combined System이라고 생각하시면 됩니다.

    

댓글

댓글 본문
작성자
비밀번호
버전 관리
박천명
현재 버전
선택 버전
graphittie 자세히 보기