Just one more question. I used to think that the compiler always
assigns/generates starting from 0 as Mulyadi has also mentioned.
In the case when Segmentation(intel-style) is being used how does the compiler assigns
addresses?
Thanks
Vaibhav Jain
On Sat, Jul 16, 2011 at 11:13 PM, Joel A Fernandes <agnel.joel@xxxxxxxxx> wrote:
On Sat, Jul 16, 2011 at 3:47 PM, Vaibhav Jain <vjoss197@xxxxxxxxx> wrote:Segmentation and the virtual address layout are independent of each
> 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.
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.
It happens so that Linux sets up the processor tables in such a way
> 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
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.
Hope this clears it, do read the introduction chapters of
> 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.
Understanding the Linux Kernel which touches on a lot of these topics.
Feel free to ask more questions.
Thanks,
Joel
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies