Home > Archive > CS_archive > πŸ’Ύ [CS] λͺ…λ Ήμ–΄ 사이클과 μΈν„°λŸ½νŠΈ

πŸ’Ύ [CS] λͺ…λ Ήμ–΄ 사이클과 μΈν„°λŸ½νŠΈ
CS

λͺ…λ Ήμ–΄ 사이클과 μΈν„°λŸ½νŠΈ.

  • λͺ…λ Ήμ–΄ 사이클 : CPUκ°€ ν•˜λ‚˜μ˜ λͺ…λ Ήμ–΄λ₯Ό μ²˜λ¦¬ν•˜λŠ” κ³Όμ •μ—λŠ” μ–΄λ–€ μ •ν•΄μ§„ 흐름이 있고, CPUλŠ” κ·Έ 흐름을 λ°˜λ³΅ν•˜λ©° λͺ…λ Ήμ–΄λ₯Ό μ²˜λ¦¬ν•΄ λ‚˜κ°‘λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ‚˜μ˜ λͺ…λ Ήμ–΄λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ •ν˜•ν™”λœ 흐름을 β€œλͺ…λ Ήμ–΄ 사이클” 이라고 ν•©λ‹ˆλ‹€.

  • μΈν„°λŸ½νŠΈ : CPUλŠ” μ •ν•΄μ§„ 흐름에 따라 λͺ…λ Ήμ–΄λ₯Ό μ²˜λ¦¬ν•΄ λ‚˜κ°€μ§€λ§Œ, 이 흐름이 λŠμ–΄μ§€λŠ” 상황이 λ°œμƒν•©λ‹ˆλ‹€. 이λ₯Ό β€œμΈν„°λŸ½νŠΈβ€ 라고 ν•©λ‹ˆλ‹€.

λͺ…λ Ήμ–΄ 사이클

ν”„λ‘œκ·Έλž¨μ€ μˆ˜λ§Žμ€ λͺ…λ Ήμ–΄λ‘œ μ΄λ£¨μ–΄μ Έμžˆκ³ , CPUλŠ” 이 λͺ…령어듀을 ν•˜λ‚˜μ”© μ‹€ν–‰ν•©λ‹ˆλ‹€.

  • μ΄λ•Œ ν”„λ‘œκ·Έλž¨ 속 각각의 λͺ…령어듀은 μΌμ •ν•œ μ£ΌκΈ°κ°€ 반볡되며 μ‹€ν–‰λ˜λŠ”λ°, 이 μ£ΌκΈ°λ₯Ό λͺ…λ Ήμ–΄ 사이클(instruction cycle) 이라고 ν•©λ‹ˆλ‹€.
    • 즉, ν”„λ‘œκ·Έλž¨ 속 각각의 λͺ…령어듀은 λͺ…λ Ήμ–΄ 사이클이 반볡되며 μ‹€ν–‰λ©λ‹ˆλ‹€.

λ©”λͺ¨λ¦¬μ— μ €μž₯된 λͺ…λ Ήμ–΄ ν•˜λ‚˜λ₯Ό μ‹€ν–‰ν•œλ‹€κ³  κ°€μ •ν•΄ λ΄…μ‹œλ‹€.
κ°€μž₯ λ¨Όμ € ν•΄μ•Όν•  것은 λͺ…λ Ήμ–΄λ₯Ό λ©”λͺ¨λ¦¬μ—μ„œ CPU둜 가져와야 ν•©λ‹ˆλ‹€.
이게 λͺ…λ Ήμ–΄ μ‚¬μ΄ν΄μ˜ 첫 번째 κ³Όμ •μž…λ‹ˆλ‹€.

  • 인좜 사이클(fetch cycle) : λ©”λͺ¨λ¦¬μ— μžˆλŠ” λͺ…λ Ήμ–΄λ₯Ό CPU둜 κ°€μ§€κ³  μ˜€λŠ” 단계.

CPU둜 λͺ…λ Ήμ–΄λ₯Ό μΈμΆœν–ˆλ‹€λ©΄ 이제 λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
이것이 λͺ…λ Ήμ–΄ μ‚¬μ΄ν΄μ˜ 두 번째 κ³Όμ •μž…λ‹ˆλ‹€.

  • μ‹€ν–‰ 사이클(execution cycle) : CPU둜 κ°€μ Έμ˜¨ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λŠ” 단계, μ œμ–΄μž₯μΉ˜κ°€ λͺ…λ Ήμ–΄ λ ˆμ§€μŠ€ν„°μ— λ‹΄κΈ΄ 값을 ν•΄μ„ν•˜κ³ , μ œμ–΄ μ‹ ν˜Έλ₯Ό λ°œμƒμ‹œν‚€λŠ” 단계.

ν”„λ‘œκ·Έλž¨μ„ μ΄λ£¨λŠ” μˆ˜λ§Žμ€ λͺ…λ Ήμ–΄λŠ” 일반적으둜 인좜과 μ‹€ν–‰ 사이클을 λ°˜λ³΅ν•˜λ©° μ‹€ν–‰λ©λ‹ˆλ‹€.

  • 즉, CPUλŠ” ν”„λ‘œκ·Έλž¨ 속 λͺ…λ Ήμ–΄λ₯Ό κ°€μ Έμ˜€κ³  μ‹€ν–‰ν•˜κ³ , 또 κ°€μ Έμ˜€κ³  μ‹€ν–‰ν•˜κ³ λ₯Ό λ°˜λ³΅ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

  • ν•˜μ§€λ§Œ λͺ¨λ“  λͺ…λ Ήμ–΄κ°€ μ΄λ ‡κ²Œ κ°„λ‹¨νžˆ μ‹€ν–‰λ˜λŠ” 건 μ•„λ‹™λ‹ˆλ‹€.
    • λͺ…λ Ήμ–΄λ₯Ό μΈμΆœν•˜μ—¬ CPU둜 κ°€μ Έμ™”λ‹€ν•˜λ”λΌλ„ κ³§λ°”λ‘œ μ‹€ν–‰ν•  수 μ—†λŠ” κ²½μš°λ„ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ κ°„μ ‘ μ£Όμ†Œ μ§€μ • 방식을 생각해 λ΄…μ‹œλ‹€.

  • κ°„μ ‘ μ£Όμ†Œ μ§€μ • 방식은 μ˜€νΌλžœλ“œ ν•„λ“œμ— 유효 μ£Όμ†Œμ˜ μ£Όμ†Œλ₯Ό λͺ…μ‹œν•œλ‹€κ³  ν–ˆμŠ΅λ‹ˆλ‹€.
    • 이 경우 λͺ…λ Ήμ–΄λ₯Ό μΈμΆœν•˜μ—¬ CPU둜 κ°€μ Έμ™”λ‹€ ν•˜λ”λΌλ„ λ°”λ‘œ μ‹€ν–‰ 사이클에 λŒμž…ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
    • λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ©”λͺ¨λ¦¬ 접근을 ν•œ 번 더 ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.
      • 이 단계λ₯Ό κ°„μ ‘ 사이클(indirect cycle) 이라고 ν•©λ‹ˆλ‹€.

μΈν„°λŸ½νŠΈ.

ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•˜λ‹€ 보면 μ•„λž˜ μΈν„°λŸ½νŠΈλΌλŠ” 단어λ₯Ό μ‰½κ²Œ μ ‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μΈν„°λŸ½νŠΈλŠ” μ˜μ–΄λ‘œ interrupt이며, β€˜λ°©ν•΄ν•˜λ‹€, μ€‘λ‹¨μ‹œν‚€λ‹€β€™λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

  • 즉, CPUκ°€ μˆ˜ν–‰ 쀑인 μž‘μ—…μ€ λ°©ν•΄λ₯Ό λ°›μ•„ μž μ‹œ 쀑단될 수 μžˆλŠ”λ°, μ΄λ ‡κ²Œ CPU의 μž‘μ—…μ„ λ°©ν•΄ν•˜λŠ” μ‹ ν˜Έλ₯Ό μΈν„°λŸ½νŠΈ(interrupt) 라고 ν•©λ‹ˆλ‹€.

CPUκ°€ μž‘μ—…μ„ μž μ‹œ 쀑단해야 ν•  정도라면 μΈν„°λŸ½νŠΈλŠ” β€˜CPUκ°€ κΌ­ μ£Όλͺ©ν•΄μ•Ό ν•  λ•Œβ€™ ν˜Ήμ€ β€˜CPUκ°€ μ–Όλ₯Έ μ²˜λ¦¬ν•΄μ•Ό ν•  λ‹€λ₯Έ μž‘μ—…μ΄ 생겼을 λ•Œβ€™ λ°œμƒν•©λ‹ˆλ‹€.

μΈν„°λŸ½νŠΈμ˜ μ’…λ₯˜μ—λŠ” 크게 동기 μΈν„°λŸ½νŠΈμ™€ 비동기 μΈν„°λŸ½νŠΈκ°€ μžˆμŠ΅λ‹ˆλ‹€.

  • 동기 μΈν„°λŸ½νŠΈ(synchronous interrupt) : CPU에 μ˜ν•΄ λ°œμƒν•˜λŠ” μΈν„°λŸ½νŠΈμž…λ‹ˆλ‹€.
    • CPUκ°€ λͺ…령어듀을 μˆ˜ν–‰ν•˜λ‹€κ°€ μ˜ˆμƒμΉ˜ λͺ»ν•œ 상황에 λ§ˆμ£Όμ³€μ„ λ•Œ, κ°€λ Ή CPUκ°€ μ‹€ν–‰ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ°μƒμ˜ 였λ₯˜μ™€ 같은 μ˜ˆμ™Έμ μΈ 상황에 λ§ˆμΆ”μ³€μ„ λ•Œ λ°œμƒν•˜λŠ” μΈν„°λŸ½νŠΈμž…λ‹ˆλ‹€.
      • 이런 μ μ—μ„œ 동기 μΈν„°λŸ½νŠΈλŠ” μ˜ˆμ™Έ(execption) 라고 λΆ€λ¦…λ‹ˆλ‹€.
  • 비동기 μΈν„°λŸ½νŠΈ(asynchronous interrupt) : 주둜 μž…μΆœλ ₯μž₯μΉ˜μ— μ˜ν•΄ λ°œμƒν•˜λŠ” μΈν„°λŸ½νŠΈμž…λ‹ˆλ‹€.
    • μž…μΆœλ ₯μž₯μΉ˜μ— μ˜ν•œ 비동기 μΈν„°λŸ½νŠΈλŠ” 세탁기 μ™„λ£Œ μ•Œλ¦¬λ―€ μ „μžλ ˆμΈμ§€ 쑰리 μ™„λ£Œ μ•Œλ¦Όκ³Ό 같은 μ•Œλ¦Ό 역할을 ν•©λ‹ˆλ‹€.

ꡬ체적으둜 λ‹€μŒκ³Ό 같이 μ‚¬μš©λ©λ‹ˆλ‹€.

  • CPUκ°€ 프린터와 같은 μž…μΆœλ ₯μž₯μΉ˜μ— μž…μΆœλ ₯ μž‘μ—…μ„ λΆ€νƒν•˜λ©΄ μž‘μ—…μ„ 끝낸 μž…μΆœλ ₯μž₯μΉ˜κ°€ CPU에 μ™„λ£Œ μ•Œλ¦Ό(μΈν„°λŸ½νŠΈ)을 λ³΄λƒ…λ‹ˆλ‹€.
  • ν‚€λ³΄λ“œ, λ§ˆμš°μŠ€μ™€ 같은 μž…μΆœλ ₯ μž₯μΉ˜κ°€ μ–΄λ– ν•œ μž…λ ₯을 λ°›μ•„λ“€μ˜€μ„ λ•Œ 이λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ CPU에 μž…λ ₯ μ•Œλ¦Ό(μΈν„°λŸ½νŠΈ)을 λ³΄λƒ…λ‹ˆλ‹€.

