Need help understanding memory models, cpu modes and address translation

Joel A Fernandes agnel.joel at gmail.com
Sun Jul 17 02:13:37 EDT 2011


On Sat, Jul 16, 2011 at 3:47 PM, Vaibhav Jain <vjoss197 at gmail.com> wrote:
> Hi Mulyadi,
>
> Thanks for the explanation.Its really nice! But
> what I was referring to the was this article on virtual address layout of
> program :
>
> http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory
>
> which mentions : "The distinct bands in the address space correspond to
> memory segments like the heap, stack, and so on. Keep in mind these segments
> are simply a range of memory addresses and have nothing to do with
> Intel-style segments."
>
> This gave rise to all the confusion.I used to think that code, stack and
> heap segments in the virtual address layout of a program
> are the same as the segments which we talk about when referring to hardware
> provided Segmentation. But seems like this is not the case.

Segmentation and the virtual address layout are independent of each
other so you shouldn't confuse the two. You can choose to have
segmentation and then virtual addressing.

The way it works is:

logical address (segmented) -> virtual address -> physical address

The logical to virtual conversion is called segmentation, and virtual
to physical is called paging. The Software always uses logical
addresses.

The article explains "heap", "stack" etc are segments created by the
operating system and have nothing to do with traditional Intel-style
"segments". Infact the hardware would not be even aware of the
presence of the heap. The HW only knows virtual addresses.

> I also read a little about real and protected mode and came to know that in
> 32-bit protected mode all the Segment registers point to the same address

It happens so that Linux sets up the processor tables in such a way
that the logical addresses map to the same as virtual addresses. IIRC,
For x86 there's a "Global Descriptor table" that Linux manipulates to
produce this one-to-one mapping.

> This confused me even more. So I need an explanation of how all these work
> together. I am Sorry if the question is
> not clear or if it sounds confusing.

Hope this clears it, do read the introduction chapters of
Understanding the Linux Kernel which touches on a lot of these topics.
Feel free to ask more questions.

Thanks,
Joel



More information about the Kernelnewbies mailing list