https://blog.naver.com/ds4ouj/222566933623
위 글을 공부하여 쓴 글 입니다. 자세한 내용은 위 블로그의 CPU의 구조와 기능 시리즈 글을 참고해주세요.
CPU 의 동작
CPU는 기억장치에 저장되어 있는 프로그램 코드인 명령어를 실행함으로써 프로그램을 수행합니다.
CPU의 동작은 다음과 같습니다.
- 명령어 인출
기억 장치로 부터 명령어를 읽어옵니다. - 명령어 해독
수행해야할 동작들을 결정하기 위해 1에서 읽어온 명령어를 해독합니다. - 데이터 인출
명령어 실행을 위하여 데이터가 필요한 경우 기억장치 혹은 I/O 장치로부터 그 데이터를 읽어옵니다. - 데이터 처리
데이터에 대한 산술적 혹은 논리적 연산을 수행합니다. - 데이터 저장
수행한 결과를 저장합니다.
위 5가지 동작들 중 1,2 동작은 모든 명령어들에 대하여 공통적으로 수행되지만, 3 ~ 5 까지의 동작은 경우에 따라 필요한 경우에만 수행됩니다.
CPU의 기본 구조
CPU는 산술논리연산장치(ALU) 와 레지스터 세트, 제어 유니트로 구성됩니다.
ALU
각종 산술 연산들과 논리 연산들을 수행하는 하드웨어 모듈입니다.
산술연산(덧셈,뺄셈,곱셈,나눗셈)과 논리연산(AND,OR,NOT)을 수행합니다.
레지스터
CPU 내부에 위치한 기억장치, 액세스 속도가 컴퓨터의 기억장치들 중 가장 빠릅니다.
- 범용 레지스터: 연산에 필요한 데이터나 연산 결과를 임시로 저장
- 특수목적 레지스터: 특별한 용도로 사용하는 레지스터
제어유니트
명령어를 순서대로 실행할 수 있도록 제어하는 장치입니다.
주기억 장치에서 프로그램 명령어를 꺼내 해독하고, 그 결과에 따라 명령어 실행에 필요한 제어 신호를 기억장치, 연산장치, 입출력 장치로 보냅니다.
또한 이들 장치가 보낸 신호를 받아서 다음에 수행할 동작을 결정합니다.
CPU 내부버스(CPU internal bus)
CPU 내부버스는 데이터와 제어 신호들의 전송 통로로 ALU와 레지스터들 간의 데이터 이동을 위한 데이터 선들과 주소선들, 그리고 제어 유니트로부터 발생되는 제어 신호들을 전송하는 선들로 구성됩니다.
이러한 내부 버스 선들은 외부의 시스템 버스와는 직접 연결되지 않습니다.
특수한 목적을 가지는 레지스터
프로그램 카운터 (Program Counter, PC)
다음에 수행할 명령어의 주소를 저장합니다. 명령어가 인출된 후에는 다음 명령어를 인출하기위해 자동으로 +1 이 증가합니다.
누산기 (Accumulator, AC)
연산 결과를 임시 저장합니다.
명령어 레지스터 (Instruction Register, IR)
최근에 인출된 명령어가 저장되어 있는 레지스터 입니다.
메모리 주소 레지스터 (Memory Address Register, MAR)
읽기와 쓰기 연산을 수행할 주기억장치 주소를 저장합니다.
메모리 버퍼 레지스터 (Memory Buffer Register, MAR)
주기억장치에서 읽어온 데이터 or 저장할 데이터를 임시 저장합니다.
명령어 세트
CPU가 실행할 명령어의 집합
연산 코드(Operation Code) + 피연산자(Operand)로 이루어집니다.
- 연산 코드: 실행할 연산
- 피연산자: 필요한 데이터 or 저장 위치
명령어 사이클: CPU가 한개의 명령어를 실행하는데 필요한 전체 과정.
명령어 사이클은 인출/실행/간접/인터럽트 사이클로 나누어집니다.
- 명령어 인출 : 기억 장치로 부터 명령어를 읽어 오는 단계
- 명령어 실행 : 읽어온 명령어를 실행하는 단계
인출 사이클
인출 사이클에서 가장 중요한 부분은 PC(프로그램 카운터) 값의 증가 입니다.
다음 인출 사이클의 명령어 처리 과정을 살펴보겠습니다.
- PC 내용을 CPU 내부 버스를 통하여 MAR 로 보냅니다.
- 저장된 내용을 토대로 주기억장치의 해당 주소에서 명령어 인출합니다.
- 인출한 명령어를 MBR에 저장합니다.
- 다음 명령어를 인출하기 위해 PC 값을 증가시킵니다.
- MBR 에 저장되어 있는 명령어 코드를 IR 로 이동시킵니다.
실행 사이클
인출한 이후, 명령어를 실행하는 과정입니다.
- 명령어 레지스터 IR에 적재된 명령어의 오퍼랜드 주소 (addr)를 MAR을 통하여 기억장치로 보낸다.
- MAR 주소가 지정하는 기억장소로 부터 데이터를 인출 하여 MBR에 저장한다.
- MBR에 저장된 데이터를 AC에 적재한다.
- 명령어 레지스터 IR에 적재된 명령어의 오퍼랜드 주소 (addr)를 MAR을 통하여 기억장치로 보낸다.
- MAR 주소가 지정하는 기억장소로 부터 데이터를 인출 하여 MBR에 저장한다.
- MBR에 적재한 데이터와 AC 레지스터의 내용을 더하고 그 결과값을 AC 레지스터에 저장합니다.
인터럽트 사이클
인터럽트: 명령어 실행을 중단하고 다른 프로그램을 처리하도록 하는 메커니즘
인터럽트 서비스 루틴(ISR): CPU가 어떤 프로그램을 수행하는 도중에 외부로 부터 인터럽트 요구가 들어오게 되면, CPU는 원래 프로그램 수행을 중단하고 요구된 인터럽트를 처리하게 하는 프로그램
- PC의 내용이 MBR 로 보내집니다.
- PC 에 ISR의 시작주소를 넣습니다. SP의 주소를 MAR에 넣어줍니다
- MBR에 저장되어있는 기존의 PC 값을 M[MAR] SP 에 넣어줍니다. SP 는 사용중이기 때문에 SP - 1를 합니다. (제일 마지막 번지를 사용했기 때문에 +1이 아닌 -1을 해줍니다.)
간접 사이클
어떠한 명령어의 경우에는 포함하고 있는 주소가 데이터의 주소가 아니라 데이터가 저장된 기억장소의 주소를 가르킬 수 있습니다.
이러한 경우 그 데이터의 실제 주소를 기억장치로 부터 읽어오는 과정이 필요합니다.
- 현재 명령어로 부터 받은 기억장치의 주소를 MAR에 저장시킵니다.
- 기억 장치의 MAR번지에 있는 값을 MBR에 저장시킵니다.
- MBR의 값을 IR에 저장시킵니다.
이렇게 간접사이클을 끝내게 되면 정상적으로 실행 사이클을 수행할 수 있게 됩니다.
참고자료
1. Tech-interview-for-developer
2.https://m.blog.naver.com/jaeyoon_95/221054395900
'CS > 컴퓨터구조' 카테고리의 다른 글
명령어 집합 구조, CISC 와 RISC (0) | 2023.04.05 |
---|---|
패리티 비트 & 해밍 코드 (0) | 2023.04.04 |
컴퓨터 시스템의 개요 (0) | 2023.04.03 |
캐시 메모리의 쓰기 정책 / 버퍼와 캐시의 차이 (0) | 2023.04.02 |
캐시 메모리 (2) | 2023.04.01 |