Exceptions and Interrupts

Similar documents
CPS104 Computer Organization and Programming Lecture 17: Interrupts and Exceptions. Interrupts Exceptions and Traps. Visualizing an Interrupt

Instruction Set Architecture of MIPS Processor

MIPS ISA and MIPS Assembly. CS301 Prof. Szajda

MIPS%Assembly% E155%

EE 109 Unit 17 - Exceptions

EE 457 Unit 8. Exceptions What Happens When Things Go Wrong

Instruction Set Architecture part 1 (Introduction) Mehran Rezaei

The Operating System (OS) MicroComputer Engineering OperatingSystem slide 1!

Computer Architecture Instruction Set Architecture part 2. Mehran Rezaei

What are Exceptions? EE 457 Unit 8. Exception Processing. Exception Examples 1. Exceptions What Happens When Things Go Wrong

CISC 662 Graduate Computer Architecture. Lecture 4 - ISA MIPS ISA. In a CPU. (vonneumann) Processor Organization

MIPS Reference Guide

MIPS Instruction Set

Mark Redekopp, All rights reserved. EE 357 Unit 11 MIPS ISA

CSc 256 Midterm 1 Fall 2011

CISC 662 Graduate Computer Architecture. Lecture 4 - ISA

ICS 233 COMPUTER ARCHITECTURE. MIPS Processor Design Multicycle Implementation

ECE 30 Introduction to Computer Engineering

EE 109 Unit 15 Subroutines and Stacks

101 Assembly. ENGR 3410 Computer Architecture Mark L. Chang Fall 2009

Recap from Last Time. CSE 2021: Computer Organization. Levels of Programming. The RISC Philosophy 5/19/2011

5/17/2012. Recap from Last Time. CSE 2021: Computer Organization. The RISC Philosophy. Levels of Programming. Stored Program Computers

ENCM 369 Winter 2013: Reference Material for Midterm #2 page 1 of 5

MIPS R-format Instructions. Representing Instructions. Hexadecimal. R-format Example. MIPS I-format Example. MIPS I-format Instructions

Chapter 2. Computer Abstractions and Technology. Lesson 4: MIPS (cont )

Branch Addressing. Jump Addressing. Target Addressing Example. The University of Adelaide, School of Computer Science 28 September 2015

CSc 256 Midterm (green) Fall 2018

Assembly labs start this week. Don t forget to submit your code at the end of your lab section. Download MARS4_5.jar to your lab PC or laptop.

ICS DEPARTMENT ICS 233 COMPUTER ARCHITECTURE & ASSEMBLY LANGUAGE. Midterm Exam. First Semester (141) Time: 1:00-3:30 PM. Student Name : _KEY

MIPS ISA. 1. Data and Address Size 8-, 16-, 32-, 64-bit 2. Which instructions does the processor support

Run time environment of a MIPS program

SPIM S20: A MIPS R2000 Simulator

Lecture 5: Procedure Calls

MIPS Assembly Language. Today s Lecture

Today s Lecture. MIPS Assembly Language. Review: What Must be Specified? Review: A Program. Review: MIPS Instruction Formats

Computer Science 2500 Computer Organization Rensselaer Polytechnic Institute Spring Topic Notes: MIPS Programming

Chapter 2. Instructions: Language of the Computer. Adapted by Paulo Lopes

The MIPS Instruction Set Architecture

Writing an Embedded Controller

SPIM Instruction Set

A Processor. Kevin Walsh CS 3410, Spring 2010 Computer Science Cornell University. See: P&H Chapter , 4.1-3

EEC 483 Computer Organization

There are different characteristics for exceptions. They are as follows:

We will study the MIPS assembly language as an exemplar of the concept.

Computer Architecture

Outline. A pipelined datapath Pipelined control Data hazards and forwarding Data hazards and stalls Branch (control) hazards Exception

Instruction Set Architecture of. MIPS Processor. MIPS Processor. MIPS Registers (continued) MIPS Registers

1/26/2014. Previously. CSE 2021: Computer Organization. The Load/Store Family (1) Memory Organization. The Load/Store Family (2)

