프로세서가 데이터를 이동시키는 방법




 

최근의 마이크로프로세서는 트랜지스터가 천억 개 이상 있다. 만약 이 수많은 트랜지스터 중 하나를 따라 걸어간다고 하면 완전히 길을 잃을 수도 있을 것이다. 그러나 예전이나 지금이나 프로세서가 기본적인 기능을 수행하는 방법에는 변함이 없다. 마이크로프로세서에는 많게는 8개의 실행 코어(core)와 다수의 캐시(cache)가 있을 수 있지만, 단일 코어를 갖는 펜티엄 III 프로세서와 마찬가지로 모두 어떻게 데이터를 장애 없이 빠르게 전송하느냐 하는 문제를 갖고 있다.

 

프로세서와 프로세서에 연결된 캐시는 동일한 인터페이서를 사용해 컴퓨터의 정보에 접근한다. 해당 코드로 처리된 프로그램 코드나 데이터는 컴퓨터의 최대 버스 속도로 칩 안팎을 이동한다. 컴퓨터 아키텍처는 대부분 프로세서가 동작을 완료하지 않고도 클럭 사이클(컴퓨터가 어떤 일을 할 수 있는 최소한의 시간)을 최소화함으로써 병목현상을 줄인다.

 

BIU(Bus Interface Unit)를 통해 프로세서로 정보를 입력하면 BIU는 정보를 복제하고 복사본 하나를 프로세서 코언 안에 있는 CPU의 가장 가까운 데이터 캐시로 전송한다. BIU는 프로그램 코드를 레벨 1 명령어 캐시 또는 1-캐시로 전송하고, 코드에서 사용할 데이터를 또 다른 L1 캐시인 데이터 캐시(D-cache)로 전송한다.

 

페치(fetch)/디코드(decode) 장치가 1-캐시에서 명령을 불러올 동안 BTB(Branch Target Buffer)는 각 명령을 별도의 버퍼에 저장된 것과 비교해 이전에 사용한 명령이 있는지 알아본다. BTB는 특히 프로그램 실행이 두 경로 중 하나를 따를 수 있는 상황인 분기(branching)를 포함하고 있는 명령이 잇는지 찾는다. BTB가 분기 명령을 찾으면 과거 경험을 기준으로 어느 경로를 택할지 예측한다. 예측치는 92%이상 정확하다.

 

BTB가 예측한 순서대로 페치/디코드 장치가 명령을 불러오면 병렬로 작동하는 3개의 디코더는 좀 더 복잡한 명령을 작은 마이크로 연산(micro-operations)μops로 쪼갠다. 배치(dispatch)/실행(execution) 장치는 상위 레벨의 단일 명령을 처리하는 것보다 여러 개의 μops를 더 빠르게 처리한다.

 

디코드(decode) 장치는 모든 μops를 리오더 버퍼(Reorder buffer)라고도 하는 명령 풀(pool)로 보낸다. 여기에는 정수와 관련된 연산을 모두 처리하는 ALU(Arithmetic Logic Units)가 두 개 들어 있다. ALUBTB가 예측한 순서대로 μops를 포함하고 헤드와 꼬리가 있는 원형 버퍼(circular buffer)를 사용한다.

 

배치/실행 장치는 버퍼의 각 μop을 검사하여 처리에 필요한 정보가 모두 있는지 확인하고, 처리 준비가 완료된 μop를 발견하면 이를 실행해 그 결과를 마이코로옵(micro-op) 자체에 저장하며, 완료도 표기한다.

 

μop이 메모리에서 데이터가 필요하면 실행 장치는 이를 건너뛰고 프로세서는 L1 캐시 가까이에 있는 정보를 찾는다. 그곳에 데이터가 없으면 프로세서는 다음 캐시 레벨인 L2를 확인한다. 캐시의 크기와 구조는 프로세서 설계에 따라 다르지만 캐시에서 데이터를 불러오는 데 필요한 용량과 시간에서 각 캐시의 레벨이 증가한다.

 

정보를 불러올 동안 실행 장치는 가만히 있는 것이 아니라 버퍼의 각 μop을 검사해 실행할 수 있는지 본다. 이를 예측 실행(speculative execution)이라고 하는데, 원형 버퍼에서 μops의 순서가 BTB의 분기 예측을 따르기 때문이다. 실행 장치는 최대 5개의 μop을 동시에 처리한다. 실행장치가 버퍼의 끝에 도달하면 헤드 부분에서 다시 시작하여 실행해야 할 데이터를 수신한 μop이 있는지 모두 재확인한다.

 

연산에 3.14.333333과 같은 부동 소수점 숫자가 있으면 ALU는 이러한 숫자를 빠르게 처리할 수 있는 부동 소수점 연산 장치로 작업을 넘긴다.

 

지연되었던 μop이 최종 처리되면 실행 장치는 이 결과를 BTB가 예측한 결과와 비교한다. 예측이 실패한 경우 JEU(Jump Execution Unit)라는 구성요소는 마지막 μop의 끝 표시(end marker)를 잘못 예측한 μop으로 옮긴다. 이는 끝 표시 뒤에 있는 μop를 모두 무시하라는 뜻이며 새로운 μop으로 대체할 수 있다는 의미이다. BTB는 예측이 잘못되었음을 알게 되고, 이 정보를 미래 예측에 사용한다.

 

