For each source file, cvs keeps all the versions for the source file in one flat file. I believe that the individual versions are stored as differences to minimize the size of the cvs archive file, and conncurrency is maintained by using file locking.