🌐 CS & Infra/Operating System

[OS] ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ

devCloud 2026. 4. 2. 11:54
728x90

🧡 ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ: λ™μ‹œμ„±μ„ μ§€νƒ±ν•˜λŠ” 운영체제의 핡심

1. ν”„λ‘œμ„ΈμŠ€ vs μŠ€λ ˆλ“œ

μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μ€ μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μžμ›μ„ μ–΄λ–»κ²Œ ν• λ‹Ήλ°›λŠλƒμ— 따라 ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œλ‘œ λ‚˜λ‰©λ‹ˆλ‹€.

  • ν”„λ‘œμ„ΈμŠ€(Process): μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μžμ›μ„ ν• λ‹Ήλ°›λŠ” μž‘μ—…μ˜ λ‹¨μœ„μž…λ‹ˆλ‹€. μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨ κ·Έ 자체λ₯Ό μ˜λ―Έν•˜λ©°, λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­(Code, Data, Stack, Heap)을 κ°€μ§‘λ‹ˆλ‹€.
  • μŠ€λ ˆλ“œ(Thread): ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” νλ¦„μ˜ λ‹¨μœ„μž…λ‹ˆλ‹€. ν”„λ‘œμ„ΈμŠ€κ°€ 할당받은 μžμ›μ„ κ³΅μœ ν•˜λ©°, λ³„λ„μ˜ Stack μ˜μ—­λ§Œ λ”°λ‘œ κ°€μ§‘λ‹ˆλ‹€.

✨ 보완: IPC (Inter-Process Communication)
ν”„λ‘œμ„ΈμŠ€λŠ” λ…λ¦½λœ λ©”λͺ¨λ¦¬λ₯Ό κ°–κΈ° λ•Œλ¬Έμ— μ„œλ‘œ 데이터λ₯Ό μ£Όκ³ λ°›μœΌλ €λ©΄ λ³„λ„μ˜ 톡신 λ©”μ»€λ‹ˆμ¦˜(νŒŒμ΄ν”„, μ†ŒμΌ“, 곡유 λ©”λͺ¨λ¦¬ λ“±)이 ν•„μš”ν•©λ‹ˆλ‹€. 반면 μŠ€λ ˆλ“œλŠ” Heap μ˜μ—­μ„ κ³΅μœ ν•˜λ―€λ‘œ 톡신이 훨씬 κ°„νŽΈν•©λ‹ˆλ‹€.


2. λ™μ‹œμ„±(Concurrency)κ³Ό 병렬성(Parallelism)

  • λ™μ‹œμ„±(Concurrency): μ‹±κΈ€ μ½”μ–΄μ—μ„œ μ—¬λŸ¬ μž‘μ—…μ„ λ²ˆκ°ˆμ•„ κ°€λ©° μ‹€ν–‰ν•˜μ—¬, 마치 λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ 보이게 ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. (논리적 κ°œλ…)
  • 병렬성(Parallelism): λ©€ν‹° μ½”μ–΄μ—μ„œ μ—¬λŸ¬ μž‘μ—…μ„ 물리적으둜 λ™μ‹œμ— μ‹€μ œλ‘œ μ‹€ν–‰ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. (물리적 κ°œλ…)

πŸ‘‰ λ©€ν‹° μŠ€λ ˆλ“œλ₯Ό ν™œμš©ν•΄ μ‹±κΈ€ μ½”μ–΄μ—μ„œλŠ” λ™μ‹œμ„±μ„ κ΅¬ν˜„ν•˜κ³ , λ©€ν‹° μ½”μ–΄μ—μ„œλŠ” 병렬성을 μ‹€ν˜„ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ˜ νš¨μœ¨μ„ κ·ΉλŒ€ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


3. μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­ (Context Switching)

