운영체제란 하드웨어를 관리하는 프로그램으로 응용 프로그램의 토대를 제공해주는 프로그램이다. 컴퓨터의 사용자와 컴퓨터 하드웨어 사이에 중간 매개체 역할을 해주는 프로그램이다.
💡 컴퓨터시스템의 구성요소
- 하드웨어(CPU, memory, I/O devices)
- 운영체제
- 어플리케이션(응용 프로그램)
- 유저(People, machine, other computers)
컴퓨터 시스템은 공유 메모리와 공통 버스를 통해 연결된 여러개의 장치 제어기와 하나 이상의 CPU로 구성되어 있다. CPU와 장치제어기는 메모리 사이클을 얻기 위해 경쟁하면서 병행 실행될 수 있다. 각 장치 제어기는 local buffer를 가지고 있다. CPU는 메인 메모리로부터 local buffer로 데이터를 이동시킨다. 혹은 그 반대방향으로 이동. 장치 제어기는 CPU에게 I/O 연산이 완료되었음을 인터럽트를 발생시킴으로써 알린다.
인터럽트가 발생하면 보통 모든 서비스 루틴의 주소를 포함하는 인터럽트 벡터를 통해 발생한 인터럽트에 알맞은 인터럽트 서비스 루틴으로 인터럽트 제어를 전송한다. 인터럽트 구조는 인터럽트 된 명령의 주소를 반드시 저장해야한다. 그래야 복귀할 수 있
다.
CPU가 인터럽트되면 하던 일을 중단하고, 즉시 고정된 위치로 실행을 옮긴다. 그리고 인터럽트 서비스 루틴이 실행된다. 완료되면 CPU는 인터럽트 되었던 연산을 재개한다. 운영체제는 CPU의 상태를 레지스터나 프로그램 카운터에 저장함으로써 보존한다.
trap은 소프트웨어에 의해 생긴 인터럽트이다. 에러나 유저 요청에 의해 발생한다. 소프트웨어는 시스템 호출(system call)이라는 특정 연산을 실행하여 일부로 발생시키거나 오류때문에 자발적으로 발생되기도 한다.
현대의 운영체제는 인터럽트 구동식(Interrupt Driven)이다. 소프트웨어 에러나 요청은 예외나 트랩을 발생시킨다.(0으로 나누기, OS 서비스 실행요청 등이 있을 때) 무한루프, 서로 수정하는 프로세스 등이 포함된다. 하나의 프로세스에서 발생한 오류가 다른 프로세스의 정상적인 동작을 발생시킬 수 있기 때문에 이러한 종류에 대한 보호 기능이 필요하다.
💡 이중 동작 모드(Dual-Mode Operation)
- user mode와 kernul mode를 따로 둠으로써 OS를 다른 시스템으로부터 스스로 보호시키게 한다. 유저 모드에선 일반적으로 유저 프로세스들이 실행되고 커널 모드에선 시스템 프로세스가 실행된다. 타이머는 사용자 프로그램이 무한루프가 걸리거나 시스템 서비스를 호출하지 않아서 제어가 운영체제로 복귀하지 않는 경우, 빠져 나올 수 있도록 강제종료 시간을 설정해두는 것이다. 정해진 시간이 지나면 인터럽트를 걸도록 하였고 OS가 계수기를 이용해 감산하는 방식으로 시간을 잰다. 계수기가 0이 되면 인터럽트를 발생시킨다. 타이머는 스케쥴링 이전에 설정한다.