[OS 1-4] 이중모드, 하드웨어 보호

KOCW에 오픈된 경성대학교 양희재 교수님의 강의를 기반으로 정리한 내용입니다.

이중모드

CPU한테 stop 이나 halt같은 명령을 내리면 모든 동작을 중지한다. 재가동 시키려면 전원을 뺏다가 다시 넣어야한다. 고로 이런 명령들은 아주 조심스럽게 사용되어야 하고, 잘못 사용하면 컴퓨터와 서비스에 심각한 악영향을 미칠 수 있다. 그래서 CPU에는 이런 명령들을 포함한 모든 명령들을 실행할 수 있는 관리자 모드와 일반적인 명령들만을 실행할 수 있는 사용자 모드, 이 두가지가 있다.

모드를 구별하는 방법

CPU안에는 레지스터가 있다. 그 레지스터에는 carry / negative / zero / overflow등의 flag(bit)가 있다. 그리고 추가적으로 system flag가 있는데, 이 flag가 현재 CPU의 모드를 나타나는데 사용된다. 0은 사용자모드, 1은 관리자 모드를 의미한다.

부팅 -> 관리자모드 -> 유저모드

컴퓨터를 부팅할때 system flag는 1이고 부팅에 필요한 모든 명령들이 제약없이 실행된다. 부팅이 끝나고 사용자의 게임 프로그램이 메모리에 올라가면, 프로그램을 실행하기 직전에 OS가 system flag를 0으로 만든다. 이렇게 하면 이 게임프로그램이 함부로 컴퓨터를 조작할 수 없게된다.

보호

하드웨어 보호

stop / halt 명령어 외에도 하드디스크에 접근하는 등의 I/O관련 작업에도 관리자 모드가 필수다.

예를들어, 게임 프로그램이 실행되고 있는 중에 하드디스크에 게임 스코어를 저장해야할 때, 이 프로그램이 직접 하드디스크에 접근할 수 없다. 이렇게 되면 보안에 심각한 문제가 생길 수 있기 때문이다(일기장을 훔쳐본다던지…). 그래서 기본적으로 이런작업은 OS에게 부탁해야한다. 순서는 다음과 같다.

  1. 게임 프로그램이 CPU에게 event를 보내면 CPU에 인터럽트가 발생한다.
  2. CPU는 system flag를 1로 바꾼다.
  3. OS에게 event를 전달한다.
  4. OS의 ISR(Interupt Service Routine)은 해당 요청(event)의 적합성(이상한짓 하려는건 아닌지 점검)을 판단하고 괜찮다 싶으면 하드디스크에 게임 스코어를 저장하고 바로 system flag를 0으로 변경한다.
  5. 아까 게임 프로그램을 멈춘 부분부터 다시 실행한다.

메모리 보호

메모리에 A,B프로그램이 있을때, A프로그램이 B프로그램의 메모리 영역에 접근하지 못하도록 막는다.

MMU(Memory Management Unit)

OS는 MMU에 A프로그램의 시작 메모리 주소(base) 와 끝 메모리 주소(limit)을 설정 해 놓는다. 이렇게 하면, A프로그램이 B프로그램의 메모리 영역에 접근할 수 없다. MMU가 문지기 처럼 딱! 막고 있기 때문이다.

만약에 A프로그램이 B프로그램에 접근하려고 하면, CPU에 내부 인터럽트가 발생하고, OS에 이와 관련된 Error ISR에 이벤트를 보낸다. 그러면 OS는 해당 프로그램을 중지시키고 메모리에서 퇴출시킨다.

CPU보호

하나의 컴퓨터에 여러개의 프로그램이 돌아가고 있는 상황에서, A프로그램이 무한루프에 빠져버리면 나머지 B,C,D프로그램은 실행되지 않을것이다.

다행히도 OS(혹은 물리적인 회로?)는 이런 경우를 대비한 책략을 갖고있다.

메인보드 안에 타이머가 있는데, 이 타이머가 일정시간마다 CPU에게 interupt를 발생시킨다. 그러면 CPU는 OS안에 이 interupt와 관련된 ISP(Interupt Service Routine)에게 신호를 보낸다. OS는 참다 참다가 A프로그램이 계속 CPU를 점유하고 있는걸 보다 못해, CPU가 다른 프로그램도 실행할 수 있게 한다. 쉽게 말해서, 타이머의 도움으로 OS가 현재 각 프로그램별 CPU의 점유율을 계속 감시하고 있다는 말이다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

Up Next:

[OS 1-3] 고등운영체제 & 인터럽트 기반 운영체제

[OS 1-3] 고등운영체제 & 인터럽트 기반 운영체제