2014-12-30 2 views
0

일부 기본 기능을 지원하는 프로젝트의 경우 간단한 OS 및 가상 컴퓨터를 구현해야합니다. 이 OS는 가상 시스템과 가상 시스템에서 Linux의 일반 프로그램처럼 실행됩니다.타이머 용 사용자 수준 인터럽트 처리기

이제는 가상 컴퓨터가 실행되는 양자라고 가정합니다.

  1. 가상 시스템 실행 시간을 더 작은 양으로 나누기 위해 여분의 타이머 신호를 수신하는 방법은 무엇입니까?
  2. 내 CPU에는 몇 개의 타이머가 있습니까? (일반적인 질문과 비슷합니다.)
  3. 사용자 레버 인터럽트 처리기로 가상 컴퓨터에서 타이머 신호를 처리 할 수 ​​있습니까?

도움이나 안내를 받으시면 매우 감사하겠습니다. 감사합니다.

답변

1

정확하게 1 개의 인터럽트를 사용하고 타이머를 대기열에서 구성하거나 (예 : < 50) 큐에 정리하거나 힙에 배치하면 언제든지 제공됩니다 가장 작은 요소, 즉 처리 할 다음 타이머가있는 요소에 액세스합니다.

따라서 하나의 인터럽트, 하나의 처리기 및 해당 단일 처리기에서 호출 할 관련 함수가있는 많은 타이머가 있습니다.

0

실제로 정상적인 프로그램은 시스템 호출을 사용하려는 경우와 같이 인터럽트 (시스템 수준)도 사용합니다. 사용자 수준에서 swapcontext/makecontext를 사용하여 시스템 수준의 스왑 컨텍스트를 시뮬레이트 할 수 있지만 시간을 얻으 려 할 때 syscall을 사용해야합니다. 그러면 시스템 타이머를 직접 사용하는 것이 좋습니다. 나쁜 생각이 아닙니다.

+0

ULI 처리기 기능에서 수행 할 수있는 작업에 제한이 있습니다. 부동 소수점 장치를 사용하지 않고 시스템 호출을하지 마십시오. –

+0

@WeatherVane 오류를 지적 해 주셔서 감사합니다. –