์ ๋ณด์ฒ๋ฆฌ๊ธฐ๋ฅ์ฌ 20. ์ฑ๋/DMA
์ฑ๋(Channel)
์ฑ๋์ CPU๊ฐ ์ง์ ์ ์ถ๋ ฅ์ ๊ด๋ฆฌํ๋ ๋์ , ์ ์ถ๋ ฅ ์ฅ์น์ ์ฃผ๊ธฐ์ต์ฅ์น ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก์ ๋ ๋ฆฝ์ ์ผ๋ก ์ํํ๋ ์ญํ ์ ํ๋ค. ์ด๋ CPU์ ๋ถ๋ด์ ์ค์ด๊ณ , CPU์ ์ ์ถ๋ ฅ ์ฅ์น ๊ฐ์ ์๋ ์ฐจ์ด๋ก ์ธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
์ฑ๋์ ๊ธฐ๋ฅ
- CPU๋ก๋ถํฐ ์ ์ถ๋ ฅ ๋ช ๋ น์ ๋ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ
- ์ฃผ๊ธฐ์ต์ฅ์น์ ์ง์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ก
- CPU์ ์ ์ถ๋ ฅ ๋ถ๋ด์ ์ค์ด๊ณ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ ์ก์ ์ํ
์ฑ๋์ ์ข ๋ฅ
- Selector Channel (์ ํ ์ฑ๋)
- ๊ณ ์ ์ ์ถ๋ ฅ ์ฅ์น๋ฅผ ์ํ ์ฑ๋
- ํน์ ํ ํ ๊ฐ์ ์ฅ์น๋ฅผ ๋ ์ ํ์ฌ ์ ์ถ๋ ฅ ์ํ
- Multiplexer Channel (๋ค์ค ์ฑ๋)
- ์ ์ ์ ์ถ๋ ฅ ์ฅ์น๋ฅผ ์ํ ์ฑ๋
- ์ฌ๋ฌ ๊ฐ์ ์ ์ถ๋ ฅ ์ฅ์น๋ฅผ ๋์์ ์ ์ด
- Byte Multiplexer Channel์ด๋ผ๊ณ ๋ ๋ถ๋ฆผ
- Block Multiplexer Channel
- ๊ณ ์ ์ ์ถ๋ ฅ ์ฅ์น๋ฅผ ์ํ ์ฑ๋
- ๋์์ ์ฌ๋ฌ ๊ฐ์ ์ ์ถ๋ ฅ ์ฅ์น๋ฅผ ์ ์ด ๊ฐ๋ฅ
DMA (Direct Memory Access, ์ง์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ)
DMA๋ CPU์ ๊ฐ์ ์์ด ์ ์ถ๋ ฅ ์ฅ์น๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ํ๋ ๋ฐฉ์์ด๋ค. ์ด๋ฅผ ํตํด CPU๊ฐ ์ ์ถ๋ ฅ ์์ ์ ๋งค๋ฒ ๊ฐ์ ํ์ง ์๊ณ ๋ค๋ฅธ ์ฐ์ฐ์ ์ํํ ์ ์์ด ์์คํ ์ ์ ๋ฐ์ ์ธ ์๋๋ฅผ ํฅ์์ํจ๋ค.
DMA์ ๋์ ๋ฐฉ์
- CPU๊ฐ DMA ์ปจํธ๋กค๋ฌ์๊ฒ ์ ์ถ๋ ฅ ์์ ์ ์ง์
- DMA ์ปจํธ๋กค๋ฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ถ๋ ฅ ์ฅ์น ๊ฐ ๋ฐ์ดํฐ ์ ์ก ์ํ
- ์ ์ก์ด ์๋ฃ๋๋ฉด ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์์ผ CPU์ ์๋ฆผ
DMA์ ์ฃผ์ ๊ตฌ์ฑ์์
- ์ธํฐํ์ด์ค ํ๋ก: ์ ์ถ๋ ฅ ์ฅ์น์ ์ฐ๊ฒฐ๋๋ ํ๋ก
- ์ฃผ์ ๋ ์ง์คํฐ: ๋ฐ์ดํฐ ์ ์ก ๋์ ์ฃผ์ ์ ์ฅ
- ๋ฐ์ดํฐ ์นด์ดํฐ ๋ ์ง์คํฐ: ์ ์กํ ๋ฐ์ดํฐ ํฌ๊ธฐ ์ ์ฅ
- ์ ์ด ๋ ์ง์คํฐ: ๋ฐ์ดํฐ ์ ์ก ๋ฐฉ์ ๋ฐ ์ ์ด ์ ๋ณด ์ ์ฅ
- ๋ฐ์ดํฐ ๋ ์ง์คํฐ: ์ ์กํ ๋ฐ์ดํฐ ์ ์ฅ
์คํ๋ง (Spooling)
์คํ๋ง์ ์ ์ ์ ์ถ๋ ฅ ์ฅ์น(์: ํ๋ฆฐํฐ)์ ๊ณ ์ CPU ๊ฐ์ ์๋ ์ฐจ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ธฐ๋ฒ์ด๋ค. ์ด๋ฅผ ํตํด CPU๋ ์ ์ถ๋ ฅ ์์ ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋ค.
์คํ๋ง์ ๋์ ๋ฐฉ์
- ๊ณ ์์ CPU๊ฐ ๋ฐ์ดํฐ๋ฅผ ์คํ(Spool) ์์ญ(๋์คํฌ ๋๋ ๋ฉ๋ชจ๋ฆฌ)์ ์ ์ฅ
- ์ ์์ ์ ์ถ๋ ฅ ์ฅ์น๊ฐ ์์ ์ ์๋์ ๋ง์ถฐ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ
- CPU๋ ๋๊ธฐํ์ง ์๊ณ ๋ค๋ฅธ ์์ ์ํ ๊ฐ๋ฅ
์คํ๋ง์ ์ฃผ๋ก ํ๋ฆฐํฐ, ๋ฐฐ์น ์ฒ๋ฆฌ ์์คํ ๋ฑ์์ ์ฌ์ฉ๋๋ฉฐ, ์ ์ถ๋ ฅ ์ฑ๋ฅ์ ์ต์ ํํ๋ ์ค์ํ ๊ธฐ๋ฒ์ด๋ค.