CPUκ°€ ν•œ ν”„λ‘œμ„ΈμŠ€(λ˜λŠ” μŠ€λ ˆλ“œ)μ—μ„œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ‘œ μ „ν™˜ν•  λ•Œ, ν˜„μž¬ μƒνƒœλ₯Ό μ €μž₯ν•˜κ³  μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λΆˆλŸ¬μ˜€λŠ” 과정을 λ§ν•©λ‹ˆλ‹€.

  • λΉ„μš© λ°œμƒ: μŠ€μœ„μΉ­μ΄ μΌμ–΄λ‚˜λŠ” λ™μ•ˆ CPUλŠ” μ•„λ¬΄λŸ° 일을 ν•  수 μ—†μœΌλ―€λ‘œ, λ„ˆλ¬΄ μž¦μ€ μŠ€μœ„μΉ­μ€ μ˜€λ²„ν—€λ“œλ₯Ό λ°œμƒμ‹œμΌœ μ„±λŠ₯을 λ–¨μ–΄λœ¨λ¦½λ‹ˆλ‹€.
  • μŠ€λ ˆλ“œμ˜ νš¨μœ¨μ„±: μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ€ ν”„λ‘œμ„ΈμŠ€λ³΄λ‹€ μŠ€λ ˆλ“œλ₯Ό μ‚¬μš©ν•  λ•Œ 훨씬 νš¨μœ¨μ μž…λ‹ˆλ‹€. κ³΅μœ ν•˜λŠ” μžμ›μ΄ λ§Žμ•„ ꡐ체해야 ν•  μ •λ³΄λŸ‰μ΄ 적기 λ•Œλ¬Έμž…λ‹ˆλ‹€.
ꡬ뢄 μž₯점 단점
ν”„λ‘œμ„ΈμŠ€ 독립적이라 μ•ˆμ „ν•¨ (ν•˜λ‚˜κ°€ 죽어도 영ν–₯ μ—†μŒ) μŠ€μœ„μΉ­ λΉ„μš© λ†’μŒ, μžμ› 곡유 볡작(IPC)
μŠ€λ ˆλ“œ μžμ› 곡유둜 λΉ λ₯΄κ³  νš¨μœ¨μ μž„ 곡유 μžμ› 동기화 문제, ν•˜λ‚˜κ°€ 죽으면 전체 μœ„ν—˜

4. μžλ°”μ—μ„œμ˜ λ©€ν‹°μŠ€λ ˆλ“œ μ œμ–΄

πŸ’‘ μŠ€λ ˆλ“œ 생성 방법

μžλ°”μ—μ„œλŠ” Thread 클래슀λ₯Ό μƒμ†λ°›κ±°λ‚˜, Runnable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€. 닀쀑 상속이 λΆˆκ°€λŠ₯ν•œ μžλ°” νŠΉμ„±μƒ Runnable κ΅¬ν˜„ 방식을 더 ꢌμž₯ν•©λ‹ˆλ‹€.

// 1. Runnable μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ (ꢌμž₯)
class MyRunnable implements Runnable {
    @Override
    public void run() { /* μž‘μ—… λ‚΄μš© */ }
}
new Thread(new MyRunnable()).start();

πŸ” 동기화와 흐름 μ œμ–΄

  • synchronized 블둝: μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— 같은 μžμ›μ— μ ‘κ·Όν•  λ•Œ λ°œμƒν•˜λŠ” 데이터 μ˜€μ—Όμ„ 막기 μœ„ν•œ μž₯μΉ˜μž…λ‹ˆλ‹€. ν•΄λ‹Ή 블둝에 μ§„μž…ν•˜λŠ” μŠ€λ ˆλ“œλŠ” Lock을 νšλ“ν•©λ‹ˆλ‹€.
  • Thread.sleep(ms): ν˜„μž¬ μŠ€λ ˆλ“œλ₯Ό μ§€μ •λœ μ‹œκ°„ λ™μ•ˆ μΌμ‹œ μ •μ§€(Timed Waiting) μƒνƒœλ‘œ λ§Œλ“­λ‹ˆλ‹€.

πŸ“Œ 핡심 μš”μ•½

βœ… ν•œ 쀄 정리

λ™μ‹œμ„±μ„ μœ„ν•΄ CPUλŠ” μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ„ ν•˜λ©° μŠ€λ ˆλ“œλ₯Ό λ²ˆκ°ˆμ•„ μ‹€ν–‰ν•˜κ³ , 데이터 μΆ©λŒμ„ 막기 μœ„ν•΄ synchronized둜 μˆœμ„œλ₯Ό μ§€ν‚€λ©°, sleep()으둜 흐름을 μ œμ–΄ν•©λ‹ˆλ‹€.

728x90