Well, every time a program accesses memory, the CPU first looks for it in the L1 cache. The L1 cache is small (<128KB), and programs can generate addresses anywhere in a 4 gigabyte range. If you're lucky, the address your program just asked for is currently stored in the cache - this is called a hit. If you're unlucky, it's not in the small set of data in the L1 cache and you have a "miss". You then have to check L2, and if you miss again, you go to main memory. With "virtual memory", there's another layer but I won't go into that here. It's like the game "battleship"... programs ask for locations, and if they're in cache you "hit", otherwise you "miss". The CPU does its best to guess which locations the program is likely to want, and keep those in the lower cache levels.
