βš™οΈ CS & 기타 개발 자료

βš™οΈ ν”„λ‘œμ„ΈμŠ€(Process) / μŠ€λ ˆλ“œ(Thread) κ°œλ… 정리

μ†Œμ˜ πŸ€ 2025. 6. 2. 00:23

πŸ“Œ μš”μ•½

  • ν”„λ‘œκ·Έλž¨: μ–΄λŠ μž‘μ—…μ„ ν•˜κΈ° μœ„ν•΄ 싀행될 수 μžˆλŠ” 파일
  • ν”„λ‘œμ„ΈμŠ€: λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€κ³ , μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° CPUλ₯Ό ν• λ‹Ήλ°›μ•„ μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨
  • μŠ€λ ˆλ“œ: ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰λ˜λŠ” 흐름 λ‹¨μœ„

βœ… ν”„λ‘œμ„ΈμŠ€ (Process)

ν”„λ‘œμ„ΈμŠ€λŠ” μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μ„ μ˜λ―Έν•©λ‹ˆλ‹€.

 

그럼 ν”„λ‘œκ·Έλž¨μ€ λ¬΄μ—‡μΌκΉŒμš”? ν”„λ‘œκ·Έλž¨μ€ μ»΄ν“¨ν„°μ—μ„œ μ‹€ν–‰ν•  수 μžˆλŠ” νŒŒμΌμ„ λ§ν•©λ‹ˆλ‹€.

λ‹€λ§Œ 아직 νŒŒμΌμ„ μ‹€ν–‰ν•˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ κ·Έλƒ₯ νŠΉμ •ν•œ μž‘μ—…μ„ μœ„ν•΄ μž‘μ„±λœ μ½”λ“œ 덩어리일 λΏμž…λ‹ˆλ‹€.

 

μš΄μ˜μ²΄μ œκ°€ μ‚¬μš©μžμ˜ μ‹€ν–‰ μš”μ²­μ— μ˜ν•΄ λ””μŠ€ν¬μ— μžˆλŠ” ν”„λ‘œκ·Έλž¨μ„ λ©”λͺ¨λ¦¬μ— 올리고 μ‹€ν–‰ν•˜λ©΄ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ λ©λ‹ˆλ‹€.

 

 

λ””μŠ€ν¬ λ‚΄μ—μ„œ 일반적으둜 ν”„λ‘œκ·Έλž¨μ€ text, data, bss둜 κ΅¬μ„±λ˜μ–΄ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

text(code) μ½”λ“œ.
CPUκ°€ μ‹€μ œλ‘œ μ‹€ν–‰ν•  기계어 λͺ…λ Ήμ–΄μ˜ λͺ¨μŒ.
data μ΄ˆκΈ°ν™”λœ 자료 ꡬ역.
int count =100; 처럼 μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™”κ°€ 된 μ „μ—­/정적 λ³€μˆ˜λ₯Ό 의미.
bss μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ 자료 ꡬ역.
값은 μ—†κ³  κ³΅κ°„λ§Œ μ •μ˜λ˜μ–΄ 있음.

 

 

이 ν”„λ‘œκ·Έλž¨μ΄ λ©”λͺ¨λ¦¬ κ³΅κ°„μœΌλ‘œ μ˜¬λΌκ°€λ©΄μ„œ stackκ³Ό heap μ˜μ—­ 곡간이 λ©”λͺ¨λ¦¬μ—μ„œ 동적 μƒμ„±λ©λ‹ˆλ‹€.

stack μ§€μ—­ λ³€μˆ˜μ™€ 같이 ν˜ΈμΆœν•œ ν•¨μˆ˜κ°€ μ’…λ£Œλ˜λ©΄ λ˜λŒμ•„μ˜¬ μž„μ‹œμ μΈ μžλ£”λ₯Ό μ €μž₯ν•˜λŠ” μ˜μ—­.
ν•¨μˆ˜μ˜ 호좜이 μ™„λ£Œλ˜λ©΄ μ†Œλ©Έλ¨.
μžλ™μœΌλ‘œ 관리됨.
heap λŸ°νƒ€μž„μ— new λ“±μœΌλ‘œ ν• λ‹Ή λ˜λŠ” 동적 λ©”λͺ¨λ¦¬.
μ‚¬μš©μž(개발자)에 μ˜ν•΄ λ©”λͺ¨λ¦¬ 곡간이 λ™μ μœΌλ‘œ ν• λ‹Ήλ˜κ³  ν•΄μ œλ¨.

 

