An arbiter decides to grant access from multiple clients to a shared
resource (e.g. memory) using efficiency and/or urgency terms. Urgency for
a client may be determined based on an "in-band" request identifier
transmitted from the client to the resource along with the request, and
an "out-of-band" request identifier that is buffered by the client. A
difference between the out-of-band request identifier and the in-band
request identifier indicates the location of the request in the client
buffer. A small difference indicates that the request is near the end of
the buffer (high urgency), and a large difference indicates that the
request is far back in the buffer (low urgency). Efficiency terms include
metrics on resource overhead, such as time needed to switch between
reading/writing data from/to memory via a shared memory bus, or bank
management overhead such as time for switching between DRAM banks.