Much like the rest of the OSDev community
DMA is probably the best thing to work out first as it'll be useful for several different drivers (including floppy and HD). Just search for some DMA docs on google... it's actually not too difficult to implement. If you can't find any good docs, let me know... I believe I have some decent ones (not at home now, so I can't check).
However, all of the listed items require a good, extensible driver architecture, mutexes, semaphores, IPC, caching policies, multitasking, etc.
Have all of these already been implemented?
GUI should be one of your last thoughts, in my opinion. I have several thoughts on a good GUI, and I've written several over the years, but you definitly require a solid, very mature kernel before even attempting it.
--Jeff