23
System przerwania (SP). Funkcje wejścia / wyjścia (I/O) Urządzenia zewnętrzne i mikroprocesor Pamięć I/O i instrukcje do pracy z nią Przykłady Przerwania w systemach komputerowych (x86) Tablica wektorów przerwań Funkcje systemowe do zarządzania SP Przykłady Pytania

System przerwania (SP). Funkcje wejścia / wyjścia (I/O)aragorn.pb.bialystok.pl/~teodora/AK/W7.pdf · System przerwania (SP). Funkcje wejścia / wyjścia (I/O) Urządzenia zewnętrzne

Embed Size (px)

Citation preview

System przerwania (SP). Funkcje wejścia / wyjścia (I/O)

Urządzenia zewnętrzne i mikroprocesor

Pamięć I/O i instrukcje do pracy z nią

Przykłady

Przerwania w systemach komputerowych (x86)

Tablica wektorów przerwań

Funkcje systemowe do zarządzania SP

Przykłady

Pytania

Urządzenia zewnętrzne i mikroprocesor

Port w rozumieniem sprzętowym:

Sterownik całego urządzenia

Miejsce w wyróżnionej przestrzeni adresowej I/O

Sposoby komunikacji procesora:

Polling

Przerwania

Pamięć I/O i instrukcje do pracy z nią

• I/O port similar to memory address • Adresy portów (port number):16 bitowe(0000h – ffffh)

Memory Space

I/O Space 16 bit I/O

port address

I/O Port Addressing Modes

Tryby adresacji

Immediate port address (natychmiastowa)

Adres może być do 1B (immediate address)

Służy dla portów od 00h do ffh (adresy)

Adres portu jest zapisany w DX (bezpośrednia)-

obsługuje wszystkie porty: od 0000h do ffffh

Do przechowywania adresu – tylko DX

Do przechowywania danych – tylko AL

IN/OUT

in eax/ax/al, port

in eax/ax/al, dx

out port, eax/ax/al

out dx, eax/ax/al

INSB(W)/OUTSB(W)

DX - numer portu;

ES:DI – adres pamięci do której piszemy;

DS:SI – adres pamięci z której czytamy

I/O Data Transfer

in al, 40h ;al gets 1 byte from port 40h

in ax, 255 ;ax gets 2 bytes from port ffh

in al, dx ;ax gets 1 byte from port address in dx

in eax, dx ;eax gets 4 bytes from port addr. in dx

out 80h, al ;send contents of al to port 80h

out dx, eax ;send contents of eax to port addr. in dx

386+

insb 72 ;receive byte string from port 72

;store in location at es:di

insw dx ;receive word string from port addr. in

dx

insd dx ;receive double word string

outsb ffh ;send byte string to port 255

;source string located in memory at ds:si

outsw dx ;send word string to port addr. in dx

outsd dx ;send double word string to port

I/O Memory Map

Obszary w I/O pamięci

0000h-00ffh Zarezerwowane dla systemu (system board)

0100h-03ffh Dla wszelkich kart (adapter cards)

0400h-0ffffh niedostępne dla magistrały systemowej

Przykłady (I/O interface chips):

8255A Programmable Peripheral Interface (PPI)

8259 Programmable Interrupt Controller (PIC)

8253/4 Programmable Interval Timer

(PIT)

8237 Programmable DMA Controller

Przerwania w systemach komputerowych (x86)

• Pojęcia ogólne:

• Interrupt request: sygnał zarządzający przerwanie

• Interrupt processing: odpowiedź procesora

• Interrupt service: to co się zdażyło w oprogramowaniu, jako wynik

• Rodzaje przerwania:

• Zewnętrzne (external) – wygenerowane poza procesora (sprzętowe)

• Wewnętrzne (internal) - wygenerowane poza procesora, jako wynik

instrukcji/operacji:

• x86 internals: int, into, divide error, and single step

• “trap” generally means any processor generated interrupt;

