OS/OS - Overview

운영체제 이중 동작 모드 (OS dual-mode operation)

검정비니 2018. 9. 24. 08:12
728x90
반응형

운영체제 이중 동작 모드 (OS dual-mode operation)




1. 이중 동작 모드란? (Dual-mode operation)



이중 동작 모드는 쉽게 말해 운영체제를 보호하기 위한 기법이다. 알다시피, 사용자와 운영체제는 시스템 자원을 공유한다. 그렇기 때문에, 사용자에게 제한을 두지 않으면 사용자가 메모리 내의 주요 운영체제 자원을 망가뜨릴 위험이 생기게 된다. 즉, 운영체제의 원활한 작동과 기능을 위해서는 사용자의 시스템 자원 접근을 제한하는 보호 장치가 필수불가결하다. 이러한 보호 장치가 바로 이중 동작 모드(dual-mode operation)이다.


이중 동작 모드의 기본 개념은 사용자가 접근할 수 없는 커널 모드(kernel mode)와 사용자가 접근할 수 있는 사용자 모드(user mode)로 나누어 진다.





2. 이중 동작 모드의 구조



                                                                                 출처 : <Operating System Concepts>



이중 동작 모드는 사용자 모드와 커널 모드로 구성되어 있다. 커널 모드는 수퍼바이저 모드(supervisor mode), 시스템 모드(system mode), 혹은 특권 모드(privileged mode)로도 불리운다. 이들은 각각 사용자를 위한 동작과 운영체제를 위한 동작을 담당한다. 이중 동작 모드를 통해서 사용자 모드에서는 불법적인 명령을 하지 못하게 한다.


위의 이미지에서 볼 수 있듯이, 사용자가 사용하는 응용 프로그램은 사용자 모드에서 작동이 되어지게 된다. 그러다가, 해당 프로그램이 운영체제에게 시스템 사용을 요청하게 되면 커널 모드로 바꾸어서 요청된 시스템을 실행한 뒤에, 다시 사용자 모드로 전환한다.


이 커널 모드와 사용자 모드를 구분 짓기 위해서 모드 비트(mode bit)라고 하는하나의 비트가 컴퓨터의 하드웨어에 추가되었다. 이 비트는 커널 모드(0) 또는 사용자 모드(1)를 나타낸다. 모드 비트의 사용으로 우리는 운영체제를 위하여 실행되는 작업과 사용자를 위해 실행되는 작업을 구분할 수 있다.


시스템 부트 시 하드웨어는 커널 모드에서 시작한다. 이어 운영체제가 적재되고, 사용자 모드에서 사용자 프로세스가 시작된다. 트랩이나 인터럽트가 발생할 때마다 하드웨어는 사용자 모드에서 커널 모드로 전환한다(즉, 모드 비트를 0으로 변경한다). 그러므로 운영체제가 컴퓨터의 제어를 얻을 때마다 항상 커널 모드에 있게 된다. 시스템은 사용자 프로그램으로 제어를 넘기기 전에 항상 사용자 모드(모드 비트 1로 설정)로 전환한다.




3. 이중 동작 모드의 중요성



동작의 이중 모드는 잘못된 잘못된 사용자로부터 운영체제를, 그리고 잘못된 사용자 서로를 보호하는 방법을 우리에게 제공한다. 운영체제 내부에는 나쁜 영향을 끼칠 수 있는 일부 명령들을 특권 명령(privileged instruction)으로 지정함으로써 운영체제 자신과 사용자에게 시스템적 보호를 제공한다. 이에 따라, 하드웨어는 특권 명령이 커널 모드에서만 실행되도록 허용한다. 사용자 모드에서 특권 명령을 실행하려고 시도하면, 하드웨어는 이를 실행하지 않고, 불법적인 명령으로 간주해 운영체제로 트랩(trap - 소프트웨어적 인터럽트)을 건다.


커널 모드로 전환하는 명령어가 특권 명령의 한 예이다. 또 다른 예는 입출력 제어, 타이머 관리, 그리고 인터럽트 관리를 위한 명령어들이 있다.


불법적인 명령이 이중 동작 모드가 필요한 유일한 이유는 아니다. 만약, 이중 동작 모드가 없다면, 잘못된 사용자 프로그램이 데이터를 운영체제 부분에 덮어 기록함으로써 운영체제를 지워버릴 수 있고,  또한 여러 프로그램이 동시에 한 장치에 기록할 수 있으며, 그 경우 예상치 못한 결과가 발생할 수 있다.


사용자 프로그램이 불법적인 명령을 실행하려 하거나 사용자 주소 공간이 아닌 메모리에 접근을 시도하는 등과 같은 오류가 발생하면 하드웨어는 운영체제로 트랩을 발생시킨다. 트랩은 인터럽트처럼 인터럽트 벡터를 통해 제어를 운영체제에게 넘긴다. 프로그램 오류가 발생할 때마다 운영체제는 프로그램을 비정상적으로 종료시킨다. 이것은 사용자가 요청한 비정상적인 종료와 동일한 코드에 의해 처리된다. 적절한 오류 메시지가 주어지며, 프로그램의 메모리가 덤프된다(core dumped). 메모리 덤프는 사용자나 프로그래머가 이를 조사하고, 프로그램을 수정하여 다시 실행 시킬 수 있도록 일반적으로 파일에 기록된다.





4. 컴퓨터 시스템의 명령실행 주기



앞서 말했듯, 부팅 시 초기 제어는 운영체제에게 있다. 여기서는 명령어가 커널 모드에서 실행된다. 제어가 사용자 응용 프로그램으로 넘어가면 모드가 사용자 모드로 지정된다. 결국 제어는 인터럽트, 트랩 또는 시스템 호출을 통하여 운영체제로 다시 넘어오게 된다.


시스템 호출은 사용자 프로그램이 자신을 대신하여 운영체제가 실행하도록 미리 지정되어 있는 작업들을 운영체제에게 요청할 수 있는 방법을 제공한다. 시스템 호출은 컴퓨터 시스템의 처리기가 지원하는 기능에 따라 다양한 방법으로 호출된다. 어떠한 형태를 가지든 시스템 호출은 운영체제에 의해 실행될 동작을 사용자 프로세스가 요청할 수 있게 한다.


시스템 호출은 일반적으로 인터럽트 벡터의 특정 위치로 트랩을 거는 형태를 취한다. 이 트랩은 보통의 trap 명령어를 통해 실행되지만 몇몇 시스템은 syscall 이라는 특정 명령어를 가지기도 한다.


시스템 호출이 실행될 때 시스템 호출은 하드웨어에 의해 하나의 소프트웨어 인터럽트로 취급된다. 제어가 인터럽트 벡터를 통해 운영체제 내의 서비스 루틴으로 전달되고, 모드 비트가 커널 모드로 설정된다. 시스템 호출 서비스 루틴은 운영체제의 일부이다. 커널은 인터럽트를 발생시킨 명령을 검사하여 어떤 시스템 호출이 발생했는지를 결정한다. 이때 전달된 인자가 사용자 프로그램이 요청하는 서비스 유형을 표시한다. 요청이 필요로 하는 추가 정보는 레지스터, 스택 또는 메모리를 통하여(이때는 메모리 위치에 대한 포인터가 레지스터에 전달된다) 전달 될 수 있다. 커널은 인자가 정확하고 합법적인지를 검증하고 요청을 실행한 후 제어를 시스템 호출 다음 명령으로 복귀시킨다.

반응형