Может ли процесс запросить количество времени x, но вместо этого взять сумму y? - PullRequest
0 голосов
/ 23 ноября 2018

Если я запускаю набор процессов, и все они хотят, чтобы эти периоды посылки: 3, 5, 2 соответственно, с общим ожидаемым временем выполнения, равным 10 единицам времени.

Возможно ли это для одного изпроцессы, чтобы занять больше того, что они просят?Например, несмотря на то, что он запросил 3, потребовалось 11, потому что он ждал от пользователя ввода какого-либо ввода.Таким образом, общее время выполнения оказывается равным 18.

Все это было сделано в планировщике без упреждающего процессора.

1 Ответ

0 голосов
/ 23 ноября 2018

Реальность такова, что программное обеспечение не имеет ни малейшего представления, сколько времени это займет - мой ЦП работает с «номинальной скоростью», отличной от вашего ЦП, и наши ЦП меняют свою скорость по соображениям управления питанием, а также скорость программного обеспечения, выполняемогона оба наших процессора влияют такие вещи, как то, что делают другие процессоры (особенно для SMT / гиперпоточности) и что другие устройства делают в данный момент (их влияние на кеши, пропускную способность разделяемой памяти и т. д.);и программное обеспечение не может предсказать будущее (например, угадать, когда произойдет IRQ, потребуется некоторое время и нарушить содержимое кэша, угадать, когда чтение из памяти займет 10 раз дольше, потому что произошла ошибка в один бит, которую ECC необходимо исправить,угадайте, когда процессор нагреется и уменьшит скорость, чтобы избежать таяния и т. д.).Можно записывать такие вещи, как «время начала, время всплеска и время окончания», как это происходит (для создания исторических данных из прошлого, которые можно проанализировать), но обычно эти вещи можно увидеть только в сфабрикованных академических упражнениях, которые не имеют ничего общего среальность.

Примечание: я не говорю, что сфабрикованные академические упражнения плохие - это полезный инструмент, помогающий изучить основную теорию, прежде чем перейти к более продвинутой (и более реалистичной) теории.

Вместо;для неперекачивающего планировщика задачи не пытаются сообщить планировщику, сколько времени, по их мнению, они могут занять - задача не может знать эту информацию, и планировщик не может ничего сделать с этой информацией (например, без упреждающегопланировщик не может выгрузить задачу, если она занимает больше времени, чем предполагалось).Для не вытесняющего планировщика;задача просто выполняется до тех пор, пока она не вызовет функцию ядра, которая ожидает чего-то (например, read(), которая ожидает данные с диска или сети, sleep(), которая ожидает время для передачи и т. д.) и когда это произойдет, функция ядра, которая была вызваназаканчивает тем, что сообщает планировщику, что задача находится в ожидании и ей не нужен процессор, и планировщик находит другую задачу для запуска, которая может использовать процессор;и если задача никогда не вызывает функцию ядра, которая ожидает чего-то, то задача выполняется «навсегда».

Конечно, «задача выполняется вечно» может быть плохо (не только для вредоносного кода, который намеренно загружает все процессорное время)как атака типа «отказ в обслуживании», но также и для обычных задач, в которых есть ошибки), поэтому (почти?) никто не использует планировщики без вытеснения.Например;если одна задача (с более низким приоритетом) выполняет много тяжелой обработки (например, тратит часы на создание фотореалистичного изображения с использованием методов трассировки лучей), а другая задача (с более высоким приоритетом) перестает ждать (например, потому что она ждала нажатия пользователеми пользователь нажал клавишу), затем вы хотите, чтобы задача с более высоким приоритетом выгрузила задачу с более низким приоритетом "немедленно" (например, потому что большинству пользователей это не нравится, когда программное обеспечение реагирует на их действия часами).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...