
μ°λ¦¬κ° λ§€μΌ μ¬μ©νλ μ»΄ν¨ν°λ λ¨μν μ μμ μΌκ³ νλ‘κ·Έλ¨μ μ€ννλ λꡬμ²λΌ 보μ΄μ§λ§, κ·Έ μμμλ μλ§μ 볡μ‘ν κ³Όμ μ΄ μ κΈ°μ μΌλ‘ λ§λ¬Όλ € λμκ°λ€. μ΄ κΈμμλ μ»΄ν¨ν°κ° μ€μ λ‘ μ΄λ»κ² λμνλμ§, κ·Έλ¦¬κ³ μ΄μ체μ μ 컀λ, λλΌμ΄λ²κ° μ΄λ€ μν μ νλμ§λ₯Ό κ°λ¨ν μ 리ν΄λ³Έλ€.
μ»΄ν¨ν°λ CPU, λ©λͺ¨λ¦¬, μ μ₯μ₯μΉ, μ μΆλ ₯ μ₯μΉ λ±μΌλ‘ μ΄λ£¨μ΄μ Έ μλ€. μ΄ μ€ CPUλ λͺ λ Ήμ΄λ₯Ό ν΄μνκ³ μ€ννλ ν΅μ¬ λλ μν μ νλ€. CPUλ μ€μ§ κΈ°κ³μ΄(Machine Code), μ¦ 0κ³Ό 1λ‘ μ΄λ£¨μ΄μ§ λͺ λ Ήλ§ μ΄ν΄ν μ μλ€. νμ§λ§ μ¬λμ΄ μ§μ μ΄μ§μλ₯Ό λ€λ£¨κΈ°λ λΉν¨μ¨μ μ΄κΈ° λλ¬Έμ, μ΄λ₯Ό μ¬λμ΄ μ½μ μ μλ ννλ‘ ννν κ²μ΄ μ΄μ λΈλ¦¬μ΄(Assembly)λ€.
μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ λͺ λ Ήμ΄ μλ€κ³ νμ.
MOV AX, 1
μ΄ λͺ λ Ήμ CPUμκ² βAX λ μ§μ€ν°μ μ«μ 1μ μ μ₯νλΌβλ μλ―Έλ€. μ€μ λ‘λ μ΄ λͺ λ Ήμ΄ 0κ³Ό 1μ μ‘°ν©μΌλ‘ λ³νλμ΄ CPUλ‘ μ λ¬λλ€. μ¦, μ΄μ λΈλ¦¬μ΄λ κΈ°κ³μ΄ λͺ λ Ήμ μ¬λμ΄ μ½κΈ° μ½κ² λ°κΎΌ ννλΌκ³ λ³Ό μ μλ€.
μ΄ν κ°λ°μλ€μ λ λμ μμ°μ±μ μν΄ κ³ κΈ νλ‘κ·Έλλ° μΈμ΄(High-level Language)λ₯Ό λ§λ€μλ€. νμ΄μ¬, μλ°μ€ν¬λ¦½νΈ, Cμ κ°μ μΈμ΄λ€μ΄ κ·Έ μλ€. μ΄λ° μΈμ΄λ€μ μ¬λμ΄ μ΄ν΄νκΈ° μ¬μ΄ λ¬Έμ₯ ννλ‘ μμ±λλ©°, λ΄λΆμ μΌλ‘λ μ»΄νμΌλ¬(Compiler)λ μΈν°ν리ν°(Interpreter)λ₯Ό ν΅ν΄ κΈ°κ³μ΄λ‘ λ³νλλ€.
μ¦, νλ‘κ·Έλλ° μΈμ΄μ λ°μ λ°©ν₯μ βμΆμν(Abstraction)βμλ€. ν μ€μ μ½λκ° μ¬λ¬ κ°μ κΈ°κ³ λͺ λ Ήμ μννκ² λ§λλ κ²μ΄λ€.
print("Hello World")
1. νμ΄μ¬ μΈν°ν리ν°κ° print()λ₯Ό ν΄μν¨
2. λ΄λΆμ μΌλ‘ C μΈμ΄μ I/O λΌμ΄λΈλ¬λ¦¬ νΈμΆ
3. C λΌμ΄λΈλ¬λ¦¬κ° μμ€ν
μ½(System Call)μ ν΅ν΄ 컀λμ μμ²
4. 컀λμ΄ λλ°μ΄μ€ λλΌμ΄λ²μκ² βνλ©΄μ μ΄ λ¬Έμμ΄μ μΆλ ₯νλΌβκ³ λͺ
λ Ή
5. λλΌμ΄λ²κ° λμ€νλ μ΄ νλμ¨μ΄λ₯Ό μ μ΄ν΄μ μ€μ λ‘ βHello Worldβλ₯Ό 보μ¬μ€
μ΄ κ°λ¨ν μ½λ ν μ€μ μ¬μ€μ λ©λͺ¨λ¦¬μ λ¬Έμμ΄μ μ μ₯νκ³ , μΆλ ₯ λ²νΌλ₯Ό μ΄κ³ , λμ€νλ μ΄ μ₯μΉλ‘ λ°μ΄ν°λ₯Ό μ μ‘νλ μ¬λ¬ 볡μ‘ν κ³Όμ μ ν¬ν¨νλ€. μ΄μ²λΌ μΆμνλ 볡μ‘ν μΌμ λ¨μν ννμΌλ‘ κ°μΈλ κ²μ΄λ€.
ννΈ, λ‘λ΄μ΄λ μΌμ κ°μ μλ² λλ μμ€ν μμλ CPU μ±λ₯μ΄λ λ©λͺ¨λ¦¬κ° μ νλμ΄ μκΈ° λλ¬Έμ, μ¬μ ν Cλ μ΄μ λΈλ¦¬ κ°μ μ μμ€(λλ μ μμ€μ κ°κΉμ΄) μΈμ΄κ° λ§μ΄ μ¬μ©λλ€. κΈ°κ³μ΄λ₯Ό μ§μ λ€λ£¨λ κ²½μ°λ κ±°μ μμ§λ§, νλμ¨μ΄λ₯Ό μΈλ°νκ² μ μ΄ν νμκ° μκΈ° λλ¬Έμ΄λ€.
λͺ¨λ μ»΄ν¨ν°λ κ²°κ΅ μ«μλ§μ λ€λ£¬λ€. λ¬Έμλ μ΄λ―Έμ§μ‘°μ°¨λ μ«μλ‘ λ³νλμ΄ μ μ₯λλ€. μλ₯Ό λ€μ΄ βAβλΌλ λ¬Έμλ μμ€ν€(ASCII) μ½λλ‘ 65μ ν΄λΉνλ€. βμ΄ μ«μλ μ΄ λ¬Έμλ₯Ό μλ―Ένλ€βλ μ½μμ΄ λ°λ‘ λ¬Έμ μΈμ½λ© 체κ³(Encoding)λ€. μ λμ½λλ μ΄λ₯Ό μ μΈκ³ μΈμ΄λ‘ νμ₯ν ννλ€.
μ΄μ μ΄μ체μ μ μν λ‘ λμ΄κ°λ³΄μ. μ΄μ체μ (Operating System)λ νλμ¨μ΄λ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκ³ , μ¬λ¬ νλ‘κ·Έλ¨μ΄ λμμ μ€νλ μ μλλ‘ λμμ£Όλ μμ€ν μ΄λ€. 리λ μ€(Linux), μ λμ€(Unix), μλμ°μ¦(Windows)κ° μ¬κΈ°μ μνλ€. μ΄μ체μ μ ν΅μ¬μλ 컀λ(Kernel)μ΄ μλ€.
컀λμ μ΄μ체μ μ μ€μ¬μ΄λ©°, CPU, λ©λͺ¨λ¦¬, λμ€ν¬ κ°μ μμμ ν¨μ¨μ μΌλ‘ λΆλ°°νκ³ λ³΄νΈνλ€. νμ§λ§ 컀λμ΄ λͺ¨λ νλμ¨μ΄μ μλ λ°©μμ μ§μ μ μλ μλ€. κ·Έλμ νλμ¨μ΄μ μν΅νκΈ° μν΄ λλΌμ΄λ²(Driver)λ₯Ό μ¬μ©νλ€.
μλ₯Ό λ€μ΄ μμ μ μ¬μνλ©΄ 컀λμ βμ€νΌμ»€λ‘ μ리 λ΄!βλΌλ λͺ λ Ήμ μ€λμ€ λλΌμ΄λ²μ μ λ¬νκ³ , λλΌμ΄λ²κ° μ€μ μ€νΌμ»€ νλμ¨μ΄μ μ νΈλ₯Ό λ³΄λ΄ μ리λ₯Ό λΈλ€. μ¦, 컀λμ νλμ¨μ΄λ₯Ό μ§μ μ μ΄νμ§ μκ³ λλΌμ΄λ²λ₯Ό ν΅ν΄ μ μ΄νλ€. νλ‘κ·Έλ¨μ΄ νλμ¨μ΄λ₯Ό μ μ΄νκΈ°κΉμ§μ μ 체 νλ¦μ λ€μκ³Ό κ°λ€.
[μ¬μ©μ]
β
[μμ© νλ‘κ·Έλ¨ (μ: Chrome, VSCode)]
β
[μμ€ν
νΈμΆ (System Call)]
β
[컀λ (Kernel)]
β
[λλΌμ΄λ² (Driver)]
β
[νλμ¨μ΄ (CPU, λ©λͺ¨λ¦¬, λμ€ν¬ λ±)]
μ¬μ©μκ° μμ© νλ‘κ·Έλ¨μ λͺ λ Ήμ λ΄λ¦¬λ©΄, νλ‘κ·Έλ¨μ μμ€ν νΈμΆ(System Call)μ ν΅ν΄ 컀λμκ² μμ²μ 보λΈλ€. 컀λμ μμ²μ ν΄μνκ³ , μ μ ν λλΌμ΄λ²λ₯Ό νΈμΆνμ¬ νλμ¨μ΄μ λͺ λ Ήμ λ΄λ¦°λ€. μ΄λ κ² μ»€λμ λͺ¨λ νλ‘κ·Έλ¨κ³Ό νλμ¨μ΄ μ¬μ΄μμ μ€μ¬μλ‘ μλνλ€.
κ²°κ΅, μ°λ¦¬κ° ν μ€μ μ½λλ₯Ό μ€ννλ μκ° κ·Έ λ€μμλ κΈ°κ³μ΄, μ΄μ λΈλ¦¬, μ»΄νμΌλ¬, 컀λ, λλΌμ΄λ², νλμ¨μ΄κ° 볡μ‘νκ² λ§λ¬Όλ € μμ§μ΄κ³ μλ€. νλ‘κ·Έλλ°μ μ΄ν΄νλ€λ 건 λ¨μν λ¬Έλ²μ μλ κ²μ΄ μλλΌ, κ·Έ μ½λκ° μ΄λ€ κ³Όμ μ κ±°μ³ μ€μ κΈ°κ³μμ μ€νλλμ§λ₯Ό μ΄ν΄νλ κ²μ΄λ€.