μ€ν°λλ₯Ό μ΄μνκ³ μμ΅λλ€. ν΄λΉ repositoryμ κ°λ©΄ λ λ§μ μ 보λ₯Ό λ³΄μ€ μ μμ΅λλ€!
νΉν close λ PRμ 보μλ©΄, μ΄λ€ λΆλΆμ λν΄μ κ³ λ―Όνκ³ μ€ν°λμλ€κ³Ό μ΄μΌκΈ°λλ΄λμ§ λ³΄μ€ μ μμ΅λλ€
https://github.com/JulSaMo/CS-start
π λ€μ΄κ°λ©°
μ΄μ체μ (OS) : Window, DOS, UNIX, Linux, Mac OS λ±
μμ© νλ‘κ·Έλ¨ : νκΈ, μμ , λ©λͺ¨μ₯ λ± μ»΄ν¨ν° λ΄μ λ€μν νλ‘κ·Έλ¨λ€
μ΄μ체μ λ μ»΄ν¨ν°μ μμλ€μ ν¨μ¨μ μΌλ‘ κ΄λ¦¬νλ©° μ¬μ©μκ° μ»΄ν¨ν°λ₯Ό νΈλ¦¬νκ³ ν¨κ³Όμ μΌλ‘ μ¬μ©ν μ μλλ‘ νκ²½μ μ 곡νλ μ¬λ¬ νλ‘κ·Έλ¨μ λͺ¨μμ΄λΌκ³ μ΄ν΄νλ©΄ λλ€. (μΆν λ μμΈνκ² λ€λ£¬ ν¬μ€ν
μ μ¬λ¦΄ μμ μ΄λ)
μ΄μ 체μ λ μ»΄ν¨ν° μ¬μ©μμ μ»΄ν¨ν° νλμ¨μ΄ κ°μ μΈν°νμ΄μ€λ‘μ λμνλ μμ€ν
μννΈμ¨μ΄μ μΌμ’
μΌλ‘, λ€λ₯Έ μμ©νλ‘κ·Έλ¨μ΄ μ μ©ν μμ
μ ν μ μλλ‘ νκ²½μ μ κ³΅ν΄ μ€λλ€.
π 컀λ (kernel) μ΄λ?
μ»΄ν¨ν°μ μ μμ μΌλ©΄ μ΄μ체μ λ μ΄μ λμμ μνλλ€. μννΈμ¨μ΄κ° μ»΄ν¨ν° μμ€ν μμ μνλκΈ° μν΄μλ λ©λͺ¨λ¦¬μ κ·Έ νλ‘κ·Έλ¨μ΄ μ¬λΌκ° μμ΄μΌ νλ€. λ§μ°¬κ°μ§λ‘ μ΄μ체μ μ체λ μννΈμ¨μ΄λ‘μ μ μμ΄ μΌμ§κ³Ό λμμ λ©λͺ¨λ¦¬μ μ¬λΌκ°μΌνλ€.
νμ§λ§ μ΄μ체μ μ²λΌ κ·λͺ¨κ° ν° νλ‘κ·Έλ¨μ΄ λͺ¨λ λ©λͺ¨λ¦¬μ μ¬λΌκ°λ©΄ νμ λ λ©λͺ¨λ¦¬ 곡κ°μ΄ λλΉκ° μ¬ν κ²μ΄λ€. λ°λΌμ μ΄μ체μ μ€ νμ νμν λΆλΆλ§μ μ μμ΄ μΌμ§κ³Ό λμμ λ©λͺ¨λ¦¬μ μ¬λ €λκ³ , κ·Έλ μ§ μμ λΆλΆμ νμν λ λ©λͺ¨λ¦¬μ μ¬λ €μ μ¬μ©νκ² λλ€. μ΄λ λ©λͺ¨λ¦¬μ μμ£Όνλ μ΄μ체μ μ λΆλΆμ kernel(컀λ)μ΄λΌκ³ νλ€.
μ¦, 컀λμ λ©λͺ¨λ¦¬μ μμ£Όνλ λΆλΆμΌλ‘μ¨ μ΄μ체μ μ ν΅μ¬μ μΈ λΆλΆμ λ»νλ€.
(κ·Έλμ 보ν΅μ 'μ΄μ체μ 'λΌκ³ νλ©΄ kernelμ λ»νκΈ°λ νλ€)
π CPU λͺ¨λ
CPUλ μ¬μ©μ μ ν리μΌμ΄μ (User application)μ΄ μμ€ν μ μμμν€λ κ²μ λ°©μ§νκΈ° μν΄ 2κ°μ§ λͺ¨λλ₯Ό μ 곡νλ€. CPUμ μλ Mode bitλ‘ λͺ¨λλ₯Ό ꡬλΆνμ¬ 0μ '컀λλͺ¨λ(kernel mode)', 1μ 'μ¬μ©μλͺ¨λ (user mode)'λ‘ λλμ΄μ ꡬλλλ€. μ΄μ체μ μμ νλ‘κ·Έλ¨μ΄ ꡬλλλλ° μμ΄μ νμΌμ μ½μ΄μ€κ±°λ, νμΌμ μ°κ±°λ, νΉμ νλ©΄μ λ©μΈμ§λ₯Ό μΆλ ₯νλ λ± λ§μ λΆλΆμ΄ 컀λ λͺ¨λλ₯Ό μ¬μ©νλ€.
πΈ μ¬μ©μ λͺ¨λ (User Mode)
μ¬μ©μ λͺ¨λμμ μ¬μ©μ μ ν리μΌμ΄μ
μ½λκ° μ€νλλ€. μ¬μ©μκ° μ κ·Όν μ μλ μμμ μ νμ΄ μκΈ° λλ¬Έμ ν΄λΉ λͺ¨λμμλ νλμ¨μ΄(λμ€ν¬, I/O λ±)μ μ κ·Όν μ μλ€. (μ΄μ μ Blocking I/Oλ₯Ό λ°°μΈ λ μ§μ νλμ¨μ΄μ μ κ·Όνμ§ λͺ»νλ€κ³ λ°°μ λ€! μ°νν)
μ κ·Όμ μν΄μλ 'μμ€ν
μ½(System Call)'μ μ¬μ©ν΄μΌ νλ€. μ¬μ©μ μ ν리μΌμ΄μ
μ κ° μ€λ λλ€μ κ³ μ μ μ¬μ©μ λͺ¨λ μ€νμ κ°λλ€.(?)
πΈ 컀λ λͺ¨λ (Kernel Mode)
μ΄μ체μ (OS)κ° CPUλ₯Ό μ¬μ©νλ λͺ¨λμ΄λ€. μμ€ν μ½μ ν΅ν΄ 컀λλͺ¨λλ‘ μ νμ΄ λλ©΄ μ΄μ체μ λ νλμ¨μ΄λ₯Ό μ μ΄νλ λͺ λ Ήμ΄(Privileged Instructions)λ₯Ό μ€ννλ€. Privileged Instructionsλ μ¬μ©μ λͺ¨λμμ μ€νλλ©΄ exceptionμ΄ λ°μνλ€.
μ κ·Έλ¦Όκ³Ό κ°μ΄ μ¬μ©μ processλ User Modeμμ μ€νλλ€κ° μμ€ν μμμ μ¬μ©ν΄μΌν λ μμ€ν μ½μ νΈμΆν΄μ 컀λ λͺ¨λλ‘ μ νλμ΄ μμ μ μννκ³ μλ£ μ λ€μ μ¬μ©μ λͺ¨λλ‘ μ ννλ€.
π μμ€ν μ½ (System Call, = μμ€ν νΈμΆ)
μμμ CPU λͺ¨λμ λν΄μ μ€λͺ μ΄ λμ¬λ λμΆ©~! μμ€ν μ½μ΄ λ¬΄μ¨ μν μ νλμ§ κ°μ΄ μμ κ²μ΄λ€. λ μμΈν μμ보μ.
OSλ λ€μν μλΉμ€ λ€μ μννκΈ° μν΄ νλμ¨μ΄λ₯Ό μ§μ μ μΌλ‘ κ΄λ¦¬νλ€. μ΄μ λ°λ©΄ μμ© νλ‘κ·Έλ¨μ OSκ° μ 곡νλ μΈν°νμ΄μ€λ₯Ό ν΅ν΄μλ§ μμμ μ¬μ©ν μ μλ€. OSκ° μ 곡νλ μ΄λ¬ν μΈν°νμ΄μ€λ₯Ό 'μμ€ν μ½ (system call)' μ΄λΌκ³ νλ€.
μμ€ν μ½μ μ΄λ¬ν 컀λ μμμ κΈ°λ₯μ μ¬μ©μ λͺ¨λκ° μ¬μ© κ°λ₯νκ², μ¦, νλ‘μΈμ€κ° νλμ¨μ΄μ μ§μ μ κ·Όν΄μ νμν κΈ°λ₯μ ν μ μκ² ν΄μ€λ€. (μ¦, μμ©νλ‘κ·Έλ¨μ μμ€ν μ½μ μ¬μ©ν΄μ μνλ κΈ°λ₯μ μνν μ μμ.)
λ³΄ν΅ μ§μ μ μΌλ‘ μμ€ν μ½μ μ¬μ©νκΈ° 보λ€λ API(λΌμ΄λΈλ¬λ¦¬ ν¨μ)λ₯Ό ν΅ν΄ μ¬μ©νκ² λλ€.
μ κ·Έλ¦Όμ²λΌ μ΄μ체μ (OS)λ λ©λͺ¨λ¦¬μ νλ‘κ·Έλ¨ μ μ¬, I/Oμ²λ¦¬, νμΌμμ€ν μ²λ¦¬ λ± μ¬λ¬ μλΉμ€λ€μ μ 곡νλλ° μ¬μ©μ νλ‘μΈμ€λ μ΄μ μ§μ μ μΈ μ κ·Όμ΄ μλ μμ€ν μ½ νΈμΆμ ν΅ν΄ μλΉμ€λ₯Ό μ 곡λ°μ μ μλ€.
πΈ μμ€ν μ½ μ’ λ₯
μμ€ν μ½μ ν¬κ² 6κ°μ§λ‘ λΆλ₯ν μ μλ€.
- νλ‘μΈμ€ μ μ΄ (Process Control)
- λλ΄κΈ°(exit), μ€μ§ (abort)
- μ μ¬(load), μ€ν(execute)
- νλ‘μΈμ€ μμ±(create process) - fork
- νλ‘μΈμ€ μμ± νλκ³Ό μμ± μ€μ
- μκ° λκΈ° (wait time)
- μ¬κ±΄ λκΈ° (wait event)
- μ¬κ±΄μ μλ¦Ό (signal event)
- λ©λͺ¨λ¦¬ ν λΉ λ° ν΄μ
- νμΌ μ‘°μ (File Manipulation)
- νμΌ μμ± / μμ (create, delete)
- μ΄κΈ° / λ«κΈ° / μ½κΈ° / μ°κΈ° (open, close, read, wirte)
- μμΉ λ³κ²½ (reposition)
- νμΌ μμ± νλ λ° μ€μ (get file attribute, set file attribute)
- μ₯μΉ κ΄λ¦¬ (Device Manipulation)
- νλμ¨μ΄μ μ μ΄μ μν μ 보λ₯Ό μ»μ (ioctl)
- μ₯μΉλ₯Ό μꡬ(request device), μ₯μΉλ₯Ό λ°©μΆ (relese device)
- μ½κΈ° (read), μ°κΈ°(write), μμΉ λ³κ²½
- μ₯μΉ μμ± νλ λ° μ€μ
- μ₯μΉμ λ Όλ¦¬μ λΆμ°© λ° λΆλ¦¬
- μ 보 μ μ§ (Information Maintenance)
- getpid(), alarm(), sleep()
- μκ°κ³Ό λ μ§μ μ€μ κ³Ό νλ (time)
- μμ€ν λ°μ΄ν°μ μ€μ κ³Ό νλ (date)
- νλ‘μΈμ€ νμΌ, μ₯μΉ μμ±μ νλ λ° μ€μ
- ν΅μ (Communication)
- pipe(), shm_open(), mmap()
- ν΅μ μ°κ²°μ μμ±, μ κ±°
- λ©μμ§μ μ‘μ , μμ
- μν μ 보 μ λ¬
- μ격 μ₯μΉμ λΆμ°© λ° λΆλ¦¬
- λ³΄νΈ (Protection)
- chmod()
- umask()
- chown()
μμμ λμ¨ λͺ λ Ήμ΄λ€μ,,, UNIXμμ μ¬μ©νλ λͺ λ Ήμ΄μ΄λ€... (μμ€ν μ½μ μ€μννΈμμλ μ΄λ»κ² μ¬μ©λ κΉ?)
π Swiftμμμ μμ€ν μ½
π κ·Έμ μ, μμ€ν μ½μ API(λΌμ΄λΈλ¬λ¦¬ ν¨μ)λ‘ μ κ·Όνλ€λ κ² λ¬΄μ¨ λ»μΌκΉ?
OSλ λ€μν μλΉμ€λ€μ μννκΈ° μν΄ νλμ¨μ΄λ₯Ό μ§μ μ μΌλ‘ κ΄λ¦¬νλ€. μ΄μ λ°λ©΄μ μμ©νλ‘κ·Έλ¨μ OSκ° μ 곡νλ μΈν°νμ΄μ€λ₯Ό ν΅ν΄μλ§ μμμ μ¬μ©ν μ μλ€κ³ νλ€. κ·Έλμ μμ€ν μ½μ΄λΌλ κ°λ μ΄ λμλ€κ³ κΉμ§ λ°°μ λ€.
μ΄λ¬ν μμ€ν μ½μ μ§μ μ¬μ©νκ² λ§μ μ΄λ €μμ΄ μλ€κ³ νλ€. (μ?) λλ¬Έμ νλ‘κ·Έλλ° μΈμ΄λ€μ μμ€ν μ½μ νΈλ¦¬νκ² μ¬μ©νκΈ° μν μλ¨μΌλ‘ APIλ₯Ό μ 곡νλ€.
π λλΆλΆ CμΈμ΄μ κ΄λ ¨μλ μ€λͺ μ΄λλ°, CμΈμ΄λ₯Ό μ¬μ©ν κ°λ¨ν νλ‘κ·Έλ¨μ μμλ‘ μμ€ν μ½μ μ°μ μ μΌλ‘ μ΄ν΄ν΄λ³΄μ.
#include <stdio.h>
int main()
{
...
printf("Hello World!");
...
return 0;
}
printf() ν¨μλ user modeμμ μνλμ΄ stdio λΌμ΄λΈλ¬λ¦¬λ₯Ό νΈμΆνλ€. stdio λΌμ΄λΈλ¬λ¦¬λ μμ€ν μ½μΈ write()λ₯Ό νΈμΆνκ³ , μ€νμ νλ¦μ kernel mode λ‘ λ°λλ€. 컀λμ νΈμΆμ μ€ννμ¬ λͺ¨λν°μ λ¬Έμμ΄μ μΆλ ₯νκ³ μ€νμ νλ¦μ λ€μ user mode λ‘ λμ΄μ printf()μ ν¨μμ λ€μλ¨κ³λ₯Ό μ§ννλ€.
π CμΈμ΄μμμ μμ€ν μ½ (κ·Έλ₯ μμλ§ λκΈ°..)
CμΈμ΄μμ μ 곡νκ³ μλ νμ€ν¨μλ POSIX(Portable Operating System Interface)μ κ·μ μ λ°λΌ ν¨μλ₯Ό μ 곡νκ³ μμΌλ©°, OSκ°λ°μ¬ λλ μ»΄νμΌλ¬ κ°λ°μ¬μμ μΆκ°μ μΈ νμ₯ APIλ€μ μ 곡νλ κ²μ΄ μΌλ°μ μ΄λ€. CμΈμ΄λ₯Ό νμ©νμ¬ κ°λ°νλ κ°λ°μ μ μ₯μμλ μμ€ν μ½ ν¨μμ΄λ , λΌμ΄λΈλ¬λ¦¬ μ½ ν¨μμ΄λ λ¨μ§ ν¨μμ ννμ΄λ―λ‘ νΉλ³ν ꡬλ³λμ§λ μμ κ²μ΄λ€. κ·Έλ¬λ system call functionμ΄ μμ£Ό νΈμΆλλ©΄ μμ€ν μ±λ₯μ μν₯μ μ£ΌκΈ° λλ¬Έμ μ΅λν μκ³ μ°κ³ μμ ν΄μΌνλ€.
system call function κ³Ό library call functionμ μ°¨μ΄μ μ μλ κ²μκΈμμ μΆκ°λ‘ νμΈν΄λ³΄μ. (CμΈμ΄μ μ§μ€λ μ€λͺ μ΄λ―λ‘, λλ κ°λ΅νκ² νκ³ λμ΄κ°λ€)
π μλ κ·ΈλΌ swiftμμλ λ°λ‘ system call ν¨μκ° μλκ±ΈκΉ?
κ³Όμ° μ΄κ² Swiftμμλ μ΄λ»κ² μ¬μ©λκ³ μ΄λ»κ² μ°μ΄λ κ²μΌκΉ.
λ¨μνκ² μκ°ν΄λ³΄μ. μ°λ¦¬κ° μ¬μ©νλ Xcodeλ μμ©νλ‘κ·Έλ¨μ΄λ€. Xcodeλ΄λΆμμλ μμ€ν
μ½μ ν΅ν΄μ νμΌμ κ°μ Έμ€κ³ printλ₯Ό νκ³ νμ§ μμκΉ?
https://www.swift.org/blog/swift-system/
2020λ
μ―€ μ€μννΈμμλ μμ€ν
μ½κ³Ό κ΄λ ¨ν ν¨μλ€μ μ λΆ μ€νμμ€ν ν΄λμλ€κ³ λ§νλ€κ³ νλ€.
μ¦, μλλ C μΈν°νμ΄μ€μ μμ‘΄νμ¬ μμ€ν
μ½ ν¨μλ₯Ό νΈμΆνμλλ° μ΄ μ΄νλ‘λΆν° μ€μννΈ λ
μμ μΈ ν¨μλ₯Ό μ¬μ©ν μ μκ² νλ보λ€...!
(κ·Όλ° μ μμλ₯Ό μ°Ύμ§ λͺ»νλ,,)
μ΄ κΈμ 보면, μμ κ°μ Swift systemμ λ§λ μ΄μ κ° "λͺ¨λ μμ€ν μ½μ λ€λ£¨λ κ², κ·Έλ¦¬κ³ Cμ μ¬μ©μ λ체νλ κ²" μ΄λΌκ³ νλ€. κ·ΈλκΉ μ μ€νμμ€κ° μ§κΈ λ΄κ° 곡λΆνκ³ μλ μμ€ν μ½κ³Ό κ΄λ ¨ν μ€νμμ€μΈκ±΄ λ§λ€.
μ€ν μμ€ κΉνλΈλ μλμ κ°λ€.
https://github.com/apple/swift-system
https://seorenn.tistory.com/152
κ·Όλ° μ μ΄ μμ€ν μ½μ μλλ ν¨μλ‘ κ΅¬νν΄λ§μκΉ? λν γ μμκ° μλ€ ;;;;
https://gist.github.com/Azoy/a39cd31285d6d2e5c5e0d370675c290d
μ΄ μλλ νλ‘μΈμ€ μ μ΄νλ ꡬνμ ν΄λ³Έκ² κ°μλ° ...
https://sweetday-alice.tistory.com/170
π References
https://goodmilktea.tistory.com/23
https://m.blog.naver.com/zerozero/60000338473
'Computer > Computer Science' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Operating System] (iOS) IPC μ΄λ? (Inter-Process Communication) (0) | 2022.09.07 |
---|---|
[Operating System] (iOS) PCBμ Context Switching (4) | 2022.09.07 |
[Network] HTTPμ HTTPSμ λμκ³Όμ μ€λͺ νκΈ° (2) | 2022.09.05 |
[Network] TCPμ UDPμ κ°λ , 곡ν΅μ , μ°¨μ΄μ (0) | 2022.09.04 |
[Network] Blocking I/O μ Non-Blocking I/O μ λν΄μ μμ보μ (0) | 2022.09.04 |