티스토리 뷰

1. 명령어 사이클과 인터럽트

1) 명령어 사이클

  • 프로그램 속 명령어들의 일정한 주기 반복 실행
  • 인출-실행-인출-실행

2) 인터럽트

  • CPU가 얼른 처리해야 할 다른 작업이 생겼을 때 발생
  • 급한 것부터 처리하는 방식
  • 동기 인터럽트(예외): CPU가 예기치 못한 상황을 접했을 때 발생
    • 폴트, 트랩, 중단, 소프트웨어 인터럽트
  • 비동기 인터럽트(하드웨어 인터럽트): 주로 입출력장치에 의해 발생, 알림과 같은 역할, 막을 수 있거나 없거나
    • 입출력 작업 도중 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트를 사용
    • 입출력 작업 동안 CPU가 다른 일을 할 수 있다.
    • 처리 순서: 입출력장치가 CPU에 인터럽트 요청 신호 => CPU는 실행 사이클 끝나고 명령어 인출 전 항상 인터럽트 여부 확인 => CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부 확인 => 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업 => CPU는 인터럽트 벡터를 참조하여 인터럽터 서비스 루틴을 실행 => 인터럽트 서비스 루틴 실행이 끝나면 백업해 둔 작업을 복구하여 실행 재개
    • 'cpu가 인터럽트를 처리한다': 인터럽트 서비스 루틴을 실행하고 본래 수행하던 작업으로 다시 되돌아온다. +인터럽트의 시작 주소는 인터럽트 벡터를 통해 알 수 있다.
  • 인터럽트 요청 신호: 입출력장치가 CPU에게 보내는 신호
  • 인터럽트 플래그: 인터럽트 요청 신호를 받아들일지 무시할지를 결정하는 비트
  • 인터럽트 서비스 루틴: 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하기 위한 프로그램
  • 인터럽트 벡터: 각각의 인터럽트를 구분하기 위한 정보

2. 빠른 CPU를 위한 설계 기법

1) 클럭

2) 코어: 명령어를 실행하는 부품으로 CPU내에 여러 개가 있을 수 있다.

3) 스레드

  • 하드웨어적 스레드(논리 스레드): 하나의 코어가 동시에 처리하는 명령어 단위, 물리적인 개수가 아닌 논리 프로세스
  • 소프트웨어적 스레드: 하나의 프로그램에서 독립적으로 실행되는 단위

3. 명령어 병렬 처리 기법

1) 명령어 파이프라인: 명령어 인출 => 명령어 해석 => 명령어 실행 => 결과 저장의 단계로 여러 개의 명령어를 겹쳐 실행하는 기법, '각 단계를 동시에 실행할 수 있다!'

  • 파이프라인 위험: 명령어 파이프라인이 성능 향상에 실패하는 경우
    • 데이터 위험: 명령어 간의 의존성에 의해 야기, 모든 명령어를 동시에 처리할 수는 없다.
    • 제어 위험: PC의 갑작스러운 변화
    • 구조 위험: 서로 다른 명령어가 같은 CPU 부품을 쓰려고 할 때
  • 슈퍼스칼라: CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조
  • 비순차적 명령어 처리: 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않은 명령어 병렬 처리 기법(합법적인 새치기)

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함