OS란 무엇인가?
-Hardware을 application에게 유용한 form으로 만들어주는 kernel에서 작동하는 software이다.
OS의 main role 3가지
- Design abstractions to use hardware
- Protection & Isolation
- Sharing resources
Design abstraction to use hardware
- 중요하지 않은 detail을 무시함으로써 이해하기 쉽도록 만든 process
Provide protection, Isolation
- 예전에는, OS kernel과 application이 같은 주소에서 동작해 App이 kernel instruction 읽기 및 수정이 가능하였다.
- main()을 call하면 OS에게 통제권이 돌아오지 않았기에, pdf에선 “OS is just a library”라고 표현
- 이 때, Kernel을 buggy와 malicious application으로부터 보호해야하는 문제가 생김 !
- ⇒ Unit of protection(protection)을 정의해 each application이 different machine에서 돌아가고 있게끔 착각하게 만드는 illusion을 제공.
Unit of protection
- 정의: An abstraction that is process
- 한정된 접근 권한으로 program을 동작하게 하는 시스템
- Cpu, memory, IO devices들을 abstract하기 위한 container
⇒ In this point of view, process is an abstraction of hardware,computer
그럼, 구체적으로 어떤 protection 제공?
- important instructions를 실행하는 application 방어
- 다른 app이나 kernel의 memory read/write하려는 application 방어
- application으로부터 통제권을 가져오는 기능
Protection design( OS혼자 X, cpu 및 hardware와 design)
- Privileged instruction
- 위의 1번 사례 예방
- Memory protection
- 위의 2번사례 에방
- (Timer) interrupt
- 위의 3번사례
previleged instruction
- 만약, 제한된 권한으로 program을 run시키면 매 instruction마다 권한을 체크해야하기에 느림
- Improved design idea
- Dual mode operation ( user/kernel mode ) : 상태비트 이용해 구분 (x86은 EFLAG register)
- kernel mode : hardware에 대한 full privilege로 동작 : memory, I/O device 등등에 대한 모든 Read/write 권한을 가짐
- User mode : CPU가 실행 전에 every instruction check : 권한이 OS kernel에 의해서 부여됨(허락맡고 실행)
- User mode에서 Privileged instruction 실행하면 CPU가 OS로 Control을 넘겨 실행을 막는
⇒ 그럼, What if App want to use I/O?
- Kernel에게 privileged instruction 실행해도 되냐 Ask
- ⇒ kernel이 verify the request하고 괜찮으면 APP 대신 privileged instruction 시행
- 이러한 허락과정을 구현하는 명령어를 Trap 혹은 System call(trap을 이용해 구현)이라고 부름
- Trap 예외상황이나 오류를 처리하기 위해 발생하, exception handler routine으로 연결되어 자동으로 처리
⇒ 그렇다면, System call이란 무엇일까
System call
정의 : Programming interface to the services provided by OS
- ex) Printf()함수를 호출하면 write() syscall로 kernel모드에서 동작한다.
Memory protection methods
- 그렇다면, Memory는 어떻게 보호할 것인가??
- 방법이 2가지가 있음. Software-based method, Hardware-based method
Software-based method
- kernel이 모든 memory access를 관여해야해 매우 느리다 !
Hardware-based method(recommend)
- Hardwared이 load와 store instruction을 intervene함.
- 만약, target memory access가 illegal하면 바로 exception raise
- 그럼 OS kernel이 control 뺏고 proper action을 취함
⇒ 이와같은 Design 구현하기 위해, Virtual memoring 기법 사용 (밑 참고)
(Timer) interrupt
- 컴퓨터가 booting되면, kernel은 timer hardware을 동작 시작함
- Timer은 every few milliseconds마다 주기적으로 interrupt를 raise한다
- Interrupt가 raise되면,
- 현재 running중인 process가 중단됨
- 이 때 current state를 저장해놓고
- OS에 사전 구성된 interrupt handler을 동작시킨다.
⇒ 이와 같은 방법으로 kernel은 주기적으로 control을 빼앗는다 !