peripheral of modern desktop board & its linux programming

36
Peripheral of Modern Desktop Board & its Linux programming Dr A Sahu Dept of Comp Sc & Engg. IIT Guwahati

Upload: tuan

Post on 05-Jan-2016

26 views

Category:

Documents


1 download

DESCRIPTION

Peripheral of Modern Desktop Board & its Linux programming. Dr A Sahu Dept of Comp Sc & Engg . IIT Guwahati. Outline. Intel 945 Motherboard architecture GMCH ICH7 (8254,8259,8237) Interrupt & io-apic IDT, GDT Multiprocessor io-apic IDT table printing in linux kernel module. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Peripheral of Modern Desktop Board & its Linux programming

Peripheral of Modern Desktop Board & its Linux programming

Dr A SahuDept of Comp Sc & Engg.

IIT Guwahati

Page 2: Peripheral of Modern Desktop Board & its Linux programming

Outline• Intel 945 Motherboard architecture• GMCH• ICH7 (8254,8259,8237)• Interrupt & io-apic• IDT, GDT• Multiprocessor io-apic• IDT table printing in linux kernel

module

Page 3: Peripheral of Modern Desktop Board & its Linux programming

Intel 945 Express ChipsetIntel

Pentium D Processor

DDR2

DDR2

4 Serial ATA Ports

Integrated Matrix Storage

Technology

6 PCI Slots

BIOS Support

Support for Media Ext Card

Intel GMA 950 Graphics

PCI Express* x16 Graphics

Intel HD Audio

8 high Speed USB Ports

6 PCI Express*x1 slot

Intel Pro 100/1000 LAN

Intel Active Mngement Tech.

82945GMCH/MCHNorth Bridge

82801 GRICH7 (io cont. hub sys7)

South Bridge

Page 4: Peripheral of Modern Desktop Board & its Linux programming

82945 : GMCH/MCH

• Graphics and Memory Controller Hub• Graphics Interface (GI) and PCI Express for

Graphics card support • Host Interface (HI)– Connect to processor and support HT, IntrDelivery,

12 in-order queue, etc.• System Memory Interface (SMI)– Connected to two channel DDR2

• Direct Media Interface (DMI)– Connect to ICH7

Page 5: Peripheral of Modern Desktop Board & its Linux programming

82801: ICH7 • IO Controller HUB version 7 (South Bridge)• Enhance DMA controller, IC and timer – Two cascaded 8259 PIC – One 82C54 PIT (Motorola)– One 8237 DMA

• Low Pin count (LPC) Interface • PCI and PCI express (Peripheral Component. Int)• AC97 & HD Audio Codec• Serial Peripheral Interface (SPI) Support • Firm wire support (BIOS)• ACPI, SATA, USBs

Page 6: Peripheral of Modern Desktop Board & its Linux programming

Exceptions and Interrupts: Rationale

• Usefulness of a general-purpose computer is dependent on its ability to interact with various peripheral devices attached to it (e.g., keyboard, display, disk-drives, etc.)

• Devices require a prompt response from the cpu when various events occur, even when the cpu is busy running a program

• The x86 interrupt-mechanism provides this

Page 7: Peripheral of Modern Desktop Board & its Linux programming

Simplified Block Diagram

CentralProcessing

Unit

MainMemory

I/Odevice

I/Odevice

I/Odevice

I/Odevice

system bus

Page 8: Peripheral of Modern Desktop Board & its Linux programming

The ‘fetch-execute’ cycle

Normal programming assumes this ‘cycle’:• 1) Fetch the next instruction from ram• 2) Interpret the instruction just fetched• 3) Execute this instruction as decoded• 4) Advance the cpu instruction-pointer• 5) Go back to step 1

Page 9: Peripheral of Modern Desktop Board & its Linux programming

But ‘departures’ may occur

• Circumstances may arise under which it would not be appropriate for the CPU to just proceed with this fetch-execute cycle

• Examples: – An ‘external device’ might ask for service– An interpreted instruction could be ‘illegal’– An instruction ‘trap’ may have been set

Page 10: Peripheral of Modern Desktop Board & its Linux programming

Faults

• If the cpu detects that an instruction it hasjust decoded would be illegal to execute, itcannot proceed with the fetch-execute cycle• This type of situation is known as a ‘fault’• It is detected BEFORE incrementing the IP• The cpu will react by: 1) saving some info on

its stack, then 2) switching control to a special fault-handling routine

Page 11: Peripheral of Modern Desktop Board & its Linux programming

Fault-Handling

• The causes of ‘faults’ often can be ‘fixed’• A few examples:– 1) Writing to a ‘read-only’ segment– 2) Reading from a ‘not present’ segment– 3) Executing an out-of-bounds instruction– 4) Executing a ‘privileged’ instruction

• If a ‘problem’ can be remedied, then the CPU can just resume its execution-cycle

