home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C!T ROM 5
/
ctrom5b.zip
/
ctrom5b
/
PROGRAM
/
DIVERSEN
/
DOS32V3B
/
PMODE2.DOC
< prev
next >
Wrap
Text File
|
1994-07-18
|
16KB
|
329 lines
PROTECTED MODE ( A more detailed approch )
Written by Yann Stephen
Global Descriptor Table Register (GDTR) :
The contents of the global table register define a table in the 80386DX's
physical memory address space called the Global Descriptor Table (GDT). This
global descriptor table is one important element of the 80386DX's memory
management system.
GDTR is a 48-bit register that is located inside the 80386DX. The lower two
bytes of this register, which are identified as LIMIT, specify the size in
byte of the GDT. The decimal value of LIMIT is one less than the actual size
of the table. For instance, if LIMIT equals 00FFh the table is 256 bytes in
length. Since LIMIT has 16 bits, the GDT can be up to 65,536 bytes long. The
upper four bytes of the GDTR, which are labelled BASE, locate the beginning
of
the GDT in physical memory. This 32-bit base address allows the table to be
positioned anywhere in the 80386DX's address space.
The GDT provides a mechanism for defining the characteristics of the
80386DX's global memory address space. Global memory is a general system
resource that is shared by many or all software tasks. That is, storage
locations in global memory are accessible by any task that runs on the
microprocessor. This table contains what are called system segment
descriptors. It is these descriptors that identify the characteristics of the
segments of global memory. For instance, a segment descriptor provides
information about the size, starting point, and access rights of a global
memory segment. Each descriptor is eight bytes long, thus our earlier example
of a 256-byte table provides enough storage space for just 32 descriptors.
Remember that the size of the global descriptor table can be expanded simply
by changing the value of LIMIT in the GDTR under software control. If the
table is increased to its maximum size of 65,563 bytes, it can hold up to
8,192 descriptors.
Question 1.1 :
How many descriptors can be stored the global descriptor table when the size
of LIMIT is 0FFFh.
The value of the BASE and LIMIT must be loaded into the GDTR before the
80386DX is switched from real mode of operation to the protected mode.
Special instruction are provided for this purpose in the system control
instruction set of the 80386 DX. Once the 80386DX is in protected mode, the
location of the table is typically not changed.
Interrupt Descriptor Table Register (IDTR) :
Just like the global descriptor table register, the interrupt descriptor
table register (IDTR) defines a table in physical memory. However, this table
contains what are called interrupt descriptors, not segment descriptors. For
this reason it is known as the Interrupt Descriptor Table (IDT).This
register and table of descriptors provide the mechanism by which the
microprocessor passes program control to interrupt and exception routines.
Just like the GDTR, the IDTR is 48 bits in length. Again, the lower
two bytes of the register (LIMIT) define the table size. That is, the size of
the table equals LIMIT+1 bytes. Since two bytes define the size, the IDT can
also be up to 65,536 bytes long. But the 80386DX only supports up to 256
interrupts and exceptions; therefore, the size of the IDT should not be set
to support more than 256 interrupts. The upper three bytes of IDTR (BASE)
identify the starting address of the IDT in physical memory. The type of
descriptor used in the IDT are what are called interrupt gates. These gates
provide a means for passing program control to the beginning of an interrupt
service routine. Each gate is eight bytes long and contains both attributes
and a starting address for the service routine.
Question 1.2 :
What is the maximum value that should be assigned to the limit in the IDTR?
This table can also be located anywhere in the linear address space
addressable with the 80386DX's 32-bit address. Just like the GDTR, the IDTR
needs to be loaded before the 80386DX is switched from the real mode to
protected mode. Special instructions are provided for loading and saving the
contents of the IDTR. Once the location of the table is set, it is typically
not changed after entering the protected mode.
Question 1.3 :
What is the address range of the last descriptor in the interrupt descriptor
table defined by base address 00011000h and limit 01FFh
Local Descriptor Table Register (LDTR) :
The Local Descriptor Table Register (LDTR) is also part of the 80386DX's
memory management support mechanism. Each task can have access to its own
private table descriptor table in addition to the global descriptor table.
This private table is called the local descriptor table (LDT) and defines a
local memory address space for use by the task. The LDT holds segment
descriptors that provide access space for use by the task. The LDT holds
segment descriptors that provide access to code and data in segments of
memory that are reserved for the current task. Since each task can have its
own segment of local memory, the protected-mode software system may contain
local descriptor tables. Whenever a selector is loaded into the LDTR, the
corresponding descriptor is transparently read from global memory and loaded
into the local descriptor table cache within the 80386DX. It is this
descriptor that defines the local descriptor table.
Assume that every time a selector is loaded into the LDTR, a local descriptor
table descriptor is cached and a new LDT is activated.
Control Registers :
The protected-mode model includes the four system control registers,
identified as CR0 through CR3 :
31 23 15 7 0
-------------------------------------------------------
| Page Directory Base Register (PDBR)| Reserved | CR3
-------------------------------------------------------
| Page Fault Linear Address | CR2
-------------------------------------------------------
| RESERVED | CR1
-------------------------------------------------------
|P| |R|T|E|M|P| CR0
|G| RESERVED | |S|M|P|E|
-------------------------------------------------------
Notice that the lower five bits of CR0 are system control flags. These bits
make up what are known as the machine status word (MSW). The most significant
bit of CR0 and registers CR2 and CR3 are used by the 80386DX's paging
mechanism. Let us consider by examining the machine status word bits of CR0.
They contain information about the 80386DX's protected-mode configuration and
status. The four bit labelled PE, MP, EM and R are control bit that define
the protected mode system configuration. The fifth bit, TS, is a status bit.
These bits can be examined or modified through software.
The protected-mode enable (PE) bit determines if the 80386DX is in
the real or protected mode. At reset, PE is cleared. This enables the real
mode of operation. To enter the protected mode, we simply switch PE to 1
through software. Once in the protected mode, the 80386DX can be switched
back to real mode under software control by clearing the PE bit. It can also
be returned to real mode by hardware reset.
The math present (MP) bit is set to 1 to indicate that a numeric
coprocessor is present in the microcomputer system. On the other hand, if the
system is to be configured so that a software emulator is used to perform
numeric operations instead of a coprocessor, the emulate (EM) bit is set to
1.
Only one of these two bits can be set at a time. Finally, the extension type
(R) is used to indicate whether an 80387DX or 80287 numeric coprocessor is
in use. Logic 1 in R indicates that an 80387DX is installed. The last bit in
the MSW, task switched (TS), automatically gets set whenever the 80386DX
switched from one task to another. It can be cleared under software control.
The protected mode software architecture of the 80386DX also supports
paged memory operation. Paging is turned on by switching the PG bit in CR0 to
logic 1. Now addressing of physical memory is implemented with an address
translation mechanism that consists of a page directory and page table that
are both held in the physical memory. This register holds a 20-bit page
directory base address that points to the beginning of the page directory. A
page fault error occurs during the page translation process if the page is
not
present in memory. In this case, the 80386DX saves the address at which the
page fault occurred in register CR2. This address is denoted as page fault
linear address.
Task Register (TR):
The task register is one of the key elements in the protected mode task
switching mechanism of the 80386DX microprocessor. This register holds a
16-bit index value called a selector. The initial selector must be loaded
into TR under software control. This starts the initial task. After this is
done, the selector is changed automatically whenever the 80386DX executes an
instruction that performs a task switching.
TR is used to locate a descriptor in the global descriptor table. Notice that
when a selector is loaded into TR, the corresponding task state segment (TSS)
descriptor automatically gets read from memory and loaded into on-chip task
descriptor cache. This descriptor defines a block of memory called the task
called the task state segment (TSS). It does this by providing the starting
address base (BASE) and the size (LIMIT) of the segment. Every task has it
own TSS. The TSS holds the information needed to initiate the task, such as
initial values for the user-accessible registers.
Registers with Changed Functionality :
The segment registers are now called the segment selector register, and
instead of holding a base address they are loaded with what is known as a
selector. The selector does not directly specify a storage location in
memory. Instead, it selects a descriptor that defines the size and
characteristics of segment of memory.
15 8 2 0
-------------------------------------------------------
| INDEX |TI|RPL|
-------------------------------------------------------
SELECTOR
Bits Name Function
1-0 Requested Indicates selector privilege level desired
Privilege
Level (RPL)
2 Table Indicator TI = 0 use Global Descriptor Table (GDT)
(TI)
TI = 1 use Local Descriptor Table (LDT)
15-3 INDEX SELECT descriptor entry in table
TI bit select the table to be used when accessing a segment descriptor,
because two tables are active at the same time GDT and LDT.
The index is used as a pointer to a specific descriptor entry in the table
selected by the TI bit.
Protected-Mode system control instruction set
Instruction Description Mode
LGDT S Load the global descriptor table register. S specifies Both
the memory location that contains the first byte of the
6 bytes to be loaded into the GDTR.
SGDT D Store the global descriptor table register. D specifies Both
the memory location that gets the first of the six bytes
to be stored from the GDTR.
LIDT S Load the interrupt descriptor table register. S specifies Both
the memory location that contains the first byte of the
6 bytes to be loaded into the IDTR.
SIDT D Store the interrupt descriptor table register. D specifies Both
the memory location that gets the first of the six bytes
to be stored from the IDTR.
LMSW S Load the machine status word. S is an operand to specify Both
the word to be loaded into MSW.
SMSW D Store the machine status word. D is an operand to specify Both
the word location or register where the MSW is to be
saved.
LLDT S Load the local descriptor table register. S specifies the
Protec operand to specify a word to be loaded into the LDTR.
SLDT D Store the local descriptor table register. D is an operand
Protec to specify the word location where the LDTR is to be saved.
LTR S Load the task register. S is an operand to specify a word
Protec to be loaded into TR (Task Register).
STR D Store the task register. D is an operand to specify the
Protec word location where the TR is to be stored.
LAR D,S Load access rights byte. S specifies the selector for the
Protec descriptor whose access byte is loaded into the upper byte
of the D operand. The low byte specified by D is cleared.
The zero flag is set if the loading completes successfully;
otherwise it is cleared.
LSL R16,S Load segment limit. S specifies the selector for the
Protec descriptor whose limit word is loaded into the word
register operand R16. The zero flag is set if the
loading completes successfully; otherwise it is cleared.
ARPL D,R16 Adjust RPL field of the selector. D specifies the selector
Protec whose RPL field is increased to match the PRL field in the
register. The zero flag is set if successful;otherwise it
is cleared.
VERR S Verify read access. S specifies the selector for the Protec
segment to be verified for read operation, If successful
the zero flag is set; otherwise it is reset.
VERW S Verify write access. S specifies the selector for the
Protec segment to be verified for write operation, If successful
the zero flag is set; otherwise it is reset.
CLTS Clear task switched flag.
Protec
A few examples of these new instructions :
LGDT [INIT_GDTR]
Loads the GDTR with the base and limit pointed to by address INIT_GDTR to
create a global descriptor table in memory. This instruction is meant to be
used during system initialisation and before switching the 80386DX to the
protected mode.
Once loaded the current contents of the GDTR can be saved in memory by
executing the store global table (SGDT) instruction.
SGDT [SAVE_GDTR]
The instruction load machine status word (LMSW) and store machine status word
(SMSW) are provided to load and store the contents of the machine status word
(MSW), respectively. These are the instructions that are used to switch the
80386DX from real to protected mode. To do this we must set the least
significant bit in the MSW to 1. This can be done by first reading the
contents of the machine word , modifying the LSB (PE), and then writing the
modified value back into the MSW part of CR0. The instruction sequence that
follows will switch an 80386DX operating in real mode to protected mode:
SMSW AX ;read from the MSW
OR AX,1 ;modify the PE bit
LMSW AX ;write to the MSW
Solution 1.1 : Each descriptor takes up eight bytes; therefore, a 4096-byte
table can hold :
Descriptors = 4096/8 = 512
Solution 1.2 : The maximum number of interrupt descriptors than can be used
in an 80386DX microcomputer system is 256. Therefore, the maximum table size
in bytes is :
IDT (size) = 8*256 = 1000h bytes
LIMIT = 1000h-1 = 0FFFh (We start from zero)
Solution 1.3 : From the values of the base and limit, we find that the table
is located in the address range
IDT (start) = 00011000h
IDT ( end ) = 000111FFh
The last descriptor in this table takes up the eight bytes of the memory from
address 000111F8h through 000111FFh.