CPU 가상화

김시환·2023년 3월 19일
0

운영체제

목록 보기
2/7

CPU 가상화

우리는 많은 프로세스를 동시에 실행시키려고 하는데, 주어진 CPU는 한정적이다.
이를 극복하기 위해 OS는 CPU가 많은 것 같게 느끼도록 착각을 일으킨다.

OS can promote the illusion that many virtual CPUs exist

Time Sharing : 한 프로세스를 실행하고, 멈춘 후에 다른 프로세스를 실행 시키는 방식
엄청나게 짧은 시간 간격으로 여러 프로세스를 번갈아가면서 실행함으로써 한 CPU에서 여러 프로세스가 실행되는 것처럼 보이게 한다. (실제로 순간적으로 실행되는 것은 프로세스 1개)

그렇다면 OS가 CPU 가상화하는지 알아보자.

How to Provide illusion

  • 작동 원리 : Context Switch
  • 정책 : Scheduling Policy -> 다음 글

오늘은 Context Switch에 대해서 먼저 알아보자

프로세스 상태

  • Running : 프로세스가 실행되고 있는 상태
  • Ready : 프로그램이 프로세스로 만들어져 실행 대기 중인 상태
  • Blocked : I/O 요청이 들어왔을 때 I/O 요청을 우선적으로 처리하기 위해 멈춘 상태

Process Control Block (PCB)

OS는 프로세스별 중요한 정보들을 저장하기 위한 자료 구조를 가지고 있다.
PCB에는 프로세스 상태, 프로세스 ID, PC와 같은 정보들이 저장되어 있다.
추후에 설명할 Context Switch를 할 때 사용된다.

Limited Direct Execution

앞서 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가 실행되는 상태 -> 모든 접근 가능
  • 그런데 User mode에서 Kernel mode의 기능을 사용하고 싶을 때는 어떻게 해야할까?
    => 이를 위해 system call 도입
  • System Call 커널로 하여금 중요한 기능들을 user mode process에 조심스럽게 노출하도록 한다.
    ex) 파일 시스템 접근, 프로세스간 통신, 추가 메모리 할당 등
  • System Call이 실행되면 trap instruction이 실행됨 : (user -> kernel)
  • 실행이 끝나면 return-from-trap instruction이 실행됨 : (kernel -> user)
  • OS가 trap을 처리하기 위해 trap table 도입
  • trap table : 이벤트들이 고유한 시스템 콜 넘버를 가지고 저장되어 있다.
  • 또한 OS는 2개의 mode를 위한 각각의 stack을 유지한다.
  • kernel stack, user stack : 다른 모드로 이동할 때 필요한 정보들이 저장되어 있다.

2. 어떤 방식으로 프로세스를 전환할까?

  • 프로세스가 전활 될 때 OS가 제어한다.
  • OS가 제어권을 가져와야함! -> 어떻게 가져올지 2가지로 나뉜다.
  1. Cooperative : 시스템 콜을 기다림
    • 시스템 콜이 발생하지 않으면 -> OS로 제어권이 영원히 넘어오지 않음
  2. Non-coooperative : OS가 제어권을 가져감
    • timer interrupt를 사용
    • 일정시간 마다 interrupt를 일으킨다. -> interrupt가 발생되면 OS가 제어권을 갖는다

이제 프로세스가 어떻게 전환되는지까지 알아봤다. 프로세스가 전환될 때 이전에 실행되었던 곳을 기억하지 못하고, 처음부터 실행된다면 매우 비효율적일 것이다. -> 이를 해결하기 위해 Context Switch

Context Switch

  • 현재 실행 중인 프로세스의 정보(PC, 커널 스택 포인터) 같은 정보를 커널 스택에 저장한다. -> PCB를 이용해서
  • 다음 실행될 프로세스의 커널 스택에서 정보들을 회복한다. -> PCB를 이용해서
profile
1년차 개발자입니다.

0개의 댓글

관련 채용 정보