μΆμ²
ChatGPT
λ€μ΄ν°λΈ μ½λ Native Code
λ€μ΄ν°λΈ μ½λλ νΉμ νλμ¨μ΄ μν€ν μ²μ μ΄μ 체μ μμ μ§μ μ€ν΄μ λλ κΈ°κ³μ΄(machine code)λ₯Ό λ§νλ€. λ€μ΄ν°λΈ μ½λλ νλ‘μΈμ€κ° μ§μ μ΄ν΄νκ³ μ€νν μ μλ ννμ μ½λμ΄κΈ° λλ¬Έμ, λ€λ₯Έ μ€κ° λ μ΄μ΄(μ: κ°μ λ¨Έμ§ λλ μΈν°νλ¦¬ν° )λ₯Ό κ±°μΉμ§ μκ³ μ§μ μ€νλλ€.
λ€μ΄ν°λΈ μ½λ νΉμ§
1. κΈ°κ³μ΄
- λ€μ΄ν°λΈ μ½λλ CPUκ° μ§μ μ΄ν΄ν μ μλ μ΄μ§ νμμ κΈ°κ³μ΄λ‘ λ³νλλ€.
- κ° CPU μν€ν μ²(μ: x86, ARM)μ λ°λΌ λ€λ₯Έ λͺ λ Ήμ΄ μΈνΈλ₯Ό μ¬μ©νλ―λ‘, νΉμ νλμ¨μ΄μ μ΅μ νλμ΄ μλ€.
2. νλ«νΌ μμ‘΄μ
- νΉμ νλμ¨μ΄μ μ΄μ 체μ μ μ’ μμ μ΄λ€. μ¦, ν νλ«νΌμμ μ»΄νμΌλ λ€μ΄ν°λΈ μ½λλ λ€λ₯Έ νλ«νΌμμ μ€νλμ§ μμ μ μλ€.
- μλ₯Ό λ€μ΄, x86 νλ‘μΈμλ₯Ό μν λ€μ΄ν°λΈ μ½λλ ARM νλ‘μΈμμμ μ€νλμ§ μλλ€.
3. λΉ λ₯Έ μ€ν μλ
- μ€κ° λ μ΄μ΄ μμ΄ μ§μ μ€νλκΈ° λλ¬Έμ, μΈν°ν리ν°λ κ°μ λ¨Έμ μ μ¬μ©νλ μ½λλ³΄λ€ λΉ λ₯΄κ² μ€νλ μ μλ€.
- μ»΄νμΌλ¬κ° μ΅μ νλ₯Ό ν΅ν΄ CPUμ λ©λͺ¨λ¦¬ ꡬ쑰μ λ§κ² μ½λλ₯Ό μ΅μ νν μ μλ€.
4. μ»΄νμΌλ¬μμ μμ±λ¨
κ³ κΈ μΈμ΄λ‘ μμ±λ μ½λλ μ»΄νμΌλ¬μ μν΄ λ€μ΄ν°λΈ μ½λλ‘ λ³νλλ€.
μλ₯Ό λ€μ΄, C/C++λ‘ μμ±λ νλ‘κ·Έλ¨μ μ»΄νμΌ λ¨κ³μμ λ€μ΄ν°λΈ μ½λλ‘ λ³νλλ€.
λ€μ΄ν°λΈ μ½λμ JVM
Javaμ κ°μ μΈμ΄μμλ JVM(Java Virtual Machine)μ ν΅ν΄ λ°μ΄νΈμ½λ(Bytecode)λ₯Ό μ€ννλ€. λ°μ΄νΈμ½λλ₯Ό νλ«νΌ λ 립μ μΈ μ€κ° μ½λλ‘, λͺ¨λ JVMμμ μ€νλ μ μλ€. κ·Έλ¬λ JVMμ΄ λ°μ΄νΈμ½λλ₯Ό λ€μ΄ν°λΈ μ½λλ‘ λ³ννμ¬ μ€νν λ, Just-In-Time (JIT) μ»΄νμΌλ¬κ° μ΄ μμ μ μννλ€.
JIT μ»΄νμΌλ¬μ μν
1. λμ μ»΄νμΌ
JIT μ»΄νμΌλ¬λ μ ν리μΌμ΄μ μ€ν μ λ°μ΄νΈμ½λλ₯Ό λ€μ΄ν°λΈ μ½λλ‘ λ³ννλ€. μ΄ λ³ν κ³Όμ μ λ°νμμ μνλλ©°, μμ£Ό μ€νλλ μ½λ ν¨μ€λ₯Ό μ΅μ ννλ€.
2. μ±λ₯ μ΅μ ν
JITλ νλ‘κ·Έλ¨μ μ±λ₯μ λμ΄κΈ° μν΄ μ€ν μ€μΈ μ½λμ νλ‘νμΌ μ 보λ₯Ό μμ§νκ³ , μ΄ μ 보λ₯Ό κΈ°λ°μΌλ‘ μ΅μ νλ₯Ό μννλ€.
λ€μ΄ν°λΈ μ½λμ μμ
C νλ‘κ·Έλ¨μ λ€μ΄ν°λΈ μ½λλ‘ μ»΄νμΌνλ μμ
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
μμ C μ½λλ₯Ό μ»΄νμΌνλ©΄, C μ»΄νμΌλ¬(gcc λλ clang λ±)κ° μ΄ μ½λλ₯Ό λ€μ΄ν°λΈ μ½λλ‘ λ³ννλ€. μλ₯Ό λ€μ΄, x86 μν€ν μ²μμ μ€νν μ μλ κΈ°κ³μ΄λ‘ λ³νλλ€.
λ€μ΄ν°λΈ μ½λλ‘ μ»΄νμΌ κ³Όμ
- ν리νλ‘μΈμ±: μ μ²λ¦¬κΈ°(Preprocessor)κ° #includeμ κ°μ λλ ν°λΈλ₯Ό μ²λ¦¬ν©λλ€.
- μ»΄νμΌ: κ³ κΈ μΈμ΄ μ½λλ₯Ό μ€κ° μ½λ(IR, Intermediate Representation)λ‘ λ³νν©λλ€.
- μ΄μ λΈλ¦¬: μ€κ° μ½λλ₯Ό μ΄μ λΈλ¦¬ μ½λλ‘ λ³νν©λλ€.
- λ§νΉ: μ΄μ λΈλ¦¬ μ½λλ₯Ό λ€μ΄ν°λΈ κΈ°κ³μ΄λ‘ λ³ννκ³ , νλ‘κ·Έλ¨μ μ€ν νμΌμ μμ±ν©λλ€.
λ€μ΄ν°λΈ μ½λ vs λ°μ΄νΈ μ½λ
νΉμ± | λ€μ΄ν°λΈ μ½λ | λ°μ΄νΈμ½λ |
μ’ μμ± | νλ«νΌμ μ’ μμ | νλ«νΌ λ 립μ |
μ€ν μλ | λ§€μ° λΉ λ₯΄λ€ | λλ¦Ό(μΈν°νλ¦¬ν° λλ VMμ μμ‘΄) |
μ μ°μ± | λ³κ²½ μ λ€μ μ»΄νμΌμ΄ νμνλ€ | λ³κ²½ μ μ¦κ°μ λ°μ κ°λ₯(JVM μ¬μ©) |
μ½λ ν¬κΈ° | μ΅μ νλ μμ ν¬κΈ° | λΉκ΅μ ν¬κ±°λ μ΅μ νλμ§ μμ |
λ°°ν¬ λ° μ μ§λ³΄μ | νλ«νΌλ³ λ³λ λ°°ν¬ νμ | λͺ¨λ νλ«νΌμμ λμΌν λ°°ν¬ κ°λ₯ |
λ€μ΄ν°λΈ μ½λμ AOT μ»΄νμΌ
AOT(Ahead-Of-Time) μ»΄νμΌλ¬λ JITμ λ¬λ¦¬ νλ‘κ·Έλ¨ μ€ν μ μ μμ€ μ½λ λλ λ°μ΄νΈμ½λλ₯Ό λ€μ΄ν°λΈ μ½λλ‘ λ³ννλ€. Javaμ GraalVM λλ.NETμ CoreRT κ°μ κΈ°μ μ΄ AOT μ»΄νμΌμ μ§μνλ€.
μ₯μ
1. λΉ λ₯Έ μμ μκ°
- μ±μ΄ μ€νλκΈ° μ μ μ΄λ―Έ λ€μ΄ν°λΈ μ½λλ‘ μ»΄νμΌλμ΄ μμ΄ μ€νμ΄ λΉ λ₯΄λ€
2. λ°°ν°λ¦¬ ν¨μ¨μ±
- λͺ¨λ°μΌ νκ²½μμλ λ°νμ μ»΄νμΌ λΆλ΄μ΄ μ€μ΄λ€μ΄ λ°°ν°λ¦¬ ν¨μ¨μ±μ΄ λλ€.
λ¨μ
1. νλ«νΌ μ’ μμ±
- AOTλ‘ μ»΄νμΌλ μ½λλ νΉμ νλ«νΌμ μ’ μμ μ΄λ―λ‘, κ° νλ«νΌμ λ§λ λ€μ΄ν°λΈ μ½λλ₯Ό λ³λ‘λ μ€λΉν΄μΌ νλ€.
2. μ΄κΈ° μ»΄νμΌ μκ° μ¦κ°
- μ΄κΈ° μ»΄νμΌ μκ°κ³Ό μ μ₯ 곡κ°μ΄ μ¦κ°ν μ μλ€.
κ²°λ‘
λ€μ΄ν°λΈ μ½λλ μ»΄ν¨ν° νλμ¨μ΄κ° μ§μ μ€νν μ μλ κΈ°κ³μ΄ ννμ μ½λλ‘, μ€ν μλμ ν¨μ¨μ±μ΄ λ°μ΄λλ€. JITμ AOT μ»΄νμΌλ¬λ κ³ κΈ μΈμ΄λ‘ μμ±λ μ½λ λλ λ°μ΄νΈμ½λλ₯Ό λ€μ΄ν°λΈ μ½λλ‘ λ³ννμ¬, μ ν리μΌμ΄μ μ μ±λ₯μ κ·Ήλννλ€. μ΄λ¬ν λ°©μμ λ€μν νλ«νΌμμ μ€ν κ°λ₯ν μ½λλ₯Ό κ°λ°νλ λ° μμ΄ μ€μν μν μ νλ©°, μ±λ₯ μ΅μ νμλ ν¬κ² κΈ°μ¬νλ€.
ChatGPTμκ² μ΄ κΈμ μΆμ²λ₯Ό λ¬Όμλ€.
λ€μ΄ν°λΈ μ½λμ λν μΆμ²
- "Computer Systems: A Programmer's Perspective" by Randal E. Bryant and David R. O'Hallaron
- λ΄μ©: μ΄ μ± μ μ»΄ν¨ν° μμ€ν μ λ΄λΆ ꡬ쑰μ μλ λ°©μμ νλ‘κ·Έλλ¨Έ κ΄μ μμ μ€λͺ νλ©°, λ€μ΄ν°λΈ μ½λμ κ°λ κ³Ό μ€μμ±μ λ€λ£Ήλλ€.
- μ€λͺ
:
- λ€μ΄ν°λΈ μ½λλ νλμ¨μ΄κ° μ§μ μ΄ν΄ν μ μλ κΈ°κ³μ΄λ‘ μ»΄νμΌλ νλ‘κ·Έλ¨μ λλ€.
- νλ‘κ·Έλ¨μ΄ νΉμ νλ«νΌμμ μ΅λμ μ±λ₯μ λ°νν μ μλλ‘ μ΅μ νλ ννμ λλ€.
- λ§ν¬: Computer Systems on Amazon
- "Modern Operating Systems" by Andrew S. Tanenbaum
- λ΄μ©: μ΄ μ± μ μ΄μ 체μ μ κΈ°λ³Έ μ리μ λ€μν ꡬ쑰λ₯Ό μ€λͺ νλ©°, λ€μ΄ν°λΈ μ½λκ° μ΄μ 체μ μ μ€νκ³Ό κ΄λ ¨λ λΆλΆμ λ€λ£Ήλλ€.
- μ€λͺ
:
- λ€μ΄ν°λΈ μ½λλ μ΄μ 체μ κ° μ§μ μ€νν μ μλ μ΄μ§ ννλ‘ μ»΄νμΌλ©λλ€.
- λ€μν μ΄μ 체μ μ νλμ¨μ΄ μν€ν μ²μ λ§μΆ° μ€κ³λ νλ‘κ·Έλ¨μ λ€μ΄ν°λΈ μ½λλ‘ μ»΄νμΌλμ΄ μ±λ₯μ μ΅μ νν©λλ€.
- λ§ν¬: Modern Operating Systems on Amazon
- "Compilers: Principles, Techniques, and Tools" by Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman
- λ΄μ©: μ»΄νμΌλ¬ μ΄λ‘ κ³Ό μ€κ³μ κΈ°μ΄λ₯Ό λ€λ£¨λ©°, μμ€ μ½λκ° λ€μ΄ν°λΈ μ½λλ‘ λ³νλλ κ³Όμ μ μ€λͺ ν©λλ€.
- μ€λͺ
:
- λ€μ΄ν°λΈ μ½λ λ³νμ μμ€ μ½λλ₯Ό νΉμ νλμ¨μ΄μ λ§μΆ μ΅μ νλ κΈ°κ³μ΄λ‘ λ³ννλ κ³Όμ μ λλ€.
- μ΄ κ³Όμ μ μ»΄νμΌλ¬μ μ΅μ ν λ¨κ³μμ μ΄λ£¨μ΄μ§λ©°, μ±λ₯ ν₯μμ μ€μν μν μ ν©λλ€.
- λ§ν¬: Compilers on Amazon
- "Programming Language Pragmatics" by Michael L. Scott
- λ΄μ©: μ΄ μ± μ νλ‘κ·Έλλ° μΈμ΄μ μ€κ³μ ꡬνμ κ΄ν λ΄μ©μ λ€λ£¨λ©°, λ€μ΄ν°λΈ μ½λμ κ΄λ ¨λ λ€μν κ°λ μ μ€λͺ ν©λλ€.
- μ€λͺ
:
- λ€μ΄ν°λΈ μ½λλ νΉμ νλ«νΌμ CPUμ μ΄μ 체μ μμ μ§μ μ€νλλ ννμ μ½λμ λλ€.
- μ΄ μ½λλ νλ«νΌμ μ΅μ νλμ΄ μ±λ₯μ κ·Ήλνν μ μμ΅λλ€.
- λ§ν¬: Programming Language Pragmatics on Amazon
- "The Art of Computer Programming" by Donald E. Knuth
- λ΄μ©: μ΄ μ± μ μ»΄ν¨ν° κ³Όνμ λ€μν μ£Όμ λ₯Ό λ€λ£¨λ©°, νΉν μκ³ λ¦¬μ¦κ³Ό κΈ°κ³μ΄, λ€μ΄ν°λΈ μ½λμ ꡬνμ κ΄ν λ΄μ©μ ν¬ν¨νκ³ μμ΅λλ€.
- μ€λͺ
:
- λ€μ΄ν°λΈ μ½λλ κ³ κΈ μΈμ΄μμ μμ±λ μ½λκ° κΈ°κ³μ΄λ‘ λ³νλμ΄ CPUμμ μ§μ μ€νλλ ννμ λλ€.
- μ΄ λ³ν κ³Όμ μ μ±λ₯ μ΅μ νμ μ€ν ν¨μ¨μ±μ κ·ΉλννκΈ° μν μ€μν λ¨κ³μ λλ€.
- λ§ν¬: The Art of Computer Programming on Amazon