Linux System Calls
I. μμ€ν νΈμΆ(System Calls) κ°μ
- μμ€ν νΈμΆ(System Call)μ 컀λμ΄ μμ μ 보νΈνκΈ° μν΄ λ§λ μΈν°νμ΄μ€μ΄λ€. 컀λμ μ¬μ©μλ μμ© νλ‘κ·Έλ¨μΌλ‘λΆν° μ»΄ν¨ν° μμμ 보νΈνκΈ° μν΄ μμμ μ§μ μ κ·Όνλ κ²μ μ°¨λ¨νλ―λ‘, μμμ μ΄μ©νλ €λ©΄ μμ€ν νΈμΆμ΄λΌλ μΈν°νμ΄μ€λ₯Ό μ΄μ©νμ¬ μ κ·Όν΄μΌ νλ€.
- μμ€ν
νΈμΆμ κ·Όλ³Έμ μΌλ‘ μ μ λͺ¨λμμ μ€νλκ³ μλ νλ‘κ·Έλ¨μΌλ‘λΆν° OSλ₯Ό ν₯ν΄ λ§λ€μ΄μ§ μμ²μΌλ‘μ¨, νΉμ κΆνμ΄ νμν μ‘μ
μ μννλλ‘ μμ²νλ€. κ°μ₯ νν μμ€ν
νΈμΆμ μμλ νμΌμ μ΄κΈ°,λ«κΈ°,μλ‘μ΄ νλ‘μΈμ€ μμ±νκΈ°, λ©λͺ¨λ¦¬ κ΄λ¦¬νκΈ° λ±μ μμ
μ΄ μλ€. μ΄λ¬ν μμ
λ€μ μ μ λ 벨 μ½λμμ μ§μ μνλ μ μκΈ° λλ¬Έμ 컀λ, OS λ 벨μμ μνλλ€.
- μμ© νλ‘κ·Έλ¨ μ
μ₯μμμ μμ€ν
νΈμΆμ μ΄ν΄λ³΄λ©΄, μ΄λ€ μμ© νλ‘κ·Έλ¨μ μ«μ 14λ₯Ό, λ μ΄λ€ μμ© νλ‘κ·Έλ¨μ μ«μ 21μ νλλμ€ν¬μ μ μ₯νλ € νλ€κ³ κ°μ ν μ μλ€. λ μμ© νλ‘κ·Έλ¨μ΄ μκΈ° λ§μμ λλ μμΉμ μ§μ μ κ·Όνμ¬ λ°μ΄ν°λ₯Ό μ μ₯ν μ μλλ‘ νμ©νλ€λ©΄, λ€λ₯Έ μ¬λμ λ°μ΄ν°λ₯Ό μ§μ°κ±°λ λ΄ λ°μ΄ν°κ° λ€λ₯Έ μ¬λμ μν΄ μ§μμ§ μλ μλ€.
- μμ€ν
νΈμΆμ ν΅ν μ κ·Όμ κ²½μ°, μμ© νλ‘κ·Έλ¨μ΄ μ§μ νλλμ€ν¬μ λ°μ΄ν°λ₯Ό μ μ₯νμ§ μκ³ μ»€λμ΄ μ 곡νλ write() ν¨μλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ μ₯ν΄λ¬λΌκ³ μμ²νλ κ²μ΄λ€. μμ© νλ‘κ·Έλ¨μ λ°μ΄ν°κ° νλλμ€ν¬μ μ΄λ μμΉμ μ΄λ€ λ°©μμΌλ‘ μ μ₯λλμ§ μ§μ μ μ μκ³ , λ°μ΄ν°λ₯Ό μ½μ λλ read() ν¨μλ‘ μμ€ν
νΈμΆμ μ΄μ©νμ¬ κ°μ Έμ¬ μ μλ€. μ΄μ²λΌ μμ€ν
νΈμΆμ μ΄μ©νλ©΄ 컀λμ΄ λ°μ΄ν°λ₯Ό κ°μ Έμ€κ±°λ μ μ₯νλ νμλ₯Ό μ μ μΌλ‘ μ±
μμ§κΈ° λλ¬Έμ μ»΄ν¨ν° μμμ κ΄λ¦¬νκΈ° μμν΄μ§λ μ΄μ μ΄ μλ€.
II. μμ€ν νΈμΆμ΄ λμνλ λ°©μ
- μ μ λͺ¨λμμ μ€νμ€μΈ νλ‘κ·Έλ¨μ΄ μμ€ν
νΈμΆμ νκΈ° μν΄μλ νλ‘μΈμλ₯Ό Kerenel λͺ¨λλ‘ λ³κ²½νμ¬ νΉμ κΆνμ΄ νμν μ‘μ
μν λ° λ¦¬μμ€ μ κ·Όμ΄ κ°λ₯ν μ μλλ‘ νλ€. μ΄ κ³Όμ μ Software Interrupt μ΄λΌκ³ νλ€.
- μΈν°λ½νΈλ μ‘μ
μ΄ νμν νλμ¨μ΄/μννΈμ¨μ΄μμ μ΄λ²€νΈμ λν΄ νλ‘μΈμμκ² λ³΄λ΄λ μλ¦Ό μ νΈμ΄λ€. μμ©νλ‘κ·Έλ¨μ μν΄ μννΈμ¨μ΄ μΈν°λ½νΈκ° λ°μνλ©΄, νλ‘μΈμμ νΉμ μΈν°λ½νΈ μ½λλ₯Ό λ³΄λ΄ OSμ μΈν°λ½νΈ νΈλ€λ¬ 루ν΄μ μ€ννλλ‘ νΈλ¦¬κ±°νλ€.
- μΈν°λ½νΈ νΈλ€λ¬ 루ν΄μ OS 컀λ λ 벨μ μ¬μ μ μ μλ μ½λλ‘ μ μ λ 벨 νλ‘κ·Έλ¨μ μΈν°λ½νΈλ₯Ό λ€λ£° μ μλλ‘ λμμΈλμ΄μλ€. λ°μλ μμ€ν
νΈμΆ λ΄μ©μ μλ³νκ³ μΈν νλΌλ―Έν°λ₯Ό κ²μ¦ν λ€ μμ©νλ‘κ·Έλ¨μ λμ νμ¬ μμ²λ°μ μμ
λλ 리μμ€ μ κ·Όμ μννλ€.
- μμ²λ°μ μμ
μ΄ λͺ¨λ μλ£λκ³ λλ©΄ μΈν°λ½νΈ νΈλ€λ¬ 루ν΄μ μμ
κ²°κ³Όκ°μ λ°νν¨μΌλ‘μ¨ λ€μ μμ©νλ‘κ·Έλ¨μκ² μ μ΄κΆ(control)μ λκΈ°κ³ , μμ©νλ‘κ·Έλ¨μ μΈν°λ½νΈ μμ² μ§μ μ μνμ€μ΄λ μμ
μ μ΄μ΄λκ°κ² λλ€.
III. μμ€ν νΈμΆμ λΉμ©μ μΈ‘λ©΄
- μμ€ν
νΈμΆμ μ€νμ€μ΄λ μμ©νλ‘κ·Έλ¨ λμμ λ©μΆκ³ μΈν°λ½νΈ νΈλ€λ¬ 루ν΄μ νΈμΆνλ―λ‘ μμ μ¬μ©μ¨ μΈ‘λ©΄μμ μλμ μΌλ‘ λΉμΌ(?) νλ‘μΈμ€μ΄λ€. μ΄μ λ°λΌ ν¨μ¨μ μΈ μμ€ν
νΈμΆ λ°©μκ³Ό 루ν΄μ κ΅¬μ‘°κ° μ€μν΄μ§λλ°, μ΄λ OS/νλμ¨μ΄/μννΈμ¨μ΄ λ³λ‘ μ½κ°μ© λ€λ₯Έ νΉμ§μ μ§λκ² λλ€. μλ₯Ό λ€μ΄ OS λ³λ‘ μ¬λ¬ κ°μ§μ μμ
λ€μ΄ 1ν νΈμΆ μ΄λ΄μ νλ²μ μνλ μ μλλ‘ νμ¬ μ€λ²ν€λλ₯Ό μ€μ΄λ λ° λμμ΄ λλ κ°κΈ° λ€λ₯Έ λ°©μμ μμ€ν
νΈμΆ λ°©μμ μ§μνλ μμ΄λ€. μ: Linux - ioctl() , Windows - CreateProcess() , macOS - xattr()
- λ νλ‘μΈμ λ³λ‘ μμ€ν
νΈμΆμ μν κ°κΈ° λ€λ₯Έ νλμ¨μ΄μ μν¬νΈλ₯Ό μ§μνμ¬ λ³΄λ€ μ μ μ€λ²ν€λλ‘ μμ²λ°μ μμ
μ λΉ λ₯΄κ² μνν μ μλλ‘ μ€κ³λμ΄μλ€. (νλ‘μΈμκ° μλμΌλ‘ 컀λλͺ¨λλ‘ μ ν ν μΈν°λ½νΈ νΈλ€λ¬ λ£¨ν΄ μ§μ
> Context Switchλ‘ λ°μλλ μ€λ²ν€λ μ΅μν) λ‘μ¨μ κΈ°λ₯μ λ¬Έλ§₯μ λμΌνλ€.
- x86-64 μν€ν
μ²: syscall
- ARM μν€ν
μ²: svc(superviso call)
- IBM POWER μν€ν
μ²: sc(system call)
'Linux' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Linux Package 리λ μ€ ν¨ν€μ§ κ°μ (0) | 2023.03.08 |
---|---|
Linux Kernel 리λ μ€ μ»€λ κ°μ (0) | 2023.03.08 |
Linux Process νλ‘μΈμ€ μν νμΈ - ps, top (0) | 2023.03.06 |
Linux μμ€ν κ΅¬μ± μ 보 νμΈ - 컀λ,CPU,λ©λͺ¨λ¦¬,λμ€ν¬,NIC (1) | 2022.12.15 |
GNU GRUB Manual 2.06 (Command-line) (0) | 2022.02.02 |