Page 12: Peripheral of Modern Desktop Board & its Linux programming

Traps

• A CPU might have been programmed toautomatically switch control to a ‘debugger’program after it has executed an instruction • That type of situation is known as a ‘trap’• It is activated AFTER incrementing the IP• It is accomplished by setting the TF flag• Just as with faults, the cpu will react:

save return-info, + jump to trap-handler

Page 13: Peripheral of Modern Desktop Board & its Linux programming

Faults versus Traps

Both ‘faults’ and ‘traps’ occur at points withina computer program which are ‘predictable’(i.e., triggered by pre-planned instructions),so they are ‘in sync’ with the program (andthus are called ‘synchronous’ interruptionsin the normal fetch-execute cycle)The cpu responds in a similar way to faultsand to traps – yet what gets saved differs!

Page 14: Peripheral of Modern Desktop Board & its Linux programming

Faults vs Traps (continued)

• With a ‘fault’:the saved address is for the instruction which triggered the fault – so it will be thatinstruction which gets re-fetched after the cause of the problem has been corrected

• With a ‘trap’:the saved address is for the instructionfollowing the one which triggered the trap

Page 15: Peripheral of Modern Desktop Board & its Linux programming

Stack’s layout

ESP

EFLAGS

EIP

SS

CS

SS:ESP

In case the CPU gets interrupted while it is executing a user application, then the CPU will switch to a new ‘kernel-mode’ stack before saving its current register-values for EFLAGS, CS, and EIP, and in fact will begin by saving on the kernel-mode stack the register-values for SS and ESP which point to the top of user-mode stack (so it can be restored later on)

Page 16: Peripheral of Modern Desktop Board & its Linux programming

Interrupt Handling

• As with faults and traps, the cpu responds to ‘interrupt’ requests by saving some info on its kernel stack, and then jumping to a special ‘interrupt-handler’ routine designed to take appropriate action for the particular device which caused the interrupt to occur

• The ‘entry-point’ to the interrupt-handler is located via the Interrupt Descriptor Table

Page 17: Peripheral of Modern Desktop Board & its Linux programming

The ‘Interrupt Controller’

• Special hardware is responsible for telling the CPU when a specific external device wishes to ‘interrupt’ the current program

• This hardware is the ‘Interrupt Controller’• It needs to tell the cpu which one among

several devices is the one needing service • It also needs to prioritize multiple requests

Page 18: Peripheral of Modern Desktop Board & its Linux programming

Two Interrupt-Controllers

x86CPU

MasterPIC

(8259)SlavePIC

(8259)

INTR

Programmable Interval-TimerKeyboard controller

Real-Time Clock

Legacy PC Design (for single-processor systems) and during the Power-On Self-Test during the system-restart initialization

Page 19: Peripheral of Modern Desktop Board & its Linux programming

Three crucial data-structures

• The Global Descriptor Table (GDT)defines the system’s memory-segments and their access-privileges, which the CPU has the duty to enforce

• The Interrupt Descriptor Table (IDT)defines entry-points for the various code-routines that will handle all ‘interrupts’ and ‘exceptions’

• The Task-State Segment (TSS) holds the values for registers SS and ESP that will get loaded by the CPU upon entering kernel-mode

Page 20: Peripheral of Modern Desktop Board & its Linux programming

How does CPU find GDT/IDT?

• Two dedicated registers: GDTR and IDTR• Both have identical 48-bit formats:

Segment Base Address Segment Limit

0151647

Privileged instructions: LGDT and LIDT used to set these register-valuesUnprivileged instructions: SGDT and SIDT used for reading register-values

Kernel must setup these registers during system startup (set-and-forget)

Page 21: Peripheral of Modern Desktop Board & its Linux programming

How does CPU find the TSS?

• Dedicated system segment-register TR holds a descriptor’s offset into the GDT

TR

GDTR

GDTTSS

The CPU knows the layout of fields in the Task-State Segment

The kernel must set up the GDT and TSS structures and must load the GDTR and the TR registers

Page 22: Peripheral of Modern Desktop Board & its Linux programming

Segment-Descriptor Format

Base[ 15 … 0 ] Limit[ 15 ... 0 ]

0151631

32395663

Base[31…24] Limit[19..16]

Accessattributes Base[23…16]

Quadword (64-bits)

Page 23: Peripheral of Modern Desktop Board & its Linux programming

Gate-Descriptor Format

Entrypoint Offset[ 31…16 ]

Code-segment Selector Entrypoint Offset[ 15…0 ]

Quadword (64-bits)

0

63

31

32

Gate typecode (Reserved)

Page 24: Peripheral of Modern Desktop Board & its Linux programming

Intel-Reserved ID-Numbers

• Of the 256 possible interrupt ID-numbers, Intel reserves the first 32 for ‘exceptions’

