우리는 많은 프로세스를 동시에 실행시키려고 하는데, 주어진 CPU는 한정적이다.
이를 극복하기 위해 OS는 CPU가 많은 것 같게 느끼도록 착각을 일으킨다.
OS can promote the illusion that many virtual CPUs exist
Time Sharing
: 한 프로세스를 실행하고, 멈춘 후에 다른 프로세스를 실행 시키는 방식
엄청나게 짧은 시간 간격으로 여러 프로세스를 번갈아가면서 실행함으로써 한 CPU에서 여러 프로세스가 실행되는 것처럼 보이게 한다. (실제로 순간적으로 실행되는 것은 프로세스 1개)
그렇다면 OS가 CPU 가상화하는지 알아보자.
오늘은 Context Switch에 대해서 먼저 알아보자
OS는 프로세스별 중요한 정보들을 저장하기 위한 자료 구조를 가지고 있다.
PCB에는 프로세스 상태, 프로세스 ID, PC와 같은 정보들이 저장되어 있다.
추후에 설명할 Context Switch를 할 때 사용된다.
앞서 CPU가상화를 time sharing
을 사용해서 구현한다고 했다.
프로세스를 CPU에 직접 올려 실행시킨다고 가정해보자 : Direct Execution
=> 프로세스는 시작하면 끝날 때까지 계속 실행된다.
=> 이는 time sharing을 할 수 없고, "just a library"라고 할 수 있다. (OSTEP)
위와 같은 방법에 제한을 둬서 새로 만들어낸 방식 : Limited Direct Execution
1. 프로세스가 I/O 요청과 같은 것을 포함하여 모든 것을 하게 만든다면?
User mode
, Kernel mode
도입User mode
: 하드웨어에 대한 접근이 없는 상태Kernel mode
: OS가 실행되는 상태 -> 모든 접근 가능system call
도입trap table
도입trap table
: 이벤트들이 고유한 시스템 콜 넘버를 가지고 저장되어 있다.stack
을 유지한다. kernel stack
, user stack
: 다른 모드로 이동할 때 필요한 정보들이 저장되어 있다.2. 어떤 방식으로 프로세스를 전환할까?
timer interrupt
를 사용이제 프로세스가 어떻게 전환되는지까지 알아봤다. 프로세스가 전환될 때 이전에 실행되었던 곳을 기억하지 못하고, 처음부터 실행된다면 매우 비효율적일 것이다. -> 이를 해결하기 위해 Context Switch
저장
한다. -> PCB
를 이용해서회복
한다. -> PCB
를 이용해서