티스토리 뷰
1. 명령어 사이클과 인터럽트
1) 명령어 사이클
- 프로그램 속 명령어들의 일정한 주기 반복 실행
- 인출-실행-인출-실행
2) 인터럽트
- CPU가 얼른 처리해야 할 다른 작업이 생겼을 때 발생
- 급한 것부터 처리하는 방식
- 동기 인터럽트(예외): CPU가 예기치 못한 상황을 접했을 때 발생
- 폴트, 트랩, 중단, 소프트웨어 인터럽트
- 비동기 인터럽트(하드웨어 인터럽트): 주로 입출력장치에 의해 발생, 알림과 같은 역할, 막을 수 있거나 없거나
- 입출력 작업 도중 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트를 사용
- 입출력 작업 동안 CPU가 다른 일을 할 수 있다.
- 처리 순서: 입출력장치가 CPU에 인터럽트 요청 신호 => CPU는 실행 사이클 끝나고 명령어 인출 전 항상 인터럽트 여부 확인 => CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부 확인 => 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업 => CPU는 인터럽트 벡터를 참조하여 인터럽터 서비스 루틴을 실행 => 인터럽트 서비스 루틴 실행이 끝나면 백업해 둔 작업을 복구하여 실행 재개
- 'cpu가 인터럽트를 처리한다': 인터럽트 서비스 루틴을 실행하고 본래 수행하던 작업으로 다시 되돌아온다. +인터럽트의 시작 주소는 인터럽트 벡터를 통해 알 수 있다.
- 인터럽트 요청 신호: 입출력장치가 CPU에게 보내는 신호
- 인터럽트 플래그: 인터럽트 요청 신호를 받아들일지 무시할지를 결정하는 비트
- 인터럽트 서비스 루틴: 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하기 위한 프로그램
- 인터럽트 벡터: 각각의 인터럽트를 구분하기 위한 정보
2. 빠른 CPU를 위한 설계 기법
1) 클럭
2) 코어: 명령어를 실행하는 부품으로 CPU내에 여러 개가 있을 수 있다.
3) 스레드
- 하드웨어적 스레드(논리 스레드): 하나의 코어가 동시에 처리하는 명령어 단위, 물리적인 개수가 아닌 논리 프로세스
- 소프트웨어적 스레드: 하나의 프로그램에서 독립적으로 실행되는 단위
3. 명령어 병렬 처리 기법
1) 명령어 파이프라인: 명령어 인출 => 명령어 해석 => 명령어 실행 => 결과 저장의 단계로 여러 개의 명령어를 겹쳐 실행하는 기법, '각 단계를 동시에 실행할 수 있다!'
- 파이프라인 위험: 명령어 파이프라인이 성능 향상에 실패하는 경우
- 데이터 위험: 명령어 간의 의존성에 의해 야기, 모든 명령어를 동시에 처리할 수는 없다.
- 제어 위험: PC의 갑작스러운 변화
- 구조 위험: 서로 다른 명령어가 같은 CPU 부품을 쓰려고 할 때
- 슈퍼스칼라: CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조
- 비순차적 명령어 처리: 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않은 명령어 병렬 처리 기법(합법적인 새치기)
'CS' 카테고리의 다른 글
#5. 컴퓨터구조 + 운영체제 17강 ~ 19강 (0) | 2022.12.13 |
---|---|
#4. 컴퓨터구조 + 운영체제 14강 ~ 16강 (0) | 2022.12.12 |
#2. 컴퓨터구조 + 운영체제 6강 ~ 10강 (2) | 2022.12.08 |
#1. 컴퓨터 구조 + 운영체제 0강~3강 (0) | 2022.12.07 |