1. 경쟁 μƒνƒœ Race Condition

μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ“€(Execution-box)이 곡유 μžμ›(Storage-box)에 λ™μ‹œμ— μ ‘κ·Όν•˜λ €κ³  ν•˜λŠ” μƒν™©μ—μ„œ
μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€κ°€
λ§ˆμ§€λ§‰μœΌλ‘œ 데이터에 μ ‘κ·Όν–ˆλŠ”μ§€μ— 따라 λ°μ΄ν„°μ˜ μƒνƒœκ°€ λ‹¬λΌμ§ˆ 수 μžˆλŠ” μƒνƒœ.

 

즉, λ°μ΄ν„°μ˜ 일관성(λ°μ΄ν„°μ˜ 뢈일치)을 보μž₯ν•  수 μ—†μ–΄μ§€λŠ” 문제 λ°œμƒ.

→ 이같은 경쟁 μƒνƒœμ˜ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ ν”„λ‘œμ„ΈμŠ€λ“€μ€ 동기화(Synchronized)λ˜μ–΄μ•Ό ν•œλ‹€.

 

 

 

 

2. 동기화 Synchronization

μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€κ°€ κ³΅μœ ν•˜λŠ” μžμ›μ˜ 일관성을 μœ μ§€ν•˜λŠ” 것

일관성을 μœ μ§€ν•˜κ³  κ²½μŸμƒνƒœλ₯Ό 막기 μœ„ν•΄ ν˜‘λ ₯ ν”„λ‘œμ„ΈμŠ€ κ°„μ˜ μ‹€ν–‰μˆœμ„œλ₯Ό μ •ν•΄μ£ΌλŠ” λ§€μ»€λ‹ˆμ¦˜.

 

 

 

3. μž„κ³„ μ˜μ—­ Critical Section

μ½”λ“œ μƒμ—μ„œ Race condition이 λ°œμƒν•  수 μžˆλŠ” νŠΉμ • 뢀뢄을 λ§ν•œλ‹€.

즉, 곡유 데이터λ₯Ό μ ‘κ·Όν•˜λŠ” μ½”λ“œ 뢀뢄을 λ§ν•œλ‹€.

κ³΅λ™μœΌλ‘œ 이용되기 λ•Œλ¬Έμ— ν”„λ‘œμ„ΈμŠ€λ“€μ˜ μ ‘κ·Ό μˆœμ„œλ₯Ό μ •ν•˜μ—¬ μ˜ˆμƒμΉ˜ λͺ»ν•œ λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ 해야함.

 

 

3-1. μž„κ³„ μ˜μ—­ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 쑰건

β‘  μƒν˜Έλ°°μ œ (Mutual Exclusion)

  • ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ μž„κ³„ μ˜μ—­μ„ μž‘μ—… 쀑이라면, λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ“€μ€ ν•΄λ‹Ή μž„κ³„μ˜μ—­μ— μ§„μž…ν•˜λ©΄ μ•ˆλœλ‹€.

β‘‘ μ§„ν–‰ (Progress)

  • μ–΄λ– ν•œ ν”„λ‘œμ„ΈμŠ€λ„ μž„κ³„ μ˜μ—­μ„ μˆ˜ν–‰ν•˜κ³  μžˆμ§€ μ•Šμ„ λ•Œ, μž„κ³„ μ˜μ—­μ— μ ‘κ·Όν•˜κ³ μž ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€κ°€ μžˆλ‹€λ©΄
    ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€λ₯Ό μž„κ³„ μ˜μ—­μ— λ“€μ–΄κ°ˆ 수 있게 ν•΄μ•Όν•œλ‹€.
    즉, 아무도 μž„κ³„ μ˜μ—­μ— μ—†λŠ”λ° ν”„λ‘œμ„ΈμŠ€κ°€ μž„κ³„ μ˜μ—­μ— λͺ» λ“€μ–΄κ°€λ©΄ μ•ˆλœλ‹€λŠ” 뜻.

β‘’ ν•œμ • λŒ€κΈ° (Bounded Waiting)

  • μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€λ„ λ¬΄ν•œλŒ€κΈ°ν•˜μ§€ μ•Šμ•„μ•Όν•¨

 

더보기

μ°Έκ³ ) https://code-lab1.tistory.com/50?category=1213006 

 

[운영체제] 동기화 문제(Synchronization problem), 경쟁 μƒνƒœ(Race Condition), μž„κ³„ μ˜μ—­(Critical Section)

