나만의 가상 머신 TVM 설계하기 - 2

출처 : http://blog.naver.com/minochang?Redirect=Log&logNo=140005449443

나만의 가상 머신 TVM 설계하기 - 2
  저 자 : 이학균

  컴퓨터 오거나이제이션 관점
이제 컴퓨터 오거나이제이션의 관점에서 생성된 기계 코드를 하드웨어를 통해 어떻게 실행되는지를 알아보자. 일반적으로 우리가 쉽게 접할 수 있는 인텔 x86 아키텍처는 기능이 많아짐에 따라 그 구조가 복잡해졌다. 따라서 하드웨어를 통해 어떻게 기계 코드가 실행되는지를 간략히 이해하는 것이 목적이니 만큼 상대적으로 간단한 MIPS 아키텍처를 통해 살펴보도록 하자. MIPS 인스트럭션 셋은 1980년대 초반에 설계된 전형적인 인스트럭션 셋으로 NEC, 닌텐도, 소니 등에서 사용되었다. MIPS 인스트럭션 셋은 OPCode에 따라 <그림 3>과 같이 세 가지 형태로 구분된다.
하드웨어를 통해 어떻게 기계 코드가 실행되는지를 간략히 이해하는 것만으로도 충분할테니 R-type인 add $t0, $s1, $s2의 경우만 알아보자. MIPS 아키텍처에서 add=000000, $t0=01000, $s1=10001, $s2=10010으로 정의되어 있고 shamt와 funct는 add 명령에 대해 각각 00000, 100000으로 정의되어 있다. 앞의 인스트럭션을 기계 코드로 바꾼 값은 <표 1>과 같다. 이 값을 16진수로 표시하면 다음과 같다.

02 32 40 20

MIPS는 인스트럭션의 길이가 일정하기 때문에 32비트씩 읽어서 처리되지만 인스트럭션의 길이가 일정치 않은 CPU에서는 앞의 HEX 값의 초기 바이트를 읽어 OPCode를 얻는다. 그런 다음 각 OPCode에 맞는 인스트럭션 포맷에 맞게 나머지 바이트를 읽어 각 인자를 구해 연산을 수행하게 된다. <그림 4>는 MIPS CPU의 R-type을 위한 전체적인 datapath를 나타내었다.
<그림 4>의 datapath에서 위의 명령을 수행하기 위한 과정은 다음과 같다.


<그림4> MIPS CPU의 R-type 처리를 위한 datapath

① PC(Program Counter)가 가리키는 메모리 번지에서 32비트 인스트럭션을 가져온다.
② OPCode는 control, rs는 Read Register1, rt는 Read Register2, rd는 MUX, shamt와 funct는 ALU control의 입력부로 각각 들어간다.
③ OPCode에 따라 control의 각 값은 <표 2>와 같이 정해진다.
④ RegDest가 1이므로 1번 MUX에서 rd 값이 Write register로 들어가게 된다.
⑤ 레지스터 파일(register file)에서 입력 값으로 들어온 Read register index가 내부적으로 MUX로 선택되어 해당 값들이 Read data로 출력된다.
⑥ ALUSrc 값이 0이므로 2번 MUX에서 Read data2가 선택되어 Read data2와 Read data1이 ALU의 입력 값으로 들어간다.
⑦ ALU control의 출력 값은 <표 3>의 테이블에 의해 결정된다.
⑧ ALUOp가 10이고 funct 값이 100000이므로 ALU control은 010 값이 나가게 되어 ALU의 입력 값으로 들어가게 된다.
⑨ ALU에서는 Read data1과 Read data2를 ALU control이 요청한 add 연산을 수행한 후 결과를 출력한다.
⑩ MemRead 값이 0이므로 ALU 출력 값이 3번 MUX를 통해 레지스터 파일의 Write data로 들어간다.
⑪ 이와 같은 과정을 거쳐 add $t0, $s1, $s2 연산이 실행됨을 살펴보았다. 일반적으로 많이 쓰이는 인텔 x86 아키텍처의 구조와는 다르지만, 기본적으로 기계 코드가 하드웨어를 통해 실행되는 원리는 비슷하다. 이로써 우리가 C언어로 작성한 프로그램이 어떤 과정을 거쳐 하드웨어적으로 실행되는지를 컴퓨터 아키텍처 관점과 컴퓨터 오거나이제이션 관점에 간략히 살펴보았다.







by amplengine | 2008/09/26 10:31 | Virtual Machine | 트랙백 | 덧글(4)

트랙백 주소 : http://amplengin2.egloos.com/tb/874949
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by sizn at 2009/04/14 14:17
와~감사합니다!!!
Commented by amplengin2 at 2009/04/14 14:18
이쪽에 관심이 있나봐요?ㅎㅎ
Commented by sizn at 2009/04/14 14:21
ㅎㅎ;; 관심이 있어야겠죠? 컴퓨터공학도이니;;ㅎㅎ;;

MIPS Datapath 중간고사때문에요 ㅎㅎ 명령어 체계에 따른 데이터 패스 구현하는 문제 나오는데.. 어떻게 그려야할지 막막했는데.. 이 포스트가 힘을줬네요..ㅎㅎ

죄송하지만 그 정렬제약방식에서 Big Edian 방식 Little Edian 방식이있는데 이것도 정렬방식, 또 비정렬방식으로 나뉘는데... 막상 그림으로 그리라고 하면 헤깔리는데.. 도움좀 얻을수있을까요?^^?
Commented by amplengin2 at 2009/04/14 14:41
아.. 엔디언...ㅋㅋ 엔디언 관련된거는 구글이나 네이버 쳐보면 쭈루룩 나와요.ㅋ

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