thread_schedule()
thread_yield()
현재 스레드의 레지스터와 상태를 저장하고 다음 스레드의 레지스터와 상태를 로드하는 것이 목적인 , , 등의 함수를 사용하여 스레드 전환을 구현했습니다 .
이제 타이머 인터럽트를 사용하여 xv6에서 동일한 작업을 수행하고 싶지만 어떻게 작동하는지 모르겠습니다.
답변1
trap
타이머 인터럽트는 의 함수에 의해 처리됩니다 trap.c
. 카운터가 ticks
거기에서 업데이트되고 yield()
호출되기도 합니다.
멀티스레딩이 없기 때문에 xv6
그냥 구현한다고 가정합니다. 이 경우 각 스레드가 자체 주소 공간과 리소스 집합을 갖는다는 점을 제외하면 어떤 방식으로든 스레드가 구현된다는 점에 유의하세요. 따라서 실제로 구현하고 있는 것은 스레드 및 컨텍스트 전환 개념을 실제로 구현하는 것이 아니라 스레드 간에 리소스를 공유하는 방법입니다.