Deadlock avoidance: How does the system know in advance about the number of resources required by a process?
For many systems, it's impossible to know (for instance, your home computer). In a very controlled system, you could know in advance about the number of resources that a process requires and when these requests occur (for example, an embedded system).

You could probably create some sort of heuristic for what resources might be requested in the future based on previous knowledge (such as past program execution or code analysis) for the impossible cases. I'm not sure how much this is done in practice though.