CS/운영체제

11. μŠ€λ ˆλ“œ μ£Όμ†Œ 곡간과 μ»¨ν…μŠ€νŠΈ

🐳 Laboon 2024. 4. 22. 02:59

μŠ€λ ˆλ“œμ˜ μ£Όμ†Œ 곡간

μŠ€λ ˆλ“œμ˜ μ£Όμ†Œκ³΅κ°„μ€ 생각보닀 κ°„λ‹¨ν•˜λ‹€.

ν”„λ‘œμ„ΈμŠ€ μ£Όμ†Œκ³΅κ°„μ„ κ·ΈλŒ€λ‘œ λ‚˜λˆ„μ–΄κ°€μ§€κ³  μžˆλ‹€.

 

κΈ°μ‘΄ ν”„λ‘œμ„ΈμŠ€μ˜ μ½”λ“œ, 데이터, νž™, μŠ€νƒ μ˜μ—­μ€ 곡유 μ˜μ—­μ΄λ˜κ³  κ°œλ³„ μŠ€λ ˆλ“œλ§ˆλ‹€ μ½”λ“œ μ˜μ—­, 데이터 μ˜μ—­, μŠ€νƒ μ˜μ—­, 컀널 μ˜μ—­μœΌλ‘œ λ‚˜λˆ„μ–΄ μ‚¬μš©λ˜κ³  μžˆλ‹€.

 

β€» ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œλŠ” μœ μ‚¬ν•˜λ‹€λŠ” 것을 μ•Œ 수 μžˆλ‹€.


μŠ€λ ˆλ“œ 생λͺ… μ£ΌκΈ°

 

ν”„λ‘œμ„ΈμŠ€μ—μ„œ μŠ€λ ˆλ“œλ‘œ λ°”λ€Œμ—ˆμœΌλ‹ˆ μœ μ‚¬ν•œ 것은 λ‹Ήμ—°ν•˜λ‹€. 그럼 ν”„λ‘œμ„ΈμŠ€μ—μ„œ μžˆλŠ” κ°œλ…λ“€μ€ μ›¬λ§Œν•˜λ©΄ μŠ€λ ˆλ“œμ—λ„ μ μš©λœλ‹€λŠ” 것을 μ•Œ 것이닀. μŠ€λ ˆλ“œ λ˜ν•œ 생λͺ…μ£ΌκΈ°κ°€ μžˆλ‹€.

 

ν”„λ‘œμ„ΈμŠ€λŠ” NEW, Ready, Running, Blocked, Zombie, Out μƒνƒœκ°€ μžˆμ—ˆλ‹€.

μŠ€λ ˆλ“œλŠ” Ready, Running, Blocked, Terminated μƒνƒœκ°€ μžˆλ‹€. 각 μƒνƒœμ— λŒ€ν•œ 기본적이 λ‚΄μš©μ€ ν”„λ‘œμ„ΈμŠ€μ™€ λ™μΌν•˜λ‹€.

각 각 싀행을 λŒ€κΈ°, μ‹œμž‘, μΈν„°λŸ½νŠΈ 및 μ‹œμŠ€ν…œ 호좜, μ’…λ£Œ μƒνƒœλ₯Ό μ˜λ―Έν•œλ‹€.

μŠ€λ ˆλ“œμ˜ 생λͺ… μ£ΌκΈ°

 

pthread_create : μŠ€λ ˆλ“œμ˜ 생성도 fork()와 λ§ˆμ°¬κ°€μ§€λ‘œ λΆ€λͺ¨ μŠ€λ ˆλ“œκ°€ μžμ‹ μŠ€λ ˆλ“œλ₯Ό 생성할 수 μžˆλ‹€. 

pthread_exit() - μŠ€λ ˆλ“œλ₯Ό μ’…λ£Œν•œλ‹€. mainμ—μ„œ μ‹€ν–‰ν•  경우 main μŠ€λ ˆλ“œλ§Œ μ’…λ£Œλœλ‹€. ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œμ™€ λ‹€λ₯΄λ‹€.

