운동하는 공대생
[OS(운영체제)] 운영체제 Kernel&Protection 본문
1. Intro
과거에는 OS kernel과 application이 같은 메모리 주소 체계에서 실행되었다. 하지만 이는 하드웨어의 리소스를 추상화하는 OS의 역할을 충분히 수행하지 못하며 보안성에도 취약하다.
2. Protection
what should the designer do for protection?
1) Define a unit of protection: 어떤 문제에 대한 정의가 필요하다.
2) Devise protection mechanism for the kernel: 보호 체계를 고안해야 한다.
Unit of protection
abstraction : 제한된 권한에서의 프로그램 실행, 컴퓨터 하드웨어에 대한 추상화
OS designer names the abstraction as a process
-> process 는 컴퓨터의 추상화라고 생각해도 된다.
위의 그림처럼 OS kernel 의 보안성 때문에 process로 추상화하여 보안성을 높인다. 즉 OS kernel을 process로부터 보호를 해야 한다.
Protection design
- Privileged instruction : application을 특정 명령어로부터 보호한다.(terminate instruction)
- Memory protection : application, kernel의 메모리 주소를 읽지 않게 해야 한다.
- (Time) interrupt : os는 application의 region을 관리해야 한다.
3. Privileged instruction
3.1 naive approach
제한된 권한으로 어떻게 실행할까??
프로그램 명령어를 simulator를 통해 실행해 본다. -> 실행된다면 명령어 실행 -> 실행되지 않는다면 stop
!! 하지만 너무 느리다는 단점이 존재한다.
3.2 hardware-base
하드웨어는 기반으로 한 보호 방식은 Dual mode 혹은 ring mode라고 한다. 여기서 하드웨어에서 제공하는 mode bit을 활용하여서 접근 권한을 부여한다. 그리고 CPU의 도움을 받는다.
1) Kernel mode : 하드웨어에 대한 높은 접근 권한을 가지고 실행된다. (Read/write to any memory, access any I/O device 이런 변화는 Kernel이 하드웨어에게 변화를 통지한다.)
2) User mode : 제한된 접근 권한을 가진다. CPU가 명령어가 실행되기 이전에 모두 확인한다. 권한이 kernel에서 부여된다.
( x86에서는 EFLAGS register에 모드가 저장된다.)
하지만 application이 권한이 부여된 명령어를 수행을 해야 한다면????
=> 커널에게 요청을 보낸다. 승인이 나면 kernel이 대신하여 하드웨어에 요청한다. 이것을 trap syscall라고 이야기하며 mode를 kernel 이 switch 해준다.
System calls
programming은 OS에서 제공하는 서비스를 사용한다. 예를 들어 C 프로그램이 printf() 함수를 호출한다면 kernel에서는 write() system call을 호출한다.
4. Memory protection methods
software-based methods
kernel이 모든 메모리 접근을 관리하지만 너무 느리다. 그래서 사용하지 않는다.
hardware-based method
하드웨어에서 메모리의 접근과 저장에 관여하며 메모리에 접근하지 못한다면 하드웨어에서 예외처리를 한다. 커널이 이런 신호를 받고 적절한 행동을 취한다.
4.1 Hardware-based memory protection
하드웨어의 주소체계를 보호하기 위해서 OS가 관리한다.
V1: process의 주소체계
V2: hardware의 주소체계
특징은 process는 V1의 관점에서 process주소에 자유롭게 접근이 가능하다. 하지만 V1은 V2의 주소에 접근하기 위해서는 반드시 OS의 변환 과정이 필요하다.
=> 여기서 V1, V2를 따로 분리하여 관리하기 위해서 virtual memory 개념이 등장하게 되었다.
- Virtual memory and address translation
hardware로 변환하는 과정에서는 OS kernel의 변환 table을 활용하여서 진행된다. 그리고 OS kernel에서는 MMU를 통해서 물리적 hardware의 메모리에서 데이터를 저장하고 불러오는 중간 다리 역할을 수행한다.
- example
코드를 예를 들어서 설명을 해보겠다.
int *i;
i = kernel_address;
*i = 1;
포인터를 지정하면 주소를 할당받게 되는데 여기서 MMU는 2,3번 line의 코드에서 모두 memory에 접근한다. 또한 여기서는 process가 어떤 주소든 접근이 가능하다. 그리고 3 번 line 의 코드가 실행되면 예외 처리인 Page fault가 발생한다. 왜냐하면 process는 커널의 주소를 침범하는 게 불가능하기 때문이다. 그래서 이런 상황에서는 kernel이 Page fault handler를 실행한다.
여기서 커널이 process를 중단한다. 그래서 process에게는 SIGSEGV를 보내고 process에서는 signal handler가 작동한다.
5. (Timer) interrupt
OS는 application로부터 regain control을 수행한다.
작동방식은 kernel 이 timer hardware를 주기적으로 발생시켜서 milliseconds를 지연시킨다. process가 무한 루프가 돈다면 kernel이 process를 중단하는 게 가능하다.
발생 상황
- 실행 중인 process가 중단되었을 때
- 현재의 process를 저장하기 위해서
- OS실행에서 사전에 설정된 중단
'OS' 카테고리의 다른 글
[OS(운영체제)] Virtual Memory (0) | 2024.08.20 |
---|---|
[OS(운영체제)] CPU 스케줄링(CPU Scheduling) (1) | 2024.08.19 |
[OS(운영체제)] 운영체제 Interrupt, System Call, Upcall (1) | 2024.08.10 |
[OS(운영체제)] 운영체제 프로세스 (0) | 2024.07.31 |
[OS(운영체제)] 운영체제 소개 (0) | 2024.07.31 |