경희대학교 김정욱 교수님의 컴퓨터 구조 수업을 기반으로 정리한 글입니다.
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개가 최적이다.
▶ 전체 코드에서 코드의 비중을 얼마나 차지 하는지 나타냄
※ 이때 플로팅 포인트는 소수점 연산이기에 복잡하여 (시간 많이 소요) 잘 사용하지 않아 비중이 낮다.
'전공 과목 > 컴퓨터 구조' 카테고리의 다른 글
Lecture 10: Arithmetic for Computers - 2 (0) | 2024.10.17 |
---|---|
Lecture 09: Arithmetic for Computers - 1 (1) | 2024.10.16 |
Lecture 07: Instructions - Language of the Computer - 4 (1) | 2024.10.14 |
Lecture 06: Instructions - Language of the Computer - 3 (10) | 2024.10.08 |
Lecture 05: Instructions - Language of the Computer - 2 (3) | 2024.09.29 |