🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

ostep / 가상화 / CPU / 원리: 제한적 직접 실행 (한글판 9장, 영문판 6장)

  • 들어가며

    • 이 책에서는 어떤 문제를 해결하는 개념을 다룰 때 다음의 2가지로 나누어 설명하고 있습니다.

      • 저수준 기법 (mechanism)

        • 어떻게 문제를 해결할 것인지

        • 예: 어떻게 CPU 가상화를 할 것인지 -> 제한적 직접 실행

      • 고수준 정책 (policy)

        • 문제를 해결해서 무엇을 할 것인지

        • 예: 가상화한 CPU자원을 어떤 프로세스에게 할당할 것인지 -> CPU 스케줄링

  • CPU 가상화

    • 들어가며

      • CPU라는 자원은 시분할로 가상화하는 것이 자연스럽다.

    • CPU 가상화 기법의 필요조건들

      • 빨라야 한다.

        • 기법: 제한적 "직접 실행"

        • 사용자 프로세스는 가상의 명령어를 해석하는 것이 아니라, 하드웨어에서 지원하는 명령어를 직접 실행한다.

          • 예를 들어서 x86 CPU에서 돌아가는 OS의 경우 x86 기계어를 직접 실행한다.

      • 일부 명령어는 사용자 프로세스가 사용할 수 없어야 한다.

        • 예: 입출력장치에 직접 접근하는 명령어는 사용자 프로세스가 아닌 커널에서만 사용할 수 있다.

        • 기법: "제한적" 직접 실행

        • 하드웨어 지원 기능: mode bit, trap 및 return-from-trap 명령어

           

          • OS의 특정 기법을 구현하기 위해서는 하드웨어가 지원하는 기능과 운영체제 소프트웨어가 협력하는 경우가 많다.

          • mode bit

            • mode bit은 CPU에 존재하며 mode bit의 세팅 여부에 따라 커널 모드(kernel mode)사용자 모드(user mode)로 나뉜다.

            • CPU는 사용자 모드인 경우 일부 명령어들의 실행만 지원한다.

              • 지원하지 않는 명령어를 실행할 경우 interrupt가 발생하여 OS가 문제의 프로세스를 kill할 수 있다.

          • trap, return-from-trap 명령어

            • 위와 같이 사용자 프로세스는 일부 명령어를 직접 실행하지 못하고 OS를 통해 간접적으로 실행해야 한다. 이 과정에서 사용할 수 있는 명령어들이 trap 및 return-from-trap 명령어들이다.

              • trap 명령어

                • kernel mode로 전환하고, 해당 trap과 관련된 커널의 코드가 실행된다.

                  • 이 때 trap 0xdeadbeef와 같이 trap 명령어에 임의의 주소값을 전달할 수 있다면 사용자 프로세스가 임의의 커널 코드를 실행시킬 수 있는 큰 문제가 일어난다.

                    • 따라서 trap 명령어 실행 시 실행시킬 수 있는 handler가 몇 개로 정해져 있다. 이를 trap table이라 한다. trap 0x80과 같이 trap 명령어는 index를 전달하는 방식으로 동작한다.

                    • CPU에서 trap handler를 등록하는 방법을 별도로 제공해주며, 커널은 이를 사용하여 부팅 시 trap table을 초기화한다.

                • x86 아키텍처에서는 trap 명령어를 int라고 부르지만, 교재와 강의에서는 trap 명령어와 인터럽트를 구분해서 설명하고 있다.

                  • 필자 주: 공룡책에서 시스템 호출은 소프트웨어 인터럽트 중 하나로 처리된다고 말하는 것으로 볼 때, 여기서 ostep에서 구분하고자 하는 인터럽트는 하드웨어 인터럽트로 추정됩니다.

              • return-from-trap 명령어

                • user mode로 전환하고 trap 명령어를 호출한 곳으로 되돌아간다.

            • 필자 주: 인터넷에서 잠깐 찾아보았을 때 trap이라는 단어가 다른 맥락에서도 사용됨을 확인했습니다. 조사한 바로는 trap 및 여러 단어들의 용례가 사용되는 의미가 하나로 합의되지는 않았다고 합니다. 하지만 여기서도 공룡책에서도 "trap instruction"라는 용어가 일관적으로 사용되는 것으로 보았을 때 OS 공부할 때 "trap 명령어"라는 말을 사용해도 무방해 보입니다.

      • 사용자 프로세스 하나가 실행 중일 때 제어권을 가져와서 다른 사용자 프로세스로 넘기는 과정이 필요하다.

        • 예전에 사용했던 기법: 협조(cooperative) 방식

          • 사용자 프로세스가 제어권을 양보할 때까지 OS가 기다린다.

          • 문제: 사용자 프로세스가 프로그래머의 실수든 고의든 오랫동안 제어권을 양보하지 않으면 OS는 제어권을 가져올 수 없다.

        • 현재 사용하는 기법: 비협조 방식

          • 하드웨어 지원 기능: timer interrupt

            • CPU에서 일정 갯수의 클럭 실행 후 발생시키는 인터럽트

            • timer interrupt 발생 시 제어권이 interrupt handler로 넘어가 OS가 다시 제어권을 가져올 수 있다.

    • 문맥 전환 (context switch)

      • 문맥 전환 시 저장해야 하는 데이터: 레지스터, PC, SP

  • 출처

댓글을 작성해보세요.

채널톡 아이콘