Etc

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

뚜둔뚜둔 2024. 6. 3. 11:01

3. 이중모드와 보호

현재 컴퓨터 환경은 여러 사람이 동시에 한 컴퓨터를 사용하는 경우가 많다. (서버 컴퓨터)

하나의 컴퓨터 내에서 여러 프로그램을 수행하는 것이 일반적이다. 이 때 특정 컴퓨터나 프로그램에서 잘못된 동작으로 인해 다른 컴퓨터(프로그램)가 영향을 받는다면 이는 매우 위험하다.

cf. [STOP], [HALT], [RESET]과 같은 명령어로 전체 컴퓨터의 동작이 멈추거나 꺼지는 경우가 있음 → 이러한 치명적인 명렁어들을 요청하는 것을 막기 위해 이중모드가 생김

1. 이중 모드(Dual mode)

모드를 아래와 같이 둘로 나눔

  • 사용자(User) 모드
  • 관리자(Supervisor) 모드 = 시스템(System)모드 = 모니터(Monitor)모드 = 특권(Privileged)모드

특권 모드에서만 내릴 수 있는 명령을 특권명령(Privileged instruction) 이라고 하며, [STOP], [HALT], [RESET],[SET_TIMER]등이 있다. 만약 사용자 모드에서 특권 명령을 사용하려고 하면 CPU에서 내부 인터럽트를 발생시켜 해당 명령어를 요청한 프로그램을 강제로 종료시킨다.

이중 모드는 CPU 내부의 레지스터(Register)의 비트(bit)를 활용하여 플래그(flag)로 나타낸다.

ex. 특권모드 일 때는 비트값이[0]이고, 사용자 모드일 때는 비트 값을 [1]로 설정하여 구분한다.

컴퓨터가 켜진 뒤에 한 사용자 어플리케이션을 실행시키는 동안 모드가 아래와 같이 변함

  1. 컴퓨터 부팅 과정 - 관리자 모드
  2. 어플리케이션 실행 과정 - 관리자 모드
  3. 어플리케이션 실행 중 - 사용자 모드
  4. 인터럽트 발생 후 처리 과정 - 관리자 모드
  5. 인터럽트 처리 후 - 사용자 모드

사용자가 하드웨어의 자원에 접근하는 것은 매우 위험한 동작이다. 그러므로 이러한 경우에는 모두 관리자 모드로 운영체제에서 처리하도록 한다. (프로그램에서 소프트웨어 인터럽트를 발생시켜 운영체제에 위임함)

위의 4번 과정을 하드웨어 인터럽트로 가정하고 자세히 살펴보면 아래와 같다.

  • 하드웨어 인터럽트 발생 후 CPU로 인터럽트 신호 요청 (사용자 모드)
  • CPU에서 모드 플래그를 관리자 모드값으로 설정
  • 해당 하드웨어 인터럽트 서비스 루틴 (ISR) 으로 이동(관리자 모드)
  • 인터럽트 처리(관리자 모드)
  • 인터럽트 처리 완료 후 CPU의 모드 플래그를 다시 사용자 모드 값으로 설정
  • 원래의 어플리케이션 위치로 복귀(사용자 모드)

어플리케이션이 실행하는 동안에는 위와 같은 모드 변경이 반복적으로 일어나는 것을 볼 수 있다. 대부분의 CPU는 이중 모드를 지원함.

2. 하드웨어 보호

이중 모드는 운영체제 기능 중에서 보호에 해당 된다. 운영체제에서 보호할 대상은 입출력 장치, 메모리, CPU 총 세 가지가 존재한다.

2.1. 입출력 장치 보호

여러 정보들은 입출력 장치를 통해 컴퓨터로 입력되고, 외부 장치로 출력이 된다. 여기서 크게 두 가지의 문제점이 발생한다.

  • 여러 입출력 장치의 사용으로 인한 혼선
  • 사용자가 자신의 데이터가 아닌 다른 사용자의 데이터에 입출력을 하는 일
  • 위와 같이 입출력 장치에 여러 사용자의 데이터가 뒤엉켜서 들어오거나 다른 사용자의 데이터에 접근하려는 경우를 막아야 한다.

이를 해결하기 위해 [in],[out] 과 같은 입출력 명령을 특권 명령으로 설정하는 것이다. 즉, 사용자 어플리케이션에서 입출력을 사용하려면 운영체제를 통해서 수행해야 한다. (소프트웨어 인터럽트) 여러 프로그램이 동시에 입출력을 사용하려고 하면 운영체제 내부에서 순서를 정하여 혼선을 막아줄 수 있다.

