1. 레지스터와 프로그래밍 이해
Instruction Set와 코드
Software: Code+Data
- Software Engineer: Code를 작성하는 사람
- Machine language: CPU는 Instruction code를 만들어놓고 제공함
- 컴파일: 프로그래밍 언어로 작성된 프로그램은 컴파일러를 통해 CPU가 제공하는 Instruction code를 기반으로 변환됨
- 이제부터는 하드웨어를 고려하지 않고 코드레벨에 집중
Operation | Operation Code | Assembly Language |
Load | 10h | LOD |
Store | 11h | STO |
Add | 20h | ADD |
Substract | 21h | SUb |
Instruction Code를 약자로 만들기라도 하면!
LOD A, [1003h]
- LOD는 10h의 Instruction Code를 나타내는 약자
- A는 accumulator를 나타내는 약자
=> 1003h 주소에 있는 데이터를 로드해서 accumulator에 넣으라는 의미
주소도 약자로 만들기
BEGIN: LOD A, [1005h] - 코드 재작성시 주소가 변경되므로 이름을 붙임
- 고급 언어에서는 함수와 변수에 이름을 붙이는 작업이 됨
다시 이해하는 폰 노이만 구조(현 컴퓨터 구조)
- Controller Unit: Program Counter
- ALU: 가산기+논리연산+Register
- 코드만 알맞은 주소에 써넣으면 원하는 대로 동작함!
컴퓨터의 CPU 기본 구조
CPU에서 레지스터라는 저장 공간: 빠른 실행
- PC(Program Counter): 다음 실행할 명령어 주소를 가리키는 레지스터
- IR(Instruction Register): 가장 최근에 인출한 명령어 보관하는 레지스터
- 누산기(ACC, Accumulator): 데이터 일시 보관하는 레지스터
- MAR(Memory Address Register): CPU가 메모리 참조하기 위해 보관하는 데이터 주소를 가진 레지스터
- MBR(Memory Buffer Register): CPU가 메모리로부터 읽거나 저장할 데이터 자체를 보관하는 레지스터
2. CPU 파이프라인 이해
현 컴퓨터의 CPU 기본 실행 구조
1. Instruction Fetch: 실행할 명령어를 메모리에서 읽어 CPU로 가져옴
- PC가 가리키는 주소를 MAR에 보냄
- MAR에 적힌 주소를 메모리에서 읽어서 MBR에 보냄
- MBR에 있는 명령어를 IR에 저장
- 다음 명령어를 가리키도록 PC는 주소값 증가
2. Instruction Decode: 인출한 명령어에 포함된 데이터 가져오고 명령어 해독
3. Instruction Execution: 명령어 실행
- MBR의 데이터와 ACC(Accumulator)의 데이터로 연산 후 ACC에 저장
4. Write Back: 실행 결과를 저장
*CPU보다 방식은 조금씩 다를 지라도, 기본적으로 한 명령은 opcode+argument(operand) 구조
- 3E는 사전에 약속된 load 명령이며, 이 때 바로 이어지는 데이터는 operand
- load 명령에서 operand는 데이터가 있는 주소
=> 데이터를 operand 주소로부터 가져와서 약속된 레지스터에 저장
CPU 성능을 높이는 기법 - 파이프라인
- 파이프라인: 하나의 작업에 필요한 일을 세부적으로 나누어서 동시에 다른 세부작업을 실행하는 기법
하나의 명령을 실행하는 데 필요한 세부작업
- 명령어 인출(IF: Instruction Fetch)
- 명령어 해독(ID: Instruction Decode): 인출된 명령어 해석
- 오퍼랜드 인출(OF: Operand Fetch): 메모리에서 명령어 인출
- 명령어 실행(EX: Excute)
- 하나의 명령 실행 시 5 cycle
=> cycle: 1개 세부작업을 할 때의 시간 단위
-> 1Hz: 1 cycle / sec
-> 최초 인텔 CPU 4004: 108,000 cycles / sec (108 Kilo Hertz, KHz)
-> 108,000 / 5 cycle(한 명령 실행 시간): 초당 21600 명령 실행
*인텔 보안 패치 성능 저하 이슈?
- 파이프라인을 타고 실행이 되다가, 보안에 이슈가 있으면 전체 실행 취소가 됨
-> 그때까지 순서대로 실행되고 있는 다른 코드들도 다 실행 취소가 되며, 그만큼 CPU 사용을 낭비하게 됨
3. CISC/RISC CPU 이해와 컴퓨터 구조 정리
CPU 명령어를 정의하는 전략 - CISC vs RISC
CISC(Complex Instruction Set Computer)
- 하나의 명령어 실행으로 가능한 한 많은 작업 수행(복합 명령어)
-> 수행을 위해 CPU 회로 복잡도 증가, 따라서 한 명령어의 실행 시간 증가
RISC(Reduced Instruction Set Computer)
- 간단한 명령어를 조합해서 실행하면 더 효율적이라고 생각함
CISC의 특성
- 명령어의 포맷이나 길이에 관한 규칙 없음
- 하나 이상의 사이클로 명령어(세부 작업) 실행
- 전체 명령이 얼마나 걸릴지 시간 예측 어려움
CISC/RISC CPU
- 대표적인 CISC: 인텔 CPU
- 대표적인 RISC: ARM(스마트폰, 임베디드, IoT 기기)
메모리
- 메모리가 비싸므로 성능을 높이기 위한 전략
: 비싼 메모리는 CPU 바로 옆에 작게, 느린 메모리는 먼 곳에 크게
- Register: CPU 안에서 데이터보관
- SRAM: L1, L2, L3 캐쉬
-> 최대한 가장 많이 사용하는 메모리의 데이터를 넣어두고, CPU가 메모리 접근 없이 가져다 쓸 수 있게 함
- DRAM: 메모리
- SSD/HDD(하드디스크): 컴퓨터를 꺼도 데이터 보존
DMA(Direct Memory Access)
- CPU가 캐쉬까지 데이터를 가져오는데 관여(Instruction Fetch)
=> 메모리, SSD에서 데이터를 가져오는 것까지 관여하면 CPU 활용도가 낮아짐
- DMA를 만들어 메모리/SSD에서 데이터를 관리하면, CPU는 명령 실행에 좀 더 집중 가능
I/O Devices(Input/Output Devices, 입출력 기기)
- CD ROM, Mouse, Keyboard
- Printer
- Network Card
- Bus를 통해 입출력기기에 데이터를 송수신함