일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 엔트로피
- 회귀분석
- 자연어처리
- 뇌를 자극하는 알고리즘
- 딥러닝 교차 엔트로피
- 확률분포
- 자료구조 알고리즘
- 자료구조
- 노드
- 신경망
- 파이썬 딥러닝
- 딥러닝
- 인공지능
- 순차 자료구조
- 파라미터
- 오퍼랜드
- 파이썬 날코딩으로 알고 짜는 딥러닝
- 딥러닝 교차엔트로피
- 퍼셉트론
- 컴퓨터구조
- 연결 자료구조
- 단층 퍼셉트론
- DBMS
- DB
- 단층퍼셉트론
- 편미분
- 교차 엔트로피
- lost function
- 선형 리스트
- 리스트
- Today
- Total
YZ ZONE
[컴퓨터구조] 2.2 명령어 실행 본문
▣ 명령어 사이클(instruction cycle)
▪ CPU가 한 개의 명령어를 실행하는 데 필요한 전체 과정
▪ CPU가 프로그램 실행을 시작한 순간부터 전원을 끄거나 회복 불 가능한 오류가 발생하여 중단될 때까지 반복
▣ 두 개의 부사이클(subcycle)들로 분리
▪ 인출 사이클(fetch cycle)
➢CPU가 기억장치로부터 명령어를 읽어오는 단계
▪ 실행 사이클(execution cycle)
➢명령어를 실행하는 단계
[ 명령어 실행에 필요한 CPU 내부 레지스터들 ]
▣ 프로그램 카운터(Program Counter: PC)
▪ 다음에 인출할 명령어의 주소를 가지고 있는 레지스터
▪ 각 명령어가 인출된 후에는 자동적으로 1만큼 증가
▪ 분기(branch) 명령어가 실행되는 경우에는 목적지 주소로 갱신
▣ 누산기(Accumulator: AC)
▪ 데이터를 일시적으로 저장하는 레지스터
▪ 레지스터의 길이는 CPU가 한 번에 처리할 수 있는 데이터 비트 수(단 어 길이)와 동일
▣ 명령어 레지스터(Instruction Register: IR)
▪ 가장 최근에 인출된 명령어 코드가 저장되어 있는 레지스터
▣ 기억장치 주소 레지스터(Memory Address Register: MAR)
▪PC에 저장된 명령어 주소가 시스템 주소 버스로 출력되기 전에 일시적으로 저장되는 주소 레지스터
▣ 기억장치 버퍼 레지스터(Memory Buffer Register: MBR)
▪ 기억장치에 쓰여질 데이터 혹은 기억장치로부터 읽혀진 데이터를 일 시적으로 저장하는 버퍼 레지스터
[ 인출 사이클 ]
▣ 인출 사이클의 마이크로 연산(micro-operation)
- t0 : MAR ← PC
- t1 : MBR ← M[MAR], PC ← PC + 1
- t2 : IR ← MBR
단, t0, t1 및 t2 는 CPU 클록(clock)의 주기
[첫번째 주기] 현재의 PC 내용을 CPU 내부 버스를 통하여 MAR로 전송
[두번째 주기] 그 주소가 지정하는 기억장치 위치로부터 읽혀진 명령어가 데이터 버스를 통 하여 MBR로 적재되며, PC의 내용에 1을 더한다
[세번째 주기] MBR에 있는 명령어 코드가 명령어 레지스터인 IR로 이동
[예] CPU 클록 주파수 = 1GHz (클럭 주기 = 1ns)
→ 인출 사이클 : 1ns x 3 = 3ns 소요
[ 실행 사이클 ]
▣ CPU는 실행 사이클 동안에 명령어 코드를 해독(decode)하 고, 그 결과에 따라 필요한 연산들을 수행
▣ CPU가 수행하는 연산들의 종류
▪데이터 이동 : CPU와 기억장치 간 혹은 I/O장치 간에 데이터를 이동
▪ 데이터 처리 : 데이터에 대하여 산술 혹은 논리 연산을 수행
▪ 데이터 저장 : 연산 결과 데이터 혹은 입력장치로부터 읽어 들인 데이터를 기억장치에 저장
▪ 프로그램 제어 : 프로그램의 실행 순서를 결정
▣ 실행 사이클에서 수행되는 마이크로-연산들은 명령어의 연 산 코드(op code)에 따라 결정됨
[ 기본적인 명령어 형식의 구성 ]
▣ 연산 코드(operation code)
▪ CPU가 수행할 연산을 지정
▣ 오퍼랜드(operand)
▪ 명령어 실행에 필요한 데이터가 저장된 주소(addr)
[사례 1] LOAD addr 명령어
▣ 기억장치에 저장되어 있는 데이터를 CPU 내부 레지스터인 AC로 이동하는 명령어
t0 : MAR ← IR(addr)
t1 : MBR ← M[MAR]
t2 : AC ← MBR
[첫번째 주기] 명령어 레지스터 IR에 있는 명령어의 주소 부분을 MAR로 전송
[두번째 주기] 그 주소가 지정한 기억장소로부터 데이터를 인출하여 MBR로 전송
[세번째 주기] 그 데이터를 AC에 적재
[사례 2] STA addr 명령어
▣ AC 레지스터의 내용을 기억장치에 저장하는 명령어
t0 : MAR ← IR(addr)
t1 : MBR ← AC
t2 : M[MAR] ← MBR
[첫번째 주기] 데이터를 저장할 기억장치의 주소를 MAR로 전송
[두번째 주기] 저장할 데이터를 버퍼 레지스터인 MBR로 이동
[세번째 주기] MBR의 내용을 MAR이 지정하는 기억장소에 저장
[사례 3] ADD addr 명령어
▣ 기억장치에 저장된 데이터를 AC의 내용과 더하고, 그 결과는 다시 AC에 저장하는 명령어
t0 : MAR ← IR(addr)
t1 : MBR ← M[MAR]
t2 : AC ← AC + MBR
[첫번째 주기] 데이터를 저장할 기억장치의 주소를 MAR로 전송
[두번째 주기] 저장할 데이터를 버퍼 레지스터인 MBR로 이동
[세번째 주기] 그 데이터와 AC의 내용을 더하고 결과값을 다시 AC에 저장
[사례 4] JUMP addr 명령어
▣ 오퍼랜드(addr)가 가리키는 위치의 명령어로 실행 순서를 변경하는 분기(branch) 명령어
t0 : PC ← IR(addr)
▪ 명령어의 오퍼랜드(분기할 목적지 주소)를 PC에 저장
▪ 다음 명령어 인출 사이클에서 그 주소의 명령어가 인출되므로, 분기가 발생
[ 어셈블리 프로그램 실행과정의 예 ]
▣ 연산 코드에 임의의 정수 배정
▪LOAD : 1
▪STA :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 번지의 명령어 인출)
[ 인터럽트 사이클(interrupt cycle) ]
인터럽트: 프로그램 실행 중에 CPU의 현재 처리 순서를 중단 시키고 다른 동작을 수행하도록 요구하는 시스템 동작
▣ 외부로부터 인터럽트 요구가 들어오면,
▪CPU는 원래의 프로그램 수행을 중단하고,
▪ 요구된 인터럽트를 위한 서비스 프로그램을 먼저 수행
▣ 인터럽트 서비스 루틴(interrupt service routine: ISR) : 인터 럽트를 처리하기 위하여 수행되는 프로그램 루틴
인터럽트 처리 과정
▣ 인터럽트가 들어왔을 때 CPU는
▪ 어떤 장치가 인터럽트를 요구했는지 확인하고, 해당 ISR을 호출
▪ 서비스가 종료된 다음에는 중단되었던 원래 프로그램의 수행 계속
▣ CPU 인터럽트 처리의 세부 동작(인터럽트 사이클 동안 수행)
1 . 현재의 명령어 실행을 끝낸 즉시, 다음에 실행할 명령어의 주소(PC 의 내용)를 스택(stack)에 저장→일반적으로 스택은 주기억장치의 특정 부분
2. ISR을호출하기위하여그루틴의시작주소를PC에적재. 이때시 작 주소는 인터럽트를 요구한 장치로부터 전송되거나 미리 정해진 값 으로 결정→자세한 사항은 7.4절에서 설명
인터럽트 사이클의 마이크로 연산
t0 : MBR ← PC
t1 : MAR ← SP, PC ← ISR의 시작 주소
t2 : M[MAR] ← MBR
단, SP는 스택 포인터(stack pointer)는 스택의 최상위 주소(top of stack: TOS)를 저장하고 있는 레지스터이며, 저장 후에는 1 감소)
[첫번째 주기] PC의 내용을 MBR로 전송
[두번째 주기] SP의 내용을 MAR로 전송하고, PC의 내용은 인터럽트 서비스 루틴의 시작 주소로 변경
[세번째 주기] MBR에 저장되어 있던 원래 PC의 내용을 스택에 저장
인터럽트 사이클의 마이크로 연산 (예)
▣ 아래 프로그램의 첫 번째 명령어인 LOAD 250 명령어가 실 행되는 동안에 인터럽트가 들어왔으며, 현재 SP = 999이고, 인 터럽트 서비스 루틴의 시작 주소는 650 번지라고 가정
100 LOAD 250
101 ADD 251
102 STA 251
103 JUMP 170
[ 다중 인터럽트(multiple interrupt) ]
▣ 인터럽트 서비스 루틴을 수행하는 동안에 다른 인터럽트 발생
▣ 다중 인터럽트의 처리방법 (두 가지)
1. CPU가 인터럽트 서비스 루틴을 처리하고 있는 도중에는 새로운 인터럽트 요구가 들어오더라도 인터럽트 사이클을 수행하지 않는 방법
➢인터럽트 플래그(interrupt flag) ← 0 : 인터럽트 불가능(interrupt disabled) 상태
➢시스템 운영상 중요한 프로그램이나 도중에 중단할 수 없는 데이터 입출력 동작 등을 위한 인터럽트를 처리하는데 사용
2. 인터럽트의 우선순위를 정하고, 우선순위가 낮은 인터럽트가 처리되고 있는 동안 에 우선순위가 더 높은 인터럽트가 들어온다면, 현재의 인터럽트 서비스 루틴의 수행을 중단하고 새로운 인터럽트를 먼저 처리
다중 인터럽트 처리 방법
▣ 장치 X를 위한 ISR X를 처리하는 도중에 우선 순위가 더 높 은 장치 Y로부터 인터럽트 요구가 들어와서 먼저 처리되는 경우에 대한 제어의 흐름
[ 간접 사이클(indirect cycle) ]
▣ 명령어에 포함되어 있는 주소를 이용하여, 그 명령어 실행에 필요한 데 이터의 주소를 인출하는 사이클
→ 간접 주소지정 방식(indirect addressing mode)에서 사용
▣ 인출 사이클과 실행 사이클 사이에 위치
▣ 간접 사이클에서 수행될 마이크로-연산
t0 : MAR ← IR(addr)
t1 : MBR ← M[MAR]
t2 : IR(addr) ← MBR
▪ 인출된 명령어의 주소 필드 내용을 이용하여 기억장치로부터 데이터의 실제 주소를 인출하여 IR의 주소 필드에 저장
'IT > 컴퓨터구조' 카테고리의 다른 글
[ 컴퓨터구조 ] 2.4 명령어 세트 (0) | 2023.02.05 |
---|---|
[ 컴퓨터구조 ] 2.3 명령어 파이프라이닝 (0) | 2023.02.05 |
[컴퓨터구조] 2.1 CPU의 기본 구조 (0) | 2023.02.04 |
[ 컴퓨터구조 ] 1.4.2 컴퓨터 구조의 발전 과정 (0) | 2023.02.04 |
[ 컴퓨터구조 ] 1.4 컴퓨터 구조의 발전 과정 (1) | 2023.02.04 |