Mips Code Examples Peter Rounce

CS61C : Machine Structures

comp 180 Lecture 10 Outline of Lecture Procedure calls Saving and restoring registers Summary of MIPS instructions

Computer Architecture. The Language of the Machine

Question 0. Do not turn this page until you have received the signal to start. (Please fill out the identification section above) Good Luck!

Introduction to the MIPS. Lecture for CPSC 5155 Edward Bosworth, Ph.D. Computer Science Department Columbus State University

ECE232: Hardware Organization and Design. Computer Organization - Previously covered

Chapter loop: lw $v1, 0($a0) addi $v0, $v0, 1 sw $v1, 0($a1) addi $a0, $a0, 1 addi $a1, $a1, 1 bne $v1, $zero, loop

Processor. Han Wang CS3410, Spring 2012 Computer Science Cornell University. See P&H Chapter , 4.1 4

Lecture 2. Instructions: Language of the Computer (Chapter 2 of the textbook)

CS3350B Computer Architecture MIPS Instruction Representation

MIPS Instruction Set Architecture (2)

Inf2C - Computer Systems Lecture 16 Exceptions and Processor Management

Compiling Techniques

MIPS Instruction Format

Overview. Introduction to the MIPS ISA. MIPS ISA Overview. Overview (2)

MIPS Assembly Language

ECE 2035 Programming HW/SW Systems Fall problems, 7 pages Exam Two 23 October 2013

MIPS R2000 Assembly Language (Procedure Call, Interrupt, IO, Syscall) CS 230

Course Administration

Chapter 2A Instructions: Language of the Computer

CS 61c: Great Ideas in Computer Architecture

ECE Exam I February 19 th, :00 pm 4:25pm

Learning Outcomes. Understanding of the existence of compiler function calling conventions Including details of the MIPS C compiler calling convention

CS 351 Exam 2 Mon. 11/2/2015

Lecture 11: Interrupt and Exception. James C. Hoe Department of ECE Carnegie Mellon University

Previously. CSE 2021: Computer Organization. Memory Organization. The Load/Store Family (1) 5/26/2011. Used to transfer data to/from DRAM.

Learning Outcomes. A high-level understanding of System Calls Mostly from the user s perspective From textbook (section 1.6)

Recitation 5: Recitation 5: MIPS Interrupts and Floating Point

Examples of branch instructions

The Processor: Improving the performance - Control Hazards

ECE 2035 Programming HW/SW Systems Spring problems, 6 pages Exam Two 11 March Your Name (please print) total

CPS311 - COMPUTER ORGANIZATION. A bit of history

Lecture 6 Decision + Shift + I/O

Instructions: Language of the Computer

Architecture II. Computer Systems Laboratory Sungkyunkwan University

Course Administration

M2 Instruction Set Architecture

Reduced Instruction Set Computer (RISC)

Today s topics. MIPS operations and operands. MIPS arithmetic. CS/COE1541: Introduction to Computer Architecture. A Review of MIPS ISA.

Initial Representation Finite State Diagram. Logic Representation Logic Equations

Procedure Calling. Procedure Calling. Register Usage. 25 September CSE2021 Computer Organization

Lec 10: Assembler. Announcements

Flow of Control -- Conditional branch instructions

This section covers the MIPS instruction set.

Computer Science and Engineering 331. Midterm Examination #1. Fall Name: Solutions S.S.#:

ECE 473 Computer Architecture and Organization Lab 4: MIPS Assembly Programming Due: Wednesday, Oct. 19, 2011 (30 points)

RTL Model of a Two-Stage MIPS Processor

ECE 250 / CPS 250 Computer Architecture. Processor Design Datapath and Control

Learning Outcomes. Understanding of the existence of compiler function calling conventions Including details of the MIPS C compiler calling convention

CSc 256 Midterm 2 Fall 2011

Reduced Instruction Set Computer (RISC)

Transcription:

