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

ν”„λ‘œμ„ΈμŠ€(Process) vs. μŠ€λ ˆλ“œ (Thread)

by HelloRabbit 2023. 2. 7.
728x90

Goal

1. ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ˜ 차이점 μ„€λͺ…ν•˜κΈ°
2. λ©€ν‹° ν”„λ‘œμ„ΈμŠ€ λŒ€μ‹  λ©€ν‹° μŠ€λ ˆλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 이유 μ΄ν•΄ν•˜κΈ°

 

Q. ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ˜ μ°¨μ΄λŠ” 무엇인가?

A.

  • ν”„λ‘œμ„ΈμŠ€λž€ 운영체제(OS)λ‘œλΆ€ν„° λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ή λ°›μ•„ μ‹€ν–‰ λ˜λŠ” ν”„λ‘œκ·Έλž¨μ˜ μž‘μ—… λ‹¨μœ„λ₯Ό μ–˜κΈ°ν•˜κ³ , μŠ€λ ˆλ“œλŠ” μ΄λŸ¬ν•œ ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›μ„ μͺΌκ°œμ„œ μ‚¬μš©ν•˜λŠ” μ‹€ν–‰ λ‹¨μœ„μž…λ‹ˆλ‹€.
  • ν”„λ‘œμ„ΈμŠ€λŠ” 1개 μ΄μƒμ˜ μŠ€λ ˆλ“œλ‘œ μ‹€ν–‰λ˜κ³ , μžμ‹ λ§Œμ˜ κ³ μœ ν•œ μ£Όμ†Œκ³΅κ°„μ„ ν• λ‹Ή λ°›μŠ΅λ‹ˆλ‹€. μŠ€λ ˆλ“œλŠ” 이 쀑에 stack만 λ”°λ‘œ ν• λ‹Ή λ°›κ³  λ‚˜λ¨Έμ§€ μ˜μ—­μ€ μŠ€λ ˆλ“œλΌλ¦¬ κ³΅μœ ν•©λ‹ˆλ‹€.

ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λŠ” 1개 μ΄μƒμ˜ μŠ€λ ˆλ“œλ₯Ό 가지고 μžˆλ‹€

λ‹€λ₯Έμ  ν”„λ‘œμ„ΈμŠ€ μŠ€λ ˆλ“œ
μ •μ˜ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ή λ°›μ•„ μ‹€ν–‰λ˜λŠ” 컴퓨터 ν”„λ‘œκ·Έλž¨μ˜ μž‘μ—… λ‹¨μœ„ ν”„λ‘œμ„ΈμŠ€κ°€ ν• λ‹Ή 받은 μžμ›μ„ μ΄μš©ν•˜λŠ” μ‹€ν–‰ λ‹¨μœ„
(즉, 1개의 ν”„λ‘œμ„ΈμŠ€λŠ” 1개 μ΄μƒμ˜ μŠ€λ ˆλ“œλ₯Ό 가짐)
μ‹œμŠ€ν…œ μžμ› OSλ‘œλΆ€ν„° κ³ μœ ν•œ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ ν• λ‹Ή λ°›μŒ μŠ€λ ˆλ“œλŠ” 각각 stack만 λ”°λ‘œ ν• λ‹Ή λ°›κ³ , ν”„λ‘œμ„ΈμŠ€ λ‚΄μ˜ μ£Όμ†Œ 곡간과 μžμ›μ„ κ³΅μœ ν•¨
톡신 - λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›μ— μ ‘κ·Όν•˜λ €λ©΄ ν”„λ‘œμ„ΈμŠ€ κ°„μ˜ 톡신(IPC, inter-process communication)을 μ‚¬μš©ν•΄μ•Όν•¨μœΌλ‘œ
eg) pipe, socket, shared memory, message passing, semaphore