λ˜ν•œ Process Control Block(PCB)이 μΆ”κ°€λ˜λŠ”λ°, 말 κ·ΈλŒ€λ‘œ ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΄€λ¦¬ν•˜λŠ” λΈ”λ‘μœΌλ‘œ ν”„λ‘œμ„ΈμŠ€ ID, λ©”λͺ¨λ¦¬ μ£Όμ†Œ λ“±μ˜ 정보λ₯Ό κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

μš΄μ˜μ²΄μ œλŠ” 이 PCBλ₯Ό 톡해 ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•œ 정보λ₯Ό μ–»κ³  ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

 

이 λͺ¨λ“  λ©”λͺ¨λ¦¬ ꡬ쑰(text, data, bss, heap, stack)λ₯Ό program image라고 ν•˜λ©°, 여기에 ν™˜κ²½ λ³€μˆ˜ λ“± runtime μ„€μ • 정보(environment)κ°€ ν•¨κ»˜ κ΅¬μ„±λ˜μ–΄ ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬ 곡간을 μ΄λ£Ήλ‹ˆλ‹€.

 

이후 μš΄μ˜μ²΄μ œκ°€ CPUλ₯Ό ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€μ— ν• λ‹Ήν•˜μ—¬ μ½”λ“œλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

 

 

ν”„λ‘œκ·Έλž¨κ³Ό ν”„λ‘œμ„ΈμŠ€μ˜ κ°œλ…μ„ κ°„λ‹¨ν•˜κ²Œ μ •λ¦¬ν•˜μžλ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • ν”„λ‘œκ·Έλž¨: μ–΄λ–€ μž‘μ—…μ„ ν•˜κΈ° μœ„ν•΄ μ‹€ν–‰ν•  수 μžˆλŠ” 파일
    • λ””μŠ€ν¬ 내에 μ €μž₯λ˜μ–΄ μžˆμ§€λ§Œ, λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€μžˆμ§€ μ•ŠλŠ” μ½”λ“œ 덩어리
  • ν”„λ‘œμ„ΈμŠ€: μ‹€ν–‰λ˜μ–΄ μž‘μ—… 쀑인 ν”„λ‘œκ·Έλž¨
    • λ©”λͺ¨λ¦¬ 내에 적재되고, CPU μžμ›μ„ ν• λ‹Ήλ°›μ•„ μ‹€ν–‰λ˜κ³  μžˆλŠ” μƒνƒœ
    • ν”„λ‘œμ„ΈμŠ€λΌλ¦¬λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬μ— 직접 μ ‘κ·Όν•  수 μ—†

πŸ“Œ ν”„λ‘œμ„ΈμŠ€ ꡬ쑰

text(code) μ½”λ“œ.
CPUκ°€ μ‹€μ œλ‘œ μ‹€ν–‰ν•  기계어 λͺ…λ Ήμ–΄μ˜ λͺ¨μŒ
data μ΄ˆκΈ°ν™”λœ 자료 ꡬ역
int count =100; 처럼 μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™”κ°€ 된 μ „μ—­/정적 λ³€μˆ˜λ₯Ό 의미
bss μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ 자료 ꡬ역
int count;처럼 값은 μ—†κ³  κ³΅κ°„λ§Œ μ •μ˜λ˜μ–΄ 있음
stack μ§€μ—­ λ³€μˆ˜μ™€ 같이 ν˜ΈμΆœν•œ ν•¨μˆ˜κ°€ μ’…λ£Œλ˜λ©΄ λ˜λŒμ•„μ˜¬ μž„μ‹œμ μΈ μžλ£”λ₯Ό μ €μž₯ν•˜λŠ” μ˜μ—­.
ν•¨μˆ˜μ˜ 호좜이 μ™„λ£Œλ˜λ©΄ μ†Œλ©Έλ¨.
μžλ™μœΌλ‘œ 관리됨.
heap λŸ°νƒ€μž„μ— new λ“±μœΌλ‘œ ν• λ‹Ή λ˜λŠ” 동적 λ©”λͺ¨λ¦¬.
μ‚¬μš©μž(개발자)에 μ˜ν•΄ λ©”λͺ¨λ¦¬ 곡간이 λ™μ μœΌλ‘œ ν• λ‹Ήλ˜κ³  ν•΄μ œλ¨.
PCB Process Control Block.
ν”„λ‘œμ„ΈμŠ€ ID, λ©”λͺ¨λ¦¬ μ£Όμ†Œ λ“±μ˜ 정보λ₯Ό ν¬ν•¨ν•˜κ³  있음.

βœ… μŠ€λ ˆλ“œ (Thread)

μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰λ˜λŠ” νλ¦„μ˜ λ‹¨μœ„μž…λ‹ˆλ‹€.

 

μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ 예둜 크둬 λΈŒλΌμš°μ €κ°€ μžˆμŠ΅λ‹ˆλ‹€.

ν¬λ‘¬μ΄λΌλŠ” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λ©΄, ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ μƒμ„±λ©λ‹ˆλ‹€.

이 ν¬λ‘¬μ—μ„œ μš°λ¦¬λŠ” 인터넷 기사λ₯Ό 읽기도, λ‹€λ₯Έ μ°½μ—μ„œ 유튜브λ₯Ό 보기도 ν•˜κ³ , 또 λ‹€λ₯Έ μ°½μ—μ„œ κ²Œμž„μ„ ν•˜κΈ°λ„ ν•˜λ©° μ—¬λŸ¬ 일을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

즉, ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ μ—¬λŸ¬ μž‘μ—…λ“€μ΄ λ™μ‹œμ— μ§„ν–‰λ˜λŠ”λ° 이 μž‘μ—…λ“€μ€ μ„œλ‘œ λ…λ¦½μ μž…λ‹ˆλ‹€.

ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ μ•ˆμ— μ—¬λŸ¬ μŠ€λ ˆλ“œλ“€μ΄ 있고, μ΄λ‘ μ μœΌλ‘œλŠ” μŠ€λ ˆλ“œ μˆ˜κ°€ λ§Žμ„ 수둝 λ™μ‹œμ— ν•  수 μžˆλŠ” μž‘μ—…μ΄ λ§Žμ•„μ§‘λ‹ˆλ‹€.

(μ‹€μ œλ‘œλŠ” λ³‘λ ¬λ‘œ μˆ˜ν–‰λ˜λŠ” μŠ€λ ˆλ“œ μˆ˜λŠ” CPI μ½”μ–΄ μˆ˜μ— 따라 μ œν•œλ©λ‹ˆλ‹€.)

 

ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μŠ€λ ˆλ“œλ‘œ λ™μ‹œ μž‘μ—…μ΄ κ°€λŠ₯ν•œ 것은 μŠ€λ ˆλ“œλΌλ¦¬ ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›μ„ κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

 

ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬ μ˜μ—­ 쀑 text, data, heap은 λ‹€λ₯Έ μŠ€λ ˆλ“œλ“€λΌλ¦¬ μ„œλ‘œ 곡유되고

stack μ˜μ—­μ€ μŠ€λ ˆλ“œλ§ˆλ‹€ μƒˆλ‘­κ²Œ ν• λ‹Ήλ°›μ•„ λ³„λ„μ˜ stack을 κ°€μ§‘λ‹ˆλ‹€.

stack은 ν•¨μˆ˜ 호좜 μ‹œ μ „λ‹¬λ˜λŠ” μΈμžλ‚˜ μ§€μ—­ λ³€μˆ˜ 등을 μ €μž₯ν•˜λŠ” κ³΅κ°„μœΌλ‘œ 독립적인 μŠ€νƒμ„ κ°€μ§μœΌλ‘œμ¨ μŠ€λ ˆλ“œλŠ” λ…λ¦½μ μœΌλ‘œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  수 있고, 독립적인 μ‹€ν–‰ 흐름을 κ°€μ§ˆ 수 있게 λ©λ‹ˆλ‹€.

 

λ³„λ„μ˜ stack을 κ°€μ§€κ³  μžˆμ§€λ§Œ heap λ©”λͺ¨λ¦¬λŠ” ν”„λ‘œμ„ΈμŠ€μ˜ heap μ˜μ—­μ„ λͺ¨λ‘ κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ—

μ„œλ‘œ λ‹€λ₯Έ μŠ€λ ˆλ“œμ—μ„œ 가져와 읽고 μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

ν”„λ‘œμ„ΈμŠ€λΌλ¦¬λŠ” μ„œλ‘œ λ…λ¦½λœ λ©”λͺ¨λ¦¬ 곡간을 μ‚¬μš©ν•˜λ―€λ‘œ μ„œλ‘œ 영ν–₯을 λΌμΉ˜μ§€ μ•Šμ§€λ§Œ

μŠ€λ ˆλ“œλ“€μ€ ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ—, ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ 잘λͺ»λœ λ©”λͺ¨λ¦¬ μ ‘κ·Όμ΄λ‚˜ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚€λ©΄ λ‹€λ₯Έ μŠ€λ ˆλ“œμ—λ„ 영ν–₯을 μ£Όμ–΄ 전체 ν”„λ‘œμ„ΈμŠ€κ°€ λΆˆμ•ˆμ •ν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.


참고자료

λ°˜μ‘ν˜•