λ³Έ κ²μκΈμ KOCW μ΄νμ¬μλνκ΅ λ°ν¨κ²½ κ΅μλμ <μ΄μ체μ > κ°μλ₯Ό λ£κ³ μ 리ν λ΄μ©μ λλ€.
κ²μκΈμ ν¬ν¨λλ μ΄λ―Έμ§ μλ£ λν ν΄λΉ κ°μμ ν¬ν¨λ κ°μ μλ£μ λλ€.
I/Oμ μν
λͺ¨λ I/O(μ μΆλ ₯) λͺ λ Ήμ νΉκΆ λͺ λ Ήμ΄λ―λ‘ μ¬μ©μ νλ‘κ·Έλ¨μ μ§μ I/O deviceμ μ κ·Όν μ μμ΅λλ€.
κ·Έλ λ€λ©΄ μ¬μ©μ νλ‘κ·Έλ¨μ μ΄λ»κ² I/Oλ₯Ό μννκ² λ κΉμ??μ¬μ©μ νλ‘κ·Έλ¨μ μμ€ν μ½(System Call)μ ν΅ν΄ μ΄μ체μ μκ² I/O μμ²μ νκ² λ©λλ€.μμ€ν μ½μ ν΅ν΄ trapμ μ¬μ©ν μΈν°λ½νΈ(Interrupt)λ₯Ό κ±Έμ΄ CPU μ μ΄κΆμ΄ μ΄μ체μ μκ² λμ΄κ° μ μλλ‘ νλ λ°©μμΌλ‘ μμ²νλ κ²μ λλ€. μΈν°λ½νΈκ° λ€μ΄μ€λ©΄, CPUλ μ¬λ°λ₯Έ I/O μμ²μΈμ§ νμΈ ν I/O μμ²μ μνν©λλ€.
μμ€ν μ½ (System Call)
μμ€ν μ½μ μ¬μ©μ νλ‘κ·Έλ¨μ΄ μ΄μ체μ μ μλΉμ€λ₯Ό λ°κΈ° μν΄ μ»€λ ν¨μλ₯Ό νΈμΆνλ κ²μ λλ€.
μ¬μ©μ νλ‘κ·Έλ¨μ I/Oμ κ°μ μμ μ΄ νμν λ, OS 컀λμ I/Oμ κ΄λ ¨λ λ©λͺ¨λ¦¬ μ£Όμμ μ κ·Όν μ μμ΅λλ€. (mode bitμ΄ 1, μ¦ μ¬μ©μ λͺ¨λμ΄κΈ° λλ¬Έ) μ΄λ¬ν κ²½μ°, μ¬μ©μ νλ‘κ·Έλ¨μ΄ OS μκ² λ¬΄μΈκ°λ₯Ό μμ²νκΈ° μν΄ interruptλ₯Ό κ±Έμ΄μ OS 컀λμ ν¨μλ₯Ό νΈμΆν μκ° μλλ°, μ΄λ¬ν κ³Όμ μ΄ λ°λ‘ μμ€ν μ½μ λλ€.
μΈν°λ½νΈ (Interrupt)
μΈν°λ½νΈ(Interrupt)λ νλ‘κ·Έλ¨ μ€ν μ€μ μ μΆλ ₯ νλμ¨μ΄ λ±μ μ₯μΉμ μκΈ°μΉ μμ μν©μ΄ λ°μν κ²½μ° νμ¬ μ€νμ€μΈ μμ μ μ€λ¨νκ³ λ°μλ μν©μ μ²λ¦¬ν ν λ€μ μ€νμ€μΈ μμ μΌλ‘ 볡κ·νλ μμ μ λλ€.
μΈν°λ½νΈλ νλμ¨μ΄ μΈν°λ½νΈμ μννΈμ¨μ΄ μΈν°λ½νΈλ‘ λλ μ μμ΅λλ€.
- νλμ¨μ΄ μΈν°λ½νΈ (= Interrupt): νλμ¨μ΄(Timer, Device Controller, DMA Controller λ±)κ° λ°μμν¨ μΈν°λ½νΈ
- μννΈμ¨μ΄ μΈν°λ½νΈ (= Trap)
- Exception: νλ‘κ·Έλ¨μ΄ μ€λ₯λ₯Ό λ²ν κ²½μ°
- System call: νλ‘κ·Έλ¨μ΄ 컀λ ν¨μλ₯Ό νΈμΆνλ κ²½μ°
μΈν°λ½νΈκ° λ°μνκ² λλ©΄, μΈν°λ½νΈ λΉν μμ μ λ μ§μ€ν°μ Program Counterλ₯Ό μ μ₯ν ν CPUμ μ μ΄λ₯Ό μΈν°λ½νΈ μ²λ¦¬ 루ν΄μ λκΉλλ€.νλμ μ΄μ체μ λ μΈν°λ½νΈμ μν΄ κ΅¬λλ©λλ€. μΈν°λ½νΈκ° λ€μ΄μ¬ λλ§ CPU μ μ΄κΆμ΄ OSμκ² λμ΄κ°λ©°, κ·Έλ μ§ μμΌλ©΄ CPUλ νμ μ¬μ©μ νλ‘κ·Έλ¨μ΄ μ¬μ©νκ³ μκ² λλ κ²μ λλ€.
μΈν°λ½νΈ κ΄λ ¨ μ©μ΄
μΈν°λ½νΈκ° λ€μ΄μ€λ©΄ μν©μ λ§κ² μ²λ¦¬ν΄μΌ ν μΌλ€μ΄ μ΄μ체μ μμ 컀λ ν¨μλ‘ μ μλμ΄μμ΅λλ€.
- μΈν°λ½νΈ 벑ν°: ν΄λΉ μΈν°λ½νΈμ μ²λ¦¬ λ£¨ν΄ μ£Όμλ₯Ό κ°μ§κ³ μμ
- μΈν°λ½νΈ μ²λ¦¬ 루ν΄(= Interrupt Service Routine, μΈν°λ½νΈ νΈλ€λ¬): ν΄λΉ μΈν°λ½νΈλ₯Ό μ²λ¦¬νλ 컀λ ν¨μ
λκΈ°μ μ μΆλ ₯κ³Ό λΉλκΈ°μ μ μΆλ ₯
λκΈ°μ μ μΆλ ₯ (Synchronous I/O)
I/O μμ² ν μ μΆλ ₯ μμ μ΄ μλ£λ νμμΌ μ μ΄κ° μ¬μ©μ νλ‘κ·Έλ¨μκ² λμ΄κ°λλ€.
ꡬνλ°©λ² 1: CPUλ₯Ό κ°μ§κ³ μμΌλ©΄μ κΈ°λ€λ¦Ό
- I/Oκ° λλ λκΉμ§ CPUλ₯Ό λλΉμν΄
- 맀μμ νλμ I/Oλ§ μΌμ΄λ μ μμ
→ λΉν¨μ¨μ μΈ λ°©λ²
ꡬνλ°©λ² 2: κΈ°λ€λ¦¬λ μκ°λμ CPUλ₯Ό λ€λ₯Έ νλ‘μΈμ€νν λ겨μ€
- I/Oκ° μλ£λ λκΉμ§ ν΄λΉ νλ‘κ·Έλ¨μμ CPUλ₯Ό λΉΌμμ
- I/O μ²λ¦¬λ₯Ό κΈ°λ€λ¦¬λ νμ ν΄λΉ νλ‘κ·Έλ¨μ λ£μ
- λ€λ₯Έ νλ‘κ·Έλ¨μκ² CPUλ₯Ό μ£Όλ λ°©μμΌλ‘ ꡬν
- I/O μμ μ΄ μλ£λλ©΄ device controllerκ° μΈν°λ½νΈλ₯Ό κ±Έμ΄ μλ£λ₯Ό μλ¦Ό
→ CPU, I/O λλ€ λμμ μ¬λ¬ μμ κ°λ₯
λΉλκΈ°μ μ μΆλ ₯ (Asynchronous I/O)
I/Oκ° μμλ ν μ μΆλ ₯ μμ μ΄ λλκΈ°λ₯Ό κΈ°λ€λ¦¬μ§ μκ³ μ μ΄κ° μ¬μ©μ νλ‘κ·Έλ¨μ μ¦μ λμ΄κ°λλ€. (λ€λ₯Έ μμ μ μν instruction 곧λ°λ‘ μ€ν)
I/O μμ μ μκ°μ΄ λ§μ΄ 걸리λ μμ μ λλ€. μΌμ μκ°μ΄ νλ¬μΌ I/Oμμ μ΄ λλκ² λκ³ I/Oμμ²μ λν κ²°κ³Όκ° μ¬μ©μμκ² λμ°©νλλ°(device controllerκ° μΈν°λ½νΈλ₯Ό κ±Έμ΄μ λλ¬μμ μλ¦¬κ² λ¨), κ²°κ³Όλ₯Ό νμΈνκ³ (λμ°©κΉμ§ κΈ°λ€λ Έλ€κ°) μ¬μ©μκ° λ€μ μμ μ νλ€λ©΄ λκΈ°μ μ μΆλ ₯ λ°©μμ΄κ³ , I/Oμμ μμ²λ§ ν΄λκ³ λ°λ‘ CPUμ μ΄κΆμ μ»μ΄μ λ€λ₯Έ μμ λ€μ νλ κ²μ λΉλκΈ°μ μ μΆλ ₯ λ°©μμ λλ€.
보ν΅μ κ²½μ°(read μμ )μλ I/Oμμ μ κ²°κ³Όλ¬Όμ κ°μ§κ³ λ€μ μμ μ νκ² λκΈ° λλ¬Έμ λκΈ°μ(sync) μ μΆλ ₯ λ°©μμ΄ μΌλ°μ μ λλ€.νμ§λ§, νμ§λ§, κ·Έ κ²°κ³Όλ¬Όμμ΄ κ·Έ λ€μ μμ μ ν μ μλ κ²½μ°(μΆλ ₯κ²°κ³Ό κ΅³μ΄ λ°λ‘ λ³΄μ§ μμλ ν μ μλ μμ λ€)λ€λ μμ΅λλ€. μ΄ κ²½μ°μλ I/O κ²°κ³Όλ¬Ό κΈ°λ€λ¦¬λ λμ κ·Έ μμ μ λ¨Όμ ν μ μλλ‘ λΉλκΈ°μ(async) μ μΆλ ₯ λ°©μμΌλ‘ I/Oμμ²μ νκ² λ©λλ€.
λκΈ°μ μ μΆλ ₯ λ°©μμ κ²½μ°, ꡬνλ°©λ² 1κ³Ό κ°μ΄ I/Oκ° λλ λκΉμ§ CPUκ° μ무μΌλ νμ§μκ³ κΈ°λ€λ¦°λ€λ©΄ CPU, I/O λλ€ λλΉλλ κ²μ΄κΈ° λλ¬Έμ ꡬνλ°©λ² 2μ κ°μ΄ λμμ μ¬λ¬ μμ μ΄ κ°λ₯νλλ‘ ν©λλ€.
λκΈ°μ, λΉλκΈ°μ μ μΆλ ₯ λ°©μ λ κ²½μ° λͺ¨λ I/Oμμ μ μλ£λ μΈν°λ½νΈλ‘ μλ €μ£Όκ² λ©λλ€.
'π₯ CS > μ΄μ체μ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μ΄μ체μ ] νλ‘μΈμ€ μν (0) | 2023.02.13 |
---|---|
[μ΄μ체μ ] νλ‘μΈμ€ (0) | 2023.02.12 |
[μ΄μ체μ ] νλ‘κ·Έλ¨μ μ€ν (1) | 2023.02.01 |
[μ΄μ체μ ] μ»΄ν¨ν° μμ€ν ꡬ쑰 (2) | 2023.01.13 |
[μ΄μ체μ ] μ΄μ체μ λ? (0) | 2022.12.18 |