Device drivers are the software component that sits between the OS and the device. You kinda can't get rid of them. Even if the Drive (for example) had its own filesystem manager on it, you'd still need one. Because you have to have a way for the OS to talk to the drive.
Let me explain this another way. You have an OS. Any OS. Within that OS, you can view files and directories. The OS itself has to decide what to do with that file, or that directory. It has to interpret the data it recieves when it opens those things and runs them. Regardless of where the filesystem itself is defined, the OS *must* do this, or it wont know what to do when you double click on that file.
You could eliminate the device driver, but then that requires that the OS know everything about every possible device that could be connected to it. This would make the OS itself *huge*. Impossibly huge. And really slow. With device drivers, we just load the ones that are needed. That way instead of having 50,000 segments of code, each 5k long, enabling us to access any of 50,000 different types of devices, we only need to load the handful we actually have hooked up to our system.
That's not to mention that putting the filesystem manager on the drive itself would be really silly. Which filesystem will you use? Doesn't my OS still have to know about the layout of data on the disk? What about different types of filesystems? You may think it's "simple" for the OS to just request a file, and the disk itself knows how to get it, but that request itself will vary based on OS. On a windows system, I might access a file as D:\myfiles\somedirectory\file_i_want. Wherase the same file in unix might be located in /home/myfiles/somedirectory/file_i_want. In order for your idea to work, the *drive* would have to know about every possible OS that might ask it for data and be able to present its filesystem to those OSes in a sane manner that each OS will understand.
It makes vastly more sense to make the HD just know about it's own layout (bytes, sectors, heads, etc). The OS only knows about what it needs to know (fileystem type, and directory paths). The device driver knows how to connect the particular OS you are using to the particular disk you're accessing. That's the modular way of doing it. And that's how it's done.
____________________________
King Nobby wrote:
More words please