운영체제 - 4

KOCW 운영체제 4강

양희재 교수님 강의를 듣고 쓴 글입니다.


Dual mode(이중 모드)

따라서 User program에서는 STOP과 같은 치명적인 명령어는 사용불가능하게 만들었다. → dual mode(이중 모드)



Dual mode 구현 방법

CPU에 있는 register의 한 bit를 mode bit로 둬서 user/system mode를 구별하게 했다.


일반적인 프로그램의 실행 : program loading

  1. User mode인 상태.
  2. 사용자가 키보드, 마우스로 어떤 프로그램 실행시키려는 동작 수행.
  3. System mode상태가 됨. OS의 ISR 을 실행시켜서 HDD에 접근하기 위해.
  4. 다시 user mode.
  5. 모니터, HDD, 프린터와 같은 사용자가 원하는 동작을 수행.
  6. system mode. OS의 각각에 해당하는 ISR을 실행시키기 위함.
  7. 끝나면 다시 user mode.


예시 상황1 : Game 을 실행시키는 상황

  1. 바탕화면의 game을 클릭한다.
  2. game이 main memory에 load된다. → OS가 load해준다. 따라서 system mode에서 수행된 것이다.
  3. game이 main memory에 load됐으니깐 CPU는 game을 실행한다. → 2번 과정에서 OS가 game load해주고 다시 user mode로 바꿔준 상태였다.


예시 상황2 : 실행시킨 game의 score를 HDD에 저장하는 상황

중요한 것은 game이라는 user program이 직접 HDD에 접근해서 뭔가를 할 수가 없다는 것이다. 만약 이게 가능했다면, user program은 나의 컴퓨터에 있는 저장소에 다른 파일들에게도 접근이 가능하다는 것이기 때문이다. 따라서 이럴 땐 OS에게 부탁을 한다.

  1. game이 OS에게 저장해달라고 부탁을 한다. → system mode 1. S/W Interrupt. OS안에 ISR로 점프.
  2. 다시 user mode로 돌아와서 게임을 진행한다.

여기서 중요한 것은 game에서 요청을 하는 행위는 우리 같은 사용자들이 하는 것이다. 그리고 그 요청을 실제로 진행하는 행위OS같은 관리자들이 하는 것이다. 이 2가지 행위에 대해서 user mode, system mode로 나누는 것이다.


대부분의 CPU는 dual mode를 지원한다. 만약 user mode에서 STOP과 같은 명령어가 쓰였다면, mode가 system mode인지 확인 후

1) CPU는 내부 Interrupt 발생으로 인식. 2) OS의 해당 ISR로 점프. 3) 해당 user program을 main memory에서 제거.(강제 종료)

결론 : user program은 HW resource를 쓰기 위해선 무조건 OS를 거쳐야 한다.


Hardware Protection

위 처럼 일반 사용자가 HW를 마음대로 사용하게 된다면 문제가 많이 발생한다.


Input/Output device protection


만약 사용자가 IN/OUT 명령어를 직접 내렸을 경우, privileged instruction violation이라고 한다. 이럴 때 OS는 해당 program을 강제종료 시킨다.


Memory protectioin

일반 user program이 우연 또는 고의로 main memory에 있는 다른 user program이나 OS의 코드를 침범하는 것으로 부터 보호.

os4_1

User program1이 OS와 다른 program에 침범하고 있는 그림이다. 특별한 명령이 없을 경우, 해당 program에서는 해당 영역만 접근해야 하므로 User program1이 다른 영역에 접근하는 것을 막아야 한다.


os4_2

User program1이 실행될 때에는 해당 address의 범위내(addr 500~1000) 에서만 접근이 가능하게끔 MMU가 제어를 해준다. User program2가 실행될 때에는 address 1000~2000 에만 접근이 가능하게끔 MMU가 제어를 해준다.

해당 program에 접근 안하고 다른 곳으로 접근하려고 할 때(Segment violation) MMU는 CPU에게 interrupt신호가 가게 한다. 그 후 CPU는 OS에게 해당 ISR로 점프하게 한 다음, 잘못된 주소로 가려고 했던 program을 강제 종료 시킨다.