π User mode & Kernel mode
User mode
: μ°λ¦¬κ° κ°λ°νλ νλ‘κ·Έλ¨μ μΌλ°μ μΌλ‘ μ μ λͺ¨λμμ μ€ν
User mode -> Kernel mode
: νλ‘κ·Έλ¨ μ€ν μ€μ μΈν°λ½νΈκ° λ°μνκ±°λ μμ€ν μ½μ νΈμΆνκ² λλ©΄ 컀λ λͺ¨λλ‘ μ ν
Kernel mode
: νλ‘κ·Έλ¨μ νμ¬ CPU μνλ₯Ό μ μ₯ν¨.
컀λμ΄ μΈν°λ½νΈλ μμ€ν μ½μ μ§μ μ²λ¦¬. μ¦, CPUμμ 컀λ μ½λκ° μ€νλ¨.
μ²λ¦¬κ° μλ£λλ©΄ μ€λ¨λλ νλ‘κ·Έλ¨μ CPU μνλ₯Ό 볡μ.
Kernel mode -> User mode
: λ€μ ν΅μ κΆμ νλ‘κ·Έλ¨μκ² λ°ν
User mode
: νλ‘κ·Έλ¨μ΄ μ΄μ΄μ μ§νλ¨.
π 컀λ(kernel)
: μ΄μ체μ μ ν΅μ¬
μμ€ν μ μ λ°μ κ΄λ¦¬/κ°λ νλ μν
νλμ¨μ΄μ κ΄λ ¨λ μν μ μ§μ μν
컀λ λͺ¨λλ₯Ό λ§λ μ΄μ λ?
μμ€ν μ 보νΈνκΈ° μν΄.
Interrupt
: μμ€ν μμ λ°μν λ€μν μ’ λ₯μ μ΄λ²€νΈ νΉμ κ·Έλ° μ΄λ²€νΈλ₯Ό μ리λ λ©μ»€λμ¦
μΈν°λ½νΈ μ’ λ₯
: μ μ(power)μ λ¬Έμ κ° μκ²Όμ λ, I/O μμ μ΄ μλ£λμ λ, μκ°μ΄ λ€ λμ λ(timer κ΄λ ¨), 0μΌλ‘ λλ΄μ λ, μλͺ»λ λ©λͺ¨λ¦¬ 곡κ°μ μ κ·Όμ μλν λ, etc...
μΈν°λ½νΈκ° λ°μνλ©΄ CPUμμλ μ¦κ°μ μΌλ‘ μΈν°λ½νΈ μ²λ¦¬λ₯Ό μν΄ μ»€λ μ½λλ₯Ό 컀λ λͺ¨λμμ μ€ν.
System Call
: νλ‘κ·Έλ¨μ΄ OS 컀λμ΄ μ 곡νλ μλΉμ€λ₯Ό μ΄μ©νκ³ μΆμ λ μμ€ν μ½μ ν¨.
μμ€ν μ½μ μ’ λ₯
: νλ‘μΈμ€/μ€λ λ μμ±, μ’ λ£ λ±, νμΌ I/O κ΄λ ¨, μμΌ κ΄λ ¨, μ₯μΉ(device)κ΄λ ¨, νλ‘μΈμ€ ν΅μ κ΄λ ¨, etc...
μμ€ν μ½μ΄ λ°μνλ©΄ μμ€ν μ½μ λμνλ ν΄λΉ 컀λ μ½λκ° μ»€λ λͺ¨λμμ μ€νλ¨.
μμ )
user mode: t1 μ read system call
kernel mode: t1 CPU μν μ μ₯, νμΌ μ½μ μ€λΉ, t1 waiting, t2 runningμΌλ‘ μ ν
SSDμμ t1μ΄ μμ²ν νμΌμ μ½μ μ€λΉκ° λμλ€λ interrupt λ°μ
user mode: interrupt λ°μ
kernel mode: t2 CPU μν μ μ₯, t1 readyλ‘ μ ν, t2 CPU μν 볡μ
user mode: t2 μ€λ¨λλ νλ‘μΈμ€ μν μ€ time slice μ’ λ£, timer interrupt λ°μ
kernel mode: t2 CPU μν μ μ₯, t2 ready, t1 running, t1 CPU μν 볡μ
user mode: t1μ΄ νμΌμμ λ°μ΄ν° μ½μ΄μ€λ νλ‘μΈμ€ μ΄μ΄μ μ§ν
π νλ‘κ·Έλλ° μΈμ΄μ μμ€ν μ½
: νλμ¨μ΄ νΉμ μμ€ν κ΄λ ¨ κΈ°λ₯μ μ΄λ€ νλ‘κ·Έλ¨μ΄λΌλ λ°λμ μμ€ν μ½μ ν΅ν΄μλ§ κ°λ₯ν¨.
λ³΄ν΅ κ°λ°ν λ μ§μ OS μμ€ν μ½μ μ¬μ©νμ§ μμ.
μ΄λ»κ² κ°λ₯νκ°?
νλ‘κ·Έλλ° μΈμ΄λ€μ΄ μμ€ν μ½μ ν¬μ₯νμ¬ κ°μ μ μΌλ‘ μ¬μ©ν μ μλλ‘ μ 곡νκΈ° λλ¬Έ
java.lang.Thread class
Thread thread = new Thread();
thread.start();
java.lang.Thread class
public synchronized void start() {
...
boolean started = false;
try {
start0();
started = true;
} finally {
...
private native void start0(); //JNIλ₯Ό ν΅ν΄ OSμ system call μ νΈμΆ. linuxμ κ²½μ° clone
'CS > μ΄μ체μ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
block I/O vs non-block I/O (0) | 2024.02.15 |
---|---|
μ€λ λμ μ€λ λ ν (0) | 2024.02.13 |
CPU μ€μΌμ€λ¬ (0) | 2024.02.12 |
OSμμ νλ‘μΈμ€ μν (0) | 2024.02.10 |
λ°λλ½ (0) | 2024.02.09 |