13.07.2015 Views

iAPX 286 Operating System Writers Guide 1983

iAPX 286 Operating System Writers Guide 1983

iAPX 286 Operating System Writers Guide 1983

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

BINDING AND LOADINGPL-O procedures can execute. For these functions the operating system must provide some additionalsupport. These functions include• Changing the access rights byte of a descriptor. The loader can create a writable data segment(using a level-O procedure such as the ALLOCATE procedure described in Chapter 3) into whichto read a segment from the object file of the program being loaded. But, if that segment is to havesome other type in the new task (the segment might be an executable segment, for example), theaccess rights byte must be changed.• Filling the new task's LDT with the base addresses of its segments. When the loader allocates asegment for the new task, the ALLOCATE procedure places the physical base address of the segmentin a descriptor table (presumably the loader's LDT, but possibly the GDT). Only PL-O proceduresshould have access to physical addresses in descriptor tables.• Allocating the stack segment for PL o. Insufficient space in this segment can cause failure of PL-Oprocedures. Also, if the kernel requires the TSS to be located in the PL-O stack segment (as suggestedin Chapter 4), then the kernel should handle the complexities of setting up such a structure.• Initializing the task database (TDB) for the new task. Only PL-O procedures have access to thisdata structure. (Refer to Chapter 4 for a discussion of the task database.)• Entering the new task in the scheduling queues and setting the back-link and nested task flag in thenew TSS. These operations are crucial to proper functioning of the scheduler and therefore shouldbe done at PL o.<strong>iAPX</strong> <strong>286</strong> Object Module FormatIntel has defined object module formats (OMFs) for the <strong>iAPX</strong> <strong>286</strong> to be used by translators, objectprogramutilities, and loaders. There are two classes of object module:• Linkable modules, which are produced by translators and consumed by Builder and Binder. Bindercan also produce a linkable module from one or more input linkable modules in a process known asincremental binding.• Loadable modules, which are produced by the Binder and the Builder and consumed by loaders andde buggers.Refer to the <strong>iAPX</strong> <strong>286</strong> <strong>System</strong> Builder User's <strong>Guide</strong> for detailed definitions of the <strong>iAPX</strong> <strong>286</strong> ObjectModule Format.Loaders that adhere to Intel's OMFs for loadable modules can load object modules created by Intel'sprogram development tools. There are two basic variations of the <strong>iAPX</strong> <strong>286</strong> OMF for load able modules:• That created by the Binder supports straightforward, single-task modules.• That created by the Builder supports more complex variations, including multi task modules withshared segments (possibly including shared LDTs), reserved LDT locations, GDT descriptors to beinstalled as the task is loaded, etc.Builder not only produces modules intended for use by dynamic loaders but also produces bootloadablemodules designed for use by bootstrap or initializing loaders. Bootloadable modules use absoluteaddresses. A boot loader must be able to write to absolute physical locations.11-10 121960-001

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!