Post

🐒 chap13. λ™μ‹œμ„±

⭐ 13.1 λ™μ‹œμ„± μ†Œκ°œ

  • μ˜μ‚¬μ½”λ“œ seudo-code μ‚¬μš©
  • λ™μ‹œ μ‹œμŠ€ν…œconcurrent systemκ³Ό 본질적 속성
  • POSIX μŠ€λ ˆλ”© 라이브러리 POSIX threading library
  • λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” ν”„λ‘œκ·Έλž¨ 내뢀에 μ—¬λŸ¬ 둜직이 μžˆλ‹€λŠ” 의미
  • λ™μ‹œμ— μ—¬λŸ¬ μž‘μ—…μ„ μ²˜λ¦¬ν•  수 μžˆλŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λŠ” κ°•λ ₯ν•œ 도ꡬ
  • 주둜 μ»€λ„μ—μ„œ μ§€μ›ν•˜λŠ”λ°, 컀널은 운영체제의 심측뢀에 μžˆλ‹€.
  • λ™μ‹œμ— μ²˜λ¦¬ν•˜λŠ” 이유
    • νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜λŠ” λ™μ•ˆ μ›Ή μ„œν•‘
    • μœ νŠœλΈŒμ—μ„œ λΉ„λ””μ˜€λ₯Ό λ³Ό λ•Œμ™€ 같은 λΉ„λ””μ˜€μŠ€νŠΈλ¦¬λ° μ‹œλ‚˜λ¦¬μ˜€ λΉ„λ””μ˜€ ν”Œλ ˆμ΄μ–΄λŠ” 이전에 λ‹€μš΄λ°›μ€ μ½˜ν…μΈ  , 즉 청크chunkλ₯Ό 계속 λ³΄λŠ” λ™μ•ˆ λ‹€μŒ λΉ„λ””μ˜€ 청크λ₯Ό λ‹€μš΄λ‘œλ“œ
    • μ›Œλ“œ ν”„λ‘œμ„Έμ‹± ν”„λ‘œκ·Έλž¨ λ°±κ·ΈλΌμš΄λ“œμ—μ„œ λ™μ‹œμ— μ—¬λŸ¬ μž‘μ—…μ„ μ‹€ν–‰ μ›Œλ“œλ‘œ νƒ€μ΄ν•‘ν•˜λŠ” λ™μ•ˆμ—λ„ λ§žμΆ€λ²• κ²€μ‚¬κΈ°λ‚˜ 포맷터가 백그라운 λ“œμ—μ„œ μ‹€ν–‰
  • ν˜œνƒκ³Ό λ”λΆˆμ–΄ 골칫거리도 ν•¨κ»˜
  • μž‘μ—…μ΄ λ³‘λ ¬μ μœΌλ‘œ μ‹€ν–‰λœλ‹€λŠ” μ˜λ―Έμ΄μ§€λ§Œ, μ—„λ°€νžˆ 말해 β€˜μ°Έβ€™μ€ μ•„λ‹™λ‹ˆλ‹€ λ™μ‹œμ μ΄λΌλŠ” 말은 병렬적인 κ²ƒκ³ΌλŠ” λ‹€λ₯΄κΈ° λ•Œλ¬Έ

⭐ 13.2 병렬성

  • 병렬은 두 가지가 λ™μ‹œμ— λ°œμƒν•œλ‹€λŠ” 의미
  • λ™μ‹œ μ‹œμŠ€ν…œμ—μ„œλŠ” λ‹€λ₯Έ μž‘μ—…μ΄ 계속 μ‹€ν–‰ν•˜λ €λ©΄ ν•œ μž‘μ—…μ„ μΌμ‹œ 정지
  • ν”„λ‘œμ„Έμ‹± μœ λ‹›processing unit을 λΆ„λ¦¬ν•˜κ³  κ²©λ¦¬ν•˜λ©° 각각 νŠΉμ • μž‘μ—…μ— ν• λ‹Ή
  • κ°€μƒμ˜ CPUκ°€ 내뢀에 μ½”μ–΄λ₯Ό 였직 ν•˜λ‚˜λ§Œ κ°€μ Έμ„œ 병렬 μž‘μ—…μ„ ν–‰ν•  수 μ—†λ‹€κ³  κ°€μ •
  • λŒ€λΆ€λΆ„μ˜ μ•Œκ³ λ¦¬λ“¬μ€ 순차적sequential 이며 본질적으둜 λ³‘λ ¬μ μ΄μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. μŠ€λ ˆλ”©μ‘°μ°¨ 각 μŠ€λ ˆλ“œλŠ” 병렬적인 μ‹€ν–‰ 흐름 excution flow 으둜 λ‚˜λˆŒ 수 μ—†λŠ” μ—¬λŸ¬ 순차적 μ§€μ‹œμ–΄λ₯Ό κ°–μŠ΅λ‹ˆλ‹€.
  • 순차적 μ•Œκ³ λ¦¬λ“¬μ€ μš΄μ˜μ²΄μ œμ— μ˜ν•΄ 싀행에 병렬적인 νλ¦„μœΌλ‘œ μ‰½κ²Œ μžλ™ 뢄할될 수 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λ©€ν‹° μ½”μ–΄ CPU라면 νŠΉμ • CPU 코어에 μ‹€ν–‰ 흐름을 각각 ν• λ‹Ήν•΄μ•Ό ν•˜λ©°, ν•΄λ‹Ή 코어에 두 개 μ΄μƒμ˜ μ‹€ν–‰ 흐름이 ν• λ‹Ήλ˜μ—ˆλ‹€λ©΄ 이듀은 λͺ¨λ‘ λ³‘λ ¬μ μœΌλ‘œ 싀행될 수 μ—†κ³  λ™μ‹œμ μΈ ν–‰μœ„κ°€ μ¦‰μ‹œ κ΄€μ°°λ©λ‹ˆλ‹€.
  • λ©€ν‹° μ½”μ–΄ μ—μ„œλŠ” 사싀상 μ½”μ–΄ κ°„ 병렬성 및 동일 μ½”μ–΄μ˜ λ™μ‹œμ„±μ΄ λ‘˜ λ‹€ λ³΄μ΄λŠ”, ν˜Όν•©λœ ν–‰μœ„κ°€ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.
  • ν˜„μž¬μ˜ μš΄μ˜μ²΄μ œλŠ” 아직 λΆ„ν•  μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€

