INK study

πŸ§μ‹œκ·Έλ„ :

  • μƒμœ„ μˆ˜μ€€μ˜ μ˜ˆμ™Έμ  μ œμ–΄ 흐름
  • μ†Œν”„νŠΈμ›¨μ–΄(전기적) OS μ†Œν”„νŠΈμ›¨μ–΄λ‘œ κ΅¬ν˜„
    • μ˜ˆμ™Έ μƒν™œκ³Ό μΈν„°λŸ½νŠΈλ₯Ό μ»€λ„μ—μ„œ 좔상화함
    • 컀널이 ν”„λ‘œμ„ΈμŠ€μ—κ²Œ 보내쀀닀
    • μ„œλ‘œ λ‹€λ₯Έ μ‹œκ·Έλ„λ“€μ€ μ •μˆ˜ μ•„μ΄λ””λ‘œ κ΅¬λΆ„ν•œλ‹€
    • μ‹œκ·Έλ„μ— ν¬ν•¨λœ μœ μΌν•œ μ •λ³΄λŠ” μ‹œκ·Έλ„ 아이디와 μ‹œκ·Έλ„μ΄ λ„μ°©ν–ˆλ‹€λŠ” 사싀이닀어떀 μ΄λ²€νŠΈκ°€ μ‹œμŠ€ν…œμ— λ°œμƒν–ˆλ‹€λŠ” 것을 ν”„λ‘œμ„ΈμŠ€μ—κ²Œ μ•Œλ €μ£ΌλŠ” 짧은 λ©”μ‹œμ§€

<μ‹œκ·Έλ„μ˜ 솑신> send

  • μ‹œκ·Έλ„μ„ 보낸닀 :
  • 컀널은 λͺ©μ μ§€ ν”„λ‘œμ„ΈμŠ€μ˜ μ»¨ν…μŠ€νŠΈ λ‚΄ 일뢀 μƒνƒœλ₯Ό κ°±μ‹ ν•˜λŠ” λ°©λ²•μœΌλ‘œ μ‹œκ·Έλ„μ„ λͺ©μ μ§€ ν”„λ‘œμ„ΈμŠ€μ— 보낸닀
  • 컀널은 λ‹€μŒκ³Ό 같은 κ²½μš°μ— μ‹œκ·Έλ„μ„ 보낸닀
    • 컀널이 divide by zero (SIGFPE) λ‚˜ μžμ‹ ν”„λ‘œμ„ΈμŠ€μ˜ μ’…λ£Œ(SIGCHLD) 와 같은 μ‹œμŠ€ν…œ 이벀트λ₯Ό κ°μ§€ν–ˆμ„ λ•Œ
    • ( 0으둜 λ‚˜λˆ„κ±°λ‚˜ μžμ‹ ν”„λ‘œμ„ΈμŠ€μ˜ μ’…λ£Œ 같은 μ‹œμŠ€ν…œ 이벀트)
    • λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ kill μ‹œμŠ€ν…œ μ½œμ„ ν˜ΈμΆœν•΄μ„œ 컀널이 λͺ©μ μ§€ ν”„λ‘œμ„ΈμŠ€λ‘œ μ‹œκ·Έλ„μ„ 보낼 것을 μš”μ²­ν–ˆμ„ λ•Œ
    • (μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€κ°€ 컀널에 λͺ…μ‹œμ μœΌλ‘œ μ‹œκ·Έλ„μ„ λͺ©μ  ν”„λ‘œμ„ΈμŠ€μ— 보낼 것을 μš”κ΅¬ν•˜κΈ° μœ„ν•΄ killν•¨μˆ˜ 호좜)

<μ‹œκ·Έλ„μ˜ μˆ˜μ‹ > receive

  • μ‹œκ·Έλ„μ„ λ°›λŠ”λ‹€ :(μ „μ†‘λœ μ‹œκ·Έλ„μ— λŒ€ν•΄ 행동이 ν•„μš”ν•  λ•Œ, λͺ©μ μ§€ ν”„λ‘œμ„ΈμŠ€λŠ” μ‹œκ·Έλ„μ„ λ°›λŠ”λ‹€.)
  • λͺ©μ μ§€ ν”„λ‘œμ„ΈμŠ€κ°€ μ‹œκ·Έλ„μ„ 받을 λ•Œ, μ–΄λ–€ ν˜•νƒœλ‘œλ“  λ°˜μ‘μ„ ν•˜λ„λ‘ 컀널에 μ˜ν•΄ μš”κ΅¬λ  λ•Œ
  • 3가지 λ°˜μ‘
    1. λ¬΄μ‹œ ignore
    2. λŒ€μƒ ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ terminate
    3. μ‹œκ·Έλ„ ν•Έλ“€λŸ¬ : μœ μ €λ ˆλ²¨ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜μ—¬ μ‹œκ·Έλ„μ„ μž‘λŠ”λ‹€ catch
      1. λΉ„λ™κΈ°ν˜• μΈν„°λŸ½νŠΈμ— λŒ€ν•œ μ‘λ‹΅μœΌλ‘œ ν˜ΈμΆœλ˜λŠ” μΈν„°λŸ½νŠΈ ν•Έλ“€λŸ¬ 방식과 μœ μ‚¬
      2. μΈν„°λŸ½νŠΈ λ°œμƒμ‹œ CPUκ°€ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”κ°€? → 이거 닡이 λ­μž„
  • 컀널이 ν”„λ‘œμ„ΈμŠ€ pλ₯Ό 컀널 λͺ¨λ“œμ—μ„œ μ‚¬μš©μž λͺ¨λ“œλ‘œ μ „ν™˜ν•  λ•Œ, 컀널은 ν”„λ‘œμ„ΈμŠ€ p에 λŒ€ν•΄ λΈ”λ‘λ˜μ§€ μ•ŠμŒ (pending & ~blocked)의 μ‹œκ·Έλ„ 집합을 체크.
  • 이 집합이 λΉ„μ—ˆλ‹€λ©΄ 컀널은 pλ₯Ό λ‹€μŒμœΌλ‘œ 전달