- 덜 νš¨μœ¨μ μž„
- 같은 ν”„λ‘œμ„ΈμŠ€ μ•ˆμ— μžˆλŠ” μŠ€λ ˆλ“œλ“€μ€ μžμ›μ„ κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— ν•œ μŠ€λ ˆλ“œκ°€ μžμ›μ„ λ³€κ²½ν•˜λ©΄ λ‹€λ₯Έ μŠ€λ ˆλ“œ(sibling thread)도 κ·Έ λ³€κ²½ κ²°κ³Όλ₯Ό μ¦‰μ‹œ μ•Œ 수 있음
- 더 νš¨μœ¨μ μž„
처리 μ‹œκ°„ - 생성/μ’…λ£Œν•˜λŠ”λ° μ‹œκ°„μ΄ 더 κ±Έλ¦Ό
- context switching μ‹œκ°„μ΄ 더 κ±Έλ¦Ό
- 생성/μ’…λ£Œν•˜λŠ”λ° μ‹œκ°„μ΄ 덜 κ±Έλ¦Ό
- context switching μ‹œκ°„μ΄ 덜 κ±Έλ¦Ό
콜 System Call
(process λ³€ν™˜μ€ OS의 μΈν„°νŽ˜μ΄μŠ€ μ‚¬μš©)
Library Call
(thread μ „ν™˜ μ‹œ OS 호좜 없이 컀널에 interrupt λ°œμƒ)
쀑단  λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ™€λŠ” 독립적이기 λ•Œλ¬Έμ— 쀑단 돼도 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€ μˆ˜ν–‰μ— 영ν–₯ λ―ΈμΉ˜μ§€ μ•ŠμŒ
eg) Chrome
user-level threadκ°€ μ€‘λ‹¨λ˜λ©΄ λͺ¨λ“  λ‹€λ₯Έ user-level threadκ°€ 쀑단됨
eg) Internet Explorer

Stack: ν•¨μˆ˜ 호좜 μ‹œ μƒμ„±λ˜λŠ” μž„μ‹œ 데이터λ₯Ό μ €μž₯ν•˜λŠ” μž„μ‹œ λ©”λͺ¨λ¦¬ μ˜μ—­; Heap: μ°Έμ‘°ν˜•μ˜ 데이터 값이 μ €μž₯λ˜λŠ” λ©”λͺ¨λ¦¬ μ˜μ—­; Code: 컴파일된 μ†ŒμŠ€ μ½”λ“œκ°€ μ €μž₯λ˜λŠ” μ˜μ—­; Data: μ „μ—­ λ³€μˆ˜, 정적 λ³€μˆ˜, λ°°μ—΄ 등이 μ €μž₯λ˜λŠ” μ˜μ—­

 

Q. λ©€ν‹° ν”„λ‘œμ„ΈμŠ€ λŒ€μ‹  λ©€ν‹° μŠ€λ ˆλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ”?

A.

  1. OSκ°€ μ‹œμŠ€ν…œ μžμ›μ„ 효율적으둜 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄μ„œ
    • ν”„λ‘œμ„ΈμŠ€λ₯Ό μƒμ„±ν•˜κ³  μ‹œμŠ€ν…œ μžμ›μ„ ν• λ‹Ήν•˜λŠ” μ‹œμŠ€ν…œ 콜이 쀄어듀어 μžμ›μ„ 효율적으둜 관리할 수 있음
    • μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€ λ‚΄μ˜ λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό μš΄μ˜ν•˜λŠ” κ²ƒκ³ΌλŠ” 달리 μ‹œμŠ€ν…œ μžμ› μ†Œλͺ¨κ°€ 쀄어듦
  2. 톡신 λΉ„μš© κ°μ†Œ 및 응닡 μ‹œκ°„ 단좕
    • μŠ€λ ˆλ“œλŠ” Stack μ˜μ—­ 이외 ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›μ„ κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신(IPC)보닀 μŠ€λ ˆλ“œ κ°„ ν†΅μ‹ μ˜ λΉ„μš©μ΄ 적음
    • Context switching μ‹œ μŠ€λ ˆλ“œλŠ” Stack μ˜μ—­μ— λŒ€ν•œ PCB μƒνƒœ 처리λ₯Ό ν•˜κΈ° λ•Œλ¬Έμ— ν”„λ‘œμ„ΈμŠ€ κ°„μ˜ μ „ν™˜ 속도보닀 μŠ€λ ˆλ“œ κ°„μ˜ μ „ν™˜ 속도가 빠름

 

πŸ“ Context switching : ν•œλ²ˆμ— ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ§Œ μ²˜λ¦¬ν•  수 μžˆλŠ” CPUμ—κ²Œ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ²˜λ¦¬ν•  수 μžˆλ„λ‘ ν˜„μž¬ 진행쀑인 μž‘μ—…μ„ μ €μž₯ν•˜κ³  λ‹€μŒμ— 진행될 μž‘μ—…μ˜ μƒνƒœκ°’μ„ PCBλ‘œλΆ€ν„° 읽고 CPUλ₯Ό μ μž¬ν•˜λŠ” 과정을 μ–˜κΈ°ν•¨
πŸ“ PCB (Process Control Block, ν”„λ‘œμ„ΈμŠ€ μ œμ–΄ 블둝) : νŠΉμ • ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•œ 정보λ₯Ό μ €μž₯ν•˜κ³  μžˆλŠ” 컀널 λ‚΄μ˜ 자료ꡬ쑰

 

λŒ“κΈ€