multi processing과 timesharing을 할 때에 메모리, 유저 프로세스, I/O 작업들은 서로 보호되어야 한다.

따라서 CPU는 수행 모드를 2 가지(kernel mode, user mode)로 나누어 이 메카니즘이 가능하도록 지원한다. 이 2 가지 모드는 mode bit로 제어한다.

Protection & Mode bit

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

(OS가 사용자 프로그램을 제어함.)

💡 Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation 지원

  • 1 = user mode : 사용자 프로그램 수행
  • 0 = kernel 모드 : OS 코드 수행 (=시스템 모드)
    • 보안을 해칠 수 있는 중요한 명령어(특권 명령)는 커널 모드에서만 수행 가능
    • Interrupt나 Exception 발생 시, 하드웨어가 mode bit을 0으로 바꿈(커널 모드로 변경)
    • 사용자 프로그램에 CPU를 넘기기 전에 mode bit을 1(유저 모드)로 셋팅

I/O protection

불법 I/O or 멀티 프로세스로부터 동시에 I/O 요청이 들어왔을 때 모든 I/O은 특권 명령을 통해 수행한다.

💡 유저 프로그램은 I/O의 수행을 위해 OS에 system call을 넣어줘야 한다.

💡 유저 측에서 system call을 발생시키면?

  • 인터럽트(software-generated interrupt, trap를 발생한다.
    • trap handler가 trap vector를 호출한다.
    • 커널 모드로 변경된다.
    • trap handler는 상를 보호하고 요청된 I/O 작업을 수행한다. user mode로 다시 세팅하고 system call에 대한 응답을 반환한다.

⭐️ 핵심: user가 system call ➡️ kernel mode ➡️ trap interrupt ➡️ trap handler ➡️ return and user mode


Memory protection

OS는 각 프로세스의 메모리 액세스를 제어하고 보호한다. 각각의 프로세스가 서로 메모리 영역을 침범하지 못하도록 다음 레지스터를 활용하여 os가 이를 관리한다.

  • base register: 프로세스의 메모리 주소 공간에서 시작 주소를 나타내는 레지스토러 프로세스의 코드와 데이터가 위치하는 주소 범위를 할당한다.
  • limit register: 프로세스의 메모리 주소 공간에서 메모리 할당의 끝을 나타내는 레지스터로 프로세스가 액세스 할 수 있는 메모리 영역의 크기를 정의한다.

 


cpu protection

timer는 하나의 프로세스가 cpu를 독차지하는 것을 방지한다.

  1. timer는 하나의 프로세스가 특정 시간 이상 cpu를 잡고 있으면 os에게 interrupt를 발생한다.
  2. 인터럽트가 발생하면 다음 시간 간격 동안 실행할 프로세스를 결정한다.

timer는 time sharing에도 사용된다.

  1. Context switch: 먼저 해당 프로세스의 상태를 저장한 뒤 두 개 이상의 프로세스의 PCB(Process Control Block)을 업데이트하고, 다음 프로세스의 상태를 복원한다.

 


I/O, Device Controller

⭐️ I/O device controller ⭐️

  • I/O 장치에 붙어서 여러 일을 하는 일종의 CPU
    • I/O가 끝났을 경우, interrupt로 CPU에 그 사실을 알린다.
  • 제어 정보를 위해서 control register, status register 가짐. ➡️ CPU가 일을 시킬 때 정보 전달하는 경로 즉, 명령 전달
  • 데이터를 저장하는 local buffer를 가짐(data register) ➡️ 일을 하기 위한 데이터 그 자체들
  • I/O는 실제 device와 local buffer 사이에서 일어남.

cpu와 device controller가 직접적으로 연결되어 있지 않은 이유

1. 확장성

  • 컴퓨터 시스템은 다양한 종류의 외부 장치를 지원해야 하는데, device controller가 cpu와 직접적으로 연결되어 있으면 이를 처리하기 위해서 시스템을 재설계하는 번거롭고 복잡한 작업을 거쳐야한다.
  • 따라서 외부장치를 제어하기 위한 특수 hw device controller와 cpu는 따로 존재하여 I/O bus를 통해 소통한다.

2. 병목 현상 방지

  • I/O 작업은 cpu 작업 수행보다 매우매우매우매우 느리다. 그래서 cpu와 device controller를 따로 두어서 i/o 작업 도중 cpu가 다른 일을 할 수 있게 돕는다. 이를 통해 시스템의 성능을 최적화한다.

3. 보안

  • 외부 장치에서 cpu에 이상한 데이터 보내지 못하게 한다. 외부장치와 cpu 간의 통신은 device controller를 통해서만 하기 때문이다

Interrupt

인터럽트 당한 시점의 레지스터와 pc를 저장한 후, CPU의 제어를 인터럽트 처리 루틴에 넘긴다.

  • 하드웨어 인터럽트(=Interrupt) *일반적인 인터럽트
    • 하드웨어가 발생시킨 인터럽트
  • 소프트웨어 인터럽트(=Trap)
    • Exception: 프로그램이 오류를 범한 경우
    • System call: 프로그램이 커널 함수를 호출한 경우

 

sebinChu