ν•˜λ“œμ›¨μ–΄ μΈν„°λŸ½νŠΈ

ν•˜λ“œμ›¨μ–΄ μΈν„°λŸ½νŠΈλŠ” μ•Œλ¦Όκ³Ό 같은 μΈν„°λŸ½νŠΈ μž…λ‹ˆλ‹€.

  • CPUλŠ” μž…μΆœλ ₯ μž‘μ—… 도쀑에도 효율적으둜 λͺ…λ Ήμ–΄λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ 이런 μ•Œλ¦Όκ³Ό 같은 ν•˜λ“œμ›¨μ–΄ μΈν„°λŸ½νŠΈλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

ν•˜λ“œμ›¨μ–΄ μΈν„°λŸ½νŠΈλ₯Ό μ΄μš©ν•˜λ©΄ CPUλŠ” 주기적으둜 ν•˜λ“œμ›¨μ–΄ μ™„λ£Œ μ—¬λΆ€λ₯Ό 확인할 ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.
CPUλŠ” ν•˜λ“œμ›¨μ–΄λ‘œλΆ€ν„° ν•˜λ“œμ›¨μ–΄ μ™„λ£Œ μΈν„°λŸ½νŠΈλ₯Ό 받을 λ•ŒκΉŒμ§€ λ‹€λ₯Έ μž‘μ—…μ„ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • 이렇듯 ν•˜λ“œμ›¨μ–΄ μΈν„°λŸ½νŠΈλŠ” μž…μΆœλ ₯ μž‘μ—… 쀑에도 CPU둜 ν•˜μ—¬κΈˆ 효율적으둜 λͺ…λ Ήμ–΄λ₯Ό μ²˜λ¦¬ν•  수 있게 ν•©λ‹ˆλ‹€.

ν•˜λ“œμ›¨μ–΄ μΈν„°λŸ½νŠΈ 처리 μˆœμ„œ

  1. μž…μΆœλ ₯μž₯μΉ˜λŠ” CPU에 μΈν„°λŸ½νŠΈ μš”μ²­ μ‹ ν˜Έλ₯Ό λ³΄λƒ…λ‹ˆλ‹€.
  2. CPUλŠ” μ‹€ν–‰ 사이클이 λλ‚˜κ³  λͺ…λ Ήμ–΄λ₯Ό μΈμΆœν•˜κΈ° μ „ 항상 μΈν„°λŸ½νŠΈ μ—¬λΆ€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€.
  3. CPUλŠ” μΈν„°λŸ½νŠΈ μš”μ²­μ„ ν™•μΈν•˜κ³  μΈν„°λŸ½νŠΈ ν”Œλž˜κ·Έλ₯Ό 톡해 ν˜„μž¬ μΈν„°λŸ½νŠΈλ₯Ό 받아듀일 수 μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€.
  4. μΈν„°λŸ½νŠΈλ₯Ό 받아듀일 수 μžˆλ‹€λ©΄ CPUλŠ” μ§€κΈˆκΉŒμ§€μ˜ μž‘μ—…μ„ λ°±μ—…ν•©λ‹ˆλ‹€.
  5. CPUλŠ” μΈν„°λŸ½νŠΈ λ°±ν„°λ₯Ό μ°Έμ‘°ν•˜μ—¬ μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴을 μ‹€ν–‰ν•©λ‹ˆλ‹€.
  6. μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴이 λλ‚˜λ©΄ 4μ—μ„œ λ°±μ—…ν•΄ λ‘” μž‘μ—…μ„ λ³΅κ΅¬ν•˜μ—¬ 싀행을 μž¬κ°œν•©λ‹ˆλ‹€.
  • μΈν„°λŸ½νŠΈ μš”μ²­ μ‹ ν˜Έ : μΈν„°λŸ½νŠΈλŠ” CPU의 정상적인 μ‹€ν–‰ 흐름을 λŠλŠ” 것이기에 λ‹€λ₯Έ λˆ„κ΅°κ°€κ°€ μΈν„°λŸ½νŠΈν•˜κΈ° 전에 β€œμ§€κΈˆλΌμ–΄λ“€μ–΄λ„ λ˜λ‚˜μš”?” ν•˜κ³  CPU에 물어봐야 ν•©λ‹ˆλ‹€. 이λ₯Ό μΈν„°λŸ½νŠΈ μš”μ²­ μ‹ ν˜ΈλΌκ³  ν•©λ‹ˆλ‹€.