• Operating systems such as Linux are free to use the remaing 224 available interruptID-numbers for their own purposes (e.g.,for service-requests from external devices,or for other purposes such as system-calls

Page 25: Peripheral of Modern Desktop Board & its Linux programming

Some Intel-defined exceptions• 0: divide-overflow fault• 1: debug traps and faults • 2: non-maskable interrupts• 3: debug breakpoint trap• 4: INTO detected overflow • 5: BOUND range exceeded• 6: Undefined Opcode• 7: Coprocessor Not Available• 8: Double-Fault• 9: (reserved)• 10: Invalid Task-State Segment• 11: Segment-Not-Present fault• 12: Stack fault• 13: General Protection Exception• 14: Page-Fault Exception• 15: (reserved)

Page 26: Peripheral of Modern Desktop Board & its Linux programming

Using ‘dram.c’ driver

We can look at the kernel’s GDT/IDT tables1) We can find them (using ‘sgdt’ and ‘sidt’)2) We can ‘read’ them by using ‘/dev/dram’A demo-program on our course website:

showidt.cppIt prints out the 256 IDT Gate-Descriptors

Page 27: Peripheral of Modern Desktop Board & its Linux programming

ROM-BIOS

• For industry compatibility, Intel created its “Multiprocessor Specification (version 1.4)”

• It describes ‘standards’ for PC platforms that are intended to support multiple CPUs

• Requirements include two data-structures that must reside in designated locations in the system’s read-only memory (ROM) at physical addresses vendors may choose

Page 28: Peripheral of Modern Desktop Board & its Linux programming

MP Floating Pointer

• The ‘MP Floating Pointer structure’ is 16 bytes in length, must begin at an address which is divisible by 16, and must start with this recognizable ‘signature’ string:

“_MP_”

• A program finds the structure by searching the ROM-BIOS area (0xF0000-0xFFFFF) for this special 4-byte string

Page 29: Peripheral of Modern Desktop Board & its Linux programming

Multi-CORE CPU

Multiple Logical Processors

CPU0

CPU1 I/O

APICLOCALAPIC

LOCALAPIC

Advanced Programmable Interrupt Controller is needed to perform ‘routing’ of I/O requests from peripherals to CPUs

(The legacy PICs are masked when the APICs are enabled)

Page 30: Peripheral of Modern Desktop Board & its Linux programming

MP Configuration Table

• Immediately after the “_MP_” signature, the MP Floating Pointer structure stores the 32-bit physical-address of a larger variable-length data-structure known as the MP Configuration Table

• This table contains entries which describe the system’s processors, buses, and other hardware components, including I/O APIC

Page 31: Peripheral of Modern Desktop Board & its Linux programming

See: ‘smpinfo.c’ module

• You can view the MP Floating Pointer and MP Configuration Table data-structures in ROM-BIOS memory (in hexadecimal format) by installing this LKM and then using the ‘cat’ command:

$ cat /proc/smpinfo

• Entries of type ‘2’ tell where the I/O APICs are mapped into CPU’s physical memory

Page 32: Peripheral of Modern Desktop Board & its Linux programming

• The I/O APIC in our classroom machines supports 24 Interrupt-Request input-lines

• Its 24 programmable registers determine how interrupt-signals get routed to CPUs

Two-dozen IRQs

Redirection-table

Page 33: Peripheral of Modern Desktop Board & its Linux programming

Redirection Table Entry

reserved

reserved interrupt vector

L/P

STATUS

H/L

RIRR

E/L

MASK

extended destination

63 56 55 48 32

destination

31 16 15 14 13 12 11 10 9 8 7 0

delivery mode

000 = Fixed001 = Lowest Priority010 = SMI 011 = (reserved)100 = NMI101 = INIT110 = (reserved)111 = ExtINT

Trigger-Mode (1=Edge-triggered, 0=Level-triggered)

Remote IRR (for Level-Triggered only) 0 = Reset when EOI received from Local-APIC 1 = Set when Local-APICs accept Level-Interrupt sent by IO-APIC

Interrupt Input-pin Polarity (1=Active-High, 0=Active-Low)

Destination-Mode (1=Logical, 0=Physical)Delivery-Status (1=Pending, 0=Idle)

Page 34: Peripheral of Modern Desktop Board & its Linux programming

Our ‘ioapic.c’ kernel-module

• This Linux module creates a pseudo-file (named ‘/proc/ioapic’) which lets users view the current contents of the I/O APIC Redirection-Table registers

• You can compile and install this module for our classroom and CS Lab machines

Page 35: Peripheral of Modern Desktop Board & its Linux programming

How to find KBDs Interrupt

• The keyboard’s interrupt is ‘routed’ by the I/O-APIC Redirection Table’s second entry (i.e., entry number 1)

• Can you determine its interrupt ID-number on our Linux systems?

• HINT: Use our ‘ioapic.c’ kernel-module

Page 36: Peripheral of Modern Desktop Board & its Linux programming

Thanks