pthread_join() - λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ μ’…λ£Œν•  λ•ŒκΉŒμ§€ λŒ€κΈ°ν•œλ‹€. (λΆ€λͺ¨ μŠ€λ ˆλ“œ)

yield() - μŠ€λ ˆλ“œκ°€ 자발적으둜 λ‹€λ₯Έ μŠ€λ ˆλ“œλ₯Ό μ‹€ν–‰ν•˜λ„λ‘ μ–‘λ³΄ν•œλ‹€.

 

ν”„λ‘œμ„ΈμŠ€λŠ” TCB에 μ»¨ν…μŠ€νŠΈ 정보와 μŠ€λ ˆλ“œ 정보, μŠ€μΌ€μ€„λ§ 정보 등이 μ €μž₯λ˜λŠ”λ° 컀널에 μ˜ν•΄ κ΄€λ¦¬λœλ‹€.

ν”„λ‘œμ„ΈμŠ€μ˜ PCBμ—μ„œ TCBκ°€ Linked List둜 μ—°κ²°λœλ‹€ PCB -> TCB1 -> TCB2

 

μŠ€λ ˆλ“œλŠ” μ–Έμ œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ΄ λ°œμƒν• κΉŒ?

 

Processμ—μ„œλŠ” Interruptλ‚˜ SystemCall에 μ˜ν•΄ ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ€„λ§μ˜ 변경이 생길 λ•Œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ΄ λ°œμƒν–ˆλ‹€.

Thread도 λ§ˆμ°¬κ°€μ§€λ‹€. μ‹œμŠ€ν…œ ν˜ΈμΆœμ΄λ‚˜ Interrupt λ˜λŠ” TimeSliceκ°€ μ†Œμ§„λœ κ²½μš°μ— μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ΄ λ°œμƒν•œλ‹€.

λ‹€λ§Œ μŠ€λ ˆλ“œμ—μ„œλŠ” μΆ”κ°€μ μœΌλ‘œ yield()와 같이 자발적으둜 λ‹€λ₯Έ μŠ€λ ˆλ“œμ—κ²Œ μ–‘λ³΄ν•˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœμ—μ„œλ„ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ΄ λ°œμƒν•  수 μžˆλ‹€. 크게 보면 System 호좜, Interrupt, TimeSlice μ†Œμ§„μΈ 것은 λ™μΌν•˜λ‹€.

 

이 λ•Œ, PCB의 μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­κ³Ό λ™μΌν•˜κ²Œ CPU의 μŠ€λ ˆλ“œ μ»¨ν…μŠ€νŠΈλ₯Ό TCB에 μ €μž₯ν•˜κ³  λ‹€μŒ 링크에 μžˆλŠ” TCBλ₯Ό CPU에 μ μž¬ν•œλ‹€. TCBλ₯Ό μ μž¬ν•˜λ©΄μ„œ SP λ ˆμ§€μŠ€ν„°λ₯Ό 톡해 μ΄μ „μ˜ μ€‘λ‹¨λœ μœ„μΉ˜μ—μ„œ 싀행을 μ΄μ–΄λ‚˜κ°ˆ 수 μžˆλ‹€.

 

μŠ€λ ˆλ“œλŠ” μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ˜ μ˜€λ²„ν—€λ“œκ°€ μ—†μ„κΉŒ?

 

μŠ€λ ˆλ“œλ„ λ§ˆμ°¬κ°€μ§€λ‘œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ— μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•œλ‹€.

μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ€ CPU μž‘μ—…μœΌλ‘œ λ§ˆμ°¬κ°€μ§€λ‘œ CPU μ‹œκ°„μ΄ μ†Œλͺ¨λ˜μ§€λ§Œ, ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ 덩어리λ₯Ό μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­ ν•  ν•„μš”κ°€ μ—†μ–΄μ‘ŒμœΌλ―€λ‘œ ν”„λ‘œμ„ΈμŠ€μ— λΉ„ν•΄ 많이 κ°€λ²Όμ›Œμ‘Œλ‹€λŠ” μž₯μ μ΄μžˆλ‹€.

 

μ˜€λ²„ν—€λ“œ λ°œμƒμ˜ 두 κ°€μ§€ 경우

 

1. λ™μΌν•œ ν”„λ‘œμ„ΈμŠ€μ—μ„œ λ‹€λ₯Έ μŠ€λ ˆλ“œλ‘œ μŠ€μœ„μΉ­

이 경우, CPU μ»¨ν…μŠ€νŠΈ 정보λ₯Ό TCB에 μ €μž₯ν•˜κ³  λ‹€μŒ μŠ€λ ˆλ“œμ˜ TCB 정보λ₯Ό CPU에 μ μž¬ν•˜λŠ” μ‹œκ°„μ΄ μ†Œλͺ¨λœλ‹€.

또, TCB λ¦¬μŠ€νŠΈμ—μ„œ ready인지 block인지 μƒνƒœλ₯Ό μ²˜λ¦¬ν•˜κ³  Cacheκ°€ 가득찼을 경우, μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­ν•˜λŠ” Thread의 Cache Memoryλ₯Ό Flushν•˜λŠ”λ° 좔가적인 μ‹œκ°„μ΄ μ†Œλͺ¨κ°€ λœλ‹€.

 

2. λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ μŠ€λ ˆλ“œλ‘œ μŠ€μœ„μΉ­

이 경우, ν”„λ‘œμ„ΈμŠ€ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­κ³Ό 거의 λ™μΌν•œ μ‹œκ°„μ΄ μ†Œλͺ¨λ  것이닀.

λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ μŠ€λ ˆλ“œμ— μ ‘κ·Όν•œλ‹€λŠ” 것은 μŠ€λ ˆλ“œ μ»¨ν…μŠ€νŠΈ 이전에 ν”„λ‘œμ„ΈμŠ€ μ»¨ν…μŠ€νŠΈκ°€ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. ν•˜μ§€λ§Œ λ©€ν‹° μŠ€λ ˆλ“œ OSμ—μ„œλŠ” μŠ€λ ˆλ“œλ₯Ό μŠ€μΌ€μ€„ λ‹¨μœ„λ‘œ μ²˜λ¦¬ν•˜λŠ” 점은 λͺ…μ‹œν•˜κ³  μžˆμ–΄μ•Ό ν•œλ‹€.

 

 ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ— λŒ€ν•œ 정리

 

  • ν”„λ‘œμ„ΈμŠ€λŠ” μŠ€λ ˆλ“œλ“€μ— λŒ€ν•΄ μ €μž₯ 곡간을 κ³΅μœ ν•˜κ³  μžˆλ‹€.
  • ν”„λ‘œμ„ΈμŠ€λŠ” μš΄μ˜μ²΄μ œκ°€ μ‘μš©ν”„λ‘œκ·Έλž¨μ„ μ μž¬ν•˜λŠ” λ‹¨μœ„μ΄λ‹€.
  • μŠ€λ ˆλ“œλŠ” μ‹€ν–‰ λ‹¨μœ„μ΄λ‹€.
  • PCBλŠ” ν™˜κ²½ μ»¨ν…μŠ€νŠΈ(environment context)라 ν•˜κ³  TCBλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ(execution context)라고 ν•œλ‹€.
  • ν”„λ‘œμ„ΈμŠ€μ— μ†ν•œ λͺ¨λ“  μŠ€λ ˆλ“œκ°€ μ’…λ£Œλ  λ•Œ ν”„λ‘œμ„ΈμŠ€λ„ μ’…λ£Œλœλ‹€.