컴퓨터 구조 - 04. 컴퓨터 내부 구조

    04. 컴퓨터 내부 구조

    컴퓨터 하드웨어는 어떻게 구성되는가

    현대적 컴퓨터는 크게 메모리(Memory), 입출력(intput and output), CPU(central processing unit) 세가지 부분으로 나눌 수 있다.

    메모리

    컴퓨터에서 조작할 비트들을 저장할 장소를 메모리라고 부른다.

    입력과 출력

    컴퓨터에 정보를 전달하거나 컴퓨터에서 정보를 가져올 방법을 입력과 출력이라 부른다. 이들은 컴퓨터 주변에 위치하여 주변장치(peripheral device)라고 부른다.

    중앙 처리 장치

    중앙 처리 장치(CPU)는 실제 계산을 처리하는 컴퓨터 부품이다.

    산술 논리 장치

    ALU(arithmetic logic unit)은 CPU의 핵심 부품이다. ALU는 산술 계산, 불리언 대수 및 기타 연산을 수행한다.

    시프트

    왼쪽 시프트는 모든 비트를 왼쪽으로 1비트씩 옮기고 맨 왼쪽의 비트는 버리고 가장 오른쪽 비트에 0을 넣는다. 어떤 수를 왼쪽으로 시프트하면 그수에 2를 곱한 값이 된다.
    오른쪽 시프트는 모든 비트를 오른쪽으로 1비트씩 옮기고 맨 오른쪽의 비트는 버리고 가장 왼쪽의 비트에 0을 넣는다. 어떤 수를 오른쪽으로 시프트 하면 그 수에 2를 나누고 나머지를 버리는 것과 같은 값이 된다.

    실행 장치

    컴퓨터의 실행 장치(execution unit)은 제어 장치(control unit)이라고도 한다. 실행 장치는 메모리의 정해진 장소에서 명령코드와 피연산자들을 가져와서 ALU에게 어떤 연산을 할지 알려주고 그 결과를 메모리에 돌려준다.

    명령어 집합

    명령어

    명령어 비트에 피연산자, 결과 등의 필드를 나누면 작은 비트밖에 쓸수 없기 때문에 레지스터 거리에 따른 주소를 추가하는 방식으로 사용된다. 이 레지스터를 누산기(accumulator)라고 한다. 누산기는 ALU가 계산한 결과를 저장한다.

    주소 지정 모드

    누산기를 사용하여 주소를 가르키는 방식을 직접 주소 지정(direct addressing)이라 부른다. 주소가 명령어에 직접 들어가 있다는 것을 뜻한다.
    간접 주소 지정(indirect addressing)을 추가하면 더 많은 메모리를 사용할 수 잇다. 간접 주소 지정에서 CPU는 명령어에 들어가 있는 값을 피연산자의 주소로 해석하지 않고 주소를 얻을 수 있는 메모리 위치를 가리키는 주소로 사용한다.
    때로는 상수를 지정하기 위해 즉시 주소 지정 모드(immediate addressing mode)를 추가할 수 있다. 상수가 바로 누산기에 들어가는 방식이다.

    • 즉시 : 명령코드:12 -> 결과 12
    • 직접 : 명령코드:345 -> 메모리:12 -> 결과 12
    • 간접 : 명령코드:4321 ->메모리:345 -> 메모리:12 -> 결과 12

    조건 코드 명령어

    조건 코드 레지스터의 값을 누산기로 복사하는 cca 명령어와 누산기의 값을 조건 코드 레지스터에 복사하는 acc 명령어를 추가할 수 있다.

    분기 명령어

    의사 결정을 내리고 코드 중 일부를 선택적으로 실행 할 수 있도록 프로그램 카운터의 값을 변경할 수 있는 명령어를 분기(branch) 명령어라 부른다.

    최종 명령어 집합 구성

    최종 명령어는 모드, 명령콛, 주소으로 구성되어 있다.

    마지막 설계

    명령어 레지스터

    명령어를 실행하려면 어떤 일이 벌어지는지 페치와 실행 두 단계로 이루어진 상태 기계(state machine)로 설명할 수 있다.
    처음에 컴퓨터는 메모리에서 명령어를 가져오는 페치(fetch)작업을 한다.
    CPU에 명령어 레지스터(instruction register)를 추가하여 현재 실행중인 명령어를 저장한다.

    • 프로그램카운터 >> 주소버스 >> 메모리 >> 데이터버스 >> 명령어 레지스터

    데이터 경로와 제어 신호

    데이터 흐름 제어

    어떤 명령어를 처리하려면 페치를 해야한다. 페치를 하려면 다음 신호가 필요하다.

    • address source 는 프로그램 카운터를 선택해야한다.
    • 메모리를 동작시켜야한다. r/w는 읽기로 설정해야한다.
    • 명령어 레지스터를 동작시켜야 한다.

    다음은 간접적으로 주소를 메모리에서 가져오기 위해 다음과 같이 신호를 설정해야한다.

    • address source를 명령어 레지스터로 지정
    • 메모리를 동작시켜야한다. r/w는 읽기로 설정해야한다
    • 간접 주소 레지스터를 동작시켜야 한다.

    이후 클록 틱이 지나면 간접 주소 레지스터가 가르키는 주소에 누산기의 값을 저장해야한다.

    • adress source 를 간접주소 레지스터로 설정해야 한다.
    • data bus의 enable을 1로 설정해야한다.
    • 메모리를 동작시켜야한다. r/w는 쓰기로 설정해야한다.
    • 프로그램 카운터를 증가 시킨다.
    반응형

    댓글

    Designed by JB FACTORY