동기화 문제 (Synchronization Problem) λ™μ‹œμ— 곡유 μžμ›μ— μ ‘κ·Όν•˜λŠ” 것은 λ°μ΄ν„°μ˜ 일관성을 ν•΄μΉ  수 μžˆλ‹€. ν”„λ‘œμ„ΈμŠ€λ“€μ˜ μ‹€ν–‰ μˆœμ„œλ₯Ό μ •ν•˜μ—¬ 곡유 μžμ›μ˜ 일관성을 보μž₯ν•˜λŠ” 것을 동기화(Synchronization

code-lab1.tistory.com

 

μ°Έκ³ ) https://rebro.kr/176

 

[운영체제(OS)] 6. ν”„λ‘œμ„ΈμŠ€ 동기화(Process Synchronization)

[λͺ©μ°¨] 1. Race Condition 2. Critical Section 3. Synchronization Algorithms 4. Synchronization Hardware 5. Mutex Locks 6. Semaphores 7. Classical Problems of Synchronization 8. Monitor μ°Έκ³ ) - https://parksb.github.io/article/10.html - KOCW κ³΅κ°œκ°•μ˜

rebro.kr

 

μ°Έκ³ ) https://hyunse0.tistory.com/393

 

[OS] μž„κ³„κ΅¬μ—­, μž„κ³„κ΅¬μ—­ ν•΄κ²°

곡유 μžμ› shared resource μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€κ°€ κ³΅λ™μœΌλ‘œ μ΄μš©ν•˜λŠ” λ³€μˆ˜, λ©”λͺ¨λ¦¬, 파일 λ“± κ³΅λ™μœΌλ‘œ 이용되기 λ•Œλ¬Έμ— ν”„λ‘œμ„ΈμŠ€λ“€μ˜ μ ‘κ·Ό μˆœμ„œλ₯Ό μ •ν•˜μ—¬ μ˜ˆμƒμΉ˜ λͺ»ν•œ λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ 해야함 κ²½

hyunse0.tistory.com

 

1. ν”„λ‘œκ·Έλž¨ (Program)

  • μ–΄λ–€ μž‘μ—…μ„ ν•˜κΈ° μœ„ν•΄ ν•΄μ•Όν•  일듀을 μˆœμ„œλŒ€λ‘œ λ‚˜μ—΄ν•œ 것
  • μ»΄ν“¨ν„°μ—μ„œ μ–΄λ–€ μž‘μ—…μ„ μœ„ν•΄ μ‹€ν–‰ν•  수 μžˆλŠ” '정적인 μƒνƒœ'의 파일

 

2. ν”„λ‘œμ„ΈμŠ€ (Process)

  • ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λ©΄ ν”„λ‘œμ„ΈμŠ€ μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λœλ‹€. 즉, ν”„λ‘œκ·Έλž¨ 싀행에 ν•„μš”ν•œ λ‚΄μš©μ΄ λ©”λͺ¨λ¦¬(Ram)에 μ μž¬λ˜λŠ” 것.
  • μš΄μ˜μ²΄μ œκ°€ λ©”λͺ¨λ¦¬ λ“±μ˜ ν•„μš”ν•œ μžμ›μ„ ν• λ‹Ήν•΄μ€€ '싀행쀑인 ν”„λ‘œκ·Έλž¨'
  • ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜μ„œ λŒμ•„κ°€κ³  μžˆλŠ” μƒνƒœ, μ»΄ν“¨ν„°μ—μ„œ μ—°μ†μ μœΌλ‘œ μ‹€ν–‰λ˜κ³  μžˆλŠ” '동적인 μƒνƒœ'의 ν”„λ‘œκ·Έλž¨
  • μž‘μ—…κ΄€λ¦¬μ°½μ— ν‘œμ‹œλ˜μ–΄μžˆλŠ” 것듀이 ν”„λ‘œμ„ΈμŠ€μž„
  • ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›μ— μ ‘κ·Όν•˜λ €λ©΄ ν”„λ‘œμ„ΈμŠ€ κ°„μ˜ 톡신 ν•„μš”
  • 각 ν”„λ‘œμ„ΈμŠ€λŠ” λ³„λ„μ˜ μ£Όμ†Œκ³΅κ°„μ—μ„œ μ‹€ν–‰λ˜κ³ , ν”„λ‘œμ„ΈμŠ€λΌλ¦¬λŠ” μžμ›μ„ κ³΅μœ ν•˜μ§€ μ•ŠμŒ

 

2-1. ν”„λ‘œμ„ΈμŠ€μ˜ 생λͺ…μ£ΌκΈ°

  • new : ν”„λ‘œμ„ΈμŠ€κ°€ μƒμ„±λ˜λŠ” μƒνƒœ
  • ready : ν”„λ‘œμ„ΈμŠ€κ°€ CPU에 ν• λ‹Ήλ˜μ–΄, 처리되기λ₯Ό κΈ°λ‹€λ¦¬λŠ” μƒνƒœ
  • running: ν”„λ‘œμ„ΈμŠ€κ°€ CPU에 ν• λ‹Ήλ˜μ–΄, λͺ…령어듀이 μ‹€ν–‰ λ˜λŠ” μƒνƒœ
  • waiting: μ–΄λ–€ 이벀트의 λ°œμƒμœΌλ‘œ 인해 ν”„λ‘œμ„ΈμŠ€κ°€ κΈ°λ‹€λ¦¬λŠ” μƒνƒœ
  • terminated: ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ˜λŠ” μƒνƒœ

