시스템 프로그래밍 4장 컴퓨터 구조에 대한 두 번째 이야기

김주현·2021년 9월 27일
0

시스템 프로그래밍

목록 보기
4/21

컴퓨터 구조의 접근 방법

  • 컴퓨터를 디자인 하자

프로그래머 관점
1. 컴퓨터 구조를 잘 아는 프로그래머도 컴퓨터 디자인에 참여
2. 컴퓨터 디자인은 레지스터와 명령어 디자인

CPU 전부를 논리-게이트 단위로 디자인하는 것이 아닌 레지스터만을 디자인 대상으로 삼아 디자인

그 이유는 CPU 디자인에 있어서 레지스터에 대한 이해가 아주중요하기 때문

  • 레지스터를 디자인 하자

레지스터를 디자인하는데 있어서 결정해야 할 중요 요소

  1. 레지스터를 몇 비트로 구성할 것인가?
  2. 몇 개 정도로 레지스터를 구성할 것인가?
  3. 레지스터 각각을 무슨 용도로 사용할 것인가?

n비트 명령어 시스템에서는 한명령어의 길이가 n비트 이 명령을 저장하기위해선 레지스터도 n비트로 구성하는게 효율적

만약 구성하고자 하는 컴퓨터가 64비트 컴퓨터라면 레지스터도 64비트로 디자인해야겠지만 표현하기힘듬으로 16비트로 디자인 하고 갯수는 8개로 제한

그리고 r4,r5,r6,r7에는 각각 ir,sp,lr,pc라는 이름을 지어줌 (각각 특수한 목적으로 사용하기위함)

레지스터에 용도를 정해주면 명령어가 단순해지고, 속도가 향상됨

  • 명령어 구조 및 명령어를 디자인하자

"레지스터를 디자인하였으니, 이를 바탕으로 명령어를 디자인할 차례이다."

CPU(레지스터)의 구성형태에 따라서 명령어 구조가 달라짐

16비트로 레지스터 크기를 결정하였기 때문에 명령어 길이도 16비트로 구성

16비트 모두룰 명령어를 위해사용하는것은 매우 비효율적

연산의 대한 정보를 나타내는 3개의 비트 즉 8개의 명령어를 만들수있음

다음 각 레지스터에도 2진 코드를 부여

피연산자의 4개의비트의 맨앞비트가 1이라면 레지스터를의미 0이라면 숫자를 의미

명령어를 완성하였으니 연산이가능

ir은 다음 번에 실행하게 될 명령어를 미리 가져다 놓는 용도로 사용됨

우리가 지금 구성하는 명령어의 형태에 따라서 컨트롤 유닛의 구조가 결정됨.

컨트롤 유닛은 명령어를 해석하는 일을 맡고있음 따라서 명령어 구성 및 해석방법을 정확히 알고 있어야만 해석이 가능함.

명령어의 형태에 따라서 컨트롤 유닛의 논리회로가 디자인된다는 뜻

"첫 번째 피연산지의 위치에는 레지스터 이름이 외야한다"

이 문장은 연산결과는 일단 레지스터에 저장되어야한다는 제약사항이 있음을 말해줌

" 이러한 제약사항들은 CPU의 종합적 측면(성능,비용 등등)이 고려되는 가운데서 등장하게된다. 때문에 우리는 이러한 제약사항을 지켜야한다."

CISC(복잡한 명렁어 체계 컴퓨터) vs RISC(단순)

RISC가 높은 성능을 내는것에 유리 ( 명렁어 길이가 동일하고 명령어를 처리하는 과정이 일정하기 때문에 클럭당 둘 이상의 명령어 처리가 가능 하기때문)

LOAD & STORE 명령어 디자인

-명령어의 제한

사칙연산의 피 연산자는 숫자 or 레지스터
연산결과는 레지스터에 저장
즉 레지스터를 통해서 모든 연산을 진행 하겠다

  • LOAD & STORE 명령어의 필요성

메인 메모리 주소 정보를 사칙연산의 피연산자로 올 수 있도록 명령어 구조를 설계하지 않았기 때문에 위와 같은 명령어는 만들어내지 못한다 따라서 메인 메모리에 저장된 데이터를 레지스터로 일단 옮겨다 놓은 다음에, 덧셈을 진행해야 한다 때문에 레지스터와 메인 메모리 사이에서 데이터를 전송할 수 있는 명령어가 필요한 상황이다.

  • 로드 앤 스토어 명령어의 디자인

피연산자 두개를 사용

이제 메모리에서 값을 불러와 레지스터에 저장하고 연산을 할수있음

다음은 c = a + b의 연산과정

Direct 모드와 Indirect 모드

하나의 명령어에 여러 정보를 담다 보니 표현하는 데이터 크기에 제한이 따른다는 문제점이 등장

메인메모리의 주소값 표현이 0x0000에서 부터 0x00ff까지가 전부이기때문

지금까지 언급한 메모리 접근방법을 Direct 모드라 하는데, 이 방법을 통해서는 메모리의 모든 영역에 대한 접근이 불가능함(Direct 모드로 메모리를 접근할 경우 할당된 비트 수 안에서 표현 가능한 밤위의 메모리 영역만 접근이 가능하기 때문)

Indirect 모드의 이해

direct는 Load 명령에어슨 레지스터에 저장할 데이터가 존재하는 주소를 직접적으로 표현하였는데, 반대로 Indirect 모드라 한다면 명령어에서 지정하는 번지에 저장된 값을 주소값으로 참초하게 됨

[]기호로 주소값을 감싸게 되면 이는 Indirect 모드 연산을 의미하게 됨

명령어에서는 사용하지 않은 예약공간으로 다이럭트인지 인다이렉트인지를 정해줄수있음

핵심요약

  1. 명령어!
    cpu에게 일을 시키기 위한 명령어는 연산자에 대한 정보뿐만 아니라 피 연산자에 대한 정보도 함께들어감

  2. cpu의 내부 연산과 레지스터
    이번 장에서는 레지스터의 필요성을 특히 강조해서 설명하였다. 이후에도 필요한 내용이므로 덧셈 연산이 이뤄지는 과정을 레지스터와 관련해서 이해하도록하자.

  3. Direct vs Indirect
    메모리에 접근하는 방식은 크게 두 가지로 direct 모드와 indirect 모드가 있다. direct 모드는 명령어에서 지정하는 위치의 메모리를 참조하는 방식이고 , indirect 모드는 명령어에서 지정하는 위칭 저장된 값을 주소값으로 하여 메모리를 참조하는 방식이다.

0개의 댓글