⭐ 13.3 λ™μ‹œμ„±

  • 닀쀑 μž‘μ—… multitasking β†’ λ™μ‹œμ„±μ€ 같은 κ°œλ…μž…
  • μ‹œμŠ€ν…œμ΄ λ™μ‹œμ— μ—¬λŸ¬ μž‘μ—…μ„ 관리할 λ•Œ, λ°˜λ“œμ‹œ μž‘μ—…μ΄ λ³‘λ ¬μ μœΌλ‘œ μ‹€ν–‰μ€‘μ΄λΌλŠ” μ˜λ―ΈλŠ” μ•„λ‹˜
  • μž‘μ—… μŠ€μΌ€μ€„λŸ¬ task schedulerλŠ” μ„œλ‘œ λ‹€λ₯Έ μž‘μ—…μ„ μ•„μ£Ό λΉ λ₯΄κ²Œ μ „ν™˜ν•˜λ©°, μƒλ‹Ήνžˆ 짧은 μ‹œκ°„ λ™μ•ˆ 각각의 μž‘μ—…μ„ μ•„μ£Ό μ‘°κΈˆμ”© μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • μ „ν™˜switching
  • μΈμœ„μ μΈ λ³‘λ ¬μ„±μ˜ ν•œ ν˜•νƒœ
  • λ©€ν‹±μŠ€λŠ” 닀쀑 μž‘μ—…κ³Ό λ™μ‹œμ μΈ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ κ³ μ•ˆλœ 졜초의 운영체제
  • POSIX ν˜Έν™˜ 운영체제

