본문으로 바로가기

CPU(Central Processing Units) 기초

category Information Security 2014.04.06 22:58

컴퓨터는 마이크로프로세서 혹은 중앙 처리 장치라 불리는 CPU(Central Processing Units)에 의해 움직인다. 실제 프로그램을 실행시키는 칩으로 산술 계산, 수치 비교, 데이터 전달 등 다양한 일을 수행한다. 운영체제는 이러한 마이크로프로세서에 의해 움직이는 하나의 프로그램이 된다.


마이크로프로세서를 개발하는 업체는 프로세서들을 발전시키면서 과거와의 호환성을 가장 우선적으로 고려했기 때문에 과거의 마이크로프로세서(8080)의 이해가 최근의 마이크로프로세서(펜티엄 III)의 이해를 크게 도울 수 있다. 특히 80386(흔히 386 컴퓨터)의 경우 운영체제를 구현하는데 있어 획기적인 전환점이 되었기에 주의깊게 살펴보아야 한다.

폰 노이만(John Von Neumann)이 제시한 프로그램 내장 방식(Stored-Program Concept)가 현대의 모든 컴퓨터의 원형이 된다. 프로그램 내장 방식은 프로그램과 자료를 실행하기 전에 메모리에 저장해놓고 프로그램이 실행될 때 프로그램의 명령어와 데이터를 메모리로부터 읽고, 쓰고, 수정할 수 있게 하는 방식이다. 흔히 세계 최초의 컴퓨터(최초의 컴퓨터는 아나타소프 베리 컴퓨터(ABC) 이다.) 라 알려져있는 에니악(ENIAC : Electronic Numerical Integrator And Computre)은 컴퓨터를 운영하기 위해서는 사람이 직접 많은 수의 스위치를 조작해야 했기 때문에 폰 노이만이 프로그램 내장 방식을 제안하였다. 폰 노이만 컴퓨터 구조는 1952년 프리스턴 대학에서 ISA(Instruction Set Architecture) 이름으로 완성되었고, 이후 직접회로(IC)의 엄청난 발전이 시작되었다. 1971년 인텔에서 4004라는 CPU를 탄생시켰고, 1972년 인텔 8008을, 1974년에는 인텔 8080 CPU를 만들어내게 되었다.


이전의 마이크로프로세서들은 특수한 응용을 위해 설계되었다면, 인텔 8080은 일반 목적용 컴퓨터를 위해 설계되었다는 것이 큰 의의를 가진다.

요즘 64비트 운영체제라고 불리우는데 이는 CPU가 64비트 연산이 가능해야 사용할 수 있는 운영체제이다. 인텔 8008은 8비트, 인텔 8080은 16비트의 연산이 가능한 CPU이다. 8비트로 나타낼 수 있는 최대 수인 255 보다 큰 수를 연산을 할때 인텔 8008은 두개의 8비트로 구분하여 데이터를 전송하고 처리하는 반면 인텔 8080은 16비트이기 때문에 한번에 처리가 가능해진다. 즉, CPU의 비트수가 높다는건 연산속도가 빠르다는 것을 의미한다.


16비트 마이크로프로세서라 하면 16비트 데이터 버스를 의미하는 것이며, 데이터전송을 위해 핀을 16개 사용한다는 뜻이다.

컴퓨터가 내외부 각 장치와의 정보나 신호를 주고 받는데 사용하는 전기적 통로를 버스라고 한다. 초창기 컴퓨터 버스는 단일 버스 구조를 가지고 있었는데 CPU, 메모리, 하드디스크, 주변 장치들 사이의 속도 차가 점점 커져서 병목현상이 심했다. 이를 해결하기 위해서 계속해서 세분화 되어가고 있다. 데이터 전송에 사용되는 버스는 데이터 버스라고 하고, 어느 메모리의 데이터를 가리킬건지를 나타내는 버스는 어드레스 버스라고 한다.


보통 마이크로프로세서가 8비트이면 8비트의 어드레스 버스를 가지고 있고, 16비트 이면 16비트의 어드레스 버스를 가지고 있다. 인텔 8086은 16비트 마이크로프로세서이면서 20비트의 어드레스 버스를 가지고 있는데, 이는 보다 많은 메모리를 액세스 하기 위해서이다. 

32비트의 CPU를 사용하는 32비트 운영체제는 대략 4GB 정도의 메모리 영역을 사용한다. 그 이상의 메모리를 인식하기 위해서는 CPU가 64비트를 지원하며, 그에 맞는 64비트용 운영체제를 사용해야한다. 이는 곧 어드레스 버스가 4GB 이상의 메모리 영역에 엑세스 하기 위해서는 32비트로 해결 할 수 없다는 것을 의미한다.


인텔 8086의 데이터 버스는 20비트임에 비해 레지스터의 크기는 16비트의 크기를 가지는 것이 문제가 되었다. 레지스터로 20비트의 크기를 표현할 수 없어서 두 개의 레지스터를 사용하려고 했지만 레지스터의 수가 제한적이기 떄문에 세그먼트 레지스터와 오프셋 레지스터의 개념을 도입하게 된다.

세그먼트(Segment)는 오프셋(Offset)과 같이 사용되는데 16비트의 크기인 세그먼트 레지스터를 왼쪽을 4비트 만큼 시프트 연산을 하고 거기에 오프셋 값을 더함으로써 물리적 주소를 가지게 된다. 그래서 20비트의 주소에 접근할 수 있게 되어 1MByte 범위 내에서의 주소 사용이 가능하게 되었다. 이 후 80286과 80386 마이크로 프로세서가 출현하였다. 흔히 286 컴퓨터라 부르는 80286은 8086보다 더 빠른 속도와 더 많은 어드레스 버스(24비트)를 다룰 수 있게 된 것과 보호 모드(Protected Mode)가 추가되었다. 보호모드는 독립적인 메모리 양을 할당 할 수 있게 되었고, 물리적 주소를 사용하지 않고 세그먼트 셀렉터(Segment Selector)를통하여 가상 주소를 가지게 되어 멀티태스킹 환경을 지원하게 된다.


32비트 연산은 실수 연산에 있어 중요한 의미를 가지는데, 단일 정밀 부동 소수점의 숫자를 표현하는 실수가 32비트 메모리를 필요로 하기 떄문이다. (FLOPS - 초당 부동소수점 연산 횟수를 의미하는 것으로 32비트 단정밀도를 기준으로 하고 있다.)

80386 부터 32비트 마이크로프로세서의 시대가 열리게 된다. 색감을 표현한데 있어 중요한 부동 소수점을 사용하기 시작하였고, 4GByte의 물리 메모리를 액세스 하기 위해 메모리 자원을 할당하고 관리하는 메모리 관리 장치(Memory Management Unit)가 사용되기 시작했다. 이는 메모리 관리를 하드웨어에서 어느정도 제공하게 되는 것으로 소프트웨어의 부담을 줄이게 된다.


80486 부터는 8086, 80286, 80386의 구조에서 대부분 표준을 자리 잡았기 때문에 구조적인 변화는 줄이고 성능 개선 및 향상, 호환성에 초점을 맞추어 개발하기 시작한다.


댓글을 달아 주세요

티스토리 툴바