μ΄λ•Œ, CPUκ°€ μΈν„°λŸ½νŠΈ μš”μ²­μ„ μˆ˜μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν”Œλž˜κ·Έ λ ˆμ§€μŠ€ν„°μ˜ μΈν„°λŸ½νŠΈ ν”Œλž˜κ·Έ(interrupt flag) κ°€ ν™œμ„±ν™”λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

  • μΈν„°λŸ½νŠΈ ν”Œλž˜κ·ΈλŠ” 말 κ·Έλž˜λ„ ν•˜λ“œμ›¨μ–΄ μΈν„°λŸ½νŠΈλ₯Ό 받아듀일지, λ¬΄μ‹œν• μ§€λ₯Ό κ²°μ •ν•˜λŠ” ν”Œλž˜κ·Έμž…λ‹ˆλ‹€.
  • CPUκ°€ μ€‘μš”ν•œ μž‘μ—…μ„ μ²˜λ¦¬ν•΄μ•Ό ν•˜κ±°λ‚˜ μ–΄λ–€ 방해도 λ°›μ§€ μ•Šμ•„μ•Ό ν•  λ•Œ μΈν„°λŸ½νŠΈ ν”Œλž˜κ·ΈλŠ” λΆˆκ°€λŠ₯으둜 μ„€μ •λ©λ‹ˆλ‹€.
    • λ§Œμ•½ μΈν„°λŸ½νŠΈ ν”Œλž˜κ·Έκ°€ β€˜λΆˆκ°€λŠ₯β€™μœΌλ‘œ μ„€μ •λ˜μ–΄ μžˆλ‹€λ©΄ CPUλŠ” μΈν„°λŸ½νŠΈ μš”μ²­μ΄ μ˜€λ”λΌλ„ ν•΄λ‹Ή μš”μ²­μ„ λ¬΄μ‹œν•©λ‹ˆλ‹€.
    • λ°˜λŒ€λ‘œ μΈν„°λŸ½νŠΈ ν”Œλž˜κ·Έκ°€ β€˜κ°€λŠ₯β€™μœΌλ‘œ μ„€μ •λ˜μ–΄ μžˆλ‹€λ©΄ CPUλŠ” μΈν„°λŸ½νŠΈ μš”μ²­ μ‹ ν˜Έλ₯Ό 받아듀이고 μΈν„°λŸ½νŠΈλ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.

