티스토리 뷰

[전광성의 어셈블리어 이해하기:2회] IA-32 프로세서 아키텍쳐란? (1)
저자: 전광성 |  날짜: 2004년 12월 01일  

/
0 IA-32 프로세서 아키텍쳐란? (1)
2 .0 IA-32 프로세서 아키텍쳐란? (2)
3 .0 IA-32 프로세서 아키텍쳐란? (3)
/
  • 시작하기에 앞서...

    컴퓨터는 어느새 우리의 생활과 너무나도 밀접한 연관을 갖게 되었다. 또한 수많은 사람들의 노력으로 컴퓨터에서 계산기 하나만 실행시켜주면 각종 연산을 해내고, 사람과 친숙한 언어를 이용하여 프로그램을 짤 수도 있게 되었다. 하지만 그 기반을 이루기 위해 어떤 일들이 이루어 졌는지 한번 생각해 보았는가? 0과 1로만 이루어진 것들을 어떤 방법을 통해 친숙해 보이도록 만들었을까?

    필자가 언급한 질문에 대한 대답은 정말 광범위하다. 그러나 그 대답의 일부분은 중앙처리장치(CPU:Central Processor Unit, 이하 CPU)와 이에 직접 명령을 내리는 언어에 대한 공부를 하면서 얻을 수 있을 것이다. 이전에 언급했듯이 어셈블리언어는 컴퓨터구조에 대해 공부할 수 있는 가장좋은 도구중의 하나이다.

    연산을 담당하는 CPU에서 하는 일이란 무엇이며 어떤 구조일까. 차근차근 하나씩 알아보자. 그리고 우리가 가장 많이 쓰고 있는 인텔 계열의 CPU구조에 대해 알아볼 것이다.

  • 기초 마이크로컴퓨터 구성

    사실 지금 필자가 강좌를 통해 알리려는 것은 인텔계열의 CPU에서 쓰이는 어셈블리어에 대한 것이다. 그러나 좀 더 일반적인 개념에 대해 공부한다면 더욱 더 이득이 되리라 생각한다. 즉, 인텔 이외의 CPU들에서도 공통적인 개념에 대해 이해하고 있다면 훗날 이와 관련된 공부를 할 때 더 도움이 될 것이다. 그래서 인텔 CPU에 대해 알아보기 이전에 CPU의 전반적인 개념 및 특징에 대해 알아보고자 한다.

    <그림1 : 마이크로컴퓨터의 개략적인 구성도>

    그림1은 마이크로컴퓨터에 대한 개략적인 그림을 그려놓은 것이다. CPU는 모든 계산과 논리 연산이 이루어 지는 곳이다. CPU는 레지스터(register)라는 매우 작은 기억공간, 클럭(clock), 콘트롤 유닛(CU:Control Unit), 그리고 연산 장치(ALU:Arithmetic Logic Unit)를 포함하고 있다. 클럭은 다른 시스템 구성요소와 CPU의 내부 연산들을 동기화 시켜준다.

    동기화란 무엇일까? 정확한 개념의 정의는 여러 상황에 따라 조금씩 틀려지지만, 이해하기 쉽게 예를 들어 보이겠다. A라는 일과 B라는 일이 있는데, A와 B는 어떤 연관관계가 있어서 한쪽이 너무 빨라서는 안된다. 그럴 때 빠른쪽이 일을 끝낸 후 다른 쪽을 기다린다든가 하면서 두 가지 일이 따로 놀지 않도록 해주는 것이 바로 동기화라고 할 수 있다.

    콘트롤 유닛은 기계어를 수행하는 데에 있어 그 순서를 조정해준다. ALU는 산술 연산(+,-등)과 논리 연산(AND OR NOT등)을 담당한다. CPU는 컴퓨터에 여러 핀을 통해 꽂혀있는데, 이러한 핀들은 데이터 버스(data bus), 콘트롤 버스(control bus), 어드레스 버스(address bus)에 연결되어있다.

    메모리 저장장치(memory storage unit)은 컴퓨터가 작동하는 동안 명령이나 자료가 임시로 들어가는 곳이다. 이것은 CPU의 데이터 요청을 받아들이고, 데이터를 전송해준다. 또는 그 반대의 일도 하며, 일반적으로 RAM을 지칭한다. 버스는 병렬선의 한 그룹인데, 컴퓨터의 한 부분에서 다른부분으로 데이터를 전송해준다. 버스에는 크게 세 가지가 있는데, 그것은 바로 데이터 버스, 콘트롤 버스, 어드레스 버스이다.

    데이터 버스(data bus)는 명령이나 자료를 CPU와 메모리 사이에서 전송해준다. 콘트롤 버스(control bus)는 컴퓨터의 모든 장치에 이진 신호를 보내 동기화시켜준다. 어드레스 버스(address bus)는 CPU와 메모리 사이에서 데이터를 전송할 때 명령의 주소 또는 자료의 주소를 갖고 있다.

    클럭은 컴퓨터가 내부에서 하는 일의 일정한 싸이클을 의미한다. 쉽게 말하면 사람의 심장이 일정한 시간 간격으로 뛰는 것에 비유할 수 있다. 이러한 클럭을 이용하여 컴퓨터는 동기화하게 된다.

    마이크로컴퓨터가 갖는 기초적인 구조에 대해 설명해 보았는데, 간단히 설명하려다 보니 현실과는 조금 차이가 있을 수 있다. 하지만 그 개념만은 비슷하니 걱정할 필요 없다. 다소 모호하게 설명한 감이 없지 않지만 이 부분은 깊게 들어가면 한도 끝도 없으니 여기서 맺도록 하자.

  • 명령 수행 사이클

    CPU에서 한 명령이 수행되는데는 여러 연산이 필요한데, 이를 명령 수행 사이클이라고 한다. 프로그램이 수행되기 이전에 프로그램 자체는 메모리에 올려지게 된다. 다음 그림을 참고하기 바란다.

    <그림2 : 명령 수행 사이클(Instruction Execution Cycle)>

    프로그램에는 필요한 데이터들의 초기값이나 수행되어야 할 명령어들이 들어있을 것이고, 이것이 메모리에 올라가게 된다. 그림2의 맨 위에 보이는 PC(Program Counter)는 다음에 수행될 명령어를 가리키게 된다. (참고로 I-1, I-2와 같은 글자에서 I는 Instruction의 약자로 생각할 수 있다.)

    다시말해서 PC는 다음에 수행될 명령어의 주소를 갖고 있을 것이다. 쉽게 설명하면, GW-BASIC에서 줄번호가 있는데 그 줄번호를 기억하고 있는 것이 PC라고 생각하면된다. 또 goto문같은 제어문을 만나지 않는 이상 PC는 계속 바로 다음의 명령을 가리키게 될 것이다. Instruction Register는 명령어가 다음 차례를 기다리는 곳으로 생각하면 이해하기 쉬울 것이다.

    이제 명령은 해독과정을 거쳐 ALU(Arithmetic Logic Unit)로 들어가게 된다. 여기서부터는 명령의 종류에 따라 행동 양식이 달라질 수 있다. 명령은 피연산자가 있느냐 없느냐에 따라, 피연산자가 있다면 그것에 일반 메모리(이하 '메모리')가 있느냐 없느냐에 따라, 또 몇개냐에 따라 달라질 수 있다.

    그림에서 보다시피 ALU에서는 레지스터나 간접적으로 메모리에서 뭔가를 읽어들이고 출력을 레지스터나 메모리에 쓴다. 또한 flags에도 영향을 미칠 수 있다. 메모리레지스터, 플래그를 눈여겨 봐 두어라.(특히, 메모리와 레지스터의 차이에 대해서는 한번만 의심해보길 바란다. 바로 뒤에 나온다.) 지금은 저 그림이 이해되지 않을 수 있지만 앞으로 올라올 강좌들을 읽다 보면 충분히 이해할 수 있다. 그때가서 다시 언급하도록 하겠다.

    독자들은 위의 내용을 잃으면서 뭔가 모호하다는 느낌을 받았을 받았을 수도 있다. 사실 위에 나온 저 그림은 일종의 모델이고, 실제 CPU는 저 틀에서 변형되어있다. 위의 내용이 이해가지 않더라도 실망할 필요 없다. 오히려 위의 내용을 달달 외운다 하더라도 도움될 것이 하나도 없다.다만, 잠시나마 한번 생각해 보고 의심을 가져보는 독자가 있길 빈다. 그런 의도에서 이 내용을 기사에 실었으니, 부담없이 봐주었으면 한다.

  • 댓글
    안내
    궁금한 점을 댓글로 남겨주시면 답변해 드립니다.