I'm working on a Linux system (32 bit, 4GB RAM) and found some contradictory information about memory addressing in Linux.
Am I right with this:
Only virtual memory has the differentiation between kernel and user space. Virtual memory is in a 32bit system 4GB large. 3 GB for the User space, 1GB for the kernel space.
But there are also addresses for the physical memory or which are not located - referencing to ZONE_NORMAL and it's association with Kernel/User-pages?.
On this homepage it is illustrated that the physical memory has also the differentiation in kernel and user space, is that right?
Since I'm working with PCIe, I would like to know how it is possible, that the BAR has a physical address?
That would mean that there is a reserved space for the PCIe device - where is this space located?
Is there a special structure in the physical memory? I found a reference here, which might show the structure in figure 16.
I'm translating this BAR address into a virtual address, so how is this possible?
Also some references say, that each process can uses all of the virtual addresses, is that right? If yes, how can I combine this fact with the above ones?