What hardware if any can a process in user-mode (as opposed to kernel mode) access without using system calls, e.g. without relying on the OS to do anything for it? This question should be operating system independent since I'm only asking for the hardware restrictions that apply.
I am not entirely sure of this, so please feel free to correct me.
I read up on how user space device drivers on linux work in this article: Device drivers in user space.
As far as I can tell they work because the kernel maps the memory that the device uses for configuration and buffers into user space. This memory contains the device configuration and any related buffer and therefor changes to it do indirectly affect the device without switching to kernel mode.
But user space processes cannot directly communicate with the device. They can only read and write to this shared memory. If the user space driver wants to inform the device of a change in this memory it has to use a system call (→ interrupt, kernel mode invocation).
Interrupts from the device are processed by the UIO (User-IO) Driver in kernel mode which passes it on to the user space driver.
So the answer to my question is (if I am not completely mistaken): user mode processes cannot access any hardware directly and of course without any system call they cannot request the shared memory either.
Edit: This should be true on any operating system since the mechanisms used to implement it are hardwired in the CPU. In turn it might not hold to be true on certain CPUs no matter the operating system, since the CPU might not support this kind of protection.