출처
https://www.youtube.com/watch?v=a9YcKlp-5yk&list=PLK4xviZcdB9ieuusJ5j1UYZMFTuAgZCq8&index=4
복습
컴퓨터 구조
컴퓨터 제일 핵심이 되는 부분에는 하드웨어(cpu, 메모리, 디스크)가 위치한다.
그 하드웨어를 제어하고 있는 것이 O/S(운영체제) 이고, O/S 바탕 위에 여러가지 application 프로그램들이 있다. application 프로그램들은 하드웨어 서비스를 받기 위해서(프린터나 디스크를 사용하기 위해서) 그림에서 보다시피 O/S가 중간에 있기 때문에 O/S에게 요청을 해야한다.
이중모드 (dual mode)
한 컴퓨터를 여러 사람이 동시에 사용하는 환경을 말한다.
보통 서버 컴퓨터들은 한 컴퓨터를 여러명의 유저가 같이 사용한다. 예를 들어 수강신청을 할 때, 여러 학생들이 하나의 수강신청 서버 컴퓨터를 이용한다.
혹은 한 사람이 여러 개의 프로그램을 동시에 사용하는 환경을 말한다.
예를 들어 하나의 스마트폰으로 여러 개의 프로그램을 동시에 사용할 수 있다.
이런 환경들에서는 한 사람이 고의나 실수로 잘못을 하면 그 잘못이 프로그램이 전체 영향을 줄 수 있다.
컴퓨터를 다운 시키는 대표적인 명령은 STOP, HALT, RESET 등이 있다.
만약 assembly언어로 STOP이라는 명령을 내리면 CPU가 중단된다. 중지된 cpu를 다시 깨우는 방법은 전원을 껐다 켜는 방법밖에 존재하지 않는다.
따라서 이중 모드를 사용하는 환경에서 STOP, HALT, RESET 등의 명령은 매우 치명적이기 때문에 일반 사용자 프로그램은 STOP과 같은 치명적 명령의 사용을 불가능하게 하고, 이런 명령들은 오직 관리자만 사용할 수 있어야 한다.
일반 유저가 이런 명령을 내리지 못하게 하려면 어떻게 해야할까?
→ 이중모드 등장
CPU가 동작하는 모드를 2가지로 두면 된다.
사용자(user) 모드
관리자 (supervisor) 모드
CPU는 메모리에 있는 명령을 읽어와서 실행하는데, 메모리에는 O/S영역과 일반 영역이 존재한다.
CPU가 O/S에 있는 명령을 읽어와서 실행할 때는 관리자 모드에서 동작하도록 하고, 일반 user 영역에 있는 명령을 읽어와서 실행할 때는 사용자 모드에서 동작하도록 하는 것이다.
이렇게 두 가지 모드가 있기 때문에 우리는 이것을 이중 모드(dual mode)라고 한다.
우리는 관리자 모드(supervisor)를 시스템 모드(system), 모니터 모드(monitor) 혹은 특권 모드(privileged mode)라고도 부른다.
관리자 모드 = 시스템 모드 = 모니터 모드 = 특권 모드
특권 모드에서 내릴 수 있는 명령?
관리자 모드에서만 내릴 수 있는 명령을 특권 명령 (Privileged instruction)이라고 한다.
특권 명령에는 STOP, HALT, RESET, SET_TIMER, SET_HW 등이 존재한다.
Idr : 메모리에 있는 데이터를 레지스터로 가져오는 명령
STOP : CPU를 중단하는 명령
RESET : CPU나 전체 시스템을 초기화 시키는 명령
SET_TIMER : 컴퓨터 시간을 바꾸는 명령
- 일반 사용자가 서버 컴퓨터의 시간을 바꿀 수 있다면, 같은 서버 컴퓨터를 이용하고 있는 다른 사용자들에게 엉뚱한 시간을 제공하게 되므로, 관리자만 바꿀 수 있어야 한다.
SET_HW : 하드웨어 값을 바꾸는 명령
사용자 모드와 관리자 모드를 어떻게 설정할까?
CPU 안에 레지스트리(Registry) 영역에 monitor bit(flag)를 할당하여 모드 정보를 저장한다.
비트는 0 또는 1의 값을 갖기 때문에, monitor bit 값이 1일 때는 관리자 모드가 되고 0일 때는 사용자 모드가 되도록 하면 된다.
이중 모드 (DUAL MODE)
- 레지스터에 모드를 나타내는 플래그(flag)
- 운영체제 서비스 실행될 때는 관리자 모드
- 사용자 프로그램 실행될 때는 사용자 모드
- 하드웨어/소프트웨어 인터럽트 발생하면 관리자 모드
- 운영체제 서비스가 끝나면 다시 사용자 모드
일반적인 프로그램의 실행
- 하드디스크에 있던 user 프로그램이 메모리 영역에 적재된다. (on memory)
- 가장 처음에는 CPU가 사용자 모드(user mode)에서 동작한다.
- 사용자가 키보드를 치거나 마우스를 움직이면, 하드웨어 인터럽트가 걸린다.
- 인터럽트를 받으면 CPU는 monitor bit값을 1로 변경하여 관리자 모드로 바꾼 후 O/S로 점프하여 ISR(Interrupt Service Routine)을 실행한다.
- ISR이 종료되면 CPU는 monitor bit값을 0으로 변경하여 사용자 모드로 바꾼 후 일반 user 프로그램으로 돌아간다.
- 3 - 5의 과정이 반복된다.
2021.07.20 - [운영체제 OS (Operating System)] - [운영체제] #02-3 고등운영체제, 인터럽트 기반 운영체제
하드웨어 보호
- 입출력장치 보호 (input/output device protection)
- 메모리 보호 (Memory protection)
- CPU 보호 (CPU protection)
입출력장치 보호 (input/output device protection)
서버 컴퓨터 환경에서 일반 사용자가 하드웨어를 자기 멋대로 사용할 수 있도록 하면 문제점이 많다. 서버 컴퓨터는 동시에 여러 사람이 사용하기 때문이다.
예를 들어, 서버 컴퓨터에 프린터와 대용량 하드 디스크가 달려 있다고 하자.
사용자 A가 서버 컴퓨터를 통해 프린터를 사용하고 있는데, 사용자 B가 프린터에 대해 리셋 신호를 보내거나 프린터를 사용하려고 하면 프린트 혼선이 생기거나 프린트가 리셋될 수 있다.
또한 하드 디스크에는 여러 사용자들의 파일이 들어있다. 만약 사용자 A가 자신의 중요 정보를 하드 디스크에 저장을 해두었는데, 다른 사용자 B가 하드디스크에 마음대로 접근할 수 있으면 안된다.
따라서 프린터나 하드디스크 등의 입출력 장치는 보호를 받아야한다.
입출력 장치를 보호하려면 어떻게 해야할까?
컴퓨터 입장에서 프린터와 하드디스크는 입출력 장치이다.
입출력 장치를 제어하는 명령에는 IN, OUT이 존재한다.
IN : 키보드나 마우스 등 입력장치로부터 정보를 받아들이는 명령
OUT : 프린트, 디스크, 스피커 등 출력장치에게 어떤 명령을 내리는 명령
입출력 장치를 보호하려면 입출력 명령(IN, OUT)을 특권명령으로 설정하면 된다.
그러면 일반 사용자가 입출력 명령을 요청할 경우, 내부 인터럽트가 발생하여 ISR이 수행됨으로써 입출력 명령을 강제 종료해버린다. 사용자 모드인데 관리자 모드에서만 내릴 수 있는 특권명령을 요청했기 때문이다.
→ Privileged instruction violation (특권 명령 위반/ 특권 명령 침해)
즉, 올바른 요청이 아니면 운영체제가 요청을 거부하는 것이다.
그렇다면 사용자가 입출력을 사용하고 싶으면?
사용자가 직접 IN, OUT 명령을 내리는게 아니라 운영체제(O/S)에게 도움을 요청하면 된다.
O/S에게 입출력을 요청하기 위해 사용자는 inter 명령을 내리면 되는데, inter명령은 CPU가 interrupt(인터럽트)에 걸리게 하는 명령이다. 인터럽트를 받으면 CPU는 하던 일을 중단하고 monitor bit값을 1로 변경하여 관리자 모드로 바꾼 후 O/S로 점프하여 ISR(Interrupt Service Routine)을 실행함으로써 운영체제가 입출력을 대신 수행해준다.
입출력을 마친 후, CPU는 monitor bit값을 다시 0으로 변경하여 사용자 모드로 바꾼 후 일반 user 프로그램으로 돌아간다
요약하자면, 다음과 같다.
입출력을 하려면 운영체제에게 요청하고 (system mode 전환),
운영체제가 입출력 대행
마친 후 다시 user mode 복귀
올바른 요청이 아니면 운영체제가 거부
메모리 보호 (Memory protection)
메인 메모리에는 O/S가 항상 상주해있고, 사용자 프로그램이 여러개 있다. (멀티 프로그래밍/ 타임 쉐어링 시스템)
2021.06.24 - [운영체제 OS (Operating System)] - [운영체제] #02-2 운영체제의 역사
따라서 우연히 혹은 고의로 다른 사용자 메모리 또는 운영체제 영역 메모리에 접근하려는 문제가 발생할 수 있다. 이와 같이 다른 사용자 정보나 프로그램 혹은 운영체제에 접근하는 행위를 해킹 이라고 한다.
메모리를 보호하려면 어떻게 해야할까? (해결법)
Address Bus : 중앙 처리 장치(CPU)가 메모리나 입출력 기기의 주소를 지정할 때 사용되는 전송로
Address Bus에 MMU(Memory Management Unit, 메모리 관리 장치)를 두어 다른 메모리 영역 침범을 감시하도록 하면 된다.
예를 들어 user program1의 메모리 주소가 500-1000 사이이면, user1이 메모리에 접근할 때에는 CPU가 500-1000사이의 주소를 전송했을 때만 MMU가 통과시켜 주는 것이다. 만약 user1이 CPU를 사용중인데, 메모리 주소 3000을 전송하면, 다른 유저의 메모리 주소이므로 MMU가 메모리 접근을 차단해버린다.
다른 사용자 또는 운영체제 영역 메모리 접근 시도?
→ Segment violation (영역 침범)
MMU 설정은 특권 명령이기 때문에 운영체제만 바꿀 수 있다.
CPU 보호 (CPU protection)
서버 컴퓨터 환경에서는 한 사용자가 실수 또는 고의로 CPU 시간을 독점하는 문제가 발생할 수 있다.
예를 들어 사용자 A가 while (n = 1) 코드를 실행했다고 하자.
그러면, 무한루프로 인해 프로그램이 종료되지 않고 계속 실행되면서 다른 사용자의 프로그램을 실행할 수 없게 된다.
CPU를 보호하려면 어떻게 해야할까? (해결법)
timer를 두어 일정 시간 경과 시 타이머 인터럽트를 걸도록 설계한다.
인터럽트를 걸면 CPU는 하던 일을 중단하고 (설사 무한루프를 돌고있다고 하더라도) 무조건 O/S로 점프하여 ISR을 수행한다. 한 사용자가 CPU 시간을 독점하고 있다면, ISR이 그것을 판단하여 다른 프로그램으로 강제 전환을 수행한다.
인터럽트 > 운영체제 > 다른 프로그램으로 강제 전환
'운영체제 OS (Operating System)' 카테고리의 다른 글
[운영체제] #03-3 프로세스 관리 : 프로세스의 정의, CPU 스케쥴러, 멀티프로그래밍 (0) | 2021.08.09 |
---|---|
[운영체제] #03-2 운영체제 서비스 (0) | 2021.08.01 |
[운영체제] #02-3 고등운영체제, 인터럽트 기반 운영체제 (0) | 2021.07.20 |
[운영체제] #02-2 운영체제의 역사 (0) | 2021.06.24 |
[운영체제] # 02 - 1 운영체제 서론 / 운영체제 정의와 역할 (0) | 2021.06.23 |