Exceptions and Interrupts Unexpected events (asynchronous interrupt) requiring change in flow of control (different ISAs use the terms differently) exception Arises within the CPU e.g., undefined opcode, overflow, syscall, trap (for monitoring, debugging) interrupt From an external I/O controller Dealing with them without sacrificing performance is hard Chapter 4 The Processor 1

Handling Exceptions In MIPS, exceptions managed by a System Control CoProcessor (CP0) Save PC of offending (or interrupted) instruction In MIPS: Exception Program Counter (EPC) register Save indication of the problem In MIPS: cause register (#13) CP0 registers: 8: memory address of offending memory Access 9: timer (incremented e.g., every 10ms) 11: value compared with timer (to generate timeout exception) 13: cause (exception type) 14: address of instruction that caused exception (EPC) Jump to handler at 0x80000180 Chapter 4 The Processor 2

An Alternate Mechanism Vectored Interrupts Handler address determined by the cause Example: Undefined opcode: 0x8000 0000 Arithmetic overflow: 0x8000 0020 : 0x8000 0040 Instructions (8) either deal with the interrupt, or jump to real handler Chapter 4 The Processor 3

Handler Actions Read cause, and transfer to relevant handler Determine action required If restartable take corrective action use EPC to return to program eret If not re-startable terminate program (cleanup) report error (to OS) using EPC, cause, Chapter 4 The Processor 4

Handling Exceptions (PH5 pp. A.33 - A.40) ~ interrupt levels (6 hardware, 2 software) 1 enables, 0 disables interrupts Status register Cause register (until enabled in status reg) Chapter 4 The Processor 5

System Services (syscall) allocate memory on heap Chapter 4 The Processor 6

memory-mapped I/O I/O instructions vs. via device registers Appear at special memory locations Chapter 4 The Processor 7

Polling vs. Interrupt-Driven I/O Polling: busy loop inspecting status reg. heavy use (waste) of processor time OK in hardware implementation predictable overhead (RT systems) Interrupt-Driven: a-synchronous reaction to device interrupt Chapter 4 The Processor 8

################################## # Example of exception handling # # and memory-mapped I/O # ################################## ################################## # Must enable memory-mapped I/O! # ################################## ######################### # Handler (Kernel) Data # #########################.kdata.align 4 ktemp:.space 16 # allocate 4 consecutive words, word aligned, # with storage uninitialized, for temporary saving # (stack can't be used as it may be corrupt # and even the cause of the exception) hex:.ascii "0123456789ABCDEF" # table for quick hex conversion exc:.ascii "\texception type:" # not.asciiz! spc:.asciiz " " epc:.asciiz "EPC: " status:.asciiz " Status: " cause:.asciiz " Cause: " count:.asciiz " Count: " hw_int:.asciiz "\thardware Interrupt, " hw_int_timer:.asciiz "timer\n" hw_int_keyboard:.asciiz "keyboard input\n" timer:.asciiz "\ttimer expired... and reset\n" key:.ascii "\t\tkey pressed: " # not.asciiz! char:.ascii " " nl:.asciiz "\n" Chapter 4 The Processor 9

###################################### # Handler Implementation (in Kernel) # ###################################### # Overwrites existing exception handler.ktext 0x80000180.set noat # tell assembler not to use $at (assembler temporary) # and hence not to complain when we do move $k0, $at # save $at (used in pseudo-instructions) in $k0 # $k0 and $k1 are reserved for # OS and Exception Handling # programmer should not use them, so not saved.set at # tell assembler it may use $at again la $k1, ktemp # address of temporary save area # in exception handler. The stack can NOT used # as stack pointer/stack content may be corrupt! # Consequence: exception handler NOT re-entrant! sw $a0, 0($k1) # save $a0 as we'll use it sw $a1, 4($k1) # save $a1 as we'll use it sw $v0, 8($k1) # save $v0 as we'll use it sw $ra, 12($k1) # save $ra as we'll use it # coprocessor0 (exception handling) registers # # Name Register Description (*) simulated by MARS # # (*)BadVAddr $8 offending memory reference # Count $9 current timer; incremented every 10ms # Compare $11 interrupt when Count == Compare # (*)Status $12 controls which interrupts are enabled (vs. masked) # (*)Cause $13 exception type, and pending interrupts # (*)EPC $14 PC where exception/interrupt occured Chapter 4 The Processor 10

la $a0, epc # "EPC: " jal print_string # (no print syscall interrupt from exception handler!) mfc0 $a0, $14 jal print_hex # coprocessor0 EPC register: # address of instruction that caused exception la $a0, status # "Status: " jal print_string mfc0 $a0, $12 jal print_hex # coprocessor0 Status register la $a0, cause # "Cause: " jal print_string mfc0 $a0, $13 jal print_hex # coprocessor0 Cause register la $a0, count # "Count: " jal print_string mfc0 $a0, $9 jal print_hex # coprocessor0 timer register la $a0, nl # "\n" jal print_string mfc0 $a0, $13 # coprocessor0 Cause register andi $v0, $a0, 0x7C # Cause bits [6:2] contain Exception type Chapter 4 The Processor 11

# Exception type # # Number Name Description # # 0 Int Hardware interrupt pending # # 4 AdEL Address error on load (or instruction fetch) # 5 AdES Address error on store # 6 IBE Bus error on instruction fetch # 7 DBE Bus error on data load or store # 8 Sys syscall exception (but not in MARS!) # 9 Bp breakpoint (usually used by debuggers) # # 12 Ov Arithmetic overflow la $a0, exc # "\texception type:" jal print_string mfc0 $a0, $13 # coprocessor0 Cause register srl $a0, $a0, 2 # Exception code starts at bit 2 andi $a0, $a0, 0x1F # mask the 5 exception code bits jal print_hex la $a0, nl # "\n" jal print_string # following two lines need to be re-done as $v0 (and $a0) got over-written in print_hex/print_string mfc0 $a0, $13 # coprocessor0 Cause register andi $v0, $a0, 0x7C # Cause bits [6:2] contain Exception type beq $v0, $zero, e_int # handle hardware interrupt (exception type 0) Chapter 4 The Processor 12

# Program exception (i.e., not hardware interrupt) # here: know what the cause was and could deal with it #... # for example, when cause was 4 (AdEL) or 5(AdES) # print offending memory address from coprocessor0 register $8 (BadVAddr) #... # skip offending instruction mfc0 $v0, $14 # EPC: address of instruction that caused exception addiu $v0, $v0, 4 # next sequential instruction (caveat: delayed branch) mtc0 $v0, $14 # update EPC (needed for "exception return" eret) j e_int_end Chapter 4 The Processor 13

e_int: # hardware (HW) interrupt handler la $a0, hw_int # "\thardware Interrupt, " jal print_string mfc0 $v0, $13 # Cause andi $v0, $v0, 0x8000 # mask (select) pending interrupt bit 15 beq $v0, $zero, e_int_timer_end # not timer interrupt # handle timer interrupt # note: timer not supported by MARS (but it is by SPIM)! mfc0 $a0, $13 # coprocessor0 Cause register xor $a0, $a0, $v0 # set pending interrupt bit 15 to 0 mtc0 $a0, $13 # reset Cause (removing pending HW interrupt) la jal $a0, hw_int_timer # "timer\n" print_string # reset timer to 0 mtc0 $zero, $9 # set Count la $a0, timer # timer reset notice jal print_string j e_int_end Chapter 4 The Processor 14

e_int_timer_end: mfc0 $v0, $13 # Cause andi $v0, $v0, 0x0100 # mask (select) pending interrupt bit 8 beq $v0, $zero, e_int_keyrecv_end # not keyboard interrupt # handle keyboard receive interrupt mfc0 $a0, $13 # coprocessor0 Cause register xor $a0, $a0, $v0 # set pending interrupt bit 8 to 0 mtc0 $a0, $13 # reset Cause (removing pending HW interrupt) la jal $a0, hw_int_keyboard # "keyboard input\n" print_string li $a0, 0xFFFF0004 # Receiver data address (interrupt based, # so don't need to check Receiver control) lw $v0, 0($a0) # Receiver data la $a0, char # space for one character sb $v0, 0($a0) # store Received data (key pressed) # note: accessing data re-sets Ready bit # in Receiver control la $a0, key # key pressed message/character jal print_string Chapter 4 The Processor 15

e_int_keyrecv_end: e_int_end: # restore saved values la $k1, ktemp lw $a0, 0($k1) lw $a1, 4($k1) lw $v0, 8($k1) lw $ra, 12($k1).set noat # tell assembler not to use $at # and hence not to complain when we do move $at, $k0 # restore $at.set at # tell assembler it may use $at again mtc0 $zero, $13# re-set Cause, including all pending interrupts mfc0 $k0, $12 # Status ori $k0, 0x01 # re-enable interrupts mtc0 $k0, $12 # update Status eret # return from exception, # PC <- EPC after key pressed, continue where left off # PC <- EPC+4 after skipping offending instruction Chapter 4 The Processor 16

############################### # print_string implementation # ############################### print_string: # $a0: address of zero-terminated ascii string (.asciiz) to print j ps_cond # jump to code to # * load next character to print # * check if end of string (loaded char is 0x00) ps_loop: lw $v0, 0xFFFF0008 # Transmitter control andi $v0, $v0, 0x01 # mask (select) Ready bit beq $v0, $zero, ps_loop # (bus) loop until ready to print sw $a1, 0xFFFF000C # data (byte) to print into Transmitter data ps_cond: lbu $a1, ($a0) # load character to print addi $a0, $a0, 1 # increment char pointer bne $a1, $zero, ps_loop # loop as long as not EndOfString (0x00) found jr $ra # return from subroutine Chapter 4 The Processor 17

############################ # print_hex implementation # ############################ print_hex: # $a0: word (32 bits long) to print la $a1, hex # address of hex conversion table li $v0, 28 # printing a word (32 bits) # per nibble (4 bits = 1 hex character) # from leftmost to rightmost nibble ph_loop: lw $k1, 0xFFFF0008 # Transmitter control andi $k1, $k1, 0x01 # mask (select only the) Ready bit beq $k1, $zero, ph_loop # (busy) loop until ready to print srlv $k1, $a0, $v0 # shift right logical variable (in reg) amount andi $k1, $k1, 0x0f # mask bits [3:0] add $k1, $a1, $k1 # use $k1 as index in hex conversion table lbu $k1, ($k1) # load that character into $k1 sw $k1, 0xFFFF000C # data (byte) to print into Transmitter data addi $v0, $v0, -4 # next nibble (4 bits = 1 hex character) bge $v0, $zero, ph_loop # loop until nothing left jr $ra # return from subroutine Chapter 4 The Processor 18

####################### # Program Entry Point # ####################### main:.text.globl main li $a0, 0xFFFF0000 # Receiver control lw $t0, 0($a0) ori $t0, 0x02 # set bit 1 to enable input interrupts # such a-synchronous I/O (handling of keyboard input in this case) # this is much more efficient than the "polling" we use for output # In particular, it does not "block" the main program if there is no input sw $t0, 0($a0) # update Receiver control mfc0 $t0, $12 # load coprocessor0 Status register ori $t0, 0x01 # set interrupt enable bit mtc0 $t0, $12 # move into Status register li $t0, 100 mtc0 $t0, $11 # coprocessor0 Compare register # value is compared against timer # interrupt when Compare ($11) and Count ($9) match mtc0 $zero, $9 # Count = 0 # Count (timer) will be incremented every 10ms # hence, a timeout interrupt will occur after # 100 x 10ms = 1s # This should catch an infinite loop... #... 1s = 1ns x 10^9 Chapter 4 The Processor 19

# infinite loop # divide by zero div $t0, $t0, $zero # arithmetic overflow li $t1, 0x7FFFFFFF addi $t1, $t1, 1 # non-existing memory address -- address error store sw $t2, 124($zero) # non-aligned address -- address error load lw $t2, 125($zero) # illegal instruction #.word 0xDEADBEEF # hexspeak, "magic" value on some platforms :) forever: nop nop j forever Chapter 4 The Processor 20