한편 리타이어먼트(retirement) 장치도 원형 버퍼를 검사한다. 이 장치는 먼저 버퍼의 헤드에 있는 μop이 실행되었는지 확인하고, 그렇지 않을 경우 처리가 완료될 때까지 계속 확인한다. 그런 다음 두 번째, 세 번째 μop을 검사한다. 이미 처리가 되었다면 최대 3개의 결과값을 저장 버퍼로 전송한다. 여기서 예측 장치는 결과가 시스템 RAM으로 전송되기 전에 마지막으로 한 번 더 확인한다.

 



컴퓨터 네트워크에 꼭 필요한 프로토콜 알아보기


컴퓨터 네트워크나 정보 통신에서는 '프로토콜' 이라는 말을 자주 사용한다.

 대표적인 프로토콜로는 인터넷에서도 이용하고 있는 IP, TCP, HTTP를 들 수 있다.

이 밖에도 LAN에서 주로 사용하고 있는 IPX/SPX와 같은 프로토콜도 있다.

다양한 프로토콜을 체계적으로 한데 모든 것을 '네트워크 아키텍처'라고 하는데,

'TCP/IP'도 IP, TCP, HTTP 등의 프로토콜의 집합체이다.

현재는 많은 기기에서 TCP/IP를 이용할 수 있지만, Novel 사의 IPX/SPX, 

현 Apple 사의 컴퓨터에서 사용되던 AppleTalk, IBM 사가 개발한 대규모 네트워크 등에서

이용되는 SNA, 구 DEC 사가 개발한 DECnet 등과 같이 TCP/IP 이외의 

네트워크 아키텍처를 이용한 기기 및 환경도 있다.


[다양한 네트워크 아키텍처와 프로토콜]


▶ 프로토콜이 필요한 이유 ◀


보통 우리가 전자메일을 보낼 때나 홈페이지에서 정보를 수집할 때에는 프로토콜에 대해 의식할 필요가 없다.

프로토콜을 의식해야 할 때에는 컴퓨터를 네트워크에 연결하여 네트워크를 설정할 때 정도일 것이다.

설정이 끝난 후에 네트워크에 연결할 수 있게 되면 프로토콜에 대해서는 잊어버린다.

애플리케이션 프로그램의 사용법만 알고 있으면 네트워크를 이용할 수 있기 때문이다.

하지만 네트워크를 이용한 커뮤니케이션을 하기 위해서는 프로토콜의 존재에 대해 알고 있어야 한다.

프로토콜은 컴퓨터와 컴퓨터가 네트워크를 이용하여 통신하기 위해 정해 놓은 '약속'이라고 할 수 있다.

제조업체나 CPU, OS가 다른 컴퓨터끼리도 동일한 프로토콜을 사용하면 서로 통신 할 수 있다.

이와 반대로 동일한 프로토콜을 사용하지 않으면 서로 통신할 수 없다.

프로토콜에는 몇 가지 종류가 있는데, 각 사양이 명확이 정해져 있다.

컴퓨터끼리 서로 통신하기 위해서는 양쪽이 모두 동일한 프로토콜을 이해하고 처리할 수 있어야 한다.


▶ 컴퓨터에서 본 프로토콜 ◀


사람은 지능, 응용력, 이해력을 지니고 있으므로 어느 정도 규칙에서 벗어나거나 갑자기 규칙을 변경, 

확장하더라도 의사소통을 할 수 있다.

그러나 컴퓨터 통신의 경우는 그렇지 못하다. 컴퓨터는 사람과 같은 지능, 응용력, 이해력을 갖고 있지 

않기 때문에 커넥터의 모양과 같은 물리적인 레벨부터 애플리케이션의 종류와 같은 소프트웨어 레벨에 

이르기까지 다양한 부분에 대해 분명한 약속을 정해 놓고, 그것을 서로 지켜야 정상적으로 통신 할 수 있다. 

그리고 양쪽 컴퓨터에 통신에 필요한 최소한의 기능이 모두 프로그래밍되어 있어야 한다.

보통 사람은 특별한 의식 없이 말을 해도, 대부분의 경우 상대방의 오해를 사지 않고 의사를 전달할 수 있다.

설령 대화 도중에 말을 놓치더라도 전후 문맥으로 의미를 유추하여 상대가 

무슨 말을 하려는 것인지 이해할 수 있다.

하지만 컴퓨터의 경우는 그렇지 않다. 

프로그램이나 소프트웨어를 작성할때 도중에 장애가 발생하면 어떻게 처리할 것인지 등과 같이 통신 중에 

일어날 수 있는 다양한 문제까지도 미리 예상해두어야 한다. 그리고 실제로 장애가 발생한 경우에는 

통신하고 있는 컴퓨터끼리 서로 적절한 처리를 하도록 기기나 프로그램을 작성해야 한다.

이렇게 컴퓨터 통신에서는 컴퓨터끼리 약속을 자세하게 정한 후, 

이를 지키는 것이 중요한데, 이러한 약속을 '프로토콜' 이라고 한다.

+ Recent posts