You are already right about how the opcode is stored in cache and read from the shared memory. It is however not on a user basis, but rather on a script level. Each php file that has been parsed and compiled to opcode will be saved to the shared memory and executed from there. The parsing and compiling steps, which are otherwise slow, will be shortcircuited for each script that has been cached.
To answer your questions, no the cache does not work on a per-user basis but rather on per-script. The cached opcode is still executed by the scripting engine (Zend mostly) per request.
And yes it does read from the shared memory.
Reference D. Shafik: Everything You Need to Know About OpCode Caches