만약, A,B 사용자가 있는 상황에서 A,B의 데이터를 읽기 위해 운영체제에게 소프트웨어 인터럽트를 발생하였다고 하자. 그러면 운영체제 내부의 해당 ISR로 이동하게 되는데 여기서 현재 사용자가 해당 데이터가 접근할 수 있는 여부를 판단하는 과정이 있으므로 이는 거부된다.

2.2 메모리 보호

메모리에는 운영 체제뿐만 아니라 여러 개의 사용자 어플리케이션이 존재한다. 한 어플리케이션이 자신의 메모리 영역이 아닌 운영체제나 다른 어플리케이션의 메모리 영역에 침범 하려면 매우 위험하다.

!https://user-images.githubusercontent.com/34755287/53879655-5c353e80-4052-11e9-8ec6-8b247850f347.png

메모리는 일반적으로 위와 같이 구성되어 있을 것이다. 여기서 user1이 OS나 usser2, user3에 접근하는 것을 막아야 한다. CPU는 address bus를 통해 메모리 주소에 접근하게 되는데, user1프로그램이 실행되는 동안에는 user1이 할당되어 있는 메모리 주소 범위 안인 경우에만 접근하면 될 것이다. 이는 address bus에서 검사하는 것이 가장 효율적일 것이다.

!https://user-images.githubusercontent.com/34755287/53879656-5c353e80-4052-11e9-901c-8fcf9c2b5e56.png

위의 생각으로 나온 것이 MMU(Memory Management Unit)이다. MMU는 위의 그림처럼 ADDRESS BUS 중간에 설치된 하드웨어 칩으로서 두개의 레지스터를 통해 해당 프로그램의 주소 범위를 저장한다.

EX. user1의 시작 주소는 1024, 끝 주소는 4048이라고 하자. user1이 수행되는 동안 운영체제는 해당 프로그램의 주소 범위를 MMU에 설정(특권명령)하는데, BASE는 1024, LIMIT는 4048이 될 것이다.결과적으로 USER1이 수행되는 동안에는 이 범위 안의 주소값인 경우에만 address bus를 통과 시킨다.

만약 해당 프로그램의 주소 범위 밖의 주소값이 MMU에 들어온다면, MMU에서 내부 인터럽트를 발생시켜 CPU에 신호를 준다. 그러면 CPU는 그에 맞는 ISR로 이동하여 해당 프로그램을 강제로 종료시킨다. 이와 같은 잘못된 메모리 접근을 Segment violation이라 한다.

2.3 CPU 보호

CPU 보호는 사용자의 실수 또는 고의로 인한 CPU독점을 방지해야 한다. 하나의 프로그램이 CPU를 독점하게 되면 다른 프로그램은 수행되지 못한다.

CPU를 독점하는 가장 대표적인 예는 무한 반복이다. ex.while문의 무한루프

이를 해결 하는 방법은 Timer를 두어 일정 시간이 지나면 타이머 인터럽트를 발생시킨다. 인터럽트가 발생하면 반드시 운영체제 내의 ISR로 이동하므로, 해당 ISR에서 각 프로그램의 CPU 점유 시간을 측정하여 적절히 분배되도록 조정한다.

에를 들어, 한 프로그램의 CPU 점유 시간이 비정상적으로 오래 걸리는 경우, 강제로 다른 프로그램으로 CPU를 전환 시켜 줄 수 있다.

 

 

참고 : https://velog.io/@doyuni/운영체제OS-1.-Introduction

참고 : https://github.com/yonghwankim-dev/OperatingSystem_Study?tab=readme-ov-file

 

GitHub - yonghwankim-dev/OperatingSystem_Study: [인프런] 운영체제 공룡책 강의, 정리

[인프런] 운영체제 공룡책 강의, 정리. Contribute to yonghwankim-dev/OperatingSystem_Study development by creating an account on GitHub.

github.com

 

반응형

'Etc' 카테고리의 다른 글

[운영체제] 5. 프로세스 관리  (0) 2024.06.03
[운영체제] 4. 운영체제 서비스  (0) 2024.06.03
[운영체제] 2.운영체제 역사  (0) 2024.06.03
[운영체제]1. 운영체제란  (0) 2024.06.03
골프 용어 정리  (1) 2022.11.02