Skip to content

Latest commit

Β 

History

History
68 lines (61 loc) Β· 7.6 KB

File metadata and controls

68 lines (61 loc) Β· 7.6 KB
  • μŠ€ν•€λ½κ³Ό μ„Έλ§ˆν¬μ–΄μ˜ νŠΉμ§•μ„ μ„€λͺ…ν•˜κ³ , μŠ€ν•€λ½κ³Ό μ„Έλ§ˆν¬μ–΄ 각각을 μ–΄λŠ 쑰건 μ†μ—μ„œ μ‚¬μš©ν•˜λ©΄ 쒋은지λ₯Ό λ‘˜μ˜ 차이점을 근거둜 ν•˜μ—¬ μ„€λͺ…ν•˜μ‹œμ˜€.

    • μŠ€ν•€λ½

      • 락을 νšλ“ν•  λ•ŒκΉŒμ§€ 루프λ₯Ό 돌며 락 νšλ“μ΄ κ°€λŠ₯ν•œμ§€ κ²€μ‚¬ν•œλ‹€.
      • 휴면 μƒνƒœλ‘œ μ „ν™˜λ˜μ§€ μ•ŠλŠ”λ‹€.
      • 컀널 선점이 λΆˆκ°€λŠ₯ν•˜λ‹€.
      • μž¬κ·€μ μœΌλ‘œ κ΅¬ν˜„λ˜μ§€ μ•Šμ•„ 락을 νšλ“ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€μ‹œ 락 νšλ“μ„ μ‹œλ„ν•œλ‹€λ©΄ λ°λ“œλ½μ— λΉ μ§„λ‹€.
      • 락 μ‚¬μš©μ‹œκ°„μ΄ κ³§ μŠ€μΌ€μ€„λ§ μ§€μ—°μ‹œκ°„μ΄ λœλ‹€.
    • μŠ€ν•€λ½ μ—μ„œ 컀널 선점 λΉ„ν™œμ„±ν™”μ˜ 이유

      • λ°λ“œλ½ 을 λ°©μ§€ν•˜κΈ° μœ„ν•œ λͺ©μ μ΄λ‹€. λ§Œμ•½ μŠ€ν•€λ½ μ—μ„œ 컀널 선점이 κ°€λŠ₯ν•˜λ‹€ κ°€μ •ν•˜κ³  μ‚¬μš©μž ν”„λ‘œμ„ΈμŠ€ κ°€ μŠ€ν•€λ½μ„ 얻은 μ‹œμ μ— μΈν„°λŸ½νŠΈ κ°€ λ°œμƒν•˜μ—¬ μ‚¬μš©μž ν”„λ‘œμ„ΈμŠ€ λ₯Ό μ„ μ ν•œ 상황을 μƒκ°ν•΄λ³΄μž. μΈν„°λŸ½νŠΈ μˆ˜ν–‰ 쀑에 μ‚¬μš©μž ν”„λ‘œμ„ΈμŠ€κ°€ νšλ“ν•œ μŠ€ν•€λ½ 을 μ–»μœΌλ € ν•œλ‹€λ©΄ μΈν„°λŸ½νŠΈλŠ” λ¬΄ν•œ 루프λ₯Ό 돌며 락 νšλ“μ΄ κ°€λŠ₯ν•œμ§€ 검사λ₯Ό ν•˜μ§€λ§Œ μΈν„°λŸ½νŠΈ μ»¨ν…μŠ€νŠΈ 에선 선점될 수 μ—†μŒμœΌλ‘œ μ‚¬μš©μž ν”„λ‘œμ„ΈμŠ€κ°€ 락을 ν•΄μ œν•˜λŠ” 일은 μΌμ–΄λ‚˜μ§€ μ•Šμ•„ λ°λ“œλ½ 에 λΉ μ§„λ‹€. μ²˜μŒμ— μ‚¬μš©μž ν”„λ‘œμ„ΈμŠ€κ°€ μŠ€ν•€λ½μ„ νšλ“ν–ˆμ„ λ•Œ 컀널 선점을 λΉ„ν™œμ„±ν™” ν•˜μ—¬ μ΄λŸ¬ν•œ 상황을 λ°©μ§€ν•  수 μžˆλ‹€.
    • μ„Έλ§ˆν¬μ–΄

      • 락 νšλ“μ— μ‹€νŒ¨ν•˜λ©΄ 휴면 μƒνƒœλ‘œ μ „ν™˜λœλ‹€.
      • 락을 νšλ“ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ unlock ν•΄μ€€λ‹€λ©΄ 첫 락 νšλ“ μ‹€νŒ¨λ‘œ νœ΄λ©΄μ— λΉ μ§„ ν”„λ‘œμ„ΈμŠ€λ₯Ό κΉ¨μ›Œμ€€λ‹€.
      • ν”„λ‘œμ„ΈμŠ€ μ»¨ν…μŠ€νŠΈμ—μ„œλ§Œ μ‹€ν–‰λœλ‹€.
      • up(), down() ν•¨μˆ˜λ‘œ 락을 κ΄€λ¦¬ν•˜λ©°, 이 ν•¨μˆ˜ μ΄μ™Έμ˜ 좔가적인 μ‹œμŠ€ν…œ μ½œμ„ ν•„μš”λ‘œ ν•˜μ§€ μ•ŠλŠ”λ‹€.
    • μ„Έλ§ˆν¬μ–΄ λŠ” μ™œ 컀널 선점이 κ°€λŠ₯ν•˜κ²Œ 섀계 λ˜μ—ˆλŠ”κ°€?

      • 선점할 수 μ—†λŠ” 락 μƒν™©μ—μ„œ 락의 μ‚¬μš©μ‹œκ°„μ΄ κΈΈμ–΄μ§€λ©΄ ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ ν”„λ‘œμ„Έμ„œλ₯Ό λ…μ ν•˜κ²Œ 되고 μŠ€μΌ€μ€„λ§μ΄ μ§€μ—°λœλ‹€. 이λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄ 선점이 κ°€λŠ₯ν•œ μ„Έλ§ˆν¬μ–΄ λŠ” 락 μ‚¬μš©μ‹œκ°„μ΄ 길어도 μŠ€μΌ€μ€„λ§ λŒ€μƒμ— ν¬ν•¨λ˜μ–΄ μΈν„°λŸ½νŠΈλ‚˜ μš°μ„ μˆœμœ„κ°€ 높은 ν”„λ‘œμ„ΈμŠ€κ°€ 였면 μŠ€μΌ€μ€„λ§ λ˜μ–΄ ν”„λ‘œμ„Έμ„œλ₯Ό λ…μ ν•˜λŠ” 상황은 λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€. μ„€λ Ή λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ 락 νšλ“μ„ μ‹œλ„ν•΄λ„ 락이 κ±Έλ €μžˆλ‹€λ©΄ λ°”λ‘œ 휴면 μƒνƒœλ‘œ μ „ν™˜λ˜κΈ°μ— μŠ€ν•€λ½ μ—μ„œμ˜ λ°λ“œλ½ 상황은 λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.
    • μŠ€ν•€λ½ κ³Ό μ„Έλ§ˆν¬μ–΄ 의 μœ λ¦¬ν•œ 상황 비ꡐ

      • μŠ€ν•€λ½
        • 락 μ‚¬μš©μ‹œκ°„μ΄ 짧은 경우
          • κ·Όκ±°
            • μ„Έλ§ˆν¬μ–΄ λŠ” 락을 μ–»μ§€ λͺ»ν•˜λ©΄ 휴면 μƒνƒœλ‘œ μ§„μž…ν•˜κΈ° λ•Œλ¬Έμ—, ν”„λ‘œμ„Έμ„œλ₯Ό λ‚­λΉ„ν•  일이 적은 것이 μž₯점이닀. κ·ΈλŸ¬λ‚˜ 락을 얻은 ν›„ 짧은 μ‹œκ°„ 싀행될 ν”„λ‘œμ„ΈμŠ€λ“€μ„ μ„Έλ§ˆν¬μ–΄ λ₯Ό μ΄μš©ν•˜μ—¬ λ™κΈ°ν™”ν•œλ‹€λ©΄, 휴면 μƒνƒœ μ „ν™˜ 및 λŒ€κΈ°ν 관리, νƒœμŠ€ν¬ 깨우기 λ“±μ˜ μ˜€λ²„ν—€λ“œκ°€ νŠΉμ • ν”„λ‘œμ„ΈμŠ€μ˜ 락 μ‚¬μš© μ‹œκ°„μ„ λ„˜μ–΄μ„€ 수 μžˆλ‹€. λ”°λΌμ„œ μ΄λŸ¬ν•œ μƒν™©μ—μ„œλŠ” μ„Έλ§ˆν¬μ–΄ 와 달리 락 κ΅¬ν˜„μ— μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μŠ€ν•€λ½ 을 μ‚¬μš©ν•˜λŠ” 것이 νš¨μœ¨μ μ΄λ‹€.
        • μΈν„°λŸ½νŠΈ μ»¨ν…μŠ€νŠΈμ—μ„œ 락을 μ‚¬μš©ν•˜λŠ” 경우
          • κ·Όκ±°
            • μΈν„°λŸ½νŠΈ μ»¨ν…μŠ€νŠΈ 에 μžˆλŠ” ν”„λ‘œμ„ΈμŠ€λŠ” 휴면 μƒνƒœλ‘œ μ „ν™˜λ  수 μ—†λ‹€. λ”°λΌμ„œ 이 κ²½μš°μ—λŠ” μ„Έλ§ˆν¬μ–΄ λ₯Ό μ“Έ 수 μ—†κ³ , μŠ€ν•€λ½ 을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
      • μ„Έλ§ˆν¬μ–΄
        • 락 μ‚¬μš©μ‹œκ°„μ΄ κΈ΄ 경우
          • κ·Όκ±°
            • 락을 얻은 ν”„λ‘œμ„ΈμŠ€λ“€μ˜ 락 μ‚¬μš© μ‹œκ°„μ΄ κΈ΄ κ²½μš°μ— μŠ€ν•€λ½ 을 μ‚¬μš©ν•œλ‹€λ©΄, 락 νšλ“μ— μ‹€νŒ¨ν•œ ν”„λ‘œμ„ΈμŠ€λŠ” λ¬΄ν•œλ£¨ν”„λ₯Ό λŒλ©΄μ„œ ν”„λ‘œμ„Έμ„œλ₯Ό λ…μ ν•œλ‹€. μ΄λŠ” μ„±λŠ₯ μ €ν•˜μ˜ 원인이 λ˜λ―€λ‘œ 이 κ²½μš°μ—λŠ” μ„Έλ§ˆν¬μ–΄ λ₯Ό μ‚¬μš©ν•˜λŠ” 게 μ’‹λ‹€.
        • 락을 얻은 μƒνƒœμ—μ„œ νœ΄λ©΄ν•  ν•„μš”κ°€ μžˆλŠ” 경우
          • κ·Όκ±°
            • μŠ€ν•€λ½ μœΌλ‘œλŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό 휴면 μƒνƒœλ‘œ μ „ν™˜ν•  수 μ—†μœΌλ―€λ‘œ, 락을 얻은 ν”„λ‘œμ„ΈμŠ€κ°€ νœ΄λ©΄ν•  ν•„μš”κ°€ μžˆμ„ λ•ŒλŠ” μ„Έλ§ˆν¬μ–΄ λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
  • μž¬κ·€μ μΈ 락은 μ–΄λ–»κ²Œ κ΅¬ν˜„λ˜λ©° μ–Έμ œ μ‚¬μš©ν•˜λŠ”κ°€?

    • 락을 κ°€μ§„ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€μ‹œ μžμ‹ μ˜ 락을 κ²€μ‚¬ν•˜λ©΄μ„œ λΉ μ§€λŠ” λ°λ“œλ½μ„ λ°©μ§€ν•œλ‹€. μŠ€ν•€λ½μ˜ 경우 μžμ‹ μ΄ νšλ“ν•œ 락을 λ‹€μ‹œ μ–»μœΌλ € ν•œλ‹€λ©΄ 락을 λ‹€λ₯Έ λˆ„κ΅°κ°€κ°€ μ‚¬μš©ν•˜κ³  μžˆλ‹€κ³  νŒλ‹¨ν•΄ 락 ν•΄μ œλ₯Ό 계속 κΈ°λ‹€λ¦¬κ²Œ λ˜λŠ” λ°λ“œλ½μ— λΉ μ§„λ‹€. 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ μž¬κ·€μ  락의 κ΅¬ν˜„μ—μ„œλŠ” 락 νšλ“ 검사 과정에 μžμ‹ μ΄ νšλ“ν•œ 락을 λ‹€μ‹œ νšλ“ν•  수 있게 κ΅¬ν˜„μ„ ν–ˆμœΌλ©°, μž¬κ·€μ μœΌλ‘œ 락을 νšλ“ν–ˆλ‹€λ©΄ νšλ“ν•œ 만큼 언락을 ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

    μž¬κ·€μ μΈ 락 κ΅¬ν˜„ν•  λ•Œ νšλ“ 쑰건에 νšλ“ν•˜λ €λŠ” 락을 μžμ‹ μ΄ κ°€μ‘ŒλŠ”μ§€ 검사 후에 락 νšλ“μ„ μ‹œλ„ν•˜λŠ” 것이 μ•„λ‹Œκ°€ μΆ”μΈ‘λœλ‹€.

  • 배리어 의 ν•„μš”μ„±μ„ μ„€λͺ…ν•˜κ³  배리어 ν•¨μˆ˜λ“€μ˜ κΈ°λŠ₯에 λŒ€ν•΄ λ…Όν•˜μ‹œμ˜€.

    • 배리어 의 ν•„μš”μ„±
      • μ»΄νŒŒμΌλŸ¬λŠ” μ½”λ“œ κ°„μ˜ μ˜μ‘΄μ„± 을 κΈ°μ€€μœΌλ‘œ μ½”λ“œ μž¬λ°°μΉ˜κ°€ κ°€λŠ₯ν•œμ§€ νŒλ‹¨ν•˜κ³ , μ΄λŸ¬ν•œ 재배치 μž‘μ—…μœΌλ‘œ μ½”λ“œλ₯Ό μ΅œμ ν™” ν•  수 μžˆλ‹€. κ·ΈλŸ¬λ‚˜ μ½”λ“œ κ°„μ˜ μ˜μ‘΄μ„±μ΄ μ—†λ‹€κ³  ν•˜λ”λΌλ„ λ©€ν‹°μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œλŠ” μ½”λ“œκ°€ μˆœμ„œλŒ€λ‘œ 싀행될 것을 보μž₯ν•΄μ•Ό ν•  λ•Œκ°€ μžˆλ‹€. μ΄λ•Œ 배리어 κ°€ ν•„μš”ν•˜λ‹€.
    • 배리어 ν•¨μˆ˜
      • rmb()
        • rmb()ν•¨μˆ˜ μ „ν›„λ‘œ 읽기 λͺ…령이 μž¬λ°°μΉ˜λ˜λŠ” 것을 λ§‰λŠ”λ‹€.
      • wmb()
        • wmb()ν•¨μˆ˜ μ „ν›„λ‘œ μ“°κΈ° λͺ…령이 μž¬λ°°μΉ˜λ˜λŠ” 것을 λ§‰λŠ”λ‹€.
      • mb()
        • mb()ν•¨μˆ˜ μ „ν›„λ‘œ 읽기 및 μ“°κΈ° λͺ…령이 μž¬λ°°μΉ˜λ˜λŠ” 것을 λ§‰λŠ”λ‹€.
      • read_barrier_depends()
        • read_barrier_depends()ν•¨μˆ˜ μ „ν›„λ‘œ μ˜μ‘΄μ„± 이 μžˆλŠ” 읽기 λͺ…령이 μž¬λ°°μΉ˜λ˜λŠ” 것을 λ§‰λŠ”λ‹€.
  • 락을 κ΅¬ν˜„ν•  λ•Œ 신경써야 ν•  μ‚¬ν•­λ“€μ—λŠ” μ–΄λ–€ 것듀이 μžˆλŠ”μ§€ λ…Όν•˜μ‹œμ˜€.

    • 보호 λŒ€μƒ 인식
      • μ–΄λ–€ 데이터가 락을 ν•„μš”λ‘œ ν•˜λŠ”κ°€?
      • 이 데이터가 μ „μ—­ 데이터인가? λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€ λ˜λŠ” μŠ€λ ˆλ“œμ—μ„œ 접근이 κ°€λŠ₯ν•œκ°€?
      • μ„œλ‘œ λ‹€λ₯Έ 두 μΈν„°λŸ½νŠΈ ν•Έλ“€λŸ¬κ°€ ν•΄λ‹Ή 데이터λ₯Ό κ³΅μœ ν•˜λŠ”κ°€?
      • ν”„λ‘œμ„ΈμŠ€κ°€ 데이터λ₯Ό 닀루닀가 선점 λ‹Ήν•˜κ³ , μ„ μ ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ 같은 데이터에 μ ‘κ·Όν•  κ°€λŠ₯성이 μžˆλŠ”κ°€?
      • ν˜„μž¬ μ‹€ν–‰ 쀑인 ν”„λ‘œμ„ΈμŠ€κ°€ 휴면 μƒνƒœλ‘œ μ „ν™˜λ  수 μžˆλŠ”κ°€? κ·Έλ ‡λ‹€λ©΄ 곡유 λ°μ΄ν„°λŠ” μ–΄λ–€ μƒνƒœκ°€ λ˜λŠ”κ°€?
      • 이 데이터 λ˜λŠ” μ½”λ“œκ°€ λ™μ‹œμ„±μ— λŒ€ν•΄ μ•ˆμ „ν•œκ°€? μ–΄λ–»κ²Œ κ·Έ 사싀을 ν™•μ‹ ν•  수 μžˆλŠ”κ°€?
    • μ–Όλ§ˆλ‚˜ μ„Έμ„Έν•˜κ²Œ 락을 κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ”κ°€?
      • 경쟁과 ν™•μž₯μ„±
        • 경쟁
          • 락이 μ„ΈλΆ„ν™”λ˜μ–΄μžˆμ§€ μ•Šλ‹€λ©΄ μž„κ³„ κ΅¬μ—­μ˜ ν•œ 지점에 μ ‘κ·Όν•  λ•Œλ„ μž„κ³„ ꡬ역 전체에 락을 걸게 λœλ‹€. μ΄λ ‡κ²Œ 되면 ν”„λ‘œμ„ΈμŠ€ κ°„ 락을 μ–»κΈ° μœ„ν•œ 경쟁이 심해지고, μ΄λŠ” μ‹œμŠ€ν…œ 병λͺ©μ˜ 원인이 λœλ‹€.
        • ν™•μž₯μ„±
          • 락이 μ„ΈλΆ„ν™”λ˜μ–΄ μžˆλ‹€λ©΄ 경쟁으둜 μΈν•œ μ‹œμŠ€ν…œ 병λͺ© ν˜„μƒμ΄ 쀄어듀어 ν™•μž₯성에 도움을 쀄 수 μžˆλ‹€. κ·ΈλŸ¬λ‚˜ λ„ˆλ¬΄ μ„ΈλΆ„ν™”λœ 락은 μž‘μ€ μ‹œμŠ€ν…œμ—μ„œλŠ” λΆˆν•„μš”ν•œ μ˜€λ²„ν—€λ“œκ°€ 될 수 μžˆλ‹€. λ”°λΌμ„œ ν™•μž₯μ„±κ³Ό μ„±λŠ₯ μ‚¬μ΄μ˜ κ· ν˜•μ΄ μ€‘μš”ν•˜λ‹€.

      κ°„λ‹¨ν•˜κ²Œ μ‹œμž‘ν•˜κ³  ν•„μš”ν•œ κ²½μš°μ—λ§Œ λ³΅μž‘λ„λ₯Ό 높이도둝 ν•˜μž. λ‹¨μˆœν•¨μ΄ 핡심이닀.