이론 정리/컴퓨터 구조
한 권으로 읽는 컴퓨터 구조와 프로그래밍 4장 정리
철매존
2024. 4. 13. 21:34
728x90
- 컴퓨터는 크게 3개로 나뉜다.
- 메모리
- 입/출력
- CPU
메모리
- 조작할 비트들을 저장할 장소
- 각각 바이트를 저장하는 위치가 있고, 거기 주소가 부여된다.
- 참고로 기본은 1비트이고 몇비트 컴퓨터인지에 따라 메모리의 덩어리가 달라진다.
- 즉 32비트다 이러면 메모리가 4비트 덩어리로 구성된다.
- 더 많은 데이터를 데이터 버스에 실을 수 있기 때문
- 데이터 버스에서 메모리의 위치가 어디로 갈지는 엔디안으로 확인한다.
- 인텔은 0번 바이트가 가장 오른쪽 / 모토로라는 0번이 가장 왼쪽 이런식으로 엔디안을 염두에 둬야한다.
입력과 출력
- 외부랑 통신하기 위해 사용. 주변장치라고도 한다.
중앙 처리 장치
- 실제 계산을 처리하는 컴퓨터 부품
- 다양한 요소로 이루어진다.
- 산술 논리장치(ALU : arithmetic logic unit)
- CPU의 핵심 부품
- 산술 계산, 불리언 대수 및 기타 연산을 수행하는 방법을 알고 있는 장치.
- 피연산자와 연산 코드, 조건 코드를 통해 결과값을 내는것
- 시프트
- 왼쪽 시프트 : 어떤 숫자의 모든 비트를 왼쪽으로 1비트씩 옮기고 맨 왼쪽 비트는 버리고 가장 오른쪽 비트는 0
- 오른쪽 시프트 : 어떤 숫자의 모든 비트를 오른쪽으로 1비트씩 옮기고 맨 오른쪽 비트는 버리고 가장 왼쪽 비트는 0
- 실행 장치
- 제어 장치로도 부르며 컴퓨터의 대장 역할을 한다.
- ALU는 그 자체로는 유용하지 않고 누군가가 할 일을 알려줘야 한다.
- 그거 하는게 실행장치
- 하는 방법은 실행 장치에게 명령어 목록을 전달해서 얘가 명령어를 찾는것이다.
- 명령어는 컴퓨터에게 어떤 일을 할지 알려주는 비트 패턴
- 프로그램 카운터를 통해 메모리에서 명령어를 가져오는 위치를 알 수 있다.
- 참조해서 들고옴
- 산술 논리장치(ALU : arithmetic logic unit)
- 명령어 집합
- 컴퓨터가 메모리에서 명령어를 찾음.
- 명령어
- 먼저 그냥 명령어를 명령코드, 두 피연산자, 결과 이렇게 4개로 나누면 너무 효율이 낮다.
- DRAM 주소 지정 기법을 쓰면
- 주소 확장 레지스터를 두고 별도의 명령어를 사용해 상위 주소(주소에서 MSB에 가까운 비트들) 지정
- 이게 인텔에서 32비트 CPU를 이용해 4GB 이상 메모리에 접근할 때 사용한 방법이다.
- 이거는 값을 설정하려면 시간이 더 들고 여러 번 레지스터를 설정해야 하는 단점이 있다.
- 그래서 한번에 한 주소에만 접근 가능한 누산기가 있음
- 주소 지정 모드
- 누산기를 써도 주소가 충분하지 않다.
- 누산기는 직접 주소 지정으로 사용할 주소가 명령어에 직접 들어가 있다.
- 간접 주소 지정을 추가하면 더 많은 메모리 사용 가능
- CPU명령어에 들어있는 값을 피연산자 주소로 해석하지 않고 피연산자 주소를 얻을 수 있는 메모리 위치를 가리키는 주소로 사용
- 즉시 주소 지정 모드
- 주소에 해당하는 비트를 그냥 값으로 간주
- 조건 코드 명령어
- 분기 명령어
- 선택적 실행 분기
- 분기 명령어
- 최종 명령어 집합 구성
- 그러면 이제 모드 / 명령코드 / 주소 이렇게 있음.
명령어 설계
- 명령어 레지스터
- 컴퓨터는 명령어를 한번에 하나씩 수행하는게 아니다.
- 먼저 명령어를 가져와야한다(이걸 페치라고 함)
- 그 후에 이걸 어떻게 수행할지 고민해야 한다.
- 명령어 실행을 위해서는 메모리에 접근해야 할 경우가 많은데 이 말은 다른 목적으로 메모리를 사용할 때 페치한 명령어에 편하게 접근할 수 있도록 저장할 다른 위치가 필요하다는 뜻이다.
- CPU에 명령어 레지스터를 추가해 현재 실행 중인 메모리를 저장한다.
- 데이터 경로와 제어 신호
- 메모리 주소 버스에 프로그램 카운터 값을 넣을 방법이나 메모리에 있는 데이터를 명령어 레지스터로 넣을 방법에 대한 고민 등..
- 데이터 흐름 제어
- 입력 출력 흐름을 제어하는 장치인데
- 페치
- 간접적으로 주소를 메모리에서 가져오기 위해
- address source를 명령어 레지스터로 지정.
- 메모리 동작.
- 간접 주소 레지스터 동작
- 누산기에 잆는 값을 주소에 저장
- address source를 간접 주소 레지스터로 설정
- data bus enable 1 설정
- 메모리 동작
- 프로그램 카운터 증가
- 이런 페치와 실행에는 여러 단계가 필요해서 단계 추적의 카운터가 필요하다.
RISC, CISC 명령어 집합
- 컴퓨터 명령어가 복잡해지면서 제어 회로도 복잡해짐
- 근데 복잡한 명령어중 상당수는 거의 안쓰인다.
- 복잡한 명열어를 그냥 단순한 명령어를 조합해 처리하는건 어떨까?
- 이거를 RISC라고 한다.
- 기존 설계대로 복잡한거 쓰는거는 CISC
- RISC
- 중요한 특징은 적재-저장 구조이다.
- 메모리와 레지스터를 오가는 명령어들과 레지스터 간 명령어로만 이뤄진 구조이다.
- 중요한 특징은 적재-저장 구조이다.
- CISC
- Auto Increment, AUto Decrement 주소 지정 모드 이런거는 유용하게 쓰이는 느낌
- 참고로 C언어는 B언어로부터 만들어졌는데 C부터 포인터 간접 주소 지정 추상화에서 B언어 자동증가 자동감소 기능이 잘 어울어짐
GPU
- 그래픽처리장치