2017-01-30 3 views
0

곧 출시 될 OS를위한 간단한 커널을 개발 중입니다. 나는 스케줄러까지 모든 것을 개발했다. 스케줄러가 어떻게 순환되는지 궁금합니다. 예를 들어OS 스케줄러는 어떻게 되나요?

,

  1. 타이머 인터럽트 화재.
  2. 처리기가 스케줄러를 호출합니다.
  3. 스케줄러는 큐의 다음 프로세스를 건너 뜁니다.
  4. 인터럽트는 (IRETD)을 반환

해야하지만 스케줄러가 인터럽트 복귀를 수행 할 때 한 후 다음 공정으로 이동해야하는 경우. 그리고 만약 그렇다면, 그것은 마지막 과정으로 돌아 가지 않을 것입니다.

내가 알기를 원하는 것은 - 타이머 인터럽트가 스케줄러에서 어떻게 되돌아오고, 스케줄러가 타이머 인터럽트와 어떻게 통신 하는가? (함수 호출을 가지고 있다면, 언제 리턴 할까?)

는 가정 - 모노 리식 커널

+0

I의 인터럽트 상태에 스택

  • 받아 다음 공정에
  • IRETD을 밀어와 -로

    스케줄러 프로세스가 완료 'IRETD 지침의 특성에 익숙하지 않지만, 명령 포인터와 다른 레지스터를 일부 스택에서 다시 시작하여 다시 시작해야한다고 가정합니다. 내가 본 방식대로, 당신은 IRETD가 필요로하는 것을 튀어 오르게 할 때 중단 된 것 대신에 새로운 프로세스를 효과적으로 다시 시작할 수 있도록 그 스택의 값을 변경해야합니다. x86 명령어 세트의 그 부분을 공부하지 않고서는 구체적으로 설명 할 수는 없습니다. 내 취미 프로젝트는 주로 ARM을 기반으로하는 취미 프로젝트 (https://bitbucket.org/ruifig/g4devkit)에서 비롯됩니다. – RuiFig

  • 답변

    0

    를 인터럽트가 발생하면, 프로세서는 그것의 문맥 전환한다. EFLAGS 레지스터의 플래그를 업데이트하고 스택의 일부 정보를 푸시하면됩니다 (인텔 매뉴얼에서 볼 수 있음). 사용자 모드에서 인터럽트가 발생하면 현재 작업의 TSS에 따라 스택 스위치도 발생합니다.

    1. 사용자 프로세스에서 온 인터럽트 상태가 새로운 프로세스