@ 그렇다면 Mode는 누가 어떻게 바꿔주는 것일까요?
// 아무나 Mode를 바꿀 수 있게 되면 그 Protection의 의미를 상실하게 될 것입니다.
@ 결론은 Mode Change를 커널모드에서 돌고있는 OS가 관장하게 만들면 됩니다.
// OS는 일단 무한신뢰의 대상입니다.
@ 그럼 User Mode에서 Kernel Mode로는 어떻게 넘어가는 것일까요?
// 이 상황에서는 어떤 User Program이 큰 권한을 받게 되는 모순된 상황이 발생하게 됩니다.
> 이런 모순된 상황으로 인해서 S/W적인 방법으로는 이 상황을 해소하는 것이 불가능합니다.
// 그렇기 때문에 이런 상황에서는 H/W적 매커니즘이 필요하게 됩니다.
> 그것이 바로 Interrupt Mechanism이 되겠습니다.
.. Kernel Privilege가 필요할 때는 위의 Interrupt instruction를 수행시키는 것입니다.
> 이렇게 하면 Mode bit가 1 to 0 으로 수행됩니다.
> 이것이 Interrupt instruction에 정의된 하나의 기능입니다.
@ S/W Interrupt지만 Interrupt가 실행되면 'Interrupt handler'가 사용되게 됩니다.
// 그 handler가 User의 권한을 바꾸어주는 잘 정의된 역할을 수행하게 됩니다.
// 이런식으로 User Mode에서 Kernel Mode로 넘어갈 때도 통제된 환경에서 관리 되게 됩니다.
@ 이것이 Dual Mode System의 가장 기본적인 내용들이며
// 여기에서 H/W System의 Protection이 다 출발합니다.
PS. Mode change를 관할하는 것은 Interrupt Service routine입니다.
// 하지만 실제로는 그렇게 원시적인(Primitive) 인터페이스를 제공하지는 않습니다.
> Interrupt는 굉장히 낮은 수준의 Programming Interface입니다.
.. 특정 Instruction을 수행을 시켜야하기 때문이죠.
// 하지만 저희가 프로그램을 작성할 때는 굉장히 높은 단계의 Abstraction을 가지고 작업합니다.
> 함수 등
// 그래서 OS는 System Call이라고 하는 것을 제공하고 있습니다.