λ‹€λ§Œ, λͺ¨λ“  ν•˜λ“œμ›¨μ–΄ μΈν„°λŸ½νŠΈλ₯Ό μΈν„°λŸ½νŠΈ ν”Œλž˜κ·Έλ‘œ 막을 수 μžˆλŠ” 것은 μ•„λ‹™λ‹ˆλ‹€.
μΈν„°λŸ½νŠΈ ν”Œλž˜κ·Έκ°€ λΆˆκ°€λŠ₯으둜 μ„€μ •λ˜μ–΄ μžˆμ„μ§€λΌλ„ λ¬΄μ‹œν•  수 μ—†λŠ” μΈν„°λŸ½νŠΈ μš”μ²­λ„ μžˆμŠ΅λ‹ˆλ‹€.

  • λ¬΄μ‹œν•  수 μ—†λŠ” ν•˜λ“œμ›¨μ–΄ μΈν„°λŸ½νŠΈ κ°€μž₯ μš°μ„ μˆœμœ„κ°€ 높은, λ‹€μ‹œ 말해 λ°˜λ“œμ‹œ κ°€μž₯ λ¨Όμ € μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” μΈν„°λŸ½νŠΈμž…λ‹ˆλ‹€.
    • μ •μ „μ΄λ‚˜ ν•˜λ“œμ›¨μ–΄ κ³ μž₯으둜 μΈν•œ μΈν„°λŸ½νŠΈκ°€ 이에 ν•΄λ‹Ήν•©λ‹ˆλ‹€.

CPUκ°€ μΈν„°λŸ½νŠΈ μš”μ²­μ„ λ°›μ•„λ“€μ΄κΈ°λ‘œ ν–ˆλ‹€λ©΄ CPUλŠ” μ„œλΉ„μŠ€ λ£¨ν‹΄μ΄λΌλŠ” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€.

  • μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴(ISB: Interrupt Service Routine): μΈν„°λŸ½νŠΈλ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ ν”„λ‘œκ·Έλž¨. μΈν„°λŸ½νŠΈ ν•Έλ“€λŸ¬(Interrupt handler) 라고도 λΆˆλ¦½λ‹ˆλ‹€.
    • μ–΄λ–€ μΈν„°λŸ½νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ ν•΄λ‹Ή μΈν„°λŸ½νŠΈλ₯Ό μ–΄λ–»κ²Œ μ²˜λ¦¬ν•˜κ³  μž‘λ™ν•΄μ•Ό 할지에 λŒ€ν•œ μ •λ³΄λ‘œ 이루어진 ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€.
    • μš”μ»¨νƒœ β€˜CPUκ°€ μΈν„°λŸ½νŠΈλ₯Ό μ²˜λ¦¬ν•œλ‹€β€™λŠ” 말은 β€˜μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴을 μ‹€ν–‰ν•˜κ³ , 본래 μˆ˜ν–‰ν•˜λ˜ μž‘μ—…μœΌλ‘œ λ‹€μ‹œ λ˜λŒμ•„μ˜¨λ‹€β€™ λΌλŠ” 말과 κ°™μŠ΅λ‹ˆλ‹€.

μΈν„°λŸ½νŠΈλ₯Ό μ²˜λ¦¬ν•˜λŠ” 방법은 μž…μΆœλ ₯μž₯μΉ˜λ§ˆλ‹€ λ‹€λ₯΄λ―€λ‘œ 각기 λ‹€λ₯Έ μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴을 κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

  • 즉, λ©”λͺ¨λ¦¬μ—λŠ” μœ„ 그림처럼 μ—¬λŸ¬ 개의 μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴이 μ €μž₯λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
    • 이듀 ν•˜λ‚˜ν•˜λ‚˜κ°€ β€˜μΈν„°λŸ½νŠΈκ°€ λ°œμƒν•˜λ©΄ μ–΄λ–»κ²Œ 행동해야 ν• μ§€λ₯Ό μ•Œλ €μ£ΌλŠ” ν”„λ‘œκ·Έλž¨β€™μ΄λΌκ³  보면 λ©λ‹ˆλ‹€.
  • μΈν„°λŸ½νŠΈ 벑터(Interrupt vector) : CPUλŠ” μˆ˜λ§Žμ€ μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴을 κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ μΈν„°λŸ½νŠΈ 벑터λ₯Ό μ΄μš©ν•©λ‹ˆλ‹€. μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴을 μ‹λ³„ν•˜κΈ° μœ„ν•œ μ •λ³΄μž…λ‹ˆλ‹€.
    • μΈν„°λŸ½νŠΈ 벑터λ₯Ό μ•Œλ©΄ μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ λ£¨ν‹΄μ˜ μ‹œμž‘ μ£Όμ†Œλ₯Ό μ•Œ 수 있기 λ•Œλ¬Έμ— CPUλŠ” μΈν„°λŸ½νŠΈ 벑터λ₯Ό 톡해 νŠΉμ • μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴을 μ²˜μŒλΆ€ν„° μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

