Can anyone explain about the address spacing (virtual/physical) in WEC7 (Windows Embedded Compact 7)?
and Virtual to physical address mapping with examples?
Windows Embedded Compact 7's virtual memory model is the same as in CE 6, which is explained in detail here: https://msdn.microsoft.com/en-us/library/ee483001(v=winembedded.60).aspx
I know of no large difference between 6 and 7 except for the amount of supported physical memory (512MB in 6 vs. 3GB in 7).
Related
How come that the given virtual address (Just an example):
The virtual address ffffffffa08f9533 corresponds to the physical address: 0x24a5adff8
I only have 0x200000000 (8gb) amount of physical memory (Assuming the first address is zero - probably wrong assumption) so the returned physical address is outside of my real physical memory. What am I doing wrong?
The functions I use are:
virt_to_phys & phys_to_virt
Thanks
PCs have some address spaces which are not related to real RAM. A few days ago, I installed graphics card with 4GB of RAM. But there are other devices in the PC with their own memory which the CPU can still access: RAID controllers, network cards, I/O cards which support DMA.
In pre-64bit times, those memory areas had to be mapped somewhere in the physical address space of the RAM. Which meant you could install more than 3.5GB RAM in your PC but you couldn't use it.
With 64bit CPUs, all those memory areas can now be mapped somewhere outside of your real/normal RAM.
On Linux, you can get the current layout of the 64bit physical memory in /proc/iomem
Related: Getting memory map of every device in linux
I'm a beginner. I came across an article, http://en.wikipedia.org/wiki/Physical_Address_Extension
Though I could partially understand it, I couldn't understand the practical advantage of increasing the physical address. Could anyone kindly explain it? Thank you.
Increasing the physical address space beyond 32 bits allows the operating system to access more than 4GB of memory. However, the virtual address space (pointer size) is still 32 bits, and applications need to use special APIs to change where their virtual address space addressed. PAE was a stopgap to allow applications to use more than 4GB of memory on a 32-bit processor.
There is no practical use for PAE today with the widespread implementation of x86-64, which has 64-bit pointers.
What's the size of virtual memory of the Linux kernel occupies in a 48GB memory, 64-bit machine? I know in a 32-bit machine, the Linux kernel occupies 1GB virtual memory.
AMD64 uses addresses of "canonical form" (see pages 131-135 here) for implementations that do not implement the full 64 bits. The rationale behind this weird scheme is that it is possible to add more bits in the future as hardware evolves, and the two halves will grow together towards the middle.
Currently, all implementations (i.e. all existing processors) have 48 bit addresses, thus 00000000'00000000--00007FFF'FFFFFFFF, and FFFF8000'00000000--FFFFFFFF'FFFFFFFF are valid address ranges, with 128TB of memory in each half of the usable address space (256TB total).
So that would be 128TB, which is also the maximum per-process address space under Linux under AMD64.
If a process uses 6GB of memory and pointers are of 32 bits,how can addressing be done for 2GB above 4GB since pointers hold virtual addresses in linux?
Is running on the 64 bit only solution?Sorry for naive question
Completing Basile's answer, most architectures have extended the physical address-space to 36-bit (see Intel's PSE, PowerPC's Extended Real Page Number, ...). Therefore, although any process can only address 4GB of memory through 32 bits pointers, two differents process are virtually able to address different 4GB of a 64GB physical memory address space. This is a way for a 32bit' OS to address up to 64GB of memory (for instance, 32GB for Windows 2003 Server).
As I said in a comment, running on 64 bits is the practical solution. You really don't want to munmap then mmap again large segments on temporary files.
You could change your address space during runtime, but you don't want to do that (except when allocating memory, e.g. thru malloc, which may increase the available space thru mmap).
Changing the address space to get the illusion of a huge memory is a nightmare. Avoid that (you'll spend months on debugging hard to reproduce bugs). In the 1960-s IBM 1130 did such insane tricks.
Today, computers are cheaper than developer's time. So just buy a 64 bits processor with 8Gb (gigabytes) RAM.
Several 32 bits processors with the PAE feature are able to use more than 4Gb RAM, but each process only see at most 4Gb (in reality 3Gb) of virtual memory.
It is related to virtual memory, not to Intel-specific segmentation. Current Linux (and others) operating system use a flat memory model even on Intel processors.
All,
How much memory a 32bit server running Windows 2003 Server edition can address?
Rgds,
MK
Depends on what edition.
Have a look at this. What Windows will actually SEE in 32-bit editions is a bit different.
Also, have a read through Physical Address Extensions (PAE) which, as others have mentioned, allows 32-bit Windows to address more than 4 GB of memory.
4 GiB for Standard edition (with PAE). Otherwise:
http://technet.microsoft.com/en-us/library/cc758523(WS.10).aspx
64 GiB is the absolute maximum for the 32bit versions. I think that limitation is the limitation in PAE.
This is how you calculate it
2^32 = 4294967296 bytes .