본문 바로가기

CS지식

[운영체제] Limited Direct Execution

728x90

/* Limited Direct Execution */

여러 프로그램을 동시에 작동하기 위해서는 CPU 가상화가 필요하다. 이는 Time Sharing 기법으로 구현할 수 있다. CPU 를 가상화를 구현하려면 Performance와 Control을 고려해야 한다. Performance: 오버헤드 없이 구현, Control: CPU에 대한 제어를 유지하면서 프로세스를 효율적으로 실행해야 한다.

 

 

Limited Direct Execution 의 절차는 위와 같다.
즉 컴퓨터가 부팅되면 CPU는 kernel mode 이므로 trap table을 만들어 예외나 인터럽트가 발생했을 때 하드웨어가 각각의 예외 별로 어떤 코드를 실행할지 그 위치를 알려주게 한다.

User Mode에서 Program을 돌릴 때 I/O 작업같은 하드웨어의 리소스에 접근을 해야할 때 System Call을 이용하게 하여 trap을 발생한다.

trap이 발생하면 CPU는 kernel mode로 전환되어 레지스터 정보를 kernel stack에 push를 하고 Trap Table을 통해 간접적으로 trap handler의 위치로 이동하여 system call에서 요청받은 작업을 수행한다. 요청받은 작업을 수행하면 kernel stack에 push 해 놓은 레지스터 정보를 pop해서 읽어들여 return from trap을 통해 원래의 user mode로 저장된다. 

 

/* Process Switching */

위의 절차에서는 프로세스 간의 전환이 아직 불가능하다. 프로그램에서 System Call을 호출하기 전에는 OS가 간섭할 수가 없어 Process Switching을 OS가 관리하지 못한다. 이를 위한 방법은 Timer Interrupt 이다. Timer Interrupt을 일정 주기로 Interrupt를 발생시킨다. 발생하면 현재 실행 중이던 프로세스는 중단되고 OS의 interrupt handler 가 실행되어 OS가 CPU의 제어건을 얻게 된다. 그래서 Process Switching이 가능하다. 즉 OS의 Scheduler가 결정한다. 다른 프로세스에게 제어권을 넘겨주기로 했다면 현재 실행중인 레지스터 정보를 kernel stack에 저장하고 다음으로 제어권을 넘겨 받을 프로세스의 상태 값을 해당 프로세스의 kernel stack으로부터 복원하는 Context Switch를 수행하면 된다. Context Switch는 현재 실행 중인 프로세스

 

Limited Direct Execution에는 두번의 레지스터 저장 / 복구가 일어난다.

  • 첫 번째 저장: 사용자 모드에서 시스템 호출이나 인터럽트 발생 시, 커널 모드로 전환되면서 레지스터 상태가 커널 스택에 저장됩니다.
  • 첫 번째 복구: 시스템 호출 핸들러 작업 완료 후, 커널 모드에서 사용자 모드로 돌아가며, 커널 스택에 저장된 레지스터 상태가 복구됩니다.
  • 두 번째 저장: Context Switch 시, 현재 프로세스의 레지스터 상태가 커널 스택에 저장되고, PCB에 기록됩니다.
  • 두 번째 복구: 새로운 프로세스의 레지스터 상태가 PCB에서 커널 스택으로 복구되고, CPU가 이 상태를 사용하여 프로세스를 실행합니다.

 

 

728x90