ν”„λ‘œμ„ΈμŠ€μ˜ 생λͺ…μ£ΌκΈ°

 

3. μŠ€λ ˆλ“œ (Thread)

  • ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” νλ¦„μ˜ λ‹¨μœ„
  • ν”„λ‘œμ„ΈμŠ€ ν•˜λ‚˜μ— μžμ›μ„ κ³΅μœ ν•˜λ©΄μ„œ 일련의 과정을 μ—¬λŸ¬ 개 λ™μ‹œμ— μ‹€ν–‰ μ‹œ 킬 수 μžˆλŠ” 것을 말함
  • 할당받은 μžμ›μ„ μ΄μš©ν•˜λŠ” μ‹€ν–‰μ˜ λ‹¨μœ„
  • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ ν•˜λ‚˜κ°€ ν”„λ‘œμ„ΈμŠ€μ΄κ³ ,  κ·Έ μ•ˆμ—μ„œμ˜ λΆ„κΈ° μ²˜λ¦¬κ°€ μŠ€λ ˆλ“œκ°€ λ˜λŠ” μ…ˆ

 

4. ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ

ν”„λ‘œμ„ΈμŠ€λŠ” 싀행될 λ•Œ μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° 각각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ ν• λ‹Ήλ°›λŠ”λ‹€.

μŠ€λ ˆλ“œλŠ” ν•œ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ λ™μž‘λ˜λŠ” νλ¦„μœΌλ‘œ, stack μ˜μ—­λ§Œ λ³„λ„λ‘œ ν• λ‹Ήλ°›κ³ ,

λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€μ˜ Code, Stack, Data, Heap μ˜μ—­μ€ κ³΅μœ ν•œλ‹€.

즉, ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μžμ‹ μŠ€λ ˆλ“œλ“€μ€ μ„œλ‘œ μ£Όμ†Œ κ³΅κ°„μ΄λ‚˜ μžμ›λ“€μ„ κ³΅μœ ν•˜λ©΄μ„œ 싀행될 수 μžˆλ‹€.

 

 

4. λ©€ν‹°ν”„λ‘œμ„ΈμŠ€(Multi Process)와 λ©€ν‹°μŠ€λ ˆλ“œ(Multi Thread)

  λ©€ν‹° ν”„λ‘œμ„ΈμŠ€ λ©€ν‹° μŠ€λ ˆλ“œ
κ°œλ… - 두 개 이상 λ‹€μˆ˜μ˜ ν”„λ‘œμ„Έμ„œ(CPU)κ°€ ν˜‘λ ₯적으둜
ν•˜λ‚˜ μ΄μƒμ˜ μž‘μ—…μ„ λ™μ‹œμ²˜λ¦¬ν•˜λŠ” 것(병렬)
- ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€μ— μ—¬λŸ¬ μŠ€λ ˆλ“œλ‘œ μžμ›μ„ κ³΅μœ ν•˜λ©°
μž‘μ—…μ„ λ‚˜λˆ„μ–΄ μˆ˜ν–‰ν•˜λŠ” 것
μž₯점 - λ…λ¦½λœ ꡬ쑰둜 μ•ˆμ •μ„± λ†’μŒ
(ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ 죽더라도 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ— 영ν–₯을
μ£Όμ§€ μ•ŠμŒ, μž‘μ—…μ†λ„κ°€ λŠλ €μ§€λŠ” μ •λ„μ˜ μ†ν•΄λ§Œ λ°œμƒ)
- λ©€ν‹° ν”„λ‘œμ„ΈμŠ€λ³΄λ‹€ 적은 λ©”λͺ¨λ¦¬ 곡간을 μ°¨μ§€
- context Switching이 λΉ λ₯Έ μž₯점
단점 - λ©€ν‹°μŠ€λ ˆλ“œλ³΄λ‹€ λ§Žμ€ λ©”λͺ¨λ¦¬κ³΅κ°„κ³Ό CPU μ‹œκ°„μ„ μ°¨μ§€ - 동기화 문제
- ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œ μž₯μ• λ‘œ 전체 μŠ€λ ˆλ“œκ°€ μ’…λ£Œλ  수 있음
곡톡점 λ™μ‹œμ— μ—¬λŸ¬ μž‘μ—…μ„ μˆ˜ν–‰

 

 

더보기

+ Recent posts