LDE 는 limited direct execution 이다.
우선 direct execution은 프로그램을 cpu 위에서 바로 실행하는 것이다.
이때에는 바로 실행한다는 점에서 실행이 빠르다는 장점이 있을 수 있는데, 이때에는 문제가 발생한다.
1. 제한된 작동을 하기에는 불편하다.
왜냐하면 하나의 cpu 에서 실행하면 I/O 처리 등을 할때에 원래 있던 register 값을 비워야 하기 떄문에 불가능 하다.
따라서 kernal mode 와 user mode 를 두어서 kernal 에서는 system 적인 예를 들어 I/O 처리와 같은 일을 하게 되고, user mode 에서는 프로세스를 실행하게 된다.
이 두 mode 를 오갈떄에 이벤트가 필요한데, kernal에서 user 로 갈떄에는 return-from-trap
반대로 user 에서 kernal 로 갈때에는 trap 이벤트가 필요하다.
이러한 이벤트가 발생하면 cpu의 모드를 바꾸어야 하기 때문에 register의 값 또한 바꿔야 한다. 따라서 원래 register에 있던 값들을 kernal stack 으로 옮겨서 유지하게 된다.
이러한 trap 이 발생하는 경우는 syscall 이 발생할 때인데, 이때 발생하는 trap의 종류가 다양하다. 따라서 다양한 종류의 syscall 에 대응 해야 하기 때문에 trap에 대한 정보를 각각 저장한 곳이 바로 trap table 이다.
그리고 하나의 trap 을 처리 하기위해서 호출하는 함수나 루틴을 trap handler 라고 한다.
위의 그림처럼 trap 이 발생하고 해결된다.
또한 그냥 direct execute 를 할때의 문제는 그냥 프로그램이 실행 될때에 해당 프로세스를 멈추고 다른 프로세스를 실행할 방법이 없다.
따라서 time-sharing 을 통해 이를 수행하는데, time-interrupt 를 발생시켜서 switch 를 하는 방법이다.
용어 정리
run-time stack = stack
register context : 레지스터 컨텍스트(Register Context)는 현재 실행 중인 프로세스의 레지스터 값들을 저장하는 데이터 구조입니다.
이는 프로세스가 중단 되었을 때 CPU의 상태를 저장하는 자료 구조 라고도 할 수 있다.
switch 가 일어날 경우에는 pcb의 값과 kernel stack 의 값 모두 필요하다.
커널 스택에는 주로 다음과 같은 정보가 저장됩니다.
- 인터럽트나 예외 처리 시에 발생하는 커널 모드에서의 레지스터 값들을 저장.
- 프로세스 관련 정보들을 저장.
- 시스템 호출 시에 인자(Parameter)를 전달.
- 임시 변수(Temp Variable) 등의 정보를 저장.
'운영체제' 카테고리의 다른 글
운영체제 MLFQ (0) | 2023.03.11 |
---|---|
운영체제 schedule intro (0) | 2023.03.11 |
운영체제 process api (0) | 2023.03.11 |
운영체제 process (0) | 2023.03.11 |
운영체제 Intro (0) | 2023.03.05 |