: 가상의 컴퓨터를 만들어서 이를 이해하는 방식으로 진행된다.
1. 컴퓨터 구조의 접근방법
: 컴퓨터 구조에 대한 근본적인 이해는, 이후 공부하게될 프로세스와 쓰레드를 이해하는데 큰 도움이 된다.
* 컴퓨터를 디자인하자
: CPU를 디자인해보자
: ALU와 Control Unit은 이미 있다고 가정하고 Register Set만을 대상으로 디자인해보자.
: 시스템 프로그래머 입장에서는 CPU를 보는 관점이 대부분 Register에 집중되기 때문이다.
* 레지스터를 디자인하자
: 중요요소
1. 레지스터를 몇 비트로 구성할 것인가?
2. 몇 개 정도로 레지스터를 구성할 것인가?
3. 레지스터 각각을 무슨 용도로 사용할 것인가?
- 1. 16bit로 구성 (64bit는 불편)
- 2. 8개로 제한 (이름은 r0 ~ r7로 한다)
- 3. 그림참고
: 위 레지스터 구조는 ARM코어를 참조하였다. 다른 CPU보다 하드웨어 구성과 명령어 구조가 간단하기 때문인데, 이런 이유로 전력소비가 작아 핸드폰에 많이 사용된다.
: ir 은 다음번에 실행하게 될 명령어를 미리 가져다 놓는 용도로 사용된다.
* 명령어 구조 및 명령어를 디자인하자
: CPU 구성형태(register 구성형태)에 따라서 명령어 구조가 달라진다.
: 레지스터 길이가 16bit이므로 명령어 길이도 16bit로 정하자.
: 16bit모두를 명령어로 쓴다면, 총 65536 종류의 명령이 가능하겠지만, 비효율 적이므로 16bit의 부분부분을 나누어 다양한 용도로 사용한다면 더 효율적인 프로그래밍이 가능할 것이다.
- 연산자 : 8종류 면 충분하다
- 저장소 : 레지스터가 8개 이므로 3bit가 적절하다
- 피연산자1,2 : 임의로 결정했다. (피연산자가 나타내는 것이 숫자인지, register 주소값인지 모르므로, 왼쪽 첫 bit에 따라 의미를 달리 두자.)
- 예약 : 나중에 어떻게 사용할지 모르니, 예비로 두었다.
: 이처럼 명령어의 형태에 따라서 Control Unit의 논리회로가 결정되어진다.
: 실제 상에서는 명령어의 형태에 일정 부분 제약을 두기도 한다.
: 모든 피연산자에는 메인 메모리의 주소값이 올 수 없다. (숫자와 레지스터만 가능)
: CPU의 종합적인 측면(성능, 비용...)이 고려되는 가운데서 제약사항이 정해진다.
* RISC vs SISC
: CISC(Complex Instruction Set Computer)
: 복잡한 명령어 체계를 가지는 컴퓨터
: 인털도 16bit CPU까지는 이와 같은 구조를 가지고 있엇다
: 명령어수가 수백개일 정도로 많고, 그 크기가 일정치 않아 복잡하다
: 이는 성능향상에 제한을 두는 부정적인 영향을 끼친다.
: RISC
: CISC구조에서 CPU가 실제로 사용하는 명령어가 10%도 안된다는 것에 착안해서 만들어진 구조이다.
: 명령어를 대폭 줄이고 명령어 길이를 일정하게 디자인하였다
: 인텔뿐만아니라 임베디드 CPU의 대부분이 이 구조를 취한다.
: 명령어 길이가 일정하여 클럭당 2개 이상의 명령어도 처리할 수 있다.(Pipelining 기법) - 가장 큰 장점!!
2. LOAD & STORE 명령어 디자인
: LOAD와 STORE의 기능과 관련된 명령어 디자인을 해보자
* LOAD & STORE 명령어의 필요성
: 메인 메모리에 존재하는 데이터를 레지스터로 이동하여 처리하고 반환해야한다.
3. Direct 모드와 Indirect 모드
* Direct 모드의 문제점과 Indirect 모드의 제안
: 하나의 명령어에 여러 정보를 담다 보니 표현하는 데이터 크기에 제한이 따른다는 문제점이 발생하였다.
: 여태까지 source 부분이 메모리 주소값을 직접 나타내었는데 여기서 사용할 수 있는 주소의 길이제한이 발생한다.
: 이를 Direct모드라고 부르는 메모리 접근방법의 한계이다.
: 이를 극복하기 위해 Indirect모드가 나타났다.
* Indirect 모드의 이해
: 해당 레지스터에 저장된 주소값을 참조해서 값을 읽어오는 것.
|
'독후감 > 컴퓨터구조+운영체제+시스템프로그래밍' 카테고리의 다른 글
6. 커널 오브젝트와 오브젝트 핸들 (0) | 2017.03.06 |
---|---|
5. 프로세스의 생성과 소멸 (0) | 2017.03.03 |
3. 64비트 기반 프로그래밍 (0) | 2017.03.02 |
2. 아스키코드 vs 유니코드 (0) | 2017.03.02 |
1. 컴퓨터 구조 - Part 1 컴퓨터 구조와 프로그래밍 모델 (0) | 2017.03.02 |