CPUλŠ” ν•˜λ“œμ›¨μ–΄ μΈν„°λŸ½νŠΈ μš”μ²­μ„ 보낸 λŒ€μƒμœΌλ‘œλΆ€ν„° 데이터 λ²„μŠ€λ₯Ό 톡해 μΈν„°λŸ½νŠΈ 벑터λ₯Ό μ „λ‹¬λ°›μŠ΅λ‹ˆλ‹€.

κ°€λ Ή, CPUκ°€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 도쀑 ν‚€λ³΄λ“œ μΈν„°λŸ½νŠΈκ°€ λ°œμƒν•œ 경우라면 CPUλŠ” μΈν„°λŸ½νŠΈ 벑터λ₯Ό μ°Έμ‘°ν•˜μ—¬ ν‚€λ³΄λ“œ μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ λ£¨ν‹΄μ˜ μ‹œμž‘ μ£Όμ†Œλ₯Ό μ•Œμ•„λ‚΄κ³ , 이 μ‹œμž‘ μ£Όμ†ŒλΆ€ν„° μ‹€ν–‰ν•΄ λ‚˜κ°€λ©° ν‚€λ³΄λ“œ μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴을 μ‹€ν–‰ν•©λ‹ˆλ‹€.

μ •λ¦¬ν•˜λ©΄ β€˜CPUκ°€ μΈν„°λŸ½νŠΈλ₯Ό μ²˜λ¦¬ν•œλ‹€β€™λŠ” 말은 β€˜μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴을 μ‹€ν–‰ν•˜κ³ , 본래 μˆ˜ν–‰ν•˜λ˜ μž‘μ—…μœΌλ‘œ λ‹€μ‹œ λ˜λŒμ•„μ˜¨λ‹€β€™λŠ” 말과 κ°™μŠ΅λ‹ˆλ‹€.

  • 그리고 CPUκ°€ μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴을 μ‹€ν–‰ν•˜λ €λ©΄ μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ λ£¨ν‹΄μ˜ μ‹œμž‘ μ£Όμ†Œλ₯Ό μ•Œμ•„μ•Ό ν•˜λŠ”λ°, μ΄λŠ” μΈν„°λŸ½νŠΈ 벑터λ₯Ό 톡해 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴은 μ—¬λŠ ν”„λ‘œκ·Έλž¨κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ λͺ…령어와 λ°μ΄ν„°λ‘œ 이루어져 μžˆμŠ΅λ‹ˆλ‹€.

  • 그렇기에 μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴도 ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°λ₯Ό λΉ„λ‘―ν•œ λ ˆμ§€μŠ€ν„°λ“€μ„ μ‚¬μš©ν•˜λ©° μ‹€ν–‰λ©λ‹ˆλ‹€.

