[OS] CH1-6 System Call

김우경·2020년 11월 9일
1

운영체제

목록 보기
6/12
post-thumbnail

Protected Instruction

  • CPU instruction 중 특별권한(kernel mode) 여야만 사용 가능한 instruction

    e.g. OS만 할 수 있는

    • directly access I/O devices (disks, network cards)

    • multiple memory state management

      e.g. page table, pointers, TLB, loads, ...

    • manipulate special 'mode bits'
      : interrupt priority level

    • halt instruction

      → 등등 시스템 관리에 사용할 수 있는 명령등


OS Protection

  • processor가 protected instruction 실행시킬지 말지 어떻게 알까?
    → kernel mode & user mode 지원해야

     INTEL의 VAX, X86은 4개의 protection mode, Linux는 그 중 2개만
  • 해당 mode는 PWS 레지스터의 특정 비트 조작함으로바꿀 수 있음

user mode

  • user program 실행, 제약 많음

kernel mode

  • OS실행
    → 모든 I/O devices등이 배치된 주소를 전부 접근 가능
    → protected instruction은 kernel mode에서만

Crossing Protection Boundaries

→ 프로그램이 인위적으로 발생

- interrupt : mode change (user → kernel)

  • system call을 이용해 mode transition
    → 기본적인 모양은 function call과 유사

  • (software interrupt, kernel handler로) 예외 발생시킴
    : kernel mode로 바뀌고 os의 code인 특정 주소지로

    ←→ function call : 외부에서

  • 어떤 system call 부를지의 parameter 전달

  • 수행하던 CPU의 상태 저장 (register, mode, bits, ....)
    ∵ OS가 동작하면서 register 사용

  • OS가 caller의 parameter

  • user mode로 return할 방법 있어야
    : 저장했던 상태 그대로 복원 → process의 context


*****

System Call

  • OS의 특정 기능을 쓸 수 있게 하는 interface 요청하는 function

→ PSW 속 bit가 mode 결정

1. Kernel Mode

: instruction set의 모든 instruction 실행 가능, HW의 모든 feature 사용 가능

  • I/O 포함 모든 주소영역 접근 가능

  • 부팅시에는 처음에 kernel mode
    → user processor 만들고 user mode로 switch

    → OS는 kernel mode에서 동작

2. User Mode

: 명령어의 일부와 HW feature의 일부만 사용 가능

  • 주로 I/O나 memory protection 포함 instruction은 허가x

    → 사용하려면?
    : user program이 kernel mode로 trap하는 system call 해야

    • trap: kernel mode로 바뀌면서 특정 주소지로 뛰기

user program이 kernel mode로 trap하는 system call 하는 과정


  • scenario : read()해서 kernel mode로 switch시 이 상황에서 interrupt?



<정리>

OS 동작 방법

  • Interrupt : (외부에 의해) 언제든 발생 가능 → 비동기화

  • Trap : program에서 control 가능 → 동기화
    user mode에서 수행

    (참고) function의 이름
    : function pointer → function에서의 starting 주소

profile
Hongik CE

1개의 댓글

comment-user-thumbnail
2022년 10월 22일

덕분에 선일운체 준비 잘 할 것 같습니다. 감사합니다!

답글 달기