• in x86, usually means the single step interrupt

• jeszcze x86 terminologia:

• Hardware Interrupt – External, uses INTR and NMI control bus lines

• Processor Interrupt – traps, exceptions

• Software Interrupt – Internal, from int or into

Jeszcze inaczej

W systemie IBM PC występują cztery źródła przerwań:

1. Przerwania niemaskowalne. Powodem ich wystąpienia jest błąd parzystości

pamięci, błąd sygnalizowany przez kartę znajdującą się w złączu (slocie) płyty

głównej (sygnałem IOCHK) lub błąd sygnalizowany przez koprocesor

arytmetyczny.

2. Przerwania sprzętowe. Źródłem tych przerwań są urządzenia wejścia -

wyjścia. Wykonanie tych przerwań jest zależne od ustawienia flagi FI.

3. Przerwania generowane przez procesor. Przyczyną przerwania jest błąd przy

wykonywaniu pewnych niedozwolonych operacji, np. dzielenia przez zero.

Przerwania te nie mogą być maskowane.

4. Przerwania programowe. Przerwania te są skutkiem wykonania instrukcji INT

n (n jest numerem przerwania).

8086 External Interrupt Connections

NMI - Non-Maskable Interrupt INTR - Interrupt Request

Interrupt Logic

int into Divide

Error

Single

Step

NMI Requesting

Device

8086 CPU Intel

8259A

PIC

NMI

INTR

Software Traps

Programmable

Interrupt Controller

(part of chipset)

System obsługi przrwania

Schemat powiązań przy

przerwaniach sprzętowych

Linia IRQ Urządzenie Wektor przerwania

0 Zegar systemowy 08H

1 Klawiatura 09H

2 Wyjście kaskadowe do układu Slave 0AH

3 COM2 0BH

4 COM1 0CH

5 LPT2 0DH

6 kontroler napędu dysków elastycznych 0EH

7 LPT1 0FH

8 Zegar czasu rzeczywistego 70H

9 Wywołanie przerwania IRQ2 71H

10 zarezerwowane 72H

11 zarezerwowane 73H

12 zarezerwowane 74H

13 koprocesor arytmetyczny 72H

14 kontroler dysku twardego 76H

15 zarezerwowane 77H

Przerwania procesora

- Przerwania sprzętowe

Przerwanie 00H Przerwanie generowane jest przy dzieleniu przez 0.

Przerwanie 02H Przerwanie niemaskowalne (NMI). Przerwanie to po

wywołaniu jest zawsze wykonywane i nie może być

zablokowane przez użycie instrukcji STI i CLI.

Przerwanie 04H Nadmiar przy operacjach matematycznych.

Przerwanie 05H Wydruk zawartości ekranu monitora (Print Screen).

Przerwanie to jest wywoływane w momencie naciśnięcia

klawisza PrtScr i jest obsługiwane przez procedurę

BIOS-u. Użytkownik mógłby sam opracować własną

procedurę obsługi tego przerwania.

Przerwanie 08H Zegar czasu rzeczywistego. Uaktualnianie wewnętrznego

czasu dziennego.

Przerwanie 09H Klawiatura. Przerwanie sprzętowe, które jest zwykle

przejmowane przez programy TSR.

Przerwania systemu BIOS Przerwanie 10H Wybór trybu pracy ekranu.

Przerwanie 14H Obsługa sprzęgu szeregowego

Funkcja 0 - inicjalizacja portu RS 232,

Funkcja 1 - wysłanie znaku przez port szeregowy,

Funkcja 2 - odczyt znaku z portu szeregowego,

Funkcja 3 - odczyt stanu portu szeregowego.

Przerwanie 16H Obsługa klawiatury

Funkcja 0 - odczyt znaku,

Funkcja 1 - odczyt stanu bufora klawiatury,

Funkcja 2 - odczyt klawiszy sterujących,

Przerwanie 17H Obsługa drukarki

Funkcja 0 - wysłanie jednego bajtu do drukarki,

Funkcja 1 - inicjalizacja drukarki,

Funkcja 2 - odczyt stanu drukarki.

Przerwanie 19H Gorący restart - Bootstrap

Przerwanie 1AH Operacje na zegarze

Funkcja 0 - odczytanie stanu zegara,

Funkcja 1 - ustawienie aktualnego czasu.

Przerwanie 1BH Obsługa naciśnięcia klawiszy Ctrl i Break.

Przerwanie 1CH Obsługa impulsów zegara systemowego (timer tick). Zaleca się

stosowanie tego przerwania w przypadku obsługi z częstością 18,2 razy na

sekundę.

Przerwania systemu DOS

Przerwanie 20H Zakończenie wykonywanego programu

Przerwanie 21H Obsługa funkcji DOS

Funkcja 0 - zakończenie aktualnie wykonywanego programu,

Funkcja 7 - odczytanie znaku z klawiatury bez wysłania echa,

Funkcja 9 - wysłanie łańcucha znaków zakończonym znakiem $,

Funkcja 25H - ustawienie wektora przerwań: we: AL-nr przerwania, DS:DX-adr.proc.obsługi’

Funkcja 26H - utworzenie nowego seg.PSP:we: DX-adr.seg nowego PSP, CS-dla aktual. PSP,

Funkcja 31H - zakończenie wykonywania programu i pozostawienie go w pamięci (TSR): we: AL-kod zakończenia (0-normalne), DX rozmiar programu rezydentnego liczonego w 16B (paragraf)

Funkcja 33H - obsługa naciśnięcia klawiszy Ctrl i C,

Funkcja 35H - pobranie wektora przerw: we: AL - numer przerwania (00H ... FFH);wy: ES:BX,

Funkcja 49H - zwolnienie zarezerwowanej pamięci,

Funkcja 4CH - zakończenie programu z wyprowadzeniem komunikatu,

Funkcja 62H - pobranie segmentu PSP programu: we: AX=62H, wy: BX-seg.wykon. prog,

Przerwanie 23H Adres wyjścia z programu po naciśnięciu Ctrl i C

Przerwanie 24H Obsługa błędów fatalnych DOS-u

Przerwanie 27H Zakończenie wykonywanego progr. i pozostaw. go w pamięci (TSR)

Przerwanie 2FH Przerwanie multipleksowe, obsługa programów rezydentnych

Przerwanie 33H Obsługa myszy według standardu Microsoft

Przerwania F1H-F7H Zarezerwowane dla przerwań użytkownika

Interrupt Vector Table – IVT

•x86 ma 256 przerwania, każde ma swój Wektor

•Wektor = wskaźnik (adres) z Interrupt Vector Table, IVT

–IVT znajduje się pamięci od 0000:0000 do 0000:03ffh

•IVT zawiera 256 dalekie wskaźniki (far pointer values) –

adres (CS:IP)

•Każdy wskaźnik, to adres obsługującego progrmu

(Interrupt Service Routine, ISR)

IVT Format

Offset

Offset

Offset

Segment

Segment

Segment

Interrupt 0

Interrupt 1

Interrupt 255

0000:0000

0000:0001

0000:0002

0000:0003

0000:0004

0000:0005

0000:0006

0000:0007

0000:03fc

0000:03fd

0000:03fe

0000:03ff

IP LSB

IP MSB

CS LSB

CS MSB

Given a Vector, where is the

ISR address stored in memory ?

4Offset Type

Example: int 36h

Offset = (544) = 216 = 00d8h

Co się dzieje w czasie przerwania ?

Complete

Current

Instruction

Internal

Interrupt

NMI

INTR

TF

Fetch

Next

Instruction

IF

Read Type

Code #

push

Flags

Set

TEMP=TF

IF=0

TF=0

push

CS and IP

call

ISR

NMI

TEMP

Execute

ISR

pop

IP and CS

popf

Resume

Interrupted

Procedure

YES

YES

YES

YES

NO

NO

NO

NO

0

1

1

0

0

1

acknowledge

interrupt

Analogia do podprogramów call int

ret iret

• call: CS, IP – na stos; ładowane są CS:IP z adresem

procedury

• int robi to samo co call i nieco jeszcze

• ret pobiera ze stosu IP, CS

• iret pobiera ze stosu FLAGS, IP, i CS

Stos jest zawsze warunkiem, aby praca była poprawna

Interrupt Vector Assignments

Type Function Comment

0 Divide Error Processor - zero or overflow1 Single Step (DEBUG) Processor - TF=12 Nonmaskable Interrupt Pin Processor - NMI Signal3 Breakpoint Processor - Similar to Sing Step4 Arithmetic Overflow Processor - into5 Print Screen Key BIOS - Key Depressed6 Invalid Opcode Processor - Invalid Opcode7 Coprocessor Not Present Processor - no FPU8 Time Signal BIOS - From RT Chip (AT - IRQ0)9 Keyboard Service BIOS - Gen Service (AT - IRQ1)

A - F Originally Bus Ops (IBM PC) BIOS - (AT - IRQ2-7)10 Video Service Request BIOS - Accesses Video Driver11 Equipment Check BIOS - Diagnostic12 Memory Size BIOS - DOS Memory13 Disk Service Request BIOS - Accesses Disk Driver14 Serial Port Service Request BIOS - Accesses Serial Port Drvr15 Miscellaneous BIOS - Cassette, etc.16 Keyboard Service Request BIOS - Accesses KB Driver

Interrupt Vector Assignments (cont.) Type Function Comment

17 Parallel Port LPT Service BIOS - Printer Driver18 ROM BASIC BIOS - BASIC Interpreter in ROM19 Reboot BIOS - Bootstrap1A Clock Service BIOS - Time of Day from BIOS1B Control-Break Handler BIOS - Keyboard Break1C User Timer Service BIOS - Timer Tick1D Pointer to Video Parm Table BIOS - Video Initialization1E Pointer to Disk Parm Table BIOS - Disk Subsystem Init.1F Pointer to Graphics Fonts BIOS - CGA Graphics Fonts20 Program Terminate DOS - Clear Memory, etc.21 Function Call DOS - Transfer Control22 Terminate Address DOS - program Terminate handler23 Control-C Handler DOS - For OS Use24 Fatal Error Handler DOS - Critical Error25 Absolute Disk Read DOS - Disk Read26 Absolute Disk Write DOS - Disk Write27 Terminate DOS - TSR Usage28 Idle Signal DOS - Idle2F Print Spool DOS - Cassette, etc.

70-77 Hardware Interrupts in AT Bios DOS - (AT - IRQs 8-15)

AT – IRQ Definitions IBM-AT (Advanced Technology) - Intel 80286

Name Interrupt Vector Priority Description

NMI 02 1 Memory Parity Error IRQ0 08 2 Timer (Intel 8253 Chip 55 ms intervals) IRQ1 09 3 Keyboard IRQ2 0A 4 8259 PIC Slave or EGA/VGA Vert. Retrace IRQ3 0B 13 Serial Port (COM2 or COM4) IRQ4 0C 14 Serial Port (COM1 or COM3) IRQ5 0D 15 Fixed Disk or LPT2 Request IRQ6 0E 16 Floppy Disk Driver IRQ7 0F 17 LPT1 Request IRQ8 70 5 CMOS Real-Time Clock (RT Chip) IRQ9 71 6 Re-directed to IRQ2 IRQ10 72 7 RESERVED IRQ11 73 8 RESERVED IRQ12 74 9 Mouse or other IRQ13 75 10 Math Coprocessor (NPX) IRQ14 76 11 Hard Disk IRQ15 77 12 RESERVED