4장에서는 레지스터를 디자인 해본다!
컴퓨터 구조에 대한 보다 근본적인 이해는 이후에 공부하게 될 프로세스와 쓰레드를 이해하는 데도 큰 도움이 된다.
레지스터를 디자인하는데 있어서 결정해야 할 중요 요소
1. 레지스터를 몇 비트로 구성할 것인가?
2. 몇 개 정도로 레지스터를 구성할 것인가?
3. 레지스터 각각을 무슨 용도로 사용할 것인가?
r4, r5, r6, r7은 특수한 목적으로 사용된다.
명령어는 ir에 저장된다.
ir(instruction register)은 다음 번에 실행하게 될 명령어를 미리 가져다 놓는 용도로 사용된다.
내가 구성하는 명령어의 형태에 따라 컨트롤 유닛의 구조가 결정된다.
컨트롤 유닛은 명령어를 해석하는 일을 맡고 있다.
따라서 명령어 구성 및 해석 방법을 정확히 알고 있어야만 해석이 가능하다.
→ 명령어의 형태에 따라서 컨트롤 유닛의 논리회로가 디자인된다.
레지스터를 바탕으로 명령어를 디자인한다.
CPU 구성형태(레지스터 구성형태)에 따라서 명령어 구조가 달라진다.
→ CPU가 달라지면 이에 따른 명령어 구조가 달라지기 때문에, 어셈블리 언어로 구현된 프로그램은 구조가 다른 CPU로 이식이 불가능하다.
CISC(Complex Instruction Set Computer) 구조 CPU
- 복잡한 명령어 체계를 가진다.
수백 개의 명령어 구성이 가능하다. (다양한 조합이 가능하다.)
수십 줄에 걸쳐 구현해야 하는 기능을 단 한 줄로 완성시킬 수 있다.
필요에 따라 명령어 길이도 유동적이기 때문에 메모리를 효율적으로 사용할 수 있다.
- 명령어 수가 많고, 그 크기가 일정하지 않기 때문에 CPU가 복잡해질 수밖에 없다.
복잡한 구조는 성능 향상에 제한이 따른다.
보다 높은 성능의 CPU를 디자인하기 위해서는 보다 단순한 CPU 구조가 필요하다.
CISC 구조 CPU는 지니고 있는 전체 명령어 중에 주로 사용하는 것은 10% 정도 뿐이다.
어쩌다 한번씩 사용하는 나머지 90%의 명령어를 위해 CPU를 복잡하게 디자인하는 것은 비효율적이라고 생각할 수 있다.
이러한 요구사항을 충족시키는 것이 RISC 구조이다.
RISC(Reduced Instruction Set Computer) 구조 CPU
- 명령어 수를 대폭 줄이고, 명령어 길이를 일정하게 디자인한다.
CISC 구조에 비해 높은 성능을 낼 수 있다.
- 근래 임베디드 환경에서 사용되는 대부분의 CPU가 RISC 구조이다.
RISC는 어떠한 이유 때문에 높은 성능을 내는 데 유리한 것일까?
초당 클럭 수를 높이는 것도 성능을 향상시키는 일이지만, 더 중요한 것은 클럭당 처리할 수 있는 명령어의 개수이다.
RISC는 명령어 길이가 동일하고 명령어를 처리하는 과정이 일정하기 때문에 Pipelining이라는 기법에 의해 클럭당 둘 이상의 명령어 처리가 가능하다.
Direct 모드와 Indirect 모드
(Direct Addressing 모드, Indirect Addressing 모드)
하나의 명령어에 여러 정보를 담다 보니 표현하는 데이터 크기에 제한이 따른다는 문제점이 등장한다.
레지스터는 총 8개이기 때문에 세 개의 비트로 표현해도 문제가 되지 않지만, 메인 메모리의 주소값을 나타내는 부분은 여덟 개 비트로 나타낼 수 있는 최대 값보다 더 큰 수는 나타낼 수 없다.
→ Direct 모드로 메모리를 접근할 경우, 메모리의 모든 영역에 대한 접근이 불가능하다.
할당된 비트 수 안에서 표현 가능한 범위의 메모리 영역만 접근 가능하기 때문이다.
주소값을 명령어에 직접 표현하기 때문에 Direct 모드라고 한다.
Indirect 모드가 등장하면서 메모리 접근 방법이 다양해진다.
Direct 모드를 사용할 때, LOAD 명령어에서는 레지스터에 저장할 데이터가 존재하는 주소를 직접적으로 표현하였다.
Indirect 모드에서는 명령어에서 지정하는 번지에 저장된 값을 주소값으로 참조한다.
LOAD r1, [0x10] 실행 시
0x10번지에서 값을 읽어오는 것이 아니라 0x10번지에 지정된 값을 주소값으로 참조하여 값을 읽어온다.
Indirect 모드 연산과 Direct 모드 연산을 구분 지으려면 이를 표시하기 위한 추가 비트가 필요하다.
정리!
Direct 모드는 명령어에서 지정하는 위치의 메모리를 참조하는 방식이다.
Indirect 모드는 명령어에서 지정하는 위치에 저장된 값을 주소값으로 하여 메모리를 참조하는 방식이다.
'OS > Windows' 카테고리의 다른 글
[OS/Windows] 3. 64비트 기반 프로그래밍 (0) | 2023.09.24 |
---|---|
[OS/Windows] 2. 아스키코드 vs 유니코드 (0) | 2023.08.21 |
[OS/Windows] 1. 컴퓨터 구조에 대한 첫 번째 이야기 (0) | 2023.08.18 |