⭐ 13.4 μž‘μ—… μŠ€μΌ€μ€„λŸ¬ μœ λ‹›

  • λͺ¨λ“  닀쀑 μž‘μ—… (λ©€ν‹°νƒœμŠ€ν‚Ή ) μš΄μ˜μ²΄μ œλŠ” 컀널에 μž‘μ—… μŠ€μΌ€μ€„λŸ¬ μœ λ‹› task scheduler unit λ˜λŠ” μ€„μ—¬μ„œ μŠ€μΌ€μ€„λŸ¬ μœ λ‹›scheduler unit이 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • μž‘μ—… μŠ€μΌ€μ€„λŸ¬ μœ λ‹›μ— κ΄€ν•œ λͺ‡ 가지 사항
    • μŠ€μΌ€μ€„λŸ¬λŠ” 싀행을 κΈ°λ‹€λ¦¬λŠ” μž‘μ—…μ— λŒ€ν•œ λŒ€κΈ°μ—΄queue이 μžˆμŠ΅λ‹ˆλ‹€. μž‘μ—…task or jobμ΄λž€ μ‹€ν–‰ μ‹œ λ³„λ„μ˜ νλ¦„μ—μ„œ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•˜λŠ” μž‘μ—…λ“€μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
    • 일반적으둜 μ΄λŸ¬ν•œ λŒ€κΈ°μ—΄μ€ μš°μ„ μˆœμœ„κ°€ 높은 μž‘μ—…μ΄ λ¨Όμ € μ‹œμž‘λ˜λ„λ‘ μ„ νƒν•©λ‹ˆλ‹€.
    • λͺ¨λ“  μž‘μ—… μ‚¬μ΄μ—λŠ” μž‘μ—… μŠ€μΌ€μ€„λŸ¬ ν”„λ‘œμ„ΈμŠ€ μœ λ‹›μ„ κ΄€λ¦¬ν•˜κ³  κ³΅μœ ν•©λ‹ˆλ‹€. ν”„λ‘œμ„ΈμŠ€ μœ λ‹›μ΄ λΉ„μ–΄ μžˆμ„ λ•Œ(ν”„λ‘œμ„ΈμŠ€ μœ λ‹›μ„ μ‚¬μš©ν•˜λŠ” μž‘μ—…μ΄ μ—†λŠ” 경우), μž‘μ—… μŠ€μΌ€μ€„λŸ¬λŠ” λ‹€λ₯Έ μž‘μ—…μ΄ ν”„λ‘œμ„Έμ„œ μœ λ‹›μ„ μ‚¬μš©ν•˜λ„λ‘ ν•˜κΈ° 전에 λŒ€κΈ°μ—΄μ—μ„œ 이 μž‘μ—…μ„ 선택해야 ν•©λ‹ˆλ‹€. μž‘μ—…μ΄ μ’…λ£Œλ˜λ©΄ μž‘μ—… μŠ€μΌ€μ€„λŸ¬λŠ” ν”„λ‘œμ„Έμ„œ μœ λ‹›μ„ ν•΄μ œν•΄ λ‹€μ‹œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•œ 뒀에 또 λ‹€λ₯Έ μž‘μ—…μ„ μ„ νƒν•©λ‹ˆλ‹€. μ΄λŠ” μž‘μ—… μŠ€μΌ€μ€„λ§task scheduling 이라고 ν•˜λ©°, μž‘μ—… μŠ€μΌ€μ€„λŸ¬κ°€ 이λ₯Ό λ‹¨λ…μœΌλ‘œ λ§‘μŠ΅λ‹ˆλ‹€.
    • μž‘μ—… μŠ€μΌ€μ€„λŸ¬κ°€ μ‚¬μš©ν•  수 μžˆλŠ” μ—¬λŸ¬ μŠ€μΌ€μ€„λ§ μ•Œκ³ λ¦¬λ“¬μ΄ μ‘΄μž¬ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 λͺ¨λ“  μ•Œκ³ λ¦¬λ“¬μ€ νŠΉμ • μš”κ΅¬ 사항을 닀루어야 ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄, μ•Œκ³ λ¦¬λ“¬μ€ λͺ¨λ‘ 곡평해야fair ν•˜λ©° μ–΄λ–€ μž‘μ—…λ„ 였랜 μ‹œκ°„ λ™μ•ˆ μ„ νƒλ˜μ§€ λͺ»ν•œ 채 λŒ€κΈ°μ—΄μ—μ„œ κΈ°μ•„ μƒνƒœλ‘œstarved 계속 κΈ°λ‹€λ €μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.
    • μ„ νƒν•œ μŠ€μΌ€μ€„λ§ μ „λž΅μ— 따라 μŠ€μΌ€μ€„λŸ¬κ°€ ν”„λ‘œμ„ΈμŠ€ μœ λ‹›μ„ μ‚¬μš©ν•˜λ €λ©΄ μž‘μ—…μ— νŠΉμ •ν•œ νƒ€μž„ 슬라이슀time slice λ˜λŠ” νƒ€μž„ ν€€ν…€time quantum을 지정해야 ν•©λ‹ˆλ‹€. λ˜λŠ” μŠ€μΌ€μ€„λŸ¬λŠ” λ°˜λ“œμ‹œ μž‘μ—…μ΄ ν”„λ‘œμ„Έμ„œ μœ λ‹›μ„ ν•΄μ œν•  λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ•Ό ν•©λ‹ˆλ‹€.
    • μŠ€μΌ€μ€„λ§ μ „λž΅μ΄ μ„ μ ν˜•preemptiveμΌλ•Œ, μŠ€μΌ€μ€„λŸ¬λŠ” μ‹€ν–‰ 쀑인 μž‘μ—…μœΌλ‘œλΆ€ν„° CPU μ½”μ–΄λ₯Ό κ°•μ œλ‘œ νšŒμˆ˜ν•΄μ„œ λ‹€μŒ μž‘μ—…μ— μ½”μ–΄λ₯Ό μ œκ³΅ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. 이λ₯Ό 선점 μŠ€μΌ€μ€„λ§ preemptive scheduling이라고 ν•©λ‹ˆ λ‹€. λ˜ν•œ μž‘μ—…μ΄ CPUλ₯Ό 자발적으둜 ν•΄μ œν•˜λŠ” λ‹€λ₯Έ μ „λž΅μ„ 비선점 μŠ€μΌ€μ€„λ§ cooperative scheduling 이라고 ν•©λ‹ˆλ‹€.
    • 선점 μŠ€μΌ€μ€„λ§ μ•Œκ³ λ¦¬λ“¬μ€ νƒ€μž„ 슬라이슀λ₯Ό μ„œλ‘œ λ‹€λ₯Έ μž‘μ—… 간에 κ· λ“±ν•˜κ³  κ³΅ν‰ν•˜κ²Œ λ°°λΆ„ν•˜λ €κ³  ν•©λ‹ˆλ‹€. μš°μ„ μˆœμœ„κ°€ μžˆλŠ” μž‘μ—…μ€ 더 자주 선택될 수 있고 μŠ€μΌ€μ€„λŸ¬μ˜ κ΅¬ν˜„μ— 따라 더 κΈ΄ νƒ€μž„ 슬라이슀λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ „ν™” λΆ€μŠ€

