ia32 paging scheme

27
IA32 Paging Scheme Introduction to the Pentium’s support for “virtual” memory

Upload: maya-glass

Post on 14-Mar-2016

61 views

Category:

Documents


1 download

DESCRIPTION

IA32 Paging Scheme. Introduction to the Pentium’s support for “virtual” memory. What is ‘paging’?. It’s a scheme for dynamically remapping addresses for fixed-size memory-blocks. Physical address-space. Virtual address-space. What’s ‘paging’ good for?. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: IA32 Paging Scheme

IA32 Paging Scheme

Introduction to the Pentium’s support for “virtual” memory

Page 2: IA32 Paging Scheme

What is ‘paging’?

• It’s a scheme for dynamically remapping addresses for fixed-size memory-blocks

Virtual address-spacePhysical address-space

Page 3: IA32 Paging Scheme

What’s ‘paging’ good for?

• For efficient ‘time-sharing’ among multiple tasks, an operating system needs to have several programs residing in main memory at the same time

• To accomplish this using actual physical memory-addressing would require doing address-relocation calculations each time a program was loaded (to avoid conflicting with any addresses already being used)

Page 4: IA32 Paging Scheme

Why use ‘Paging’?

• Use of ‘paging’ allows ‘relocations’ to be done just once (by the linker), and every program can ‘reuse’ the same addresses

Task #1

Task #2

Task #3

physical memory

Page 5: IA32 Paging Scheme

How to enable paging

PG

CD

NW

AM

WP

NE

ET

TS

EM

MP

PE

Control Register CR0

Protected-Mode must be enabled (PE=1)Then ‘Paging’ can be enabled (set PG=1)

# Here is how you can enable paging (must be in protected-mode)mov %cr0, %eax # get current machine status bts $31, %eax # turn on the PE-bit’s imagemov %eax, %cr0 # put modified status in CR0jmp pg # now flush the prefetch queue

pg:# but you had better prepare the ‘mapping’ beforehand!

Page 6: IA32 Paging Scheme

Several ‘paging’ schemes

• Intel’s design for ‘paging’ has continued to evolve since its introduction in 80386 CPU

• Pentiums support the initial design, as well as several optional extensions

• We shall describe the initial design which is simplest and remains as the ‘default’

• It is based on subdividing the entire 4GB virtual address-space into 4KB blocks

Page 7: IA32 Paging Scheme

Terminology

• The 4KB memory-blocks are called ‘page frames’ -- and they are non-overlapping

• Therefore each page-frame begins at a memory-address which is a multiple of 4K

• Remember: 4K = 4 x 1024 = 4096 = 212

• So the address of any page-frame will have its lowest 12-bits equal to zeros

• Example: page six begins at 0x00006000

Page 8: IA32 Paging Scheme

Control Register CR3

• Register CR3 is used by the CPU to find the tables in memory which will define the address-translation that it should employ

• This table is called the ‘Page Directory’ and its address must be ‘page-aligned’

Physical Address of the Page-Directory

31 0

Page 9: IA32 Paging Scheme

Page-Directory

• The Page-Directory occupies one frame, so it has room for 1024 4-byte entries

• Each page-directory entry may contain a pointer to a further data-structure, called a Page-Table (also page-aligned 4KB size)

• Each Page-Table occupies one frame and has enough room for 1024 4-byte entries

• Page-Table entries may contain pointers

Page 10: IA32 Paging Scheme

Two-Level Translation Scheme

PAGEDIRECTORY

CR3

PAGETABLES

PAGEFRAMES

Page 11: IA32 Paging Scheme

Address-translation

• The CPU examines any virtual address it encounters, subdividing it into three fields

offset into page-frame

index intopage-directory

index into page-table

31 22 21 12 11 0

10-bits 10-bits 12-bits

This field selects one of the 1024 array-entries inthe Page-Directory

This field selects one of the 1024 array-entries in that Page-Table

This field provides the offset to one of the 4096 bytes in that Page-Frame

Page 12: IA32 Paging Scheme

Page-Level ‘protection’

• Each entry in a Page-Table can assign a collection of ‘attributes’ to the Page-Frame that it points to; for example:– The P-bit (page is ‘present’) can be used by

the operating system to support its implementation of “demand paging”

– The W/R-bit can be used to mark a page as ‘Writable’ or as ‘Read-Only’

– The U/S-bit can be used to mark a page as ‘User accessible’ or as ‘Supervisor-Only’

Page 13: IA32 Paging Scheme

Format of a Page-Table entry

PAGE-FRAME BASE ADDRESS PWUPWT

PCD

AD00

31 12 11 10 9 8 7 6 5 4 3 2 1 0

AVAIL

LEGEND P = Present (1=yes, 0=no) W = Writable (1 = yes, 0 = no) U = User (1 = yes, 0 = no) A = Accessed (1 = yes, 0 = no) D = Dirty (1 = yes, 0 = no)

PWT = Page Write-Through (1=yes, 0 = no)PCD = Page Cache-Disable (1 = yes, 0 = no)

Page 14: IA32 Paging Scheme

Format of a Page-Directory entry

PAGE-TABLE BASE ADDRESS PWUPWT

PCD

A0PS0

31 12 11 10 9 8 7 6 5 4 3 2 1 0

AVAIL

LEGEND P = Present (1=yes, 0=no) W = Writable (1 = yes, 0 = no) U = User (1 = yes, 0 = no) A = Accessed (1 = yes, 0 = no)

PWT = Page Write-Through (1=yes, 0 = no)PCD = Page Cache-Disable (1 = yes, 0 = no)

PS = Page-Size (0=4KB, 1 = 4MB)

Page 15: IA32 Paging Scheme

Violations

