One thing with my architecture design I'm still having trouble conceptualising is the resource manager. My usual breakdown for game engine design is to lump all the related material together into their own modules: a video manager for the graphics, audio manager for the sound, input manager for the control etc. This helps keep all the hardware related stuff buried behind an interface layer so I don't have to worry about it that much when actually making the game.
However I'm not sure what to do with all the resources a game needs: textures, sounds, music, data files, etc. Do I let all the relevant modules handle their own resources, or do I create a resource manager for handling everything? Given I haven't done that much in memory management programming myself, and there's also aspects like the video card memory to deal with, it's all rather confusing for me. I'd like to have a system where I could just specify how much memory I'd like to use for each resource, and then precache textures and sounds to minimise loading times for computers with more memory, but this requires a way of keeping track of all resources as well as the amount of memory left in the system.
Since I'm unsure about this, I'd like to ask you what your solution was to general resource management. Any suggestions as to how you structured the architecture, or pointers to good articles out there that could explain a good solution to me?