Mapeamento direto
Para entendermos a diferença entre os tipos de mapeamento, vamos fazer uma analogia com uma sala de cinema. Imagine que o cinema é a Memória Cache e cada pessoa é um dado a ser armazenado na memória. No mapeamento direto cada pessoa (sócia daquele cinema) receberá uma cadeira dedicada a ele. Sempre que ele for ao cinema, deverá sentar no mesmo lugar. O problema é que a Memória Principal é muito maior do que a Memória Cache, então não há cadeira para todos. Para resolver, cada cadeira é distribuída por várias pessoas, apostando que nem sempre as pessoas que compartilham o mesmo número de cadeira irão assistir ao mesmo filme no mesmo horário. Mas quando isso acontece, a pessoa que chegou por último não pode sentar em outra cadeira mesmo estando livre. A pessoa que chega depois toma o lugar da pessoa que está sentada, porque no caso da memória Cache, o último sempre tem preferência. Imagine quanta confusão isso geraria nesse cinema!
O bom do mapeamento direto é porque ele é muito fácil de organizar e a CPU encontra sempre seu dado muito facilmente. No exemplo do cinema, se alguém estiver querendo saber se uma pessoa está no cinema (na Cache) ou não (na Memória Principal) basta saber o número da cadeira dele e ir lá verificar se é ele quem está sentado. Isso acelera bastante o trabalho de busca da CPU. Mas se a memória Cache for muito menor que a Memória Principal, haverá muitos blocos com mesmo código e pode haver muito conflito de posição, reduzindo o desempenho.
Mapeamento associativo
No mapeamento associativo, o mecanismo de alocação de blocos da Memória Principal na Cache não segue posição fixa. Cada bloco vai ocupar a primeira posição vazia encontrada. Voltando ao exemplo do cinema, seria uma sala sem cadeira reservada, mas com um porém. Se uma pessoa chegar e o cinema estiver cheio, a direção do cinema (no computador é o Sistema de Memória) vai escolher uma pessoa a ser removida para dar lugar a nova pessoa que chegou (talvez alguém que estiver dormindo ou conversando durante o filme).
Mapeamento associativo por conjunto
O problema do Mapeamento Associativo é encontrar blocos em memórias Cache grandes. A solução para isso é utilizar uma abordagem mista, que utiliza os princípios dos mapeamentos direto e associativo. Ela divide a memória em conjuntos. Cada bloco então é mapeado para um conjunto (semelhante ao que é feito para o Mapeamento Direto, mas para o nível de conjunto). Sempre que um bloco for ser buscado ou salvo, ele será feito no conjunto fixo dele, mas dentro do conjunto ele pode ser armazenado em qualquer posição livre.
Voltando ao cinema, é como se uma grande sala fosse dividida em salas menores.
Fonte: http://producao.virtual.ufpb.br/books/edusantana/introducao-a-arquitetura-de-computadores-livro/livro/livro.chunked/ch05s07.html
Mapeamento Direto - Cada endereço da Memória Principal está mapeado em uma posição fixa da cache. Sendo a mais simples. É como se fosse aquele relacionando 1 : 1 entre a memória principal e a cache.
Mapeamento Totalmente Associativo - O endereço da Memória Principal está mapeado em qualquer posição da cache. Por isso, exige um hardware especial para realizar a busca, tornando-se cara.
Mapeamento Associativo por Conjuntos - Este mapeamento é o que apresenta melhor custo benefício. Cada endereço da Memória Principal está mapeado em mais de uma posição da cache. É como se fosse aquele relacionando 1 : N entre a memória principal e a cache.