4장 컴퓨터 내부 구조

young·2022년 7월 15일
0

📖 4장 keywords

  • 컴퓨터 내부 구조
    메모리, I/O, CPU

  • 명령어 집합

  • RISC / CISC


컴퓨터는 전자 부품을 다양하게 조합해 비트를 조작하는 회로를 만든 것이다.
컴퓨터 설계 방법은 다양하며, 복잡한 동작을 수행하도록 만들수록 복잡한 구조를 추가하게 된다.

컴퓨터는 크게 메모리(기억장치), 입력과 출력(I/O), CPU(중앙처리장치)로 나뉜다.



📌 메모리

메모리 = 비트 저장소 = 기본 단위 1Byte (= 8bit)
32비트 컴퓨터는 보통 메모리를 4바이트 단위로 읽고, 64비트 컴퓨터는 8바이트 단위로 읽는다.
데이터를 읽기 위해 연속되는 바이트를 순서대로 저장해야 하며, 이것을 바이트 순서라고 한다.

사용하는 프로세서에 따라 엔디안(컴퓨터 메모리의 배열 방식)이 다르다.

리틀 엔디안 배열: 0번 바이트가 가장 오른쪽 자리에 간다.
빅 엔디안 배열: 0번 바이트가 가장 왼쪽 자리에 간다.

한 시스템에서 다른 시스템으로 데이터를 전송할 때 엔디안을 변환하지 않으면 데이터 순서가 뒤섞일 수 있다.

유닉스 운영체제를 PDP-11에서 IBM 시리즈/1 컴퓨터로 포팅(porting = 이식)할 때 바이트 순서가 뒤바뀌면서 'nUxi'를 출력한 사건에서 비롯하여 바이트 순서와 관련된 문제를 눅시 신드롬이라고 부르기도 한다.



📌 I/O

컴퓨터에 데이터를 입력하거나, 컴퓨터에서 데이터를 출력하는 것을 I/O라고 한다.
I/O에 연결되는 장치 = I/O Device = 컴퓨터 주변부에 위치하기 때문에 주변장치(peripheral)라고 부른다.

컴퓨터의 입/출력 슬롯에 I/O 장치를 연결할 수 있다.
각 슬롯에는 어떤 장치가 연결됐는지 파악하는 메모리 주소가 있다.



📌 CPU

실제 계산을 처리하는 중앙 처리 장치
다른 모든 요소는 CPU를 지원하는 역할을 한다.

산술 논리 장치 (Arithmetic Logic Unit)

CPU의 핵심 부품
실렉터와 논리 게이트를 연결한 것

ALU가 어떻게 연산을 수행하는지 간단하게 그린 다이어그램

  • 피연산자: 비트

  • 연산 코드: 비트, 연산자를 지정한다.

  • 결과: A와 B에 연산코드를 적용한 결과

  • 조건 코드: 결과에 대한 추가 정보
    보통 조건 코드 레지스터에 조건 코드가 저장된다.



시프트

시프트 연산을 수행하는 장치 = 시프터
시프터는 특히 부동소수점 연산을 구현할 때 핵심 부품이다.

왼쪽으로 1비트 시프트한다 = 어떤 숫자의 모든 비트를 왼쪽으로 1칸씩 옮기고, 맨 왼쪽 비트는 버린다. 맨 오른쪽 비트 자리에는 0을 넣는다.

어떤 수를 왼쪽으로 1비트 시프트한 값은 원래 수에 2를 곱한 값과 같다.

오른쪽으로 1비트 시프트하는 것은 반대로 오른쪽으로 모든 비트를 1칸씩 옮기고, 맨 왼쪽 비트 자리에 0을 넣는다.

어떤 수를 오른쪽으로 1비트 시프트한 값은 원래 수를 *2로 나누고 나머지를 버린 값과 같다.

왼쪽으로 시프트하면서 사라지는 MSB 값과, 오른쪽으로 시프트하면서 사라지는 LSB 값을 조건 레지스터에 저장한다.


실행 장치

= 제어 장치

프로그램 저장 방식 컴퓨터에서 사용자가 입력한 명령어를 메모리에서 가져와서 ALU를 실행하고 그 값을 메모리에 반환한다.

  1. 사용자가 입력한 명령어의 메모리 주소 = 프로그램 카운터에 들어있다.
  2. 실행 장치는 프로그램 카운터가 가리키는 주소에서 명령어를 읽어온다.
  3. 명령어를 실행 or 수행하면 프로그램 카운터가 증가되고 다음 명령어를 가져온다.

컴퓨터는 위와 같은 과정을 반복하며 프로그램을 실행한다.




📌 조건 코드 명령어

덧셈, 뺄셈, 비교 연산에서 조건 코드가 설정되며, 이것을 활용할 수 있다.

분기 명령어

= branch 명령어

의사결정을 내리고 코드 중 일부를 선택적으로 실행할 수 있게 하는 명령어
코드에 따라 무조건 분기 또는 조건을 만족할 때 분기하도록 한다.




📌 컴퓨터 설계

명령어 레지스터

CPU 명령어 기본 사이클은 페치(fetch)-실행(executuin)로 이루어진다.

페치: 메모리에서 명령어를 가져온다.
실행: 명령어를 가져온 후 실행한다.

데이터 경로와 제어 신호

위 그림처럼 프로그램 카운터 값을 주소 버스에 넣을 방법 / 메모리의 데이터를 명령어 레지스터로 넣을 방법을 구상하고,
여러 명령어 집합을 구현하는 데 필요한 레지스터, 실렉터, ALU, 트라이스테이트 버퍼 등의 모든 연결을 해야 한다.

데이터 흐름 제어

명령어 처리를 위해선 fetch를 해야 한다.
컴퓨터 명령어가 복잡해지면서 컴퓨터 제어 회로는 복잡해진다.


📌 RISC / CISC

CISC

기존 설계 방식으로 만든 컴퓨터
e.g. 디지털 이큅먼트의 PDP-11C언어의 등장

RISC

Reduced Instruction Set Computer
1980년대 데이비드 패터슨과 존 헤네시가 프로그램의 실행 시간을 대부분 차지하는 단순한 명령어들만 포함하는 기계를 설계하는 개념을 탐구하기 시작했다.

load-store 아키텍처를 사용한다.
: 메모리-레지스터 명령어와 레지스터간의 명령어로만 이루어진 구조

자주 쓰이는 명령어를 분석하고 추가하면서 최근의 RISC는 과거의 CISC보다 복잡해졌다.

profile
즐겁게 공부하고 꾸준히 기록하는 나의 프론트엔드 공부일지

0개의 댓글