Nos PCs, os intervalos de E / S de mapeamento de memória de hardware são atribuídos pelo BIOS a endereços de memória física entre 3GiB e 4 GiB. Quando um driver solicita acesso à memória, o kernel o mapeia em algum lugar no espaço de endereço virtual do kernel.
Nenhuma de suas outras duas perguntas parece ter algo a ver com a memória compartilhada, mas:
In both cases, if an address in the kernel space is greater than PAGE_OFFSET, should refer to a ioremap mapping (to be resolved through pagination), if it's lower than PAGE_OFFSET it could be resolved with a simple NEW_ADDRESS = OLD_ADDRESS - PAGE_OFFSET. Is this correct?
Mentalmente, sim. O hardware usa as tabelas de páginas nos dois casos.