처음 컴퓨터가 부팅될 때
위 단계가 모두 끝나고 나면, Event 발생 전까지 대기하게 된다.
interrupt의 두 가지 형태
multiprogrammed system에서 실행되는 program을 process라고 부른다.
동시에 어떻게 프로그램을 실행시킬 수 있을까?
Multitasking
operating system과 user는 hardware와 software 자원을 공유하기 때문에, operating system은 user에서 잘못되거나 악의적인 프로그램이 작동하지 않게 막아야 한다.
two separate modes of operation : user mode & kernel mode
mode bit이 hardware에 추가되어 kernel(0), user(1)로서 mode를 구별한다.
user application이 실행되는 경우, system은 user mode 상태이다. 하지만 user application이 system call을 통해 operating system의 service를 요청한다면, system의 상태는 user -> kernel로 바뀌어서 system call에 해당하는 동작을 수행한다.
부팅 부터의 동작
hardware는 kernel mode로 시작 -> operating system이 메모리에 올라가고 실행됨 -> user application을 user mode로 실행 -> trap이나 interrupt가 발생 -> usermode에서 kernel mode로 전환.
그러므로 operating system이 computer를 제어할 떄에는 항상 kernel mode이고, user program으로 control을 넘겨줄 때에는 user mode로 전환시킨다.
privileged instructions는 시스템 전반에 해를 끼칠 수 있기 때문에 kernel mode에서만 실행되도록 하며, 만약 user mode에서 이를 실행시키고자 하면 바로 trap을 발생시켜 operating system이 이를 처리하도록 한다.
mode가 2개보다 더 많은 system도 존재한다.
trap도 interrupt vector에서 처리된다.
error로 인한 trap은 user-requested abnormal termination과 같이 처리된다.
user program이 무한루프를 돌거나 system service를 call하고 return 하지 않아서 operating system에 control이 넘어오지 않을 수도 있다. 이럴 때 timer를 이용한다.
timer ?
user에게 CPU를 넘겨주기 전에 operating system은 timer가 설정되었는지 확인한다. timer로 인한 interrupt 발생 시 operating system으로 바로 control이 옮겨가고, operating system은 fatal error인지 다시 program에게 시간을 줘야 하는지 결정한다.
timer의 내용을 변경하는 명령들은 privileged이다.