전공 과목/컴퓨터 구조

Lecture 08: Instructions - Language of the Computer - 5

arsenic-dev 2024. 10. 14. 03:29

경희대학교 김정욱 교수님의 컴퓨터 구조 수업을 기반으로 정리한 글입니다.

Translating and Starting a Program

Translation hierarchy for C language (번역 계층)

▶ Translation hierarchy for C language

 

어셈블러는 0과 1로 단순히 변환하는데,

이때 파일을 obj 파일이라고 한다. (0과 1로 이루어진 파일)

 

그리고 이러한 obj 파일을 여러 개 연결하여 하나의 소프트웨어, 실행 가능한 exe 파일을 링커가 만들고,

이렇게 만들어진 exe를 더블 클릭해서 사용자가 사용하겠다고 하면, 로더는 이 파일을 메모리 (RAM)에 올려 놓는다.

 

1. Compiler

High-level language code -> assembly language code (obj 파일)

 

※ 예전엔 High-level language를 담을 만큼 메모리가 크지 않았기에 어셈블리로 코딩하여 바로 기계어로 변환했다.

2. Assembler

assembly language code -> machine code (0과 1로 이루어진 binary code)

▶ Assembler accepts pseudo-instruction ex) move

 

Object file란?

Combination of machine language

▶ c -> obj

 

※ obj 파일 왼쪽에 000000f0 이런 거는 각각의 instruction 주소를 의미한다. ex) Exit, loop1, loop2

3. Linker

여러 오브젝트 파일을 하나로 묶어 exe 파일로 만든다.

▶ obj끼리 연결 -> exe

 

※ exe에서 hello1, 2 다 실행 가능하다.

Why linker is important?

 

c 업데이트시 retranslating, 즉 다시 변환하는 작업이 필요한데,

이때 전체를 다시 컴파일링 하는 게 아니라 변형되지 않은 부분은 그대로 유지하고,

변형된 부분만 변환하는 링커 덕에 컴퓨팅 리소스 낭비를 줄일 수 있다.

 

즉, Hello1, 2는 독립적으로, 한 줄이 바뀌면 그 바뀐 obj 파일만 변환한다.

 

⭐Dynamically linked libraries (DLLs)

동적으로 연결된 외부 라이브러리로, (obj 파일임)

내가 작성한 코드 외에 추가적인 기능을 외부(인터넷)에서 다운받는 것을 의미한다.

▶ DLL 사용 이유

  • 직접 만들기 귀찮음
  • 버전 관리 쉬움

ex) 2012년도 얼굴 검출 라이브러리 -> 2016년도 얼굴 검출 라이브러리로 DLL만 바꿔 끼면 코드는 그대로인데 얼굴 검출 라이브러리가 최신으로 바뀌어 성능이 좋아진다. (버전 관리 쉬움)

 

이때 링커는 내가 짠 obj 파일과 외부에서 짜여진 오브젝트 파일(DLL 파일)을 하나의 exe 파일로 만들어 준다.

▶ obj + dll -> exe

 

내가 짠 소프 파일을 어셈블러를 이용해 각각의 오브젝트로 만든 후,

이때 외부 라이브러리를 쓴다고 하면,

내가 만든 오브젝트 파일과 외부에 있는 오브젝트 파일(라이브러리 파일, DLL)을 연결하여 최종적으로 exe 파일을 만들 수 있다.

ARM vs. MIPS

▶ ARM vs. MIPS

 

※ Data addressing modes ex) lw, sw

 

ARM과 MIPS 차이점

1. ARM has more addressing modes

ARM은 메모리로 접근을 더 많이 한다. (MIPS와 용도 다름)

 

2. MIPS has more registers

MIPS - 0 레지스터 제외하고 31개, ARM - 0 레지스터 제외하고 16개

 

즉, 레지스터 호출 위해 ARM은 4비트, MIP는 5비트가 필요하다.

총 32마디 할 수 있는데 ARM은 비트 수 줄이니 더 다양한 말을 할 수 있다.

ex) 가지고 와(MIPS) -> 빠르게 가지고 와(ARM)

 

※ ARMv7: 경량화된 ISA

 

추가적인 차이점으로, instruction도 좀 다르다.

▶ Register-register and data transfer instructions

 

나누기는 다른 연산보다 시간이 오래 걸리기에 ARM은 버리길 선택, 즉 속도에 집중하였다. (경량화)

반면, MIPS는 좀 더 general한 용도로 사용이 가능하다.

Concluding Remarks (Instructions - Language of the Computer)

1. the three design principles: R-format, I-format, J-format

2. smaller is faster (레지스터)

3. Good design demand good compromises (타협)

ex) MIPS는 레지스터가 32개, 이때 더 빨리하겠다고 레지스터 개수를 16개로 줄이면 메모리로 왔다갔다 많이 해야 한다. 왜냐하면 레지스터에 임시로 저장을 하기 전에 개수가 부족하면 잠시 메모리에 저장하는 작업이 필요하다. 따라서 32개가 최적이다.

▶ 전체 코드에서 코드의 비중을 얼마나 차지 하는지 나타냄

 

※ 이때 플로팅 포인트는 소수점 연산이기에 복잡하여 (시간 많이 소요) 잘 사용하지 않아 비중이 낮다.