130 likes | 572 Views
Memory Mapped Files. Using the Linux mechanism for direct access to device data. Typical file access senario. Use open(), lseek(), read(), write(), close() Each involves two privilege-transitions At most 4096 bytes transferred each time Inefficient for non-sequential data access.
E N D
Memory Mapped Files Using the Linux mechanism for direct access to device data
Typical file access senario • Use open(), lseek(), read(), write(), close() • Each involves two privilege-transitions • At most 4096 bytes transferred each time • Inefficient for non-sequential data access
Alternative: use ‘mmap()’ • Take advantage of the paging mechanism • Associate virtual addresses with the data • Similar to ‘swapping’ or ‘page-cacheing’ • Simple standard C programming API: • ‘mmap()’ creates the memory mapping • ‘munmap()’ deletes the memory mapping • Example: look at ‘dump.cpp’ on website
Four easy steps • 1) open the file • 2) map the file • 3) use the file • 4) unmap the file and close the file
Device memory mapping • Recall our ‘vram.c’ character driver • Allowed users to access display memory • But lacks efficiency for serious graphics • We implement driver ‘mmap()’ method
‘mmap()’ driver-method • Ideas from LDD textbook: Chapter 13 • But also required lots of experimentation • Four steps in the ‘mmap()’ method 1) compute map’s starting-point and length 2) check: cannot map past end-of-memory 3) mark mapped area as ‘non-swappable’ 4) request kernel to set up the page-tables
Information from vm_area_struct • ‘vm_start’ is starting address in user-space • ‘vm_end’ is ending address in user-space • ‘vm_pgoff’ is page-offset in device memory • ‘vm_page_prot’ is page-protection bitmap • ‘vm_flags’ is bitmap of requested attributes • ‘EAGAIN’ error-code tells kernel ‘try again’
Comparing execution-times • We ccan use our ‘tsc.c’ device-driver • Step 1: read and save timestamp counter • Step 2: perform our drawing operations • Step 3: read and save timestamp counter • Step 4: subtract timestamp counter values • Step 5: report the number of CPU cycles