공부/System Programming & Computer Structure 3

Instruction Pipeline, Hazard 그리고 Branch Prediction

Instruction Pipeline - 명령어 파이프라인(Instruction Pipeline)은 순차적으로 명령어를 읽어 실행하는 프로세서에 적용되는 기술로, 한번에 하나의 명령어만 실행하는 것이 아닌, 하나의 명령어가 실행되는 도중에 다른 명령어 실행을 시작하는 식으로 동시에 여러개의 명령어를 실행하도록 해서 CPU가 프로그램 처리하는 성능을 높혀줄 수 있도록 하드웨어적으로 구현되어 있는 기능 명령어 처리에는 기본적으로 5단계로 이루어져 있다(단, 모든 명령어들이 위 과정을 모두 거치는 것은 아니다) 1. IF: 메모리로부터 Instruction Fetch (메모리로부터 명령어 불러옴) 2. ID: Instruction Decode & register read (명령어 해석, 레지스터 read) 3..

Call Stack, Callee/Callee-saved register

Call Stack 이란? - 실행중인 함수에 관한 정보를 담아 놓은 스택구조의 데이터 구조이다 예시 예를 들어 call_incr() 함수 내부에서 incr() 함수를 호출하는 상황에 대한 assembly과 call stack을 보자 먼저 용어에 대한 정리가 필요하다. A 함수 내부에서 B 함수를 호출할 때, A 함수를 Caller, B 함수를 Callee라고 부른다. 아래 예시에선 call_incr() 함수가 Caller, incr() 함수가 Callee 이다 그냥 단순한 incr 함수 내부 어셈블리다. 아래에서 call stack을 살펴보자 1. 먼저 call_incr() 함수 내부의 지역변수를 v1을 스택에 저장하는 모습이다 2. incr() 함수 호출에 필요한 인자를 레지스터로 넘겨주고 있다. 사..

CPU구조와 내부 구성요소들의 역할

CPU 동작 1. Fetch - 명령어 가져오기 2. Decode - 가져온 명령어 해독하기 3. Execute - 해독한 명령어를 실행 4. Writeback - 실행한 명령대로 (필요하다면)메모리에 쓰기 CPU 구성요소 ALU 실질적인 연산을 하는 장치. Adder(가산기)로 덧셈을, Complementer(보수기)로 뺄셈을, Shifter로 곱셈, 나눗셈을 할 수 있다. Control Unit 입력된 명령어를 Decoder를 이용해서 해독하고, 연산이 필요한 데이터를 메모리로부터 ALU로 옮기거나 역으로 ALU에서 계산된 결과를 메모리로 옮기는 명령을 내린다. 내부에 Bus Interface CPU가 외부에 데이터를 주고 받는 용도의 인터페이스. CPU 외부의 I/O Bus로부터 데이터를 주거나 받..