07. Mode와 Protection

Mode

Modeop-codeMemoryCPU Register
KernelExecute any op-codeAccess any placeAcess Any Register
UserNo Privileged op-codeOnly my memory areaNo Speacial Register

Dual Mode 필요성

User가 I/O 등에 Direct로 접근하지 못하게 막기 위해서

Mode Switch 발생하는 상황

  1. Interrupt
  2. Exception
  3. System Call

CPU Protection

  • 목적

    CPU를 독점하는 것을 방지하기 위함

    => User Program을 실행하는데 아무 Interrupt나 System Call이 없다면 소유권이 OS에게 돌아가지 않고

    계속해서 UserProgram만 실행되는 등의 문제가 생길 것

    => System Timer가 필요함

  • System Timer

    특정 시간마다 Interrupt를 발생시키는 것

    일단 Interrupt가 발생하면 Control이 OS로 넘어감

    오직 OS만 load 할 수 있음

  • Absolute Time & Relative Time

    • Absolute Time

      정확한 날짜

    • Relative Time

      오늘부터 이틀 뒤 같은 상대적인 날짜

      OS에선 Relative Time이 중요하게 사용됨 (System Timer 사용 등)

Memory Protection

  • Memory Management Unit

    논리적 Memory 주소를 물리적 Memory 주소로 변환

    동시에 Memory Protection, Cache Control 등 관리

    => HW로 구축됨

I/O Protection

  • Privileged I/O Instructions

    모든 I/O Instructions는 Privileged Instructions

    User는 I/O에 Direct Access 불가

    반드시 OS procedure를 호출해서 접근 가능

    System Call을 통해 User-mode의 Program이 Kernel-mode의 Service를 호출

  • System Call

    Process가 Kernel Service를 요청하는 수단

    Application이 OS와 Communication 하기 위한 방법

    • 호출 목적

      • System Resource 보호
      • 신뢰성 무한 루프 돌 때 중단 함수 호출 등
      • 보안 권한 없이 OS나 다른 Resource 접근
    • System Call 대신 API를 사용하는 이유

      • OS에게 약간의 유연성 제공
      • System Call보다 API가 사용하기 쉬움
      • OS마다 System Call이 다르기 때문에 일관적인 기능을 제공하는 API 사용
    • System Call 호출 과정

      1. Library에서 System Call 함수 호출
      2. EAX 레지스터에서 System Call 번호 가져감
      3. PC에 System Call 주소 넘김
      4. Kernel 들어가서 넘겨받은 정보를 바탕으로 System Call Table 호출
    • System Call Parameter 전달 방법

      1. 레지스터

        레지스터 안에 파라미터를 넘김

      2. Memory 블럭

        메모리 블럭 안에 파라미터를 저장하고 block의 시작 주소를 넘김

      3. 스택

        파라미터를 Stack에 push하고 OS에 의해 Stack에서 Pop함

      Block과 Stack 방식은 파라미터의 길이, 갯수 제한이 없음


© 2025. Na2te All rights reserved.