[운영체제] 3. 이중모드와 보호

ideal dev·2022년 12월 23일
0

운영체제

목록 보기
3/9
post-thumbnail

👉 이중모드가 뭐야?

왜 생겼어?

  • 한 컴퓨터를 여러 사람이 동시에 사용하는 컴퓨터 환경에서 (서버 컴퓨터와 같은) , 한 사람이 고의/실수로 STOP, HALT, RESET 과 같은 명령어를 입력 시 전체 컴퓨터의 동작이 멈추거나 꺼지게 된다.
  • 이러한 문제점을 해결하기 위해, 일반 사용자는 치명적인 명령어를 요청하지 못하도록 하기 위해 이중모드라는 것이 나옴.

👉 이중모드 (dual 모드): 사용자 모드 (UserMode) vs 관리자 모드(Supervisor Mode)

  • 관리자 모드 = 시스템 모드 = 모니터 모드 = 특권 모드
    ( Supervisor mode= System Mode = Monitor Mode = Priviliged Mode )
  • 관리자 모드에서만 가능한 특권 명령 (privileged instructions)
    : STOP, HALT, RESET, SET_TIMER, SET_HW, ....
    : 사용자 모드일 때 특권 명령 입력 시 CPU : 사용자모드네? 내부 인터럽트 발생시켜, 명령 요청한 해당 프로그램 강제 종료!

👉이중모드 프로그램 동작 과정

  • 이중 모드는 CPU 내부의 레지스터(register)의 비트(bit)를 활용하여 플래그(flag)로 나타냄.
    ex) 특권 모드일 때는 비트 값 0 , 사용자 모드일 때는 비트 값 1 로 설정하여 구분
  1. 운영체제 서비스 실행될 때에는 관리자 모드 ( 0 )
    👇 프로그램 클릭 시 비트를 1로, 사용자 모드로 변경
  2. 사용자 프로그램이 실행될 때에는 사용자 모드 ( 1 )
    👇 인터럽트 발생
  3. 하드웨어/소프트웨어 인터럽트 발생하면 관리자 모드 ( 0 )
    👇 운영체제 서비스 끝
  4. 운영체제 서비스가 끝나면 다시 사용자 모드 ( 1 )

예시로 이해

  1. 사용자 프로그램이 실행되어, 사용자 모드인 상황에서 H/W에 데이터 저장 요청
  2. 사용자모드에서는 접근이 불가능하기 때문에, 관리자 모드로 변경 후 H/W에 접근
    : 인터럽트가 발생하여 관리자 모드로 변경
    : 관리자모드에서 ISR(인터럽트 서비스 루틴)을 실행하고, 인터럽트 처리
  3. 인터럽트 처리 완료,원래의 애플리케이션 위치로 복귀 (사용자 모드)
    이렇게 사용자모드와 관리자모드를 변경하는 것을 알 수 있다

: 이중 모드는 운영체제 기능 중에서 보호에 해당
-> 운영체제에서 보호할 대상은 I/O관리, 메모리 관리,CPU 관리

하드웨어 보호

: 하나의 컴퓨터를 여러 사용자가 사용할 때, 컴퓨터를 보호하기 위한 방법
: 다중프로그램 시 시스템을 보호하기 위한 방법

이러한 스탑 명령을 받으면 안 됨🙅‍♀️🙅‍♀️🙅‍♀️ , 방법에는 어떤 게 있을 까?

1. 입출력 장치 보호 (input/output device protection)
2. 메모리 보호 (Memory protection)
3. CPU 보호 (CPU protection)

👉 입출력 장치 보호

‼️ 문제점

: 여러 정보들은 입출력 장치를 통해 컴퓨터로 입력되고, 외부 장치로 출력하는데 여기서 크게 2가지 문제가 발생

  • 여러 입출력 장치의 사용으로 인한 혼선
  • 사용자가 자신의 데이터가 아닌 다른 사용자의 데이터에 입출력을 하는 일

💡 해결 방법

  • 입출력 명령을 특권 명령으로 설정 ( IN, OUT ) 으로 설정하여, 사용자 모드일 때에는 운영체제를 통해 입출력하도록 설정
    - 1. 입출력을 하려면 운영체제에게 요청하고 (관리자 모드)
    - 2. 운영체제가 입출력 대행 후
    - 3. 사용자 모드로 복귀
  • User Mode에서 직접 요청 : O/S에서 거부, 강제종료
  • User Mode에서 O/S에게 요청 : User Mode -> SU Mode -> print 가동 -> User 모드

👉 메모리 보호

‼️ 문제점

  • 메모리는 운영체제뿐만 아니라 여러 개의 사용자 애플리케이션이 존재
  • 한 애플리케이션이 자신의 메모리 영역이 아닌 운영체제나 다른 애플리케이션의 메모리 영역에 접근 하면 안 됨

💡 해결 방법

  • CPU는 address bus 를 통해 메모리 주소에 접근
  • address bus 중간에 설치된 두 개의 레지스터를 통해 (MMU) 해당 프로그램의 주소 범위를 저장
    - 두 개의 레지스터 : base, limit
  • base-limit 범위 안의 주소값인 경우에만 address bus를 통과

  • MMU를 두어 다른 메모리 영역 침범 감시
  • MMU 설정은 특권 명령 ( 운영체제만 바꿀 수 있음)

MMU 자세한 설명 참고 : https://jhnyang.tistory.com/247

  • MMU? ( Memory Management Unit)
    : CPU 코어 안에 탑재되어 가상 주소를 실제 메모리 주소로 변환해주는 장치

  • 해당 프로그램의 주소 범위 밖의 주소값이 MMU에 들어온다면?
    1. MMU에서 내부 인터럽트 를 발생시켜 CPU에 신호를 줌.
    2. CPU는 그에 맞는 ISR로 이동하여 해당 프로그램을 강제종료
    이과 같은 잘못된 메모리 접근 : Segment violation

👉 CPU 보호

‼️ 문제점

  • 한 사용자가 실수 또는 고의로 CPU 시간 독점
    ex) while ( n == 1) 일 때 : 무한루프, 다른 사용자의 프로그램 실행 불가

💡 해결 방법

  • Timer 를 두어 일정 시간 경과 시 타이머 인터럽트
  • 인터럽트 > 운영체제 > 다른 프로그램으로 강제 전환

0개의 댓글