Another thought for eliminating starvation: Processors should specify the priority of every read access. Due to instruction level parallelism a program trying to fetch memory even before the instruction pointer reaches that part of the code. Or if processor is trying to do prefetching of a large chunk of memory which is stalling crucial running processes. These are scenarios where hogging memory by future events could be avoided.
sstritte
The case above, where multiple processors are competing for bus access and the processor with the "lowest id" always wins, is an example of starvation because the system is making overall progress, but some processes will make no progress. Consider the situation where Processor 1 and Processor 2 continually make simultaneous requests for bus access. Processor 1 will always win and thus will be able to make lots of progress, but Processor 2 will never get to complete an operation.
pagerank
Starvation is a problem of fairness, instead of efficiency. When the starvation happens, the system is actually making progress, and the resources have good utilization. When other jobs are done, the starving job will have the chance to get the resource. Even if other jobs are running continually, the resources are not wasted. This is different from deadlock and livelock, which prevents the system making progress.
Another thought for eliminating starvation: Processors should specify the priority of every read access. Due to instruction level parallelism a program trying to fetch memory even before the instruction pointer reaches that part of the code. Or if processor is trying to do prefetching of a large chunk of memory which is stalling crucial running processes. These are scenarios where hogging memory by future events could be avoided.
The case above, where multiple processors are competing for bus access and the processor with the "lowest id" always wins, is an example of starvation because the system is making overall progress, but some processes will make no progress. Consider the situation where Processor 1 and Processor 2 continually make simultaneous requests for bus access. Processor 1 will always win and thus will be able to make lots of progress, but Processor 2 will never get to complete an operation.
Starvation is a problem of fairness, instead of efficiency. When the starvation happens, the system is actually making progress, and the resources have good utilization. When other jobs are done, the starving job will have the chance to get the resource. Even if other jobs are running continually, the resources are not wasted. This is different from deadlock and livelock, which prevents the system making progress.