하드웨어 보안
- 여러 프로그램이 동시에 실행되는 다중 프로그래밍 환경에서는 각 프로그램들이 다른 프로그램의 실행을 방해하거나 프로그램들간의 충돌 문제를 막기 위해 하드웨어에 대한 각종 보안이 요구됨.
- 하드웨어적 보안유지를 위해 OS는 기본적으로 커널모드/사용자모드의 오퍼레이션을 지원한다.
- Kernel Mode
운영체제가 CPU의 제어권을 가지고 운영체제의 코드를 실행하는 모드.
커널모드에서는 모든 종류의 명령 실행 가능 - User Mode
일반 사용자 프로그램 실행 모드.
제한적인 명령만 실행 가능.
- Kernel Mode
-
시스템에 중요한 영향을 미치는 연산은 커널모드에서만 실행가능하게 함으로써 하드웨어의 보안을 유지함.
하지만 사용자 프로그램이 CPU를 가지고 있는 동안에는 운영체제가 CPU를 가지고 있지 않으므로 사용자 프로그램이 운영체제만 수행가능한 중요한 연산을 수행할 수도 있다.
따라서 컴퓨터 시스템은 CPU내부에 Mode Bit를 두어 사용자 프로그램을 감시한다. -
모드비트가 0: 커널모드: 모든 명령 수행 가능.
모드비트가 1: 사용자 모드: 제한된 명령만 수행 가능. -
CPU는 보안 관련 명령을 수행하기 전에는 항상 모드비트를 조사해 모드비트가 0으로 세팅된 경우에만 해당 명령을 수행한다.
사용자 프로그램이 실행되다 하드웨어 접근 등 보안이 필요한 중요한 명령을 실행해야 할 경우에는 시스템콜을 통해 운영체제에게 서비스를 대신해 줄 것을 요청한다.
그러면 CPU의 제어권은 다시 운영체제에 넘어가고, 모드비트가 자동적으로 0으로 세팅되어 운영체제는 모든 필요한 명령을 실행 할 수 있게된다.
요청된 작업이 모두 끝나면, 모드 비트를 다시 1로 세팅하여 사용자 프로그램에 CPU를 넘겨주게 된다. - 이와 같이 시스템 보안과 관련된 명령들을 특권명령이라고 지칭하며, 특권명령은 모드비트가 0일 때만 실행가능하다.
사용자 프로그램이 디스크에 저장되어있는 (본인 소유가 아닌)파일에 접근하는 것을 방지해야 하므로 모든 입출력 명령도 특권명령으로 규정되고, 사용자 프로그램이 직접 입출력하는 것을 차단한다.
사용자 프로그램이 입출력을 하고싶으면 시스템콜로 운영체제에 요청해야 하고, 운영체제가 입출력 명령을 대신 수행한다. 운영체제는 입출력 요청이 올바른 요청인지 확인 후 입출력을 실행하기 때문에 파일에 대한 보안을 유지할 수 있게 된다.
메모리 보안
- 여러 프로그램이 메모리에 동시에 올라가게 되는 경우, 한 프로그램이 다른 프로그램이나 운영체제가 위치하는 메모리 영역에 침범하지 않도록 메모리에 대한 보안역시 필요다.
- 메모리 보호는 두 개의 레지스터(기준레지스터, 한계레지스터)를 이용하여 프로그램에 접근하려는 메모리 부분이 접근해도 문제가 없는지 체크하며 이루어진다.
- 기준 레지스터(base register): 프로그램이 접근가능한 메모리상의 가장 작은 주소를 보관.
-
한계 레지스터(limit register): 프로그램이 기준레지스터 값부터 접근할 수 있는 메모리의 범위를 보관.
- 사용자 프로그램은 기준 레지스터가 있는 주소부터 기준레지스터 + 한계레지스터 값 사이의 주소영역만 가능하다.
만약 접근하려는 주소가 그 범위를 벗어나게 되면, 예외상황 이라는 일종의 소프트웨어 인터럽트가 발생하게 된다.
예외 상황이 발생하면, CPU의 제어권이 해당 프로그램으로부터 운영체제로 넘어가게 되며, 운영체제는 해당 프로그램을 강제종료 시킨다. - 기준레지스터와 한계 레지스터를 통한 메모리 보호기법은 하나의 프로그램이 메모리의 한 영역에 연속적으로 위치하는 경우에만 해당되는 설명이다.
- 메모리 접근 명령은 특권 명령은 아니지만, 기준 레지스터와 한계 레지스터 값을 세팅하는 연산은 특권 명령으로 규정해야 한다.
-> 운영체제가 두 개의 레지스터 값을 직접 세팅해주고, 사용자 프로그램은 값을 변경할 수 없다.
CPU 보안
- 일반적으로 CPU는 컴퓨터 시스템 내에 하나밖에 존재하지 않는다.
- CPU가 하나의 프로그램에 의해 독점되는 것을 막기 위해 운영체제는 타이머(timer)라ㅓ는 하드웨어를 사용한다.
- 타이머는 정해진 시간이 지나면, 인터럽트를 발생시켜 운영체제에게 CPU의 제어권을 넘겨주는 역할을 담당한다.
타이머의 값을 세팅하는 명령을 로드타이머(load timer)라고 하며, 이는 특권명령에 해당한다.
시스템 콜을 이용한 입출력 수행
- 사용자 프로그램이 디스크의 파일에 데이터를 읽고 쓰거나, 키보드나 마우스로 입력받고 모니터에 출력하는 행위는 모두 입출력 명령이며, 입출력 명령은 특권명령 이므로, 사용자 프로그램이 직접 수행 할 수는 없다.
- 이러한 입출력 명령은 운영체제 코드에 구현되어 있고, 사용자 프로그램은 운영체제에게 시스템 콜을 통해 입출력을 수행한다.
- 시스템 콜은 일종의 소프트웨어 인터럽트로 사용자 프로그램이 시스템 콜을 할 경우, 트랩이 발생해 CPU에 대한 제어권이 운영체제로 넘어간다.
- 운영체제가 해당 시스템 콜을 처리하기 위한 루틴으로 가서 정의된 명령을 수행하고 나면, CPU에게 인터럽트를 발생시켜 입출력이 완료되었음을 알려주어 해당 프로그램이 다시 CPU를 할당 받을 수 있도록 한다.
'개발 > 유용한코드' 카테고리의 다른 글
프로세스 관리-02 (0) | 2020.02.26 |
---|---|
프로세스 관리-01 (0) | 2020.02.26 |
인터럽트의 원리 (0) | 2020.02.26 |
컴퓨터 시스템의 동작원리-1 (0) | 2020.02.26 |
운영체제 (0) | 2020.02.26 |