Re: Regarding GDT

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Replying to the whole list this time:

Hi,

If you configure two segments over the same range in the physical address space in the GDT there will be no protection enforced as such. You have effectively allowed read/write and execute to all the address space. However, and I may be wrong on this one, it was my understanding that with a flat-model the LDT can be used to have task specific segments, allowing you to set up and enforce 'separate' data, stack and code segments for tasks.

However, even this isn't necessary if you use a flat-model in the GDT and then use paging; the individual pages can be configured as read/write/execute. As such, any area of the address space that you want to act as a code "segment", for example, could be marked as read/executable, whilst a data or stack "segment" (or set of pages) could be marked as read/write.

With regards to your final question, I am not entirely sure. I suspect that you would need to modify and then load in a new GDT in order to adjust the segment sizes.

Hope this helps,

Michael F Clarke
MEng Software Engineering
PhD Student, Aberystwyth University


On 29 September 2010 18:28, Sri Ram Vemulpali <sri.ram.gmu06@xxxxxxxxx> wrote:
Hi All,

     I have a doubt regarding implementation of segmentation in OS.

     Since GDT is used to implement the segmentation, in that table
you add all segments descriptors dividing the linear address space.
     In a flat model you assign for every descriptor the base as 0x0
and limit as 4GB. This way every DS,CS sees the complete 4GB memory.
     But how is the segment protection implemented. I mean if
segments are not divided with different base address and limit
preventing
     overlapping, there is a possibility of stepping in to other
segment. So, why is the flat model is implemented. Also, If I strictly
implement
     segmentation without paging, then I can have only 8192 segments
of size 64kb for whole 4GB address space. Then I have all the segment
     descriptors in the GDT. Now if some task uses all its complete
segment size, and needs some more space, then is it possible to assign
     another DS segment. If so, how is that accomplished, since we
need to load in DS new index of segment descriptor and keep track of
all
     indexes in to GDT.

     Can anyone explain how above mentioned things can be achieved.
--
Regards,
Sri.

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ





[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux