1. A method for synchronizing access to a memory buffer, the method comprising: causing a semaphore buffer associated with the memory buffer to be allocated at a first memory location accessible to both a first driver and a second driver; causing the memory buffer to be accessible to the first driver; receiving a request to cause the memory buffer to be accessible to the second driver; in response to receiving the request, determining that the memory buffer is not accessible to both the first driver and the second driver, moving the memory buffer to a second memory location that is also accessible to both the first driver and the second driver, and marking the memory buffer as registered to retain the memory buffer at the second memory location; causing the execution of commands transmitted by the second driver to a processing unit to be suspended until information stored in the semaphore buffer has been modified to indicate that the first driver has completed accessing the memory buffer; and causing the information stored in the semaphore buffer to be modified to indicate that the first driver has completed accessing the memory buffer.