Limited Direct execution
가상화 기법을 구현하기 위해서는 아래와 같은 문제를 해결해야 한다.
- 성능저하 : 시스템에 과중한 오버헤드를 주지 않으면서 가상화를 구현해야 한다.
- 제어 문제 : CPU에 대한 통제를 유지하면서 프로세스를 효율적으로 실행해야 한다.
Problem 1 : Restricted Operation
Direct execution은 빠르게 실행된다는 장점이 있지만 프로세스가 특수한 종류의 연산(I/O 입출력, 자원 독점)을 수행하길 원한다면 문제가 발생할 수 있다.
따라서 User mode와 Kernel mode를 사용한다.
- User mode
- User mode에서 실행되는 코드는 할 수 있는 일이 제한된다.
- ex) 입출력 요청을 할 수 없도록 설정한 후 프로세스가 입출력 요청을 하면 프로세서가 예외를 발생시키고, 운영체제는 해당 프로세스를 제거한다.
- 제한 작업의 실행을 허용하기 위하여 system call이 제공된다.
- Kernel mode
- 모든 특수한 명령어를 포함하여 원하는 모든 작업을 수행할 수 있다.
System Call
- trap
- 프로그램은 system call을 실행하기 위해 trap 명령어를 실행해야 한다.
- 커널 안으로 분기하는 동시에 특권 수준을 Kernel mode로 상향 조절한다.
- Kernel mode로 진입한 후 운영체제는 모든 명령어를 실행할 수 있고 이를 통하여 프로세스가 요청한 작업을 처리할 수 있다.
- trap은 운영체제 코드의 어디를 실행할 지 알 수 없다. 호출한 프로세서는 분기할 주소를 명시할 수 없기 때문이다. (주소를 명시한다는 것은 커널 내부의 원하는 지점을 접근할 수 있다는 의미이므로 위험하다.)
- 따라서 커널은 부팅 시에 trap table을 만들고 하드웨어에게 trap handler의 위치를 알려준다.
- return-from-trap
- 프로세스가 요청한 작업을 처리하면 운영체제는 return-from-trap 특수 명령어를 호출한다.
- 특권 수준을 User mode로 하향 조정하면서 호출한 사용자 프로그램으로 리턴한다.


.............................................
Problem 2 : Switching Between Processes
cooperative & non-cooperative
- Cooperative
- 프로세스가 CPU를 자발적으로 양보한다.
- 비정상적인 행위(0으로 나누기, 접근할 수 없는 메모리에 접근)를 하면 운영체제에게 제어가 넘어간다.
- 만약 프로세스가 무한 루프에 빠져 시스템 콜을 호출할 수 없을 때에는 재부팅밖에 방법이 없다.
- Non-Cooperative : OS Takes Control
- timer interrupt를 이용한다.
Saving and Restoring Context

두 번의 레지스터 저장/복원이 발생한다.
첫 번째는 타이머 인터럽트가 발생했을 때 일어난다. 실행 중인 프로세스의 사용자 레지스터가 하드웨어에 의해 암묵적으로 저장되고 저장 장소로 해당 프로세스의 커널 스택이 사용된다.
두 번째는 운영체제가 A에서 B로 전환하기로 결정했을 때 일어난다. 커널 레지스터는 운영체제에 의하여 해당 프로세스의 프로세스 구조체에 저장된다.
Worried About Concurrency?
system call을 처리하는 도중에 타이머 인터럽트가 발생한다면?
하나의 인터럽트를 처리하고 있을 때 다른 인터럽트가 발생한다면?
=> Lock 기법을 이용한 방법을 뒷 장에서 배운다.
광운대학교 김태석 교수님 운영체제 수업과
[운영체제 : 아주 쉬운 세 가지 이야기] 책 참고
'21-2학기 > 운영체제' 카테고리의 다른 글
[Virtualizaton] 3. Process API (0) | 2022.01.04 |
---|---|
[Virtualizaton] 2. Processes (0) | 2022.01.04 |