Thanks a lot Joel! This is a great explanation. 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 <[email protected]>wrote: > On Sat, Jul 16, 2011 at 3:47 PM, Vaibhav Jain <[email protected]> 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 >
_______________________________________________ Kernelnewbies mailing list [email protected] http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