그럼, μΈν„°λŸ½νŠΈκ°€ λ°œμƒν•˜κΈ° μ „κΉŒμ§€ λ ˆμ§€μŠ€ν„°μ— μ €μž₯λ˜μ–΄ 있던 값듀은 μ–΄λ–»κ²Œ ν• κΉŒμš”?

  • μΈν„°λŸ½νŠΈ μš”μ²­μ„ λ°›κΈ° μ „κΉŒμ§€ CPUκ°€ μˆ˜ν–‰ν•˜κ³  μžˆμ—ˆλ˜ 일은 μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴이 λλ‚˜λ©΄ λ˜λŒμ•„μ™€μ„œ λ§ˆμ € μˆ˜ν–‰μ„ ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μ§€κΈˆκΉŒμ§€μ˜ μž‘μ—… 내역듀은 μ–΄λ”˜κ°€μ— 백업을 해둬야 ν•©λ‹ˆλ‹€.
    • 그렇기에 CPUλŠ” μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴을 μ‹€ν–‰ν•˜κΈ° 전에 ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„° κ°’ λ“± ν˜„μž¬ ν”„λ‘œκ·Έλž¨μ„ μž¬κ°œν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ λͺ¨λ“  λ‚΄μš©μ„ μŠ€νƒμ— λ°±μ—…ν•©λ‹ˆλ‹€.
    • 그러고 λ‚˜μ„œ μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ λ£¨ν‹΄μ˜ μ‹œμž‘ μ£Όμ†Œκ°€ μœ„μΉ˜ν•œ 곳으둜 ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„° 값을 κ°±μ‹ ν•˜κ³  μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴을 μ‹€ν–‰ν•©λ‹ˆλ‹€.

  • μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴을 λͺ¨λ‘ μ‹€ν–‰ν•˜λ©΄, λ‹€μ‹œ 말해 μΈν„°λŸ½νŠΈλ₯Ό μ²˜λ¦¬ν•˜κ³  λ‚˜λ©΄ μŠ€νƒμ— μ €μž₯ν•΄ λ‘” 값을 λ‹€μ‹œ 뢈러온 λ’€ μ΄μ „κΉŒμ§€ μˆ˜ν–‰ν•˜λ˜ μž‘μ—…μ„ μž¬κ°œν•©λ‹ˆλ‹€.

ν‚€μ›Œλ“œ 정리

  • μΈν„°λŸ½νŠΈ μš”μ²­ μ‹ ν˜Έ : CPU의 μž‘μ—…μ„ λ°©ν•΄ν•˜λŠ” μΈν„°λŸ½νŠΈμ— λŒ€ν•œ μš”μ²­
  • μΈν„°λŸ½νŠΈ ν”Œλž˜κ·Έ : μΈν„°λŸ½νŠΈ μš”μ²­ μ‹ ν˜Έλ₯Ό 받아듀일지 λ¬΄μ‹œν• μ§€λ₯Ό κ²°μ •ν•˜λŠ” λΉ„νŠΈ
  • μΈν„°λŸ½νŠΈ 벑터 : μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ λ£¨ν‹΄μ˜ μ‹œμž‘ μ£Όμ†Œλ₯Ό ν¬ν•¨ν•˜λŠ” μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ λ£¨ν‹΄μ˜ 식별 정보
  • μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴 : μΈν„°λŸ½νŠΈλ₯Ό μ²˜λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨

CPUλŠ” 이와 같은 과정을 λ°˜λ³΅ν•΄ λ‚˜κ°€λ©° ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•œλ‹€κ³  λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

ν‚€μ›Œλ“œλ‘œ μ •λ¦¬ν•˜λŠ” 핡심 포인트

  • λͺ…λ Ήμ–΄ 사이클은 ν•˜λ‚˜μ˜ λͺ…λ Ήμ–΄κ°€ μ²˜λ¦¬λ˜λŠ” 주기둜, 인좜, μ‹€ν–‰, κ°„μ ‘, μΈν„°λŸ½νŠΈ μ‚¬μ΄ν΄λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • μΈν„°λŸ½νŠΈ λŠ” CPU의 정상적인 μž‘μ—…μ„ λ°©ν•΄ν•˜λŠ” μ‹ ν˜Έμž…λ‹ˆλ‹€.
  • μΈν„°λŸ½νŠΈμ˜ μ’…λ₯˜μ—λŠ” μ˜ˆμ™Έμ™€ ν•˜λ“œμ›¨μ–΄ μΈν„°λŸ½νŠΈκ°€ μžˆμŠ΅λ‹ˆλ‹€.
  • μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴은 μΈν„°λŸ½νŠΈλ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ λ™μž‘λ“€λ‘œ 이루어진 ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€.