컴퓨터 시스템 개요 Day7 ✍

손수빈·2023년 7월 31일
0

컴퓨터 구조론

목록 보기
7/8

2.2.2 실행 사이클

  • CPU는 실행 사이클 동안에 명령어 코드를 해독(decode)하고, 그 결과에 따라 필요한 연산들을 수행

  • CPU가 수행하는 연산들의 종류
    -데이터 이동: CPU와 기억장치 간 혹은 I/O장치 간에 데이터를 이동
    -데이터 처리: 데이터에 대하여 산술 혹은 논리 연산을 수행
    -데이터 저장: 연산 결과 데이터 혹은 입력장치로부터 읽어 들인 데이터를 기억장치에 저장
    -프로그램 제어: 프로그램의 실행 순서를 결정

  • 실행 사이클에서 수행되는 마이크로-연산들은 명령어의 연산 코드(op code)에 따라 결정됨

기본적인 명령어 형식의 구성

  • 연산 코드(operation code)
    -CPU가 수행할 연산을 지정

  • 오퍼랜드(operand)
    -명령어 실행에 필요한 데이터가 저장된 주소(addr)

  • 사례1) LOAD addr 명령어
    -기억장치에 저장되어 있는 데이터를 CPU 내부 레지스터인 AC로 이동하는 명령어
    t0t_0 : MAR<IR(addr)MAR <- IR(addr)
    t1:MBR<M[MAR]t_1 : MBR <- M[MAR]
    t2:AC<MBRt_2 : AC <- MBR
    [첫번째 주기] 명령어 레지스터 IR에 있는 명령어의 주소 부분을 MAR로 전송
    [두번째 주기] 그 주소가 지정한 기억장소로부터 데이터를 인출하여 MBR로 전송
    [세번째] 그 데이터를 AC에 적재

  • 사례2) STA addr 명령어
    -AC 레지스터의 내용을 기억장치에 저장하는 명령어
    t0:MAR<IR(addr)t_0 : MAR <- IR(addr)
    t1:MBR<ACt_1 : MBR <- AC
    t2:M[MAR]<MBRt_2 : M[MAR] <- MBR
    [첫번째 주기] 데이터를 저장할 기억장치의 주소를 MAR로 전송
    [두번째 주기] 저장할 데이터를 버퍼 레지스터인 MBR로 이동
    [세번째 주기] MBR의 내용을 MAR이 지정하는 기억장소에 저장

  • 사례3) ADD addr 명령어
    -기억 장치에 저장된 데이터를 AC의 내용과 더하고, 그 결과는 다시 AC에 저장하는 명령어
    t0:MAR<IR(addr)t_0 : MAR <- IR(addr)
    t1:MBR<M[MAR]t_1 : MBR <- M[MAR]
    t2:AC<AC+MBRt_2 : AC <- AC + MBR
    [첫번째 주기] 데이터를 저장할 기억장치의 주소를 MAR로 전송
    [두번째 주기] 저장할 데이터를 버퍼 레지스터인 MBR로 이동
    [세번째 주기] 그 데이터와 AC의 내용을 더하고 결과값을 다시 AC에 저장

  • 사례4) JUMP addr 명령어
    -오퍼랜드(addr)가 가리키는 위치의 명령어로 실행 순서를 변경하는 분기(branch) 명령어
    t0:PC<IR(addr)t_0 : PC <- IR(addr)

    -명령어의 오퍼랜드(분기할 목적지 주소)를 PC에 저장
    -다음 명령어 인출 사이클에서 그 주소의 명령어가 인출되므로, 분기가 발생

어셈블리 프로그램 실행과정의 예

  • 연산 코드에 임의의 정수 배정
    -LOAD :1
    -STORE : 2
    -ADD : 5
    -JUMP : 8

어셈블리 프로그램의 예

  • 100번지의 첫 번째 명령어 코드가 인출되어 IR에 저장
  • 250 번지의 데이터를 AC로 이동
  • PC = PC + 1 = 101
  • 두 번째 명령어가 101번지로부터 인출되어 IR에 저장
  • AC의 내용과 251번지의 내용을 더하고, 결과를 AC에 저장
  • PC의 내용은 102로 증가
  • 세번째 명령어가 102번지로부터 인출되어 IR에 저장
  • AC의 내용이 251번지에 저장
  • PC의 내용은 103으로 증가
  • 네 번째 명령어가 103번지로부터 인출되어 IR에 저장
  • 분기될 목적지 주소, 즉 IR의 하위 부분(170)이 PC로 적재(다음 명령어 인출 사이클에서는 170번지의 명령어 인출)

2.2.3 인터럽트 사이클(Interrupt Cycle)

  • 인터럽트: 프로그램 실행 중에 CPU의 현재 처리 순서를 중단시키고 다른 동작을 수행하도록 요구하는 시스템 동작

  • 외부로부터 인터럽트 요구가 들어오면,
    -CPU는 원래의 프로그램 수행을 중단하고,
    -요구된 인터럽트를 위한 서비스 프로그램을 먼저 수행

  • 인터럽트 서비스 루틴(Interrupt Service Routine: ISR):인터럽트를 처리하기 위하여 수행되는 프로그램 루틴

인터럽트 처리 과정

  • 인터럽트가 들어왔을 때 CPU는
    -어떤 장치가 인터럽트를 요구했는지 확인하고, 해당 ISR을 호출
    -서비스가 종료된 다음에는 중단되었던 원래 프로그램의 수행 계속

  • CPU 인터럽트 처리의 세부 동작
    1) 현재의 명령어 실행을 끝낸 즉시, 다음에 실행할 명령어의 주소(PC의 내용)를 스택(stack)에 저장 -> 일반적으로 스택은 주기억 장치의 특정 부분
    2) ISR을 호출하기 위하여 그 루틴의 시작 주소를 PC에 적재. 이때 시작 주소는 인터럽트를 요구한 장치로부터 전송되거나 미리 정해진 값으로 결정

다중 인터럽트(Multiple Interrupt)

  • 인터럽트 서비스 루틴을 수행하는 동안에 다른 인터럽트 발생
  • 다중 인터럽트의 처리방법(두 가지)
    1) CPU가 인터럽트 서비스 루틴을 처리하고 있는 도중에는 새로운 인터럽트 요구가 들어오더라도 인터럽트 사이클을 수행하지 않는 방법

    -인터럽트 플래그(Interrupt Flag) <- 0: 인터럽트 불가능(Interrupt Disabled)상태
    -시스템 운영상 중요한 프로그램이나 도중에 중단할 수 없는 데이터 입출력 동작 등을 위한 인터럽트를 처리하는데 사용

    2) 인터럽트의 우선순위를 정하고, 우선순위가 낮은 인터럽트가 처리되고 있는 동안에 우선순위가 더 높은 인터럽트가 들어온다면, 현재의 인터럽트 서비스 루틴의 수행을 중단하고 새로운 인터럽트를 처리

다중 인터럽트 처리 방법

  • 장치 X를 위한 ISR X를 처리하는 도중에 우선 순위가 더 높은 장치 Y로부터 인터럽트 요구가 들어와서 먼저 처리되는 경우에 대한 제어의 흐름
profile
기록하는 개발자를 목표로

0개의 댓글

관련 채용 정보