⭐ 13.5 ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ

  • μš΄μ˜μ²΄μ œμ—μ„œ μž‘μ—…μ΄λž€ ν”„λ‘œμ„ΈμŠ€ λ˜λŠ” μŠ€λ ˆλ“œ
  • μ‹œλΆ„ν• time-sharing λ˜λŠ” μ„ μ ν˜• μŠ€μΌ€μ€„λŸ¬
  • μ„ μ ν˜• μŠ€μΌ€μ€„λŸ¬κ°€ μ‹€ν–‰ 쀑인 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ€‘λ‹¨μ‹œκΈ°κ³  λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰ μƒνƒœλ‘œ λ°”κΏ€ λ•Œλ§ˆλ‹€ λ¬Έλ§₯κ΅ν™˜μ΄ λ°œμƒ
  • λ¬Έλ§₯ κ΅ν™˜μ΄ λΉ λ₯΄λ©΄ λΉ λ₯Όμˆ˜λ‘, μ‚¬μš©μžλŠ” μž‘μ—…μ΄ 더 λ³‘λ ¬μ μœΌλ‘œ μ‹€ν–‰λœλ‹€κ³  μ—¬κΉλ‹ˆλ‹€. ν₯λ―Έλ‘­κ²Œλ„ λŒ€λΆ€λΆ„μ˜ μš΄μ˜μ²΄μ œλŠ” μ„ μ ν˜• μŠ€μΌ€μ€„λŸ¬λ₯Ό μ‚¬μš©
  • λ¬Έλ§₯ κ΅ν™˜μ—λŠ” κΈ°λ¬˜ν•˜κ³  λ…νŠΉν•œ νŠΉμ§•
    • 예츑 κ°€λŠ₯ν•˜μ§€ μ•Šλ‹€
    • νŠΉμ • λͺ…령어에 λ¬Έλ§₯ κ΅ν™˜μ΄ λ°œμƒν•  ν™•λ₯ μ΄ λͺ¨λ“  λͺ…령어에 λŒ€ν•΄ κ°™λ‹€κ³  κ°€μ •ν•˜λŠ” 것

⭐ 13.6 λ°œμƒ μ „ μ œμ•½

  • λ¬Έλ§₯ κ΅ν™˜μ΄ 예츑 λΆˆκ°€λŠ₯ν•˜λ‹€λŠ” 점
  • λ¬Έλ§₯ κ΅ν™˜μ΄ λ°œμƒν•˜λŠ” μ‹œκ°„μ€ λΆˆν™•μ‹€β†’ λ™μ‹œμ μœΌλ‘œ μ‹€ν–‰λ˜λŠ” λͺ…령어에 λŒ€ν•΄ ν™•μ‹€ν•œ 것은?
  • μ½”λ“œ λ°•μŠ€ 13-1 λ‹€μ„―κ°œ λͺ…λ Ή κ°€ μžˆλŠ” κ°„λ‹¨ν•œ μž‘μ—…

    1
    2
    3
    4
    5
    6
    7
    
    μž‘μ—… p {
    	1. num = 5
    	2. num++
    	3. num = num - 2
    	4. X = 10
    	5. num = num + x
    }
    
    • λ°˜λ“œμ‹œ νŠΉμ • μˆœμ„œλ‘œ μ‹€ν–‰λ˜μ–΄μ•Ό ν•œλ‹€
    • λͺ¨λ“  μΈμ ‘ν•œ 두 λͺ…λ Ήμ–΄ 사이에 λ°œμƒ μ „ μ œμ•½μ΄ μžˆλ‹€
    • 이 μ œμ•½μ€ λ¬Έλ§₯ κ΅ν™˜μ΄ λ˜λ”λΌλ„ λ°˜λ“œμ‹œ μ§€μΌœμ Έμ•Ό ν•©λ‹ˆλ‹€.
  • μ½”λ“œ λ°•μŠ€ 13-2 λ¬Έλ§₯ κ΅ν™˜κ³Ό μ•žμ˜ μž‘μ—…μ—μ„œ ν•œ μ‹€ν–‰

    1
    2
    3
    4
    5
    6
    7
    8
    
    Run 1:
    	1. num = 5
    	2. num++
    >>>>> Context Switch <<<<<
    	3. num = num - 2
    	4. X = 10
    >»» Context Switch <<<<<
    	5. num = num + x
    
  • μ½”λ“œ λ°•μŠ€ 13-3 λ¬Έλ§₯ κ΅ν™˜κ³Ό λ”λΆˆμ–΄ ν•œ 또 λ‹€λ₯Έ μ‹€ν–‰
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    Run 2:
    	num = 5
    Β» Context Switch Β«
    	num++
    	num = num - 2 //2
    Β» Context Switch Β«
    	X = 10
    Β» Context Switch Β«
    	num = num + x //22
    
  • μ΄λŸ¬ν•œ μ œμ•½μ€ νŠΉμ • μž‘μ—…μ— λŒ€ν•΄ μ „μ²΄μ μœΌλ‘œ 결정둠적인 ν–‰μœ„κ°€ μ‘΄μž¬ν•˜λŠ” 이유

  • 곡유 μžμ›μ„ ν•œ λ³€μˆ˜λΌκ³  ν•˜κ³ , 이에 λŒ€ν•΄ 읽기/μ“°κΈ° κΆŒν•œμ΄ λͺ¨λ‘ μžˆλŠ” λ™μ‹œ μž‘μ—… μ‹œμŠ€ν…œμ΄ μžˆλ‹€κ³  κ°€μ •
    • 읽기만 ν•œλ‹€λ©΄ κ²°κ³ΌλŠ” 항상 κ°™λ‹€.
    • μž‘μ—… 쀑 ν•˜λ‚˜λΌλ„ 곡유 λ³€μˆ˜μ— 값을 μ“°λ €κ³  ν•œλ‹€λ©΄, μž‘μ—… μŠ€μΌ€μ€„λŸ¬κ°€ ν• λ‹Ήν•œ λ¬Έλ§₯ κ΅ν™˜μ΄ λͺ¨λ“  μž‘μ—…μ˜ 전체 μƒνƒœμ— 영ν–₯을 쀄 것, μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ μƒνƒœκ°€ μ„œλ‘œ λ‹€λ₯Ό 수 μžˆλ‹€λŠ” 의미
    • μž‘μ—…μ˜ 쀑간 μƒνƒœ intermediate state κ°€ μ‹€ν–‰λ§ˆλ‹€ λ‹€λ₯Ό 수 있기 λ•Œλ¬Έ
  • λ¬Έλ§₯ κ΅ν™˜μ˜ 영ν–₯을 μƒμ‡„ν•˜λ €λ©΄, λ‹€λ₯Έ μ‹€ν–‰μ—μ„œ λ™μΌν•˜κ²Œ κ²°μ •λ˜λŠ” κ²°κ³Όλ₯Ό μ–»μœΌλ €λ©΄ μ μ ˆν•œ 동기 synchronization 방법을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