• When a task violates the page-attributes of any Page-Frame, the CPU will generate a ‘Page-Fault’ Exception (interrupt 0x0E)

• Then the operating system’s page-fault exception-handler gets control and can take whatever action it deems is suitable

• The CPU will provide help to the OS in determining why a Page-Fault occurred

Page 16: IA32 Paging Scheme

The Error-Code format

• The CPU will push an Error-Code onto the operating system’s stack

PW/R

U/ S

reserved (=0)

3 2 1 0

Legend: P (Present): 0=attempted to access a ‘not-present’ page W/R (Write/Read): 1=attempted to write to a ‘read-only’ page U/S (User/Supervisor): 1=user attempted to access a ‘supervisor’ page

User means that CPL = 3; Supervisor means that CPL = 0, 1, or 2

Page 17: IA32 Paging Scheme

Control Register CR2

• Whenever a ‘Page-Fault’ is encountered, the CPU will save the virtual-address that caused that fault into the CR2 register– If the CPU was trying to modify the value of an

operand in a ‘read-only’ page, then that operand’s virtual address is written into CR2

– If the CPU was trying to read the value of an operand in a supervisor-only page (or was trying to fetch-and-execute an instruction) while CPL=3, the relevant virtual address will be written into CR2

Page 18: IA32 Paging Scheme

Identity-mapping

• When the CPU first turns on the ‘paging’ capability, it must be executing code from an ‘identity-mapped’ page (or it crashes!)

• We have created a demo-program that shows how to create the Page-Directory and Page-Tables for an identity-mapping of the entire bottom megabyte of RAM

• The demo is named ‘trypages.s’

Page 19: IA32 Paging Scheme

Page-Table initialization (1MB)

• Only the first 256 page-frames need to be mapped (so one Page-Table will suffice):# This code-fragment shows how to construct a loop in assembly language# that will initialize the first 256 Page-Table entries for an identity-mapping# of the conventional memory area (i.e., the bottom megabyte of memory)

.code32xor %ebx, %ebx # Page-Table’s initial array-indexmov $256, %ecx # number of entries to be definedmov $0x00000007, %eax # entry 0: P=W=U=1

nxpte:mov %eax, pgtbl(, %ebx, 4) # write this table-entryadd $0x1000, %eax # compute next entryinc %ebx # increment array-indexloop nxpte # setup all the entries

Page 20: IA32 Paging Scheme

CR3 and Task-Switchinglink

esp0ss0

esp1ss1

esp2ss2

PTDBEIP

ss0 ss0ss0 ss0ss0 ss0ss0 ss0ss0 ss0ss0 ss0ss0 ss0ss0 ss0ss0 ss0

ESCSSSDSFSGS

LDTRIOMAP TRAP

EFLAGSEAXECXEDXEBXESPEBPESIEDI

I/O permission bitmap

= field is ‘static’

= field is ‘volatile’

= field is ‘reserved’

04812162024283236404448525660646872768084889296100

26 longwords

32-bits

Page-Table Directory Base

This value will get loaded into register CR3 as part of the context-switching mechanism when paging has been enabled (PG=1)

So the ‘incoming task’ will automatically have its own individual mapping of its ‘virtual’ address-space to page-frames in the CPU’s ‘physical’ address-space

Page 21: IA32 Paging Scheme

Extensions to ‘paging’ scheme

• In the Pentium Intel has provided several enhancements to the original 386 paging

• These enhancements are ‘optional’ and must be selectively enabled by software

• Control Register CR4 implements bits to “turn on” the desired ‘paging-extension’ and some other enhancements that are unrelated to the ‘paging’ architectures

Page 22: IA32 Paging Scheme

Control Register CR4

VMXE

PCE

PGE

MCE

PAE

PSE

DE

TSD

PVI

VME

31 13 10 9 8 7 6 5 4 3 2 1 0

Legend (for paging-related extensions):

PSE = Page-Size Extension is enabled (1 = yes, 0 = no) PAE = Page-Address Extension is enabled (1 = yes, 0 = no) PGE = Page-Global Extension is enabled (1 = yes, 0 = no)

Page 23: IA32 Paging Scheme

Efficiency?

• When paging is enabled, every reference to memory requires the CPU to ‘translate’ the virtual address into a physical-address

• That ‘translation’ is based on table-lookups• These lookups must be done ‘sequentially’• So ‘address-translation’ could be costly in

terms of CPU speed – a high percentage of instructions typically refer to memory

Page 24: IA32 Paging Scheme

The ‘TLB’ solution

• When the CPU has performed the table lookups that map a virtual-address to a physical-address, it “remembers” that relationship by saving the pair of page-addresses (virtual-page physical page) in a special CPU cache known as the TLB (“Translation Look-aside Buffer”)

• So future references to that virtual page can be quickly resolved via that cache

Page 25: IA32 Paging Scheme

4-way set-associative

• The TLB is implemented as a ‘4-way set-associative’ cache -- it’s like a parallelized version of a Hash Table (with ‘evictions’)

• Due to the ‘locality of reference’ principle, the TLB concept generally works well in most common programming contexts as an efficient ‘speedup’ of the page-address table-lookup translation mechanism

• Modifying CR3 will invalidate the TLB

Page 26: IA32 Paging Scheme

In-class Exercise

• Modify the ‘trypages.s’ demo so it does a little bit of ‘non-identical’ page-mapping (i.e., so some virtual-address is different from its physical-address)

• For example, try mapping the page-frame at virtual address 0x00008000 to physical address 0x000B8000 (by changing the Page-Table entry at table-index 8), then write a message at address 0x00008000

Page 27: IA32 Paging Scheme

The exercise illustrated

video memory video memory

video memory

physical page-frames virtual page-frames

0x000B8000

0x00008000

. . . . . .