2015-03-20 1 views
2

Это немного противоречит интуиции. Не было ли упреждающее планирование, чтобы все процессы могли получить долю процессора? Так может ли быть голодание по этой схеме планирования? если да, то как?Может ли упреждающее планирование вызвать голод?

Кроме того, может ли кто-нибудь показать простой псевдокод о том, как я могу это кодировать, чтобы показать свойство голодания на работе.

+1

Я бы посоветовал взглянуть на [Обеденные проблемы философов] (https://en.wikipedia.org/wiki/Dining_philosophers_problem). – InsidiarumCrassescit

+0

, что не помогает мне. – Somjit

ответ

3

Может ли упреждающее планирование вызвать голод?

Да, упреждающее планирование может вызвать голод.

Давайте посмотрим Самое длинное оставшееся время первой схемы. Это упреждающее планирование. В любой момент времени, если какой-либо процесс имеет большее время выполнения или большее оставшееся время, процессор переключится на этот процесс, приостанавливая текущий текущий процесс. Процесс голодания случается для процессов с меньшим временем выполнения.

Когда-то, упреждающая схема не вызывает голода.

Давайте рассмотрим пример алгоритма планирования Round Robin Scheduling. Алгоритм Round Robin является упреждающим алгоритмом, так как планировщик выдает процесс из CPU после истечения срока.

В отличие от SJF или SRTF, процесс не застревает в любом процессе. Подобно процессу, который никогда не заканчивается, не закончится, но другие процессы все равно будут выполняться. Поэтому он решает проблему голода.

более подробно о Рулонном Робине Алгоритм: http://en.wikipedia.org/wiki/Round-robin_scheduling

Реализация алгоритма RR: Implementing round robin scheduling algorithm in Java

Если у вас есть дополнительный запрос, комментарий.

Спасибо,

Bhavik

+0

Спасибо за два примера. Круглый робин застрял у меня в голове как де-факто упреждающее планирование. – Somjit

+1

Не было ли упреждающее планирование, чтобы все процессы могли получить долю процессора? Нет. В основном это используется для достижения хорошей производительности ввода-вывода. –

+1

Да, спасибо за добавление, конечная цель - добиться хорошей производительности. –

1

Преимущественное планирование просто означает, что все работает теперь может быть остановлен на что-то еще, чтобы бежать. Акцент на можно остановить. Он никогда не может быть остановлен, так как он никогда не может закончиться вообще. Как вы спросили, я попытаюсь описать псевдокод для упреждающего алгоритма планирования, который может вызвать голодание:

P = running processes list q = quantum while P is not empty: t_0 <- infinity for each p in P: t <- p.totalTime if t < t_0: t_0 <- t p <- process with running time t_0 run p for quantum q

Предположим теперь, что процессы могут быть добавлены в список P в любое время. Если вы продолжаете добавлять небольшие процессы, они всегда будут выполняться перед любыми другими крупными процессами, приводящими к голоду.

Этот алгоритм является преимущественной формой SJF (Shortest Job First). Вы можете экстраполировать и сделать упреждающий алгоритм, который просто никогда не запускает данный процесс; вместо этого, если это единственный процесс, алгоритм просто ждет в цикле, пока не появится что-то новое. Это не хороший алгоритм, но он упреждающий и вызывает голод.

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

+0

Вы имеете в виду, что у вас не упреждающая схема не имеет голода? –

+0

Ну, если вы экстраполируете концепцию, у вас может быть схема без упреждения, которая, опять же, никогда не будет выполнять одно задание, и это можно считать голодом. Это зависит от вашего определения неперехваченного алгоритма. Если, чтобы считаться одним, он должен запускать все задания до конца, тогда голодание не может произойти. Все классические алгоритмы, которые я знаю, такие как FIFO или SJF, не могут голодать, так как они будут запускать все задания до конца. –

+0

вы собираетесь ошибаться, насколько мне кажется, SJF голодает. так как долгий процесс должен ждать долгое время. –

Смежные вопросы