πΉ μ 리 by μ₯λ―Έ(https://velog.io/@newbiekim/)
μμ€ν μ½μ μ¬μ©μ 곡κ°μ μ½λμμ 컀λ μλΉμ€(ν¨μ)λ₯Ό μμ²νλ κ³Όμ μ λ§νλ€.
μμ€ν νΈμΆ(System Call)μ μ΄μ체μ μ 컀λμ΄ μ 곡νλ μλΉμ€μ λν΄, μμ© νλ‘κ·Έλ¨μ μμ²μ λ°λΌ 컀λμ μ κ·ΌνκΈ° μν μΈν°νμ΄μ€μ΄λ€. λ³΄ν΅ Cλ C++κ³Ό κ°μ κ³ κΈ μΈμ΄λ‘ μμ±λ νλ‘κ·Έλ¨λ€μ μ§μ μμ€ν νΈμΆμ μ¬μ©ν μ μκΈ° λλ¬Έμ κ³ κΈ APIλ₯Ό ν΅ν΄ μμ€ν νΈμΆμ μ κ·Όνκ² νλ λ°©λ²μ΄λ€.
컀λ μ½(kernel call), νΈλ©(trap)μ΄λΌκ³ λ λΆλ₯΄λ©°, μμ© νλ‘κ·Έλ¨μ΄ 컀λ κΈ°λ₯μ νμ©νλλ‘ μ 곡νλ€.
μμ€ν νΈμΆ λΌμ΄λΈλ¬λ¦¬λ₯Ό ν΅ν΄ κ·Έ κΈ°λ₯μ μ¬μ©ν μ μλ€.
μ°λ¦¬κ° κ°λ°νλ νλ‘κ·Έλ¨μ μΌλ°μ μΌλ‘ μ μ λͺ¨λ(User Mode)μμ μ€ννλ€. νλ‘κ·Έλ¨ μ€ν μ€ μΈν°λ½νΈ(Interrupt)κ° λ°μνκ±°λ μμ€ν μ½(System Call)μ νΈμΆνκ² λλ©΄ 컀λ λͺ¨λ(Kernel Mode)λ‘ μ νλλ€.
컀λ λͺ¨λλ‘ μ νλ λμλ μ€ν μ€μ΄λ νλ‘κ·Έλ¨μ νμ¬ CPU μνλ₯Ό μ μ₯νλ€. κ·Έλ¦¬κ³ μ»€λμ΄ μΈν°λ½νΈλ μμ€ν μ½μ μ§μ μ²λ¦¬νλ€. μ²λ¦¬κ° μλ£λλ©΄ μ€λ¨λλ νλ‘κ·Έλ¨μ CPU μνλ₯Ό λ€μ 볡μνλ€.
OS 컀λμ΄ μ 곡νλ μλΉμ€λ₯Ό νλ‘κ·Έλ¨μ΄ μ΄μ©νκ³ μΆμ λ μμ€ν μ½μ μ΄μ©νλ€. μμ€ν μ½μ΄ λ°μνλ©΄ ν΄λΉ 컀λ μ½λκ° μ»€λ λͺ¨λμμ μ€νλλ€.
νλμ¨μ΄ νΉμ μμ€ν κ΄λ ¨ κΈ°λ₯μ μ΄λ€ νλ‘κ·Έλ¨μ΄λΌλ λ°λμ μμ€ν μ½μ ν΅ν΄μλ§ μ¬μ© κ°λ₯νλ€.
νμ§λ§ μ°λ¦¬λ κ°λ°ν λ μ§μ OS μμ€ν μ½μ μ¬μ©ν μ μ΄ μλ€. κ·ΈλΌμλ μ°λ¦¬λ μ§κΈκΉμ§ νμΌ I/O, λ€νΈμν¬ I/O, νλ‘μΈμ€, μ€λ λ κ΄λ ¨ μμ μ μ ν΄μλ€.
μ΄κ² μ΄λ»κ² κ°λ₯νλ κ²μΌκΉ?
μ°λ¦¬κ° μ¬μ©νλ νλ‘κ·Έλλ° μΈμ΄λ€μ΄ μμ€ν μ½μ ν¬μ₯(wrapping)νμ¬ κ°μ μ μΌλ‘ μ¬μ©ν μ μλλ‘ μ 곡νκΈ° λλ¬Έμ΄λ€.