, поэтому я пытаюсь уменьшить загрузку процессора в моей фиктивной операционной системе. У меня есть функция, чтобы приостановить выполнение вызывающего потока до тех пор, пока время не увеличится хотя бы на x отметок таймера. Если система не находится в режиме ожидания, поток не должен просыпаться после того, как пройдено ровно x тиков, он помещается обратно в очередь готовых потоков после того, как дождался нужного количества тиков. В идеале для этого есть реализация семафора, но я не знаю как. Тем не менее, если у вас есть лучшее решение для семафоров, было бы интересно услышать это также.
Для справки вот исходный код с описаниями:
void timer_sleep (int64_t ticks){
int64_t start = timer_ticks ();
ASSERT (intr_get_level () == INTR_ON);
while (timer_elapsed (start) < ticks)
thread_yield ();
}
timer_ticks
-дает нам количество пройденных тиков с момента запуска ОС.
timer_elapsed
- сообщает нам количество пройденных timer_ticks()
с другого числа тиков.
intr_get_level
- используется дляполучить значение того, включены ли прерывания или нет.
thread_yield
- Это дает ЦП. Текущий поток не переводится в спящий режим и может быть снова запланирован немедленно по прихоти планировщиков.