[OS] 시스템 콜 / 인터럽트

🧠·2022년 5월 19일
0

OS

목록 보기
3/5
post-thumbnail

Mode bit

사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 역할

  • 0 모니터 모드 (= 커널 모드, 시스템 모드): OS 코드 수행
  • 1 사용자 모드: 사용자 프로그램 수행
  • 보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 ('특권명령'으로 규정)
  • Interrupt나 Exception 발생시 하드웨어가 mode bit을 0으로 바꿈
    - Exception: 예외 상황 발생시 권한이 운영체제에게 넘어감
  • 사용자 프로그램에게 CPU를 넘길 때 mode bit을 1로 세팅 후 넘김

시스템 콜 (System Call)

  • 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
  • 사용자 프로그램이 스스로 인터럽트를 발생 -> CPU 제어권을 운영체제에 넘김
  • 사용자 프로그램이 커널에 진입하기 위한 유일한 수단

매개변수 전송 방법
1. 레지스터를 통한 전송 (매개변수가 레지스터보다 많을때 문제 발생)
2. 블록 또는 테이블에 저장하여 전달
3. 매개변수를 스택에 넣어서 pop하는 방법

  • 시스템 콜을 위한 데이터와 코드들은 커널영역에 저장되어 있다.
  • 대부분의 OS에서는 시스템 콜이 들어오면 각각의 콜 마다 구별된 커널 쓰레드를 만들어서 처리한다. (병목현상 피하기 위해)

ref: https://www.javatpoint.com/system-calls-in-operating-system

인터럽트 (Interrupt)

  • 인터럽트 당한 시점의 레지스터와 Program Counter를 저장
  • CPU의 제어권을 운영체제에 넘김

하드웨어 인터럽트: 하드웨어가 발생시킨 인터럽트
소프트웨어 인터럽트(Trap): Exception(프로그램이 오류를 범한 경우) / System Call(프로그램이 커널 함수 호출)

인터럽트 벡터: 인터럽트의 처리 루틴 주소를 가짐
인터럽트 처리 루틴: 인터럽트를 처리하는 커널 함수

실제 I/O 작업은 CPU가 직접하지 않고 Device Controller에게 부탁함

  • Device Controller: 각 장치를 통제하는 작은 CPU (HW)
    - I/O 장치유형을 관리하는 작은 CPU
    - control register, status register 가짐
    - local buffer를 가짐
    - I/O는 실제 device와 local buffer 사이에서 이루어짐
  • Device Driver: 각 장치별 처리 루틴 (SW)

Interrupt

  • 1) Interrupt: CPU -> Device Controller (이 때 CPU는 다른 프로그램을 수행)
  • 2) Device가 작업을 다 수행하고 Controller가 CPU에 Interrupt를 발생
  • 3) CPU가 다음 명령어 수행 전 Interrput 발생 확인을 함
  • 4) CPU는 자동적으로 운영체제에게 넘어가게 됨

CPU의 독점을 막기 위해서 부가적인 HW가 필요 (Timer)

Timer

  • 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴
  • 운영체제가 사용자 프로그램에게 CPU를 넘길 때 Timer에 시간을 세팅 후 넘겨줌
  • 일정 시간이 지난 후 Timer가 CPU에 Interrupt를 발생 시키고 CPU의 제어권이 자동적으로 운영체제에 넘어감
  • 운영체제는 다른 프로그램에 CPU를 넘겨줌
  • CPU를 특정 프로그램이 독점하는 것으로부터 보호

타이머는 time sharing 구현을 위해 널리 이용됨
현재 시간을 계산하기 위한 용도로도 사용

profile
: )

0개의 댓글