컴퓨터 하드웨어는 어떻게 구성되는걸까
컴퓨터란?
컴퓨터란 전자 부품을 조합해 비트를 조작하는 회로를 만든 기계를 말한다.
컴퓨터는 크게 메모리, I/O(입/출력 장치), CPU(중앙 처리 장치)로 이루어져있다.
1
2
3
┌ 메모리
컴퓨터 ┼ I/O
└ CPU
메모리
메모리Memory는 비트를 저장하는 공간이다. 각각의 공간에 주소address가 부여되는데 32bit는 4byte 덩어리, 64bit는 8byte 덩어리로 이루어진다. 이 덩어리는 고속도로의 차선이라고 생각하면 되는데, 차선이 많을수록 교통량이 원활해지는 구조라고 보면 된다.
긴 워드long word에는 워드word들이, 워드 안에는 바이트byte들이 들어 있다.
1
2
3
4
5
6
7
8
9
10
11
12
┌─long word──┐
│┌word┐┌word┐│
││byte││byte││
││byte││byte││
│└────┘└────┘│
└────────────┘
┌─long word──┐
│┌word┐┌word┐│
││byte││byte││
││byte││byte││
│└────┘└────┘│
└────────────┘
그리고 버스는 하나의 긴 워드에만 접근할 수 있다. 아래의 아스키아트를 보면
1
2
3
4
5
6
7
8
9
10
11
12
┌─long word──┐
│┌word┐┌word┐│
││1││2││3││4││
││ ││ ││
│└────┘└────┘│
└────────────┘
┌─long word──┐
│┌word┐┌word┐│
││5││6││7││8││
││ ││ ││
│└────┘└────┘│
└────────────┘
{1, 2, 3, 4} 와 {5, 6, 7, 8}의 긴 워드 2개가 있고, 내가 원하는 바이트가 {4, 5, 6, 7}이라면 버스는 2번을 왕복해서 첫 번째 긴 워드에 접근해 {4}를 챙기고 돌아간 다음 다시 두 번째 긴 워드에 접근해서 {5, 6, 7}을 가져가는 방식이다. 옛날에는 이런 식의 데이터를 읽게 하는 장치가 있었으나 현재에는 이 부분이 쓸모가 없다는 사실을 발견하고 제외시켜버렸다. 이렇게 여러 군데에 있는 데이터를 읽는 경우를 정렬이 맞지 않는 접근nonaligned access 이라고 부른다.
※ 눅시 신드롬 : 버스에 있는 비트들의 위치는 설계된 프로세서에 따라 다른데, 이것을 ‘엔디안’이라고 함. 유닉스 OS를 PDP/11에서 IBM 시리즈/1 컴퓨터로 포팅할 때 엔디안을 염두에 두지 않아서 바이트 순서가 뒤바뀌어서 ‘Unix’를 ‘nUxi’로 출력하는 사건이 있었고, 이것을 ‘눅시 신드롬’이라고 우스꽝스럽게 불렀다.
입력과 출력, I/O
주변장치라고 부르며, 입력과 출력을 담당한다.
옛날에는 I/O 버스와 메모리 버스를 나누었지만, 현대에 메모리 크기가 커져 잉여 메모리가 생겨남에 따라 I/O 버스와 메모리 버스를 나누지 않고 메모리의 일부를 I/O 장치에 할당하였다.
컴퓨터에는 설계상 표준 입/출력 슬롯이 있어서 일관된 방식으로 I/O 장치를 연결할 수 있다.
CPU
중앙 처리 장치라고 부르는 이 녀석은 실제 계산을 처리하는 컴퓨터 부품으로 다른 모든 요소들은 CPU를 서포팅하는 역할을 한다고 보면 된다.
산술 논리 장치
ALU, arithmetic logic unit이라고 부르며 산술 계산과 불리언 대수, 기타 연산을 수행하는 장치이다.
1
2
3
4
피연산자 A → ┌ALU┐ → 결과
피연산자 B → │ │ → 조건코드
└───┘
↑연산코드
ALU의 간단한 다이어 그램이다. 여기서 피연산자 A/B는 단순히 값을 표현한 비트이며, 연산 코드(명령 코드라고도 함)에서 어떤 연산자를 쓸 지 전달해주고 ALU에서 처리된 값을 결과로 출력하고 결과에 대한 추가 정보를 조건 코드 레지스터에 조건 코드(N:’음수’일 경우 1, Z:’0’일 경우 1, O:오버플로나 언더플로가 발생할 시 1)를 저장한다.
시프트 연산
ALU 명령 코드에 shl(<시프트)과 shr(>시프트)가 있는데 이 명령 코드는 시프트 연산을 수행한다. 시프트 연산이란 왼쪽이나 오른쪽으로 비트를 옮기고 옮김에 따라 비게 된 자리는 0으로, 밀려난 비트는 버려지는 방식으로 수행된다. 만약 왼쪽으로 시프트 연산을 수행하게 되면 그 값은 2배가 되고, 오른쪽으로 시프트 연산을 수행하면 1/2이 되는데 나머지는 버리는 방식으로 처리된다.
실행 장치
실행 장치는 제어 장치라고도 부르며, 메모리에서 명령코드와 피연산자를 가지고 와서 ALU에 전달하고 결과는 메모리에 저장해주는 역할을 한다.
프로그램 저장 방식 컴퓨터
프로그램 저장 방식 컴퓨터stored-program computer는 영국의 위대한 수학자 앨런 튜링Alan Turing의 연구로부터 비롯된 방식의 컴퓨터로, 실행 장치에서 명령어를 메모리에서 찾는 컴퓨터를 말한다.
프로그램 카운터
실행 장치는 메모리에서 명령어를 가져와야 하는 위치를 알아야하는데, 이 때 PCProgram Counter, 프로그램 카운터를 사용한다. 메모리 주소가 들어있는 PC는 메모리 위치를 참조한다. 실행 장치는 프로그램 카운터가 가리키는 주소에서 명령어를 읽어온다. 프로그램 카운터의 값을 바꾸는 명령어가 아닌 이상 프로그램 카운터는 메모리의 다음 위치에서 가져올 수 있도록 프로그램 카운터가 증가된다(다음의 메모리 위치를 가리키기 위해 명령어 크기만큼 프로그램 카운터에 더해진다).
누산기
누산기는 ALU가 저장한 결과값을 저장한다.
주소 지정 모드
주소 지정 모드는 크게 3가지로 나눌 수 있다. 누산기를 사용해 직접 주소를 가리키는 방법이나 간접적으로 가리키는 방법, 또는 비트 자체를 ‘값’으로 사용하는 방법이 있다.
직접 주소 지정 모드
사용할 주소가 명령어에 직접 들어가 있는 모드를 말한다.
1
2
3
4
5
메모리 주소 12 = 4321, 메모리 주소 4321 = 345, LOAD명령어 사용
@직접 주소 지정 모드
메모리 주소 12 LOAD
▷ 4321
간접 주소 지정 모드
피연산자 주소를 얻을 수 있는 메모리 위치를 가리키는 주소로 사용하는 모드를 말한다.
1
2
3
@간접 주소 지정 모드
메모리 주소 12 LOAD
▷ 345 (12가 가리키는 4321의 값 345)
즉시 주소 지정 모드
주소에 해당하는 비트자체를 값으로 간주하는 모드를 말한다.
1
2
3
@즉시 주소 지정 모드
메모리 주소 12 LOAD
▷ 12
아무래도 메모리 주소 12 ▷ 4321의 메모리 주소 ▷ 345의 순서로 진행되다보니 속도는 즉시 ▷ 직접 ▷ 간접순으로 빠르다.
RISC, CISC
복잡한 명령어 중 상당수는 거의 쓰이지 않는다는 사실을 발견한 컴퓨터과학자들은, 프로그램의 실행 시간의 대부분을 차지하는 명령어 만을 포함하는 기계를 설개하는 개념을 처음으로 만들었다. 그리고 이런 기계에서는 복잡한 명령어를 단순한 명령어로 조합해 처리하는데, 이런 기계를 RISC라고 부른다. 또 RISC와 대조적으로 기존 설계 방식으로 만든 컴퓨터는 CISC 기계라고 부른다.
RISC기계의 중요한 특징은 적재-저장 구조를 띄고있다는 점인데, 메모리↔레지스터의 명령어와 레지스터↔레지스터 간의 명령어로만 이루어진 구조이다.
DEC사의 PDP-11은 CISC 기계인데, ALU역할을 하는 범용 레지스터가 8개 들어있고 자동증가와 자동감소 주소지정모드를 지원했다
C언어는 B라는 프로그래밍 언어로부터 만들어진 언어인데(B의 유지를 이어서 C다). 이 C언어는 바로 PDP-11에서 처음 만들어졌는데, C언어의 중요한 개념 중 하나인 포인터는 간접 주소 지정을 추상화한 것이다. 또 B언어에서 가져온 자동증감 기능은 포인터와 잘 어우러진다.
댓글남기기