⭐ 13.7 λ™μ‹œμ„±μ„ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” 경우

  • λ™μ‹œμ„±μ—λŠ” μ–Έμ œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”μ§€λ₯Ό μ•Œ 수 μžˆλŠ” λͺ‡ 가지 일반적인 νŒ¨ν„΄
  • ν˜„μž¬ λͺ…λ Ήμ–΄κ°€ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό λΈ”λ‘œν‚Ήblocking
  • μ„œλ²„ ν”„λ‘œκ·Έλž¨, μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μ½μœΌλ €λŠ” 경우
  • 첫 번째 νŒ¨ν„΄μ€ λ¬΄κΈ°ν•œμœΌλ‘œ μ‹€ν–‰ 흐름을 차단할 수 μžˆλŠ” λͺ…λ Ήμ–΄κ°€ μžˆλŠ” 경우 이 μ§€μ μ—μ„œ 기쑴의 흐름을 두 개의 λ³„λ„μ˜ 흐름 λ˜λŠ” μž‘μ—…μœΌλ‘œ λΆ„ν• ν•΄μ•Ό ν•©λ‹ˆλ‹€
  • μ„Έ 가지 λͺ©ν‘œλ₯Ό κ°–λŠ” μ„œλ²„ 그램
    • ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„° 읽은 두 수의 합을 계산 ν•˜κ³  ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ κ·Έ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
    • ν΄λΌμ΄μ–ΈνŠΈμ— λŒ€ν•œ μ„œλΉ„μŠ€ 여뢀에 상관없이, μ„œλΉ„μŠ€ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ 수λ₯Ό νŒŒμΌμ— κ·œμΉ™μ μœΌλ‘œ μž‘μ„±ν•©λ‹ˆλ‹€.
    • ν•œ λ²ˆμ— μ—¬λŸ¬ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ„œλΉ„μŠ€ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • μ½”λ“œ λ°•μŠ€ 13-4 단일 μž‘μ—…μ„ μ΄μš©ν•΄ μž‘λ™ν•˜λŠ” μ„œλ²„ ν”„λ‘œκ·Έλž¨
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    계산기 μ„œλ²„ {
    	μž‘μ—… Tl {
    		1. N = 0
    		2. μ„œλ²„ μ€€λΉ„
    		3. μ˜μ›νžˆ μˆ˜ν–‰ {
    			4. ν΄λΌμ΄μ–ΈνŠΈλ₯Ό 기닀리기
    			5. N = N + 1
    			6. Cμ—μ„œ 첫 번째 수λ₯Ό 읽고 X에 μ €μž₯
    			7. Cμ—μ„œ 두 번째 수λ₯Ό 읽고 Y에 μ €μž₯
    			8. Z = X + Y
    			9. Zλ₯Ό C에 μ“°κΈ° (write)
    			10. C에 λŒ€ν•œ 연결을 μ’…λ£Œ
    			11. N을 νŒŒμΌμ— μ“°κΈ° (write )
    		}
    	}
    }
    
    • 이 μ½”λ“œκ°€ μ•žμ„œ μ–ΈκΈ‰ν•œ λͺ©ν‘œλ₯Ό 달성할 수 μ—†μŒμ„ 곧 λ³΄μ—¬λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.
    • λ„€ 번째 λͺ…λ Ήμ–΄ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό κΈ°λ‹€λ¦¬κΈ°λŠ” μ™„λ£Œ μ‹œκ°„μ„ μ•Œ 수 μ—†λŠ” λΈ”λ‘œν‚Ή λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€.κ·ΈλŸ¬λ―€λ‘œ λͺ…λ Ήμ–΄ 5,6κ³Ό λ‚˜λ¨Έμ§€λŠ” μ‹€ν–‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 이듀 λͺ…λ Ήμ–΄λŠ” μƒˆ ν΄λΌμ΄μ–ΈνŠΈκ°€ 올 λ•ŒκΉŒμ§€ λ°˜λ“œμ‹œ λŒ€κΈ°ν•΄μ•Ό ν•˜κ³  ν΄λΌμ΄μ–ΈνŠΈκ°€ 온 뒀에 이듀 λͺ…λ Ήμ–΄κ°€ 싀행될 수 μžˆμŠ΅λ‹ˆλ‹€.
    • λͺ…λ Ήμ–΄ 4의 좜λ ₯에 의쑴적
  • μ½”λ“œ λ°•μŠ€ 13-5 μ„Έ λ™μ‹œ μž‘μ—…μœΌλ‘œ μž‘λ™ν•˜λŠ” μ„œλ²„ ν”„λ‘œκ·Έλž¨μ˜ μ˜μ‚¬μ½”λ“œ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    계산기 μ„œλ²„ {
    	곡유 수: N
    
    	μž‘μ—… T1 {
    
    		1. N = 0
    		2. μ„œλ²„ μ€€λΉ„
    		3. μž‘μ—… T2λ₯Ό 슀폰
    		4. μ˜μ›νžˆ μˆ˜ν–‰ {
    			5. N을 νŒŒμΌμ— μ“°κΈ°
    			6. 30초 λŒ€κΈ°
    		}
    	}
    
    	μž‘μ—… T2 {
    
    		1. μ˜μ›νžˆ μˆ˜ν–‰ {
    			2. ν΄λΌμ΄μ–ΈνŠΈ Cλ₯Ό λŒ€κΈ°=>블둝킹
    			3. N = N + 1
    			4. C에 λŒ€ν•œ μž‘μ—… T3λ₯Ό 슀폰
    		}
    	}
    
    	μž‘μ—… T3 {
    		1. Cμ—μ„œ 첫 번째 수λ₯Ό 읽고 X에 μ €μž₯
    		2. Cμ„œμ„œ 두 번째 수λ₯Ό 읽고 Y에 μ €μž₯
    		3. Z = X + Y
    		4. Z λ₯Ό C에 μ“°κΈ° (write)
    		5. C에 λŒ€ν•œ 연결을 μ’…λ£Œ
    	}
    }
    
    • 핡심에 μ€‘μš”ν•œ 섀계 원칙 μ’…λ£Œ μ‹œκ°μ„ μ•Œ 수 μ—†κ±°λ‚˜ μ™„λ£Œν•  λ•ŒκΉŒμ§€ μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” λΈ”λ‘œν‚Ή μž‘μ—…μ΄ μžˆμ„ λ•Œλ§ˆλ‹€ μž‘μ—…μ„ 두 개의 λ™μ‹œ μž‘μ—…μœΌλ‘œ λ‚˜λˆ„μ–΄μ•Ό ν•©λ‹ˆλ‹€.
    • 슀폰 λͺ…λ Ήμ–΄λŠ” 속도가 κ½€ λΉ¨λΌμ„œ μƒˆ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό λ°›λŠ” μž‘μ—…μ„ λΈ”λ‘œν‚Ήν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    • μž‘μ—… T1의 μΈμŠ€ν„΄μŠ€λŠ” ν•˜λ‚˜, μž‘μ—…T2의 μΈμŠ€ν„΄μŠ€λ„ ν•˜λ‚˜λ§Œ μžˆμ§€λ§Œ, μž‘μ—…T3 λŠ” λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈμ— λŒ€ν•΄ μ—¬λŸ¬ μΈμŠ€ν„΄μŠ€λ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
    • μ„œλ²„ ν”„λ‘œκ·Έλž¨μ€ ν΄λΌμ΄μ–ΈνŠΈμ— λŒ€ν•œ μ„œλΉ„μŠ€ μ€‘λ‹¨ν•©λ‹ˆλ‹€. 이λ₯Ό μ„œλΉ„μŠ€ κ±°λΆ€denial of service (DoS)

      • 곡유된 λ³€μˆ˜ N에 λŒ€ν•΄ 특히 T2의 μΈμŠ€ν„΄μŠ€μ™€ 같은 μž‘μ—… 쀑 ν•˜λ‚˜κ°€ κ·Έ 값을 λ³€κ²½ν•  수 μžˆλ‹€λŠ” μ μž…λ‹ˆλ‹€. ν•œ μž‘μ—…μ΄ μˆ˜μ •ν•  수 μžˆλŠ” 곡유 λ³€μˆ˜ κ°€ μ‘΄μž¬ν•˜λ―€λ‘œ, λ™μ‹œ μž‘μ—… μ‹œμŠ€ν…œμ€ λ™μ‹œμ„± λ¬Έμ œκ°€ λ°œμƒν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€.
      • 곡유 λ³€μˆ˜ 에 λŒ€ν•΄ μ‹¬κ°ν•œ 데이터 경쟁data race 문제

⭐ 13.8 곡유 μƒνƒœ

  • μˆ˜μ • κ°€λŠ₯ν•œ κ³΅μœ μƒνƒœκ°€ μžˆλŠ” μ—¬λŸ¬ 개의 λ™μ‹œ μž‘μ—…μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ, λ¬Έλ§₯ μ „ν™˜ νŒ¨ν„΄μ˜ λΆˆν™•μ‹€μ„±μ΄ λͺ¨λ“ μž‘μ—…μ˜ 전체 μƒνƒœλ₯Ό μ–΄λ–»κ²Œ 비결정둠적 non-deteminism으둜 λ§Œλ“œλŠ”μ§€ κ°„λž΅νžˆ μ„€λͺ…
  • μƒνƒœstate λΌλŠ” μš©μ–΄λ₯Ό λ“€μœΌλ©΄ νŠΉμ • μ‹œμ μ˜ 일련의 λ³€μˆ˜μ™€ 그에 ν•΄λ‹Ήν•˜λŠ” κ°’
  • 쀑간 μƒνƒœλž€ 이와 λΉ„μŠ·ν•˜κ²Œ μž‘μ—…μ΄ νŠΉμ • λͺ…령을 μ‹€ν–‰ν–ˆμ„ λ•Œ 기쑴의 λͺ¨λ“  κ³΅μœ λ˜μ§€ μ•Šμ€ λ³€μˆ˜ 및 그에 ν•΄λ‹Ήν•˜λŠ” κ°’μ˜ 집합
  • 곡유 μƒνƒœλž€ νŠΉμ • μ‹œμ μ— λ™μ‹œ μž‘μ—… μ‹œμŠ€ν…œμ΄ μ½κ±°λ‚˜ μˆ˜μ •ν•  수 μžˆλŠ” λ³€μˆ˜μ™€ 그에 ν•΄λ‹Ήν•˜λŠ” κ°’μ˜ λͺ¨μŒ
  • μ½”λ“œ λ°•μŠ€ 13-7 μˆ˜μ • κ°€λŠ₯ν•œ 곡유 μƒνƒœκ°€ μžˆλŠ” λ™μ‹œ μž‘μ—… 두 개둜 κ΅¬μ„±λœ μ‹œμŠ€ν…œ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    λ™μ‹œ μ‹œμŠ€ν…œ {
    
    	곡유 μƒνƒœ {
    		X : μ •μˆ˜ = o
    	}
    
    	μž‘μ—… P {
    		A: μ •μˆ˜
    			1. A = X
    			2. A = A + 1
    			3. X = A
    			4. Xλ₯Ό 좜럭
    	}
    
    	μž‘μ—… Q {
    		B : μ •μˆ˜
    			1. B = X
    			2. B = B + 2
    			3. X = B
    			4. Xλ₯Ό 좜럭
    	}
    }
    
    • 순차적으둜 μ΄λŸ¬ν•œ μž‘μ—… μ‹€ν–‰ν•˜λ©΄ λ¬Έλ§₯ κ΅ν™˜μ„ μ •ν•˜μ§€ μ•Šκ³ λ„ 결정둠적인 κ²°κ³Όκ°€ λ‚˜μ˜΅λ‹ˆλ‹€.
  • μ½”λ“œ λ°•μŠ€ 13-8 λ™μ‹œμ μœΌλ‘œ μ‹€ν–‰ν–ˆμ„ λ•Œ μž‘μ—… P와 Q에 λŒ€ν•΄ ν•œ 인터리빙 | μž‘μ—… P | μž‘μ—… μŠ€μΌ€μ€„λŸ¬ | μž‘μ—… Q | | β€”β€”β€” | β€”β€”β€”β€”- | β€”β€”- | | | λ¬Έλ§₯ κ΅ν™˜ | | | | | B = X | | B = B + 2 | | | λ¬Έλ§₯ κ΅ν™˜ | | | A = X | | | | | λ¬Έλ§₯ κ΅ν™˜ | | | | | X = B | | | λ¬Έλ§₯ κ΅ν™˜ | | | A = A + 1 | | X = A | | | | | λ¬Έλ§₯ κ΅ν™˜ | | | | | print X | | | λ¬Έλ§₯ κ΅ν™˜ | | | print X | | | | | λ¬Έλ§₯ κ΅ν™˜ | |
    • 이 μ‹œλ‚˜λ¦¬μ˜€λŠ” νŠΉμ • μ§€μ μ—μ„œ λ¬Έλ§₯ κ΅ν™˜μ΄ λ°œμƒν•˜λŠ” μ—¬λŸ¬ μ‹œλ‚˜λ¦¬μ˜€ 쀑 ν•˜λ‚˜μΌ λΏμž…λ‹ˆλ‹€. 각 μ‹œλ‚˜λ¦¬μ˜€λŠ” 인터리빙이라고 ν•©λ‹ˆλ‹€
    • μ‹€ν–‰ μ‚¬μ΄μ—λŠ” ν‹ˆμ΄ μ‘΄μž¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€ . μ΄λŸ¬ν•œ ν‹ˆμ€ μ˜ˆμΈ‘ν•  수 μ—†μœΌλ©°, 싀행을 μΆ”μ ν•˜λ©΄ 이 인터리빙은 λ†€λΌμš΄ κ²°κ³Όλ₯Ό λ‚³μŠ΅λ‹ˆλ‹€. μ΅œμ’… 결과둜 λ‘˜ λ‹€ 3을 좜λ ₯ν•˜λ¦¬λΌ μ˜ˆμƒν–ˆμ§€λ§Œ, ν”„λ‘œμ„ΈμŠ€PλŠ” κ°’ 1μ„μΆœλ ₯ν•˜κ³  ν”„λ‘œμ„ΈμŠ€QλŠ” 좜λ ₯2λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
    • λ³€ν•˜μ§€ μ•Šμ€ 채 남아 μžˆμ–΄μ•Ό ν•˜λŠ” λ‹€λ₯Έ μ€‘μš”ν•œ μ œμ•½μ΄ μ‘΄μž¬ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ œμ•½λ“€μ€ 데이터 경쟁 λ˜λŠ” κ²½μŸμƒνƒœ race condition λ₯Ό 포함
  • μ½”λ“œ λ°•μŠ€ 13-9 λ™μ‹œμ μœΌλ‘œ μ‹€ν–‰ν•  λ•Œ μž‘μ—… P와 Q의 λ‹€λ₯Έ 인터리빙 | μž‘μ—… P | μž‘μ—… μŠ€μΌ€μ€„λŸ¬ | μž‘μ—… Q | | β€”β€” | β€”β€”β€”β€”- | β€”β€” | | | λ¬Έλ§₯ κ΅ν™˜ | | | | | B = X | B = B + 2 X = B | | | λ¬Έλ§₯ κ΅ν™˜ | | | A = X A = A + 1 | | | | | λ¬Έλ§₯ κ΅ν™˜ | | | | | print X | | | λ¬Έλ§₯ κ΅ν™˜ | | | X = A print X | | | | | λ¬Έλ§₯ κ΅ν™˜ | |
    • 더 μž‘μ€ 3개의 μž‘μ—…μœΌλ‘œ 이루어진 C의 κ°„λ‹¨ν•œ X++ ꡬ문이 단일 νƒ€μž„ μŠ¬λΌμ΄μŠ€μ—μ„œ μ‹€ν–‰ λ˜μ§€ μ•ŠμœΌλ¦¬λΌλŠ” 점.
    • μ›μžμ μΈ μž‘μ—…μ΄ μ•„λ‹ˆλ©° 3개의 더 μž‘μ€ μ›μžμ  λͺ…λ Ήμ–΄λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ›μžμ  λͺ…λ Ήμ–΄λŠ” 더 μž‘μ€ μž‘μ—…μœΌλ‘œ λ‚˜λ‰  수 μ—†μœΌλ©° λ¬Έλ§₯ κ΅ν™˜μœΌλ‘œ 인해 μΈν„°λŸ½νŠΈλ  μˆ˜λ„ μ—†μŠ΅λ‹ˆλ‹€.
    • 곡유 μžμ›μ— μ ‘κ·Όν•˜λ €λŠ” μž‘μ—…μ΄ λ§Žμ„ 수 μžˆμœΌλ―€λ‘œ, λ™μ‹œμ„± λ¬Έμ œλŠ” 깊게 곡뢀해 κ²°κ³Όλ₯Ό μ˜ˆμΈ‘ν•  수 μžˆλŠ”(결정둠적인) λ©”μ»€λ‹ˆμ¦˜μ„ μ°Ύμ•Όμ•Ό ν•©λ‹ˆλ‹€.
    • μž‘μ—… μŠ€μΌ€μ€„λŸ¬λŠ” 타이머 μΈν„°λŸ½νŠΈtimer interruptλ₯Ό λ°œμƒμ‹œν‚€κΈ° μœ„ν•΄ 타이머λ₯Ό λ§žμΆ”κΈ° 전에 λŒ€κΈ°μ—΄μ—μ„œ μž‘μ—…μ„ 선택합 λ‹ˆλ‹€. 그리고 CPU μ½”μ–΄λ₯Ό λ– λ‚˜μ„œ μ„ νƒν•œ μž‘μ—…μ„ μœ„ν•œ μžμ›μ„ ν• λ‹Ήν•©λ‹ˆλ‹€

⭐ 13.9 마무리

  • λ™μ‹œμ„±κ³Ό 병렬성을 μ •μ˜ν–ˆμŠ΅λ‹ˆλ‹€.
  • 각 병렬 μž‘μ—…μ€ μž‘μ—…μ„ μ†Œμœ ν•œ ν”„λ‘œμ„Έμ„œ μœ λ‹›μ΄ ν•„μš”ν•˜μ§€λ§Œ.
  • λ™μ‹œ μž‘μ—…μ€ ν”„λ‘œμ„Έμ„œ ν•˜λ‚˜λ₯Ό κ³΅μœ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ™μ‹œ μž‘μ—…μ€ ν•˜λ‚˜μ˜ ν”„λ‘œμ„Έμ„œ μœ λ‹›μ„ μ‚¬μš©ν•˜μ§€λ§Œ, μž‘μ—… μŠ€μΌ€μ€„λŸ¬λŠ” ν”„λ‘œμ„Έμ„œμ˜ μ‹œκ°„μ„ κ΄€λ¦¬ν•˜κ³  ν”„λ‘œμ„Έμ„œλ₯Ό λ‹€λ₯Έ μž‘μ—… 간에 κ³΅μœ ν•©λ‹ˆλ‹€. κ·Έ κ²°κ³Ό 각각의 μž‘μ—…μ—μ„œ μˆ˜λ§Žμ€ λ¬Έλ§₯ μ „ν™˜κ³Ό μ„œλ‘œ λ‹€λ₯Έ 인터리빙이 λ°œμƒν•©λ‹ˆλ‹€.
  • λΈ”λ‘œν‚Ή λͺ…λ Ήμ–΄λ₯Ό μ†Œκ°œν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ λ™μ‹œμ„±μ„ μ‚¬μš©ν•  μ‹œμ μ„ μ•”μ‹œν•˜λŠ” νŒ¨ν„΄κ³Ό, μž‘μ—… ν•˜λ‚˜λ₯Ό λ‘˜ λ˜λŠ” μ…‹ μ΄μƒμ˜ λ™μ‹œ μž‘μ—…μœΌλ‘œ λΆ„ν• ν•˜λŠ” 방법을 μ„€λͺ…ν–ˆμŠ΅λ‹ˆλ‹€.
  • 곡유 μƒνƒœκ°€ 무엇인지 μ„€λͺ…ν–ˆμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬ μž‘μ—…μ΄ 같은 곡유 μƒνƒœλ₯Ό 읽고 μ“°λ €κ³  ν•  λ•Œ. 곡유 μƒνƒœκ°€ 데이터 경쟁과 같은 μ‹¬κ°ν•œ λ™μ‹œμ„± 문제λ₯Ό μ–΄λ–»κ²Œ μ•ΌκΈ°ν•  수 μžˆλŠ”μ§€λ„ μ‚΄νŽ΄λ΄€μŠ΅λ‹ˆλ‹€.
This post is licensed under CC BY 4.0 by the author.