<μ‹œκ·Έλ„ κ΄€λ ¨ μš©μ–΄>

  • SIGKILLκ³Ό SIGSTOP은 νšλ“ν•˜κ±°λ‚˜ λΈ”λŸ­λ˜κ±°λ‚˜ λ¬΄μ‹œλ  수 μ—†λ‹€
  • core : μ½”λ“œμ™€ 데이터 이미지λ₯Ό λ””μŠ€ν¬μ— κΈ°λ‘ν•˜λŠ” 것

1. pending : λŒ€κΈ° ν•˜κ³  μžˆλ‹€

μ „μ†‘ν•˜μ˜€μ§€λ§Œ, 아직 μˆ˜μ‹ λ˜μ§€ μ•Šμ€ μ‹œκ·Έλ„

  • μ–΄λŠ νŠΉμ • νƒ€μž…μ˜ μ‹œκ·Έλ„μ— λŒ€ν•΄ μ΅œλŒ€ ν•œ 개의 λŒ€κΈ° μ‹œκ·Έλ„μ΄ μ‘΄μž¬ν•  수 μžˆλ‹€
  • λ™μΌν•œ μ•„μ΄λ””μ˜ μ‹œκ·Έλ„μ„ ν•˜λ‚˜λ§Œ pendingκ°€λŠ₯ (λ‹€μŒμ— λ°œμƒν•˜λŠ” 같은 νƒ€μž…μ˜ μ‹œκ·Έλ„μ€ 버렀짐)
  • μ‹œκ·Έλ„μ€ 큐에 듀어가지 μ•ŠλŠ”λ‹€. → 미리 λ°œμƒν–ˆλ˜ 건 버리고 옴

2. ν”„λ‘œμ„ΈμŠ€λŠ” νŠΉμ • μ‹œκ·Έλ„μ˜ μˆ˜μ‹ μ„ 블둝할 수 μžˆλ‹€. → μ‹œκ·Έλ„μ˜ 거절

  • λΈ”λ‘λœ μ‹œκ·Έλ„λ“€μ€ 전달될 수 μžˆμ§€λ§Œ, 이 μ‹œκ·Έλ„μ΄ 풀릴 λ•ŒκΉŒμ§€λŠ” μˆ˜μ‹ λ  수 μ—†λ‹€
  • ν”„λ‘œμ„ΈμŠ€μ—μ„œ 블둝될 수 μ—†λŠ” μœ μΌν•œ μ‹œκ·Έλ„μ€ SIGKILL이닀.

3. λŒ€κΈ°ν•˜λŠ” μ‹œκ·Έλ„μ€ μ΅œλŒ€ ν•œλ²ˆλ§Œ μˆ˜μ‹  κ°€λŠ₯

  • 컀널은 λŒ€κΈ° μ‹œκ·Έλ„λ“€μ„ λ‚˜νƒ€λ‚΄κΈ° μœ„ν•˜μ—¬ λΉ„νŠΈ 벑터λ₯Ό μ‚¬μš©ν•œλ‹€.

<μ‹œκ·Έλ„ κ°œλ…>

컀널은 각 ν”„λ‘œμ„ΈμŠ€μ˜ μ»¨ν…μŠ€νŠΈ(μƒνƒœμ •λ³΄)에 pendingκ³Ό blocked λΉ„νŠΈ 벑터λ₯Ό 가지고 있음

🧐pending

λŒ€κΈ° μ‹œκ·Έλ„λ“€μ„ ν‘œμ‹œ

  • 컀널은 νƒ€μž… k μ‹œκ·Έλ„μ΄ 도착할 λ•Œλ§ˆλ‹€ pending κ°’μ˜ k번째 λΉ„νŠΈλ₯Ό 1둜 μ„€μ •
  • 컀널은 νƒ€μž… kμ‹œκ·Έλ„μ„ μˆ˜μ‹ ν•  λ•Œλ§ˆλ‹€, pending 의 k번째 λΉ„νŠΈλ₯Ό 0으둜 μ„€μ •

🧐blocking

λΈ”λ‘λœ μ‹œκ·Έλ„λ“€μ„ ν‘œμ‹œ

  • sigprocmask ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ 1λ˜λŠ” 0으둜 μ„€μ • → λΉ„νŠΈλ²‘ν„°μ΄λ‹€

 

profile

INK study

@ongsimi_

μ½μ–΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!