λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
CS/운영체제

μΈν„°λŸ½νŠΈμ™€ μ‹œμŠ€ν…œ 콜

by joaa 2024. 2. 12.

🎈 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