Trochę teorii
Transkrypt
Trochę teorii
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 in out out eax/ax/al, port eax/ax/al, dx port, eax/ax/al 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 in in in out out 386+ insb al, ax, al, eax, 80h, dx, 72 insw dx dx insd dx outsb ffh outsw dx outsd dx 40h 255 dx dx al eax ;al gets 1 byte from port 40h ;ax gets 2 bytes from port ffh ;ax gets 1 byte from port address in dx ;eax gets 4 bytes from port addr. in dx ;send contents of al to port 80h ;send contents of eax to port addr. in dx ;receive byte string from port 72 ;store in location at es:di ;receive word string from port addr. in ;receive double word string ;send byte string to port 255 ;source string located in memory at ds:si ;send word string to port addr. in 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 Programmable Interrupt Controller (part of chipset) NMI Requesting Device NMI 8086 CPU INTR Interrupt Logic Intel 8259A PIC int into Software Divide Error Single Step Traps 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 Przerwanie 16H Obsługa klawiatury 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 - odczyt znaku, Funkcja 1 - odczyt stanu bufora klawiatury, Funkcja 2 - odczyt klawiszy sterujących, Przerwanie 17H Obsługa drukarki 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. 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 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 0000:0000 0000:0001 Offset Interrupt 0 0000:0002 0000:0003 IP LSB Segment IP MSB CS LSB 0000:0004 0000:0005 Offset 0000:0006 0000:0007 CS MSB Interrupt 1 Segment Given a Vector, where is the ISR address stored in memory Offset Type 4 0000:03fc 0000:03fd Offset int 36h Interrupt 255 0000:03fe 0000:03ff Example: Segment Offset = (544) = 216 = 00d8h Co się dzieje w czasie przerwania ? Complete Current Instruction TEMP 0 Set TEMP=TF Execute ISR IF=0 TF=0 pop IP and CS push CS and IP popf acknowledge interrupt call ISR Resume Interrupted Procedure Read Type Code # NMI YES Internal Interrupt 1 push Flags NO YES NMI NO YES INTR IF 0 NO 1 TF 1 0 Fetch Next Instruction NO YES 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 0 1 2 3 4 5 6 7 8 9 A-F 10 11 12 13 14 15 16 Function Divide Error Single Step (DEBUG) Nonmaskable Interrupt Pin Breakpoint Arithmetic Overflow Print Screen Key Invalid Opcode Coprocessor Not Present Time Signal Keyboard Service Originally Bus Ops (IBM PC) Video Service Request Equipment Check Memory Size Disk Service Request Serial Port Service Request Miscellaneous Keyboard Service Request Comment Processor - zero or overflow Processor - TF=1 Processor - NMI Signal Processor - Similar to Sing Step Processor - into BIOS - Key Depressed Processor - Invalid Opcode Processor - no FPU BIOS - From RT Chip (AT - IRQ0) BIOS - Gen Service (AT - IRQ1) BIOS - (AT - IRQ2-7) BIOS - Accesses Video Driver BIOS - Diagnostic BIOS - DOS Memory BIOS - Accesses Disk Driver BIOS - Accesses Serial Port Drvr BIOS - Cassette, etc. BIOS - Accesses KB Driver Interrupt Vector Assignments (cont.) Type 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 2F 70-77 Function Parallel Port LPT Service ROM BASIC Reboot Clock Service Control-Break Handler User Timer Service Pointer to Video Parm Table Pointer to Disk Parm Table Pointer to Graphics Fonts Program Terminate Function Call Terminate Address Control-C Handler Fatal Error Handler Absolute Disk Read Absolute Disk Write Terminate Idle Signal Print Spool Hardware Interrupts in AT Bios Comment BIOS - Printer Driver BIOS - BASIC Interpreter in ROM BIOS - Bootstrap BIOS - Time of Day from BIOS BIOS - Keyboard Break BIOS - Timer Tick BIOS - Video Initialization BIOS - Disk Subsystem Init. BIOS - CGA Graphics Fonts DOS - Clear Memory, etc. DOS - Transfer Control DOS - program Terminate handler DOS - For OS Use DOS - Critical Error DOS - Disk Read DOS - Disk Write DOS - TSR Usage DOS - Idle DOS - Cassette, etc. DOS - (AT - IRQs 8-15) AT – IRQ Definitions IBM-AT (Advanced Technology) - Intel 80286 Name NMI IRQ0 IRQ1 IRQ2 IRQ3 IRQ4 IRQ5 IRQ6 IRQ7 IRQ8 IRQ9 IRQ10 IRQ11 IRQ12 IRQ13 IRQ14 IRQ15 Interrupt Vector 02 08 09 0A 0B 0C 0D 0E 0F 70 71 72 73 74 75 76 77 Priority 1 2 3 4 13 14 15 16 17 5 6 7 8 9 10 11 12 Description Memory Parity Error Timer (Intel 8253 Chip 55 ms intervals) Keyboard 8259 PIC Slave or EGA/VGA Vert. Retrace Serial Port (COM2 or COM4) Serial Port (COM1 or COM3) Fixed Disk or LPT2 Request Floppy Disk Driver LPT1 Request CMOS Real-Time Clock (RT Chip) Re-directed to IRQ2 RESERVED RESERVED Mouse or other Math Coprocessor (NPX) Hard Disk RESERVED