multi processing과 timesharing을 할 때에 메모리, 유저 프로세스, I/O 작업들은 서로 보호되어야 한다.
따라서 CPU는 수행 모드를 2 가지(kernel mode, user mode)로 나누어 이 메카니즘이 가능하도록 지원한다. 이 2 가지 모드는 mode bit로 제어한다.
Protection & Mode bit
사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치
(OS가 사용자 프로그램을 제어함.)
💡 Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation 지원
- 1 = user mode : 사용자 프로그램 수행
- 0 = kernel 모드 : OS 코드 수행 (=시스템 모드)
- 보안을 해칠 수 있는 중요한 명령어(특권 명령)는 커널 모드에서만 수행 가능
- Interrupt나 Exception 발생 시, 하드웨어가 mode bit을 0으로 바꿈(커널 모드로 변경)
- 사용자 프로그램에 CPU를 넘기기 전에 mode bit을 1(유저 모드)로 셋팅
I/O protection
불법 I/O or 멀티 프로세스로부터 동시에 I/O 요청이 들어왔을 때 모든 I/O은 특권 명령을 통해 수행한다.
💡 유저 프로그램은 I/O의 수행을 위해 OS에 system call을 넣어줘야 한다.
💡 유저 측에서 system call을 발생시키면?
- 인터럽트(software-generated interrupt, trap를 발생한다.
- trap handler가 trap vector를 호출한다.
- 커널 모드로 변경된다.
- trap handler는 상를 보호하고 요청된 I/O 작업을 수행한다. user mode로 다시 세팅하고 system call에 대한 응답을 반환한다.
⭐️ 핵심: user가 system call ➡️ kernel mode ➡️ trap interrupt ➡️ trap handler ➡️ return and user mode
Memory protection
OS는 각 프로세스의 메모리 액세스를 제어하고 보호한다. 각각의 프로세스가 서로 메모리 영역을 침범하지 못하도록 다음 레지스터를 활용하여 os가 이를 관리한다.
- base register: 프로세스의 메모리 주소 공간에서 시작 주소를 나타내는 레지스토러 프로세스의 코드와 데이터가 위치하는 주소 범위를 할당한다.
- limit register: 프로세스의 메모리 주소 공간에서 메모리 할당의 끝을 나타내는 레지스터로 프로세스가 액세스 할 수 있는 메모리 영역의 크기를 정의한다.
cpu protection
timer는 하나의 프로세스가 cpu를 독차지하는 것을 방지한다.
- timer는 하나의 프로세스가 특정 시간 이상 cpu를 잡고 있으면 os에게 interrupt를 발생한다.
- 인터럽트가 발생하면 다음 시간 간격 동안 실행할 프로세스를 결정한다.
timer는 time sharing에도 사용된다.
- Context switch: 먼저 해당 프로세스의 상태를 저장한 뒤 두 개 이상의 프로세스의 PCB(Process Control Block)을 업데이트하고, 다음 프로세스의 상태를 복원한다.
I/O, Device Controller
⭐️ I/O device controller ⭐️
- I/O 장치에 붙어서 여러 일을 하는 일종의 CPU
- I/O가 끝났을 경우, interrupt로 CPU에 그 사실을 알린다.
- 제어 정보를 위해서 control register, status register 가짐. ➡️ CPU가 일을 시킬 때 정보 전달하는 경로 즉, 명령 전달
- 데이터를 저장하는 local buffer를 가짐(data register) ➡️ 일을 하기 위한 데이터 그 자체들
- I/O는 실제 device와 local buffer 사이에서 일어남.
cpu와 device controller가 직접적으로 연결되어 있지 않은 이유
1. 확장성
- 컴퓨터 시스템은 다양한 종류의 외부 장치를 지원해야 하는데, device controller가 cpu와 직접적으로 연결되어 있으면 이를 처리하기 위해서 시스템을 재설계하는 번거롭고 복잡한 작업을 거쳐야한다.
- 따라서 외부장치를 제어하기 위한 특수 hw device controller와 cpu는 따로 존재하여 I/O bus를 통해 소통한다.
2. 병목 현상 방지
- I/O 작업은 cpu 작업 수행보다 매우매우매우매우 느리다. 그래서 cpu와 device controller를 따로 두어서 i/o 작업 도중 cpu가 다른 일을 할 수 있게 돕는다. 이를 통해 시스템의 성능을 최적화한다.
3. 보안
- 외부 장치에서 cpu에 이상한 데이터 보내지 못하게 한다. 외부장치와 cpu 간의 통신은 device controller를 통해서만 하기 때문이다
Interrupt
인터럽트 당한 시점의 레지스터와 pc를 저장한 후, CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
- 하드웨어 인터럽트(=Interrupt) *일반적인 인터럽트
- 하드웨어가 발생시킨 인터럽트
- 소프트웨어 인터럽트(=Trap)
- Exception: 프로그램이 오류를 범한 경우
- System call: 프로그램이 커널 함수를 호출한 경우
'CS > OS' 카테고리의 다른 글
[OS] 프로세스 | 프로세스의 상태 | PCB | context switching (0) | 2023.04.07 |
---|---|
[OS] 컴퓨터 시스템 구조 | 저장장치 계층 | 프로그램 실행 과정 | 커널 | 동기식/비동기식 IO | DMA (0) | 2023.04.06 |
[OS] os를 공부하기 위해 알아야 하는 용어들 (0) | 2023.03.10 |
[OS] 운영체제 (4) | 2023.03.09 |
[OS] Linker(링커)와 Linking(링킹) (1) | 2022.10.24 |