일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ALU
- fork()
- 컴퓨터구조
- 스레드
- 교착상태
- mutex
- PYTHON
- 동기화
- BOJ
- 알고리즘
- 기아 상태
- Oracle
- 트랩
- concurrency
- 가상 메모리
- 페이지 부재율
- 세마포어
- 운영체제
- 백준
- 페이지 대치
- 추상화
- 프로세스
- 인터럽트
- Algorithm
- 우선순위
- 스케줄링
- 단편화
- mips
- 부동소수점
- 페이징
- Today
- Total
봉황대 in CS
[Chapter 4. 프로세서] 프로세서 구현에 대한 개요 본문
[Chapter 4. 프로세서] 프로세서 구현에 대한 개요
등 긁는 봉황대 2022. 8. 31. 21:23* 본 글은 '컴퓨터 구조 및 설계: 하드웨어/소프트웨어 인터페이스(Computer Organization and Design: The Hardware/Software Interface) 5th edition'의 내용과 2021학년도 1학기에 수강한 '컴퓨터 구조' 과목 강의 내용을 함께 정리하여 작성하였습니다.
1장에서 컴퓨터 성능은 명령어의 개수, Clock Cycle Time, CPI(명령어 당 Clock Cycle 수)에 의해 결정된다는 것을 알았다.
2장에서는 컴파일러와 명령어 집합 구조(ISA)가 프로그램에 필요한 명령어 개수를 결정하는 것을 배웠다.
하지만 Clock Cycle Time과 CPI는 프로세서의 구현 방법에 따라 결정이 된다.
본 4장에서는 프로세서를 구현하는 데 사용되는 원리와 기법들에 대하여 설명한다.
핵심적인 MIPS 명령어 집합의 부분집합을 구현할 것인데, 그 부분집합은 다음과 같다.
1. 메모리 참조 명령어 lw, sw
2. 산술/논리 명령어 add, sub, AND, OR, slt
3. 분기 명령어 beq와 점프 명령어 j
명령어의 실행
우리는 2장에서 정수형 산술/논리 명령어, 메모리 참조 명령어, 분기 명령어, 점프 명령어 등 핵심적인 MIPS 명령어들을 살펴 보았다.
어떤 명령어든지 명령어 실행 단계의 첫 두 단계는 모두 동일하다.
1. Fetch Instruction
프로그램 카운터(PC)를 프로그램이 저장되어 있는 메모리에 보내어 메모리로부터 명령어를 가져온다.
이후 자동으로 PC = PC +4를 진행하여 PC(Program Counter)가 다음 명령어의 주소를 담고 있게끔 한다.
2. Decode Instruction
읽을 레지스터를 선택하는 명령어 필드를 사용하여 하나 또는 두 개의 레지스터를 읽는다.
워드 적재 명령어는 레지스터 하나만 읽으면 되지만 대부분의 다른 명령어는 레지스터 두 개를 읽는다.
두 단계 이후에는 수행해야 하는 행동들이 명령어의 종류에 따라 달라지는데,
메모리 참고 명령어, 산술/논리 명령어, 분기 명령어들은 필요한 행동들이 대부분 같다.
MIPS 명령어 집합의 단순함과 규칙적인 특성이 많은 종류의 명령어 실행을 비슷하게 만들어 줌으로써 구현을 단순화한다.
즉, 점프 명령어를 제외한 모든 명령어 종류가 레지스터를 읽은 후에 ALU(산술 논리 장치)를 사용하며,
ALU 사용 후에는 명령어 실행을 끝내는 데 필요한 행동들이 명령어 종류에 따라 서로 다르다.
* 메모리 참조 명령어는 주소 계산을 위해 ALU를 사용
→ lw : 데이터를 기록하기 위해 메모리에 접근 / sw : 데이터를 읽기 위해 메모리에 접근 → 데이터를 레지스터에 작성
* 산술/논리 명령어는 연산을 수행하기 위해 ALU를 사용
→ ALU에서 온 데이터를 레지스터에 작성
* 분기 명령어는 비교를 하기 위해 ALU를 사용
→ 비교 결과에 따라 다음 병령어의 주소를 바꿀 수 있고, PC의 값을 4 증가시켜 다음 명령어의 주소를 갖게 할 수 있음
위의 그림을 보면, 서로 다른 근원지에서 나온 데이터가 같은 유닛으로 가는 곳이 몇 군데 있다.
예를 들면 PC에 들어갈 값은 두 덧셈기 중 하나에서 나오고, 레지스터 파일에 쓰일 데이터는 ALU나 데이터 메모리에서 나오며,
ALU의 두 번째 입력은 레지스터나 명령어의 수치 필드에서 나온다.
실제로는 이들 데이터 선을 단순히 그냥 연결할 수는 없고,
다수의 근원지 중 하나를 선택하여 목적지로 보내는 구성 요소를 추가해야 한다.
이 선택은 일반적으로 멀티플렉서(multiplexor)라 불리는 소자를 사용하여 이루어진다.
멀티플렉서는 제어선의 값에 따라 여러 개의 입력 중에서 하나를 선택하며,
제어선은 주로 실행 중인 명령어에서 나오는 정보에 따라 설정된다.
또한, 유닛들은 명령어 종류에 따라 다르게 제어되어야 한다.
제어 유닛(control unit)은 기능 유닛들과 두 멀티플렉서의 제어선 값을 결정하는 데 사용하는 것으로,
명령어를 입력으로 한다.
이들은 ALU가 수행할 연산을 결정하고, 데이터 메모리가 읽기를 할지 쓰기를 할지,
레지스터에 쓰기를 할 것인지 말 것인지를 결정한다.
MIPS 명령어 집합의 규칙성과 단순성은 간단한 디코딩 과정만으로 제어선의 값을 결정할 수 있게 하였다.
'Computer Science & Engineering > Computer Architecture' 카테고리의 다른 글
[Chapter 3. 컴퓨터 연산] 연산에 있어서 겪을 수 있는 오류와 함정들 (0) | 2022.08.30 |
---|---|
[Chapter 3. 컴퓨터 연산] 부동소수점 덧셈과 곱셉 (1) | 2022.08.29 |
[Chapter 3. 컴퓨터 연산] IEEE 754 부동소수점 반올림과 근사 (1) | 2022.08.28 |
[Chapter 3. 컴퓨터 연산] 부동소수점 (0) | 2022.08.27 |
[Chapter 3. 컴퓨터 연산] 나눗셈 (0) | 2022.08.26 |