๐ ์ด์์ฒด์ ์ ์ญํ ๊ณผ ์ปค๋์ ๊ธฐ๋ฅ
์ด์์ฒด์ ๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ปค๋, ์ธํฐํ์ด์ค, ์์คํ ์ฝ, ๋๋ผ์ด๋ฒ์ 4๊ฐ์ง๋ก ํฌ๊ฒ ๋๋์ด์ง ์ ์๋ค.
์ปค๋
์ปค๋์ ์ด์์ฒด์ ์ ํต์ฌ์์๋ก, HW์ ์ง์ ์ํธ์์ฉํ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ, CPU, IO, ํ์ผ ์์คํ ๋ฑ์ ๊ด๋ฆฌํ๋ SW์ด๋ค.
์ธํฐํ์ด์ค
์ธํฐํ์ด์ค๋ ์๋ก ๋ค๋ฅธ ์์คํ ์์๋ค์ด ์ํธ์์ฉํ ์ ์๊ฒ ๋์์ฃผ๋ ๋งค๊ฐ์ฒด๋ก, ์ ์ ์ OS, HW์ OS์ ์ํธ์์ฉ์ด ๊ทธ ๋ํ์ ์ธ ์์์ด๋ค. CLI(๋ช ๋ น์ด ์ธํฐํ์ด์ค), GUI(๊ทธ๋ํฝ ์ ์ ์ธํฐํ์ด์ค) ๋ฑ์ด ์ธํฐํ์ด์ค์ ์์ด๋ค.
์์คํ ์ฝ
์์คํ ์ฝ์ ์์ฉ ํ๋ก๊ทธ๋จ์ด OS์ ๊ธฐ๋ฅ์ ํธ์ถํ ๋ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค๋ก, ์์ฉ ํ๋ก๊ทธ๋จ์ด OS์ ์ง์ ์ ๊ทผํ๋ ๊ฒ์ ๋ง๊ณ ์ ๋ง๋ค์ด์ก๋ค. read()์ ๊ฐ์ด ํ์ผ์ ์ฝ๋๋ค๋๊ฐ, fork()์ ๊ฐ์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๊ฒ๋ค์ด ์ด ์์คํ ์ฝ์ ํฌํจ๋๋ฉฐ, ์์ฉ ํ๋ก๊ทธ๋จ์ ์ด๋ฌํ ํธ์ถ์ ํตํด์ ์์์ ์ด์ฉํ ์ ์๋ค.
๋๋ผ์ด๋ฒ
๋๋ผ์ด๋ฒ๋ HW์ OS ๊ฐ์ ์ํํธ์จ์ด ์ธํฐํ์ด์ค ์ญํ ์ ํ๋ค. ๊ฐ ํ๋์จ์ด ์ฅ์น๋ ์ด์์ฒด์ ์ ์๋ก ๋ค๋ฅด๊ฒ ์๋ํ ์ ์๊ธฐ ๋๋ฌธ์, ๋๋ผ์ด๋ฒ๋ ์ด๋ค ์ฅ์น๊ฐ ์ด์์ฒด์ ์ ํธํ๋๋๋ก ํด์ค๋ค. ํ๋ฆฐํธ ๋๋ผ์ด๋ฒ, ๊ทธ๋ํฝ ์นด๋ ๋๋ผ์ด๋ฒ๊ฐ ๊ทธ ์์์ด๋ค.
๐ ์ปค๋์ ์์คํ ์์ ๊ด๋ฆฌ
์์ ๋งํ๋ฏ์ด ์ปค๋์ ์ฐ๋ฆฌ๊ฐ ์ด์์ฒด์ ํ๋ฉด ๋ ์ฌ๋ฆฌ๋ ๊ธฐ๋ฅ๋ค์ ๋๋ถ๋ถ ์ํํ๋ OS์ ํต์ฌ์์์ด๋ค. ๊ทธ๋ฌ๋ฉด ์ปค๋์ด ๊ด๋ฆฌํ๋ ์์์ ๋ํด์ ์์ธํ ์์๋ณด์. ๊ฐ ๋ด์ฉ์ ์ ๋ถ ๊ฝค๋ ๊น์๊ฑฐ๋ผ, ์ด ๊ธ์์๋ ๊ฐ๋จํ ์์๋ณด๊ณ ๋์ค์ ๊ฐ๊ฐ ๋ ์์ธํ ์ ๋ก๋๋ฅผ ํ๊ฒ ๋ค.
1. ํ๋ก์ธ์ค ๊ด๋ฆฌ
์ปค๋์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ํ๋ก์ธ์ค ๊ฐ ์ถฉ๋ ์์ด ์์คํ ์์์ ๊ณต์ ํ๊ฒ ๋ถ๋ฐฐํ๊ธฐ ์ํ ๊ด๋ฆฌ๋ฅผ ํ๋ค.
- ํ๋ก์ธ์ค ์ค์ผ์ค๋ง: CPU ์์์ ์ฌ๋ฌ ํ๋ก์ธ์ค์ ํ ๋นํ๋ ๋ฐฉ์์ด๋ค. ๋ค์ํ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ(์: FIFO, Round Robin, Priority Scheduling)์ ์ฌ์ฉํ์ฌ ํจ์จ์ฑ์ ๋์ธ๋ค.
- ํ๋ก์ธ์ค ๋๊ธฐํ: ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ๋์์ ์ฌ์ฉํ์ง ์๋๋ก ์ ์ดํ๋ค : ๋ฎคํ ์ค(Mutex), ์ธ๋งํฌ์ด(Semaphore)
- ํ๋ก์ธ์ค ์์ฑ ๋ฐ ์ข
๋ฃ: ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๊ณ , ์์
์ ์๋ฃํ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํ๋ ์์
์ ๊ด๋ฆฌํ๋ค
2. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
์ปค๋์ ์์คํ ์ ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ(RAM)๋ฅผ ํจ์จ์ ์ผ๋ก ๋ฐฐ๋ถํ๊ณ , ํ๋ก์ธ์ค๋ค์ด ํ์ํ ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ๊ด๋ฆฌํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ํ ๋น: ๊ฐ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ ๋์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํ๋ค : ์ฐ์ ํ ๋น, ํ์ด์ง ํ ๋น, ์ธ๊ทธ๋จผํธ ํ ๋น ๋ฑ
- ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ: ์ค์ ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ด๋ค. ํ๋ ๋์คํฌ์ ์ผ๋ถ๋ฅผ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์๊ฒ ํ๋ค. ํ์ด์ง(Paging)๊ณผ ์ธ๊ทธ๋ฉํ ์ด์ (Segmentation) ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ: ๊ฐ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์นจ๋ฒํ์ง ์๋๋ก ๋ณดํธํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ํด์ : ์ฌ์ฉ์ด ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํด์ ํ์ฌ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.
3. ์ ์ถ๋ ฅ ์ฅ์น ๊ด๋ฆฌ
์ปค๋์ ํ๋์จ์ด ์ฅ์น(๋์คํฌ, ํ๋ฆฐํฐ, ๋คํธ์ํฌ ์ฅ์น ๋ฑ)์์ ๋ฐ์ดํฐ ์ก์์ ์ ๊ด๋ฆฌํ๋ค.
- ๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ(Device Drivers): ๊ฐ ์ฅ์น์ ๋ง๋ ๋๋ผ์ด๋ฒ๋ฅผ ํตํด ํ๋์จ์ด์์ ์ํธ์์ฉ์ ๊ด๋ฆฌํ๋ค.
- ์ฅ์น ์ค์ผ์ค๋ง(Device Scheduling): ์ฌ๋ฌ ์ ์ถ๋ ฅ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฅ์น์ ๋ํ ์ ๊ทผ ์์๋ฅผ ๊ด๋ฆฌํ๋ค. ์๋ฅผ ๋ค์ด, FCFS(First-Come-First-Served), SSTF(Shortest Seek Time First), SCAN ๋ฑ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์ ์ถ๋ ฅ ์ฅ์น๊ฐ ํจ์จ์ ์ผ๋ก ์๋ํ๋๋ก ํ๋ค.
- ๋ฒํผ๋ง(Buffering): ์ ์ถ๋ ฅ ์ฅ์น์ ์๋ ์ฐจ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ผ์์ ์ผ๋ก ์ ์ฅํ๋ ๋ฒํผ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ก์์ ์ ์ํํ๊ฒ ํ๋ค.
4. ํ์ผ ์์คํ ๊ด๋ฆฌ
์ปค๋์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ , ํ์ผ์ ๊ด๋ฆฌํ๋ค.
- ํ์ผ ์ ์ฅ: ๋ฐ์ดํฐ๋ฅผ ํ์ผ๋ก ์ ์ฅํ๊ณ , ํด๋น ํ์ผ์ ๋์คํฌ์ ์์ ํ๊ฒ ๋ณด๊ดํ๋ค. ํ์ผ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํตํด ๊ด๋ฆฌ๋๋ฉฐ, ํ์ผ์ ๋ํ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ์ฌ ์ ๊ทผํ ์ ์๋ค.
- ํ์ผ ํ ๋น ๋ฐฉ๋ฒ: ๋์คํฌ ์์์ ํ์ผ์ด ์ ์ฅ๋๋ ๋ฐฉ๋ฒ์ ๊ด๋ฆฌํ๋ค. ์ฐ์ ํ ๋น(Contiguous Allocation), ๋งํฌ ํ ๋น(Linked Allocation), ์์ธ ํ ๋น(Index Allocation) ๋ฑ์ ๋ฐฉ๋ฒ์ด ์๋ค.
- ํ์ผ ์ ๊ทผ ์ ์ด: ํ์ผ์ ๋ํ ์ฝ๊ธฐ, ์ฐ๊ธฐ, ์คํ ๋ฑ์ ๊ถํ์ ์ค์ ํ์ฌ, ์ฌ์ฉ์๊ฐ ํน์ ํ์ผ์ ์ ๊ทผํ ์ ์๋๋ก ์ ์ดํ๋ค.
- ํ์ผ ๋ณต๊ตฌ: ์์คํ ์ถฉ๋ ๋ฑ์ผ๋ก ์ธํ ๋ฐ์ดํฐ ์์ค์ ๋ฐฉ์งํ๊ธฐ ์ํด ํ์ผ ๋ณต๊ตฌ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
5. ๋ณด์ ๋ฐ ๊ถํ ๊ด๋ฆฌ
์ปค๋์ ์์คํ ์์์ ๋ํ ๋ถ๋ฒ์ ์ธ ์ ๊ทผ์ ๋ฐฉ์งํ๊ณ , ์ฌ์ฉ์๊ฐ ์์คํ ์์์ ์ ์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋ณด์์ ์ ์งํ๋ค.
- ์ฌ์ฉ์ ์ธ์ฆ: ์์คํ ์ ์ ๊ทผํ๋ ค๋ ์ฌ์ฉ์๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ๋น๋ฐ๋ฒํธ, ์์ฒด ์ธ์, ์ด์ค ์ธ์ฆ ๋ฑ์ ์ฌ์ฉํ๋ค.
- ๊ถํ ๊ด๋ฆฌ: ๊ฐ ์ฌ์ฉ์๋ ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ ์ ์๋ ์์์ ์ ํํ๋ค. ์๋ฅผ ๋ค์ด, ํ์ผ์ ๋ํ ์ฝ๊ธฐ, ์ฐ๊ธฐ, ์คํ ๊ถํ์ ์ค์ ํ๋ค.
- ์ํธํ: ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ฌ ๋ถ๋ฒ์ ์ธ ์ ๊ทผ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ค.
- ๋ฐฉํ๋ฒฝ ๋ฐ ์นจ์ ํ์ง ์์คํ : ์ธ๋ถ์ ์ ์์ ์ธ ์ ๊ทผ์ ์ฐจ๋จํ๊ณ ์์คํ ์ ๋ํ ๊ณต๊ฒฉ์ ํ์งํ์ฌ ๋ณด์์ ๊ฐํํ๋ค.
๐ ์ ์ ๋ชจ๋์ ์ปค๋๋ชจ๋ ์ ํ, ์์คํ ์ฝ์ ๋์ ์๋ฆฌ
์ ์ ๋ชจ๋์ ์ปค๋๋ชจ๋๋ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ 2๊ฐ์ง ๊ธฐ๋ณธ ๋ชจ๋๋ก, ์๋ก ๋ค๋ฅธ ๊ถํ ์์ค์ ๊ฐ์ง๊ณ ์๋ค. ์ ์ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์์คํ ์์์ด ์ง์ ์ ๊ทผํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ , ์ปค๋์ ์ง์ ์ํฅ์ ๋ผ์น ์ ์๋๋ก ๋ชจ๋๋ฅผ ๋๋ ๊ด๋ฆฌํจ์ผ๋ก์จ ์์ ์ฑ๊ณผ ๋ณด์์ฑ์ ๊ฐํํ๊ธฐ ์ํด์ 2๊ฐ์ง ๋ชจ๋๊ฐ ๋๋์ด ์ก๋ค.
์ ์ ๋ชจ๋
์ ์ ๋ชจ๋๋ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ ๋ชจ๋๋ก, ํ๋ก์ธ์ค๊ฐ HW์ ์ง์ ์ ๊ทผํ๊ฑฐ๋ ์์คํ ์์์ ์ ๊ทผํ ์ ์๋ค.
์ปค๋๋ชจ๋
์ปค๋ ๋ชจ๋๋ ์ด์์ฒด์ ์ ํต์ฌ ๋ถ๋ถ์ธ ์ปค๋์ด ์คํ๋๋ ๋ชจ๋๋ก, ๋ชจ๋ ์์คํ ์์์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๊ฐ์ง๋ค. ์ฆ, ์ ์ ๋ชจ๋์ ๋ฌ๋ฆฌ HW์ ์ ๊ทผ์ด๋ ์์ ์ ๊ทผ์ด ์์ ํ๊ฒ ๊ฐ๋ฅํ๋ค.
์ ์ <-> ์ปค๋ ๋ชจ๋ ์ ํ
๋ชจ๋ ์ ํ์ ์์คํ ์ฝ / ์ธํฐ๋ฝํธ ๋ ๊ฐ์ง์ ์ํด ๋ฐ์ํ๋ค.
๋จผ์ ์์๋งํ๋ฏ์ด ์์คํ ์ฝ์ ์ ์ ๋ชจ๋์์ ์คํ๋๋ ํ๋ก๊ทธ๋จ์ด ์ด์์ฒด์ ์ ์ปค๋๋ชจ๋์ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ผ๋ก, ์ ์ ๋ชจ๋์์๋ ์ ํ๋ ์ ๊ทผ๊ถํ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์์คํ ์ฝ์ ์ด์ฉํ์ฌ ์ปค๋ ๋ชจ๋๋ก ์ ํํ๊ณ , ์์์ ์ ๊ทผํ๋ค.
- ์์คํ
์ฝ ์์ฒญ (User Mode)
์๋ฅผ ๋ค์ด, ํ์ผ์ ์ด๊ณ ์ํ ๋ ์ ์ ํ๋ก๊ทธ๋จ์ด open() ํจ์๋ฅผ ํธ์ถํ๋ค. - ๋ชจ๋ ์ ํ (User Mode → Kernel Mode)
์์คํ ์ฝ์ด ํธ์ถ๋๋ฉด, ์ด์์ฒด์ ๋ ์ธํฐ๋ฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ๋ชจ๋์์ ์ปค๋ ๋ชจ๋๋ก ์ ํํฉ๋๋ค. ์ด ๋ CPU๋ ํ์ฌ ๋ชจ๋์ธ ์ ์ ๋ชจ๋์์ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ์ค๋จํ๋ค. ์๋, ์ ํ ๊ณผ์ ์์ ์ ์ ๋ชจ๋์์์ ์ค๋จ ์ง์ ์ ๊ธฐ์ตํ๊ธฐ ์ํด ํ๋ก์ธ์ค ์ปจํ ์คํธ๊ฐ ์ ์ฅ๋๋ค. - ์ปค๋ ๋ชจ๋์์์ ์ฒ๋ฆฌ (Kernel Mode)
์ปค๋ ๋ชจ๋๋ก ์ ํ๋๋ฉด, ์์คํ ์ฝ์ ์ฒ๋ฆฌํ๋ ์ปค๋์ ์ฝ๋๊ฐ ์คํ๋๋ค. - ๋ชจ๋ ์ ํ (Kernel Mode → User Mode)
์ปค๋์ด ์์ ์ ์ฒ๋ฆฌํ ํ, ๊ฒฐ๊ณผ๋ฅผ ์ ์ ํ๋ก๊ทธ๋จ์ ๋ฐํํ๋ค. ๊ทธ ํ ๋ค์ ์ ์ ๋ชจ๋๋ก ์ ํ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค์ ์คํ๋๋ค. ์ปค๋์ ์ด๋ ๊ณผ์ 2์์ ์ ์ฅํด๋ ์ปจํ ์คํธ๋ฅผ ๋ณต์ํด ์ด์ ์ ์ค๋จ๋ ์์น์์ ์คํ์ ์ฌ๊ฐํ ์ ์๊ฒ ํ๋ค. - ์์คํ
์ฝ ๋ฐํ (User Mode)
์ ์ ํ๋ก๊ทธ๋จ์ ์ปค๋์ด ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ฒ ๋๊ณ , ์ดํ ์ ์ ๋ชจ๋์์ ๋ค์ ์์ ์ ๊ณ์ ์ํํฉ๋๋ค.
์๋ฅผ ๋ค์ด ํ์ผ์ ์ด๋ ค๊ณ ํ ๋, ์ ์ ํ๋ก๊ทธ๋จ์ open() ์์คํ ์ฝ์ ํธ์ถํ๊ณ , ์ด ํจ์๋ ์ค์ ๋ก ์ปค๋ ๋ชจ๋์์ ๋์ํ๋ ์์คํ ์ฝ ์ธํฐํ์ด์ค๋ฅผ ํตํด ํ์ผ์ ์ด๊ณ , ํ์ผ ๋์คํฌ๋ฆฝํฐ๋ฅผ ๋ฐํํ์ฌ ํ์ผ์ ์ฐพ๋ ๊ณผ์ ์ ๊ฐ์ง๋ค.
๐ ์ด์์ฒด์ ์ ์ ์ถ๋ ฅ ๊ด๋ฆฌ
1. ํ๋ก๊ทธ๋จ ์ ์ถ๋ ฅ (Programmed I/O, PIO)
ํ๋ก๊ทธ๋จ ์ ์ถ๋ ฅ์ CPU๊ฐ ์ ์ถ๋ ฅ ์ฅ์น๋ฅผ ์ ์ดํ๋ฉฐ, ํ๋ก๊ทธ๋จ ์ ๋ช ๋ น์ด๋ก ์ ์ถ๋ ฅ์ ์ํํ๋ ๋ฐฉ์์ด๋ค.
์ด ๊ฒฝ์ฐ, CPU๊ฐ ์ ์ถ๋ ฅ ์ฅ์น์ ์ํ ๋ ์ง์คํฐ๋ฅผ ๊ณ์ํด์ ํ์ธ(polling)ํ๋ฉด์ ์ ์ถ๋ ฅ ์ฅ์น๊ฐ ์ค๋น๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์์ ์ด ๋ฐ๋ณต๋๋ค. ๋ฐ๋ผ์ CPU๊ฐ ์ ์ถ๋ ฅ ๊ณผ์ ๋์ ๋ ์ง์คํฐ๋ค์ ๋ชจ๋ ์๊ณ ์์ด์ผ ํ๋ฏ๋ก ๋ค๋ฅธ ์์ ์ ์ํํ์ง ๋ชปํด ๋นํจ์จ์ ์ด๋ค.
2. ์ธํฐ๋ฝํธ ๊ธฐ๋ฐ ์ ์ถ๋ ฅ (Interrupt-Driven I/O)
์์ ์ ์ ๋ชจ๋์์ ์ปค๋ ๋ชจ๋๋ก ์ ํํ ๋ ์ด์์ฒด์ ๋ ์ธํฐ๋ฝํธ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋ค. ์ธํฐ๋ฝํธ๋ ๋ฌด์์ผ๊น ?
์ธํฐ๋ฝํธ๋ ์ปดํจํฐ ์์คํ ์์ ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ ๋ช ๋ น์ ์ ์ ์ค๋จํ๊ณ , ์ค์ํ ์ด๋ฒคํธ๋ ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ ํธ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ธํฐ๋ฝํธ๋ CPU์ ์คํ ํ๋ฆ์ ์ค๋จ์ํค๊ณ , ๊ทธ ์ฒ๋ฆฌ๊ฐ ๋๋ ํ ์๋์ ํ๋ฆ์ผ๋ก ๋์๊ฐ๋ ๋งค์ปค๋์ฆ์ ๊ฐ์ง๋ค. ์ธํฐ๋ฝํธ๋ ์ ํธ๋ฅผ ๋ณด๋ด๋ ์ฃผ์ฒด์ ๋ฐ๋ผ ํ๋์จ์ด ์ธํฐ๋ฝํธ์ ์ํํธ์จ์ด ์ธํฐ๋ฝํธ๋ก ๋๋๋ฉฐ, ํ๋์จ์ด ์ธํฐ๋ฝํธ์๋ I/O ์๋ฃ, ์ํํธ์จ์ด ์ธํฐ๋ฝํธ์๋ ์์คํ ์ฝ ๋ฑ์ด ์๋ค. ๋ฐ๋ผ์ ์ด ๋ชฉ์ฐจ์์๋ ํ๋์จ์ด ์ธํฐ๋ฝํธ๋ฅผ ์๋ฏธํ๋ค.
์์ ๋งํ๋ฏ์ด ํ๋ก๊ทธ๋จ ์ ์ถ๋ ฅ ๋ฐฉ์์ CPU๊ฐ ์ ์ถ๋ ฅ ๊ณผ์ ์ ๊ณ์ ๋๊ธฐํด์ผ ํด ๋นํจ์จ์ ์ด๋ค. ๋ฐ๋ฉด ์ธํฐ๋ฝํธ ๋ฐฉ์์ CPU๊ฐ ์ ์ถ๋ ฅ ์ฅ์น๊ฐ ์ค๋น๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋๋ก ์ ์ถ๋ ฅ ์ฅ์น๊ฐ ์ค๋น๋๋ฉด ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์ํค๋ ๋ฐฉ์์ผ๋ก ์งํ๋๋ค.
- CPU๊ฐ ์ ์ถ๋ ฅ ์ฅ์น์ ์ ์ถ๋ ฅ ์์ฒญ์ ๋ณด๋
- CPU๋ ๋ค๋ฅธ ์์ ์ ์ํ (์ ์ถ๋ ฅ ์ฅ์น๊ฐ ์ค๋น๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค ์ํ)
- ์ ์ถ๋ ฅ ์ฅ์น๊ฐ ์ค๋น๋๋ฉด ์ธํฐ๋ฝํธ(Interrupt) ๋ฐ์
- CPU๋ ํ์ฌ ์คํ ์ค์ธ ์์ ์ ์ค๋จํ๊ณ ์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด(ISR, Interrupt Service Routine)์ ์คํ
- ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ํ, CPU๋ ์๋ ์ํํ๋ ์์ ์ ๊ณ์ ์คํ
๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ผ๋ก ์ ๊ฐ๋๊ณ , ์ธํฐ๋ฝํธ ๋ฐฉ์์ ์ธํฐ๋ฝํธ๊ฐ ๋ง์ด ๋ฐ์ํ๋ค๋ฉด CPU๊ฐ ๋ถํ๋ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
์ด๋ ์ฌ๋ฌ๊ฐ์ ์ธํฐ๋ฝํธ๊ฐ ๋์์ ๋ค์ด์ค๋ ๊ฒฝ์ฐ๋ ์ด๋ป๊ฒํ ๊น ? ์๊ฐ ์ฐจ๊ฐ ์๋ค๋ฉด ๋ค์ด์จ ์๋๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์๋ ์๊ฒ ์ง๋ง, ๋ณดํต์ ์ฐ์ ์์ ์์๋๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด ์ ์ฐ์ธ๋ค. ์ด๋ PIC(programmable interrupt controller) ๋ฅผ ํตํด์ ์ฐ์ ์์๋ฅผ ํ๋จํ๊ณ , ๊ฐ์ฅ ๋์ ์ธํฐ๋ฝํธ๋ฅผ CPU์๊ฒ ์๋ฆฌ๊ณ ๊ทธ ๋ค๋ก ISR์ด ์คํ๋๋ ๋ฐฉ์์ผ๋ก ์ ๊ฐ๋๋ค๊ณ ํ๋ค.
3. DMA (Direct Memory Access, ์ง์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ)
์์ ๋๊ฐ์ง์ ๋ฐฉ์์๋ ๊ณตํต์ ์ด ์๋ค. ๋ฐ๋ก CPU๋ฅผ ํ์ฉํ๋ ๊ฒ์ด๋ค. ์ด๋ CPU๋ ์ค์ํ ์์์ผ๋ก์ ์ต๋ํ ์๊ปด์จ์ผ ํ๋ ๊ฒ์ ๋น์ฐํ ์ฌ์ค์ด๋ค. ๋ฐ๋ผ์ ์ ์ถ๋ ฅ์ฅ์น์ ๋ฉ๋ชจ๋ฆฌ๊ฐ CPU๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ ์ํธ์์ฉํ ์ ์๋ ์ ์ถ๋ ฅ ๋ฐฉ์์ธ DMA(Direct MEmory Access)๊ฐ ๋ฑ์ฅํ๋ค.
DMA๋ ์ด๋ฆ์ฒ๋ผ CPU๊ฐ ๊ฐ์ ํ์ง ์๊ณ , ์ ์ถ๋ ฅ ์ฅ์น๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๋ค. DMA ์ปจํธ๋กค๋ฌ๊ฐ ์กด์ฌํด, ๋ฉ๋ชจ๋ฆฌ์ ์ ์ถ๋ ฅ ์ฅ์น ์ฌ์ด์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ค.
- CPU๊ฐ DMA ์ปจํธ๋กค๋ฌ(DMAC) ์๊ฒ ์ ์ถ๋ ฅ ์์ฒญ
- DMA ์ปจํธ๋กค๋ฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ถ๋ ฅ ์ฅ์น ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก์ ์ง์ ์ํ
- ๋ฐ์ดํฐ ์ ์ก์ด ์๋ฃ๋๋ฉด DMA ์ปจํธ๋กค๋ฌ๊ฐ ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์ ์์ผ CPU์๊ฒ ์๋ฃ๋ฅผ ์๋ฆผ
- CPU๋ ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์ ํ์ํ ํ์ฒ๋ฆฌ ์ํ
๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ผ๋ก DMA ๋ฐฉ์์ CPU์ ๋ถํ ์์ด ์ ์ถ๋ ฅ์ ๊ฐ๋ฅ์ผ ํ๋ค.
๐ ๋๊ธฐ์/๋น๋๊ธฐ์ I/O์ ์ฐจ์ด์ ํ์ฉ ์ฌ๋ก
์์ ๋ชฉ์ฐจ์์๋ ์ ์ถ๋ ฅ์ ๊ด๋ฆฌํ๋ ์ธ๊ฐ์ง ๋ฐฉ์์ ๋ํด์ ์์๋ณด์๋ค๋ฉด, ์ ์ถ๋ ฅ์ ์ํํ๋ ๋ฐฉ์์๋ ๋๊ธฐ์ / ๋น๋๊ธฐ์ ๋๊ฐ์ง๊ฐ ์๋ค.
๋๊ธฐ / ๋น๋๊ธฐ๋ ๋ค๋ฅธ ๊ณณ์์๋ ์์ฃผ ์ฐ์ด๋ ๊ฐ๋ ์ด์ง ๊ฐ๋ตํ๊ฒ๋ง ๋ค์ ์ ๊ณ ๋์ด๊ฐ๋ณด์.
- ๋๊ธฐ : ์ด๋ค ์์ ์ด ์งํ๋ ๋, ํด๋น ์์ ์ด ๋๋ ๋๊น์ง ๋ค์ ์์ ์ด ๋๊ธฐํ๋ ๋ฐฉ์
- ๋น๋๊ธฐ : ์์ฒญ์ ๋ณด๋ธ ํ ์ฆ์ ๋ค์ ์์ ์ ์ํํ ์ ์์ผ๋ฉฐ, ๊ฒฐ๊ณผ๊ฐ ์ค๋น๋๋ฉด ๋์ค์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
๋๊ธฐ์ I/O (Synchronous I/O)
๋๊ธฐ์ ์ ์ถ๋ ฅ์ ๊ทธ ์ด๋ฆ์ฒ๋ผ CPU๊ฐ ์ ์ถ๋ ฅ์ ์์ฒญํด ์ ์ถ๋ ฅ์ด ์ด๋ฃจ์ด์ง๋ ๋์, ๋ค๋ฅธ ์์ ์ ์คํํ์ง ์๊ณ ๋๊ธฐํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค. ์ด๋ฌํ ๋๊ธฐ์์ CPU๊ฐ ์ ์ถ๋ ฅ ์์ ๋์ ๋๊ธฐํด์ผํ๋ฉฐ, ์ ์ถ๋ ฅ ์๋๊ฐ ๋๋ฆฐ ๊ฒฝ์ฐ ์ ์ฒด์ ์ผ๋ก ์์คํ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค๋ ๋ฌธ์ ๊ฐ ์๋ค.
DB ํธ๋์ญ์ ์ด๋ CLI ํ๋ก๊ทธ๋จ ๊ฐ์ด ์์๋, ์์ฒญ - ์๋ต ์ ๊ตฌ์กฐ๊ฐ ๋ฐ๋ณต๋์ด์ผ ํ๋ ํ๋ก๊ทธ๋จ์์ ์ฐ์ธ๋ค.
๋น๋๊ธฐ์ I/O (Asynchronous I/O)
๋น๋๊ธฐ์ ์ ์ถ๋ ฅ์ CPU๊ฐ ์ ์ถ๋ ฅ ์์ฒญ์ ๋ณด๋ธ ํ, ์ ์ถ๋ ฅ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์ ์ ์ํํ๋ ๋ฐฉ์์ด๋ค. ์ ์ถ๋ ฅ ์์ ์ด ์๋ฃ๋๋ฉด ์ธํฐ๋ฝํธ๋ฅผ ํตํด CPU์ ์๋ฆฐ๋ค.
์ด๋ฅผ ํตํด, CPU๋ ๋๊ธฐํ์ง ์๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์คํํ ์ ์์ด ์์ ํ์ฉ๋๊ฐ ๋๋ค.
GUI ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ ์๋ฒ, ์คํธ๋ฆฌ๋ฐ๊ณผ ๊ฐ์ด ๋น ๋ฅธ ์๋ต๊ณผ ์ค์๊ฐ ์ฒ๋ฆฌ๊ฐ ์ค์ํ ๊ณณ์์ ๋น๋๊ธฐ ์ ์ถ๋ ฅ์ด ์ฐ์ธ๋ค.
๐ ๋ฉํฐํ๋ก๊ทธ๋๋ฐ, ์๋ถํ ์์คํ , ๋ฉํฐํ๋ก์ธ์ฑ ๊ฐ๋
์ด์์ฒด์ ๋ CPU์ ์์คํ ์์์ ์ด๋ป๊ฒ ํ์ฉํ๋์ง์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๋ถ๋ฅ๋๋ค. ๋ํ์ ์ผ๋ก ์๋ถํ ์์คํ , ๋ฉํฐํ๋ก๊ทธ๋๋ฐ ์์คํ , ๋ํํ ์์คํ , ๋ฉํฐํ๋ก์ธ์ฑ ์์คํ ์ด ์๋ค.
๋ฉํฐํ๋ก๊ทธ๋๋ฐ ์์คํ
ํ๋์ CPU๊ฐ ์ฌ๋ฌ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ์ ๋์์ ์ฌ๋ ค๋๊ณ CPU๊ฐ ํญ์ ์ฌ์ฉ๋๋๋ก ์คํํ๋ ๋ฐฉ์์ด๋ค.
ํ๋์ ํ๋ก๊ทธ๋จ์ด ์ ์ถ๋ ฅ ์์ ์ ์ํํ๋ ๋์ CPU๊ฐ ์ฌ์ง ์๋๋ก, ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ด CPU๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค. ์ด๋ฅผ ํตํด CPU ํ์ฉ๋๋ฅผ ์ต๋๋ก ํ ์ ์๋ค. ๊ทธ๋ฌ๋ ํ๋ก์ธ์ค ๊ฐ์ ๋ฌธ๋งฅ ๊ตํ์ด ๋ฐ์ํ๋ฏ๋ก ์ค์ผ์ค๋ง์ ํจ์จ์ฑ์ด ์ค์ํ๋ค.
์ด ๋ฉํฐํ๋ก๊ทธ๋๋ฐ ์์คํ ์ด ๋์ ๋๋ฉด์ ๋ฑ์ฅํ๋ ์ฉ์ด๊ฐ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ฌธ๋งฅ ๊ตํ
- CPU ์ค์ผ์ค๋ง
- ์ธํฐ๋ฝํธ
- ๊ต์ฐฉ์ํ
๋ฉํฐํ๋ก์ธ์ ์์คํ
๋ ๊ฐ ์ด์์ CPU๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ๋์์(๋ณ๋ ฌ์ ์ผ๋ก) ์คํํ๋ ๋ฐฉ์์ด๋ค.
์ด๋ฅผ ํตํด ์์คํ ์ ์ฒ๋ฆฌ ์๋๊ฐ ํฅ์๋๊ณ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค. ๋ํ ํ๋ก์ธ์ ๊ฐ์ ๋ถํ๋ฅผ ๋ถ์ฐํ์ฌ ์์ ์ฑ์ ๋์ผ ์ ์์ผ๋ฉฐ, ํ ๊ฐ์ CPU์ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ๋ค๋ฅธ CPU๊ฐ ๋์ฒดํ ์ ์์ด ์ ๋ขฐ์ฑ์ด ๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ ๊ณ ์ฑ๋ฅ ์๋ฒ, ์ํผ์ปดํจํฐ, ๋ณ๋ ฌ ์ปดํจํ ํ๊ฒฝ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
์๋ถํ ์์คํ
ํ๋์ CPU๋ฅผ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ์งง์ ์๊ฐ ๋จ์๋ก ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์ฌ์ฉํ๋๋ก ํ๋ ๋ฐฉ์์ด๋ค.
CPU๊ฐ ํ๋ก๊ทธ๋จ ์ํ ์๊ฐ์ ์์ฃผ ์งง๊ฒ ๋๋์ด ๊ฐ ํ๋ก์ธ์ค์ ํ ๋นํ๋ฉฐ, ๋น ๋ฅด๊ฒ ์ ํ๋๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ์์ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ๊ฒฐ๊ตญ ๋ค์คํ๋ก๊ทธ๋๋ฐ์ ํ์ฅ ๋ฒ์ ์ด๋ค. ์ด๋ฅผ ์ํด ์ด์์ฒด์ ๋ ํ์ ์ฌ๋ผ์ด์ค๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ผ์ ํ ์๊ฐ ๋จ์๋ฅผ ์ค์ ํ๋ค. ๊ฐ ํ๋ก์ธ์ค๋ ํ์ ์ฌ๋ผ์ด์ค ๋์ CPU๋ฅผ ํ ๋น๋ฐ์ ์คํ๋๋ฉฐ, ์ด ์๊ฐ์ด ์ง๋๋ฉด ์ ์ ํ ์ค์ผ์ค๋ง์ ํตํด ๊ฐ์ ๋ก ๋ค์ ํ๋ก์ธ์ค๋ก ์ ํ๋๋ค.
ํ์ ์ฌ๋ผ์ด์ค์ ๊ธธ์ด๋ ์์คํ ์ฑ๋ฅ๊ณผ ์๋ต ์๋์ ์ํฅ์ ๋ฏธ์น๋ค. ํ์ ์ฌ๋ผ์ด์ค๊ฐ ๋๋ฌด ์งง์ผ๋ฉด ๋ฌธ๋งฅ ์ ํ์ด ์์ฃผ ๋ฐ์ํ์ฌ ์ค๋ฒํค๋๊ฐ ์ฆ๊ฐํ๊ณ , ๋ฐ๋๋ก ๋๋ฌด ๊ธธ๋ฉด ํ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ๋ ์ ํ์ฌ ๋๊ธฐ ์ค์ธ ํ๋ก์ธ์ค์ ์๋ต ์๊ฐ์ด ๊ธธ์ด์ง ์ ์๋ค.
๋ํํ ์์คํ
์ฌ์ฉ์๊ฐ ์์คํ ๊ณผ ์ค์๊ฐ์ผ๋ก ์ํธ์์ฉํ ์ ์๋๋ก ํ๋, ์ฆ ์ฌ์ฉ์ ์ ์์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋ก ๋ณด์ด๋ ๋ฐฉ์์ด๋ค.
์ฌ์ฉ์์ ์ ๋ ฅ์ ์ฆ์ ์ฒ๋ฆฌํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋น ๋ฅด๊ฒ ๋ฐํํด์ผ ํ๋ฏ๋ก ์งง์ ์๋ต ์๊ฐ์ด ์ค์ํ๋ค. ์ฃผ๋ก ๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(GUI) ๊ธฐ๋ฐ์ผ๋ก ์ด์๋๋ฉฐ, ์ฌ์ฉ์๊ฐ ์ง์ ์ ๋ ฅ์ ์ํํ๋ฉด ์ฆ๊ฐ์ ์ธ ๋ฐ์์ ์ ๊ณตํ๋ค.
์ฐธ๊ณ ์๋ฃ
[์ปดํจํฐ ๊ตฌ์กฐ] ์ธํฐ๋ฝํธ์ DMA๋ฅผ ์ด์ฉํ I/O
์ธํฐ๋ฝํธ๋ฅผ ์ด์ฉํ I/O ์ธํฐ๋ฝํธ๋? CPU๊ฐ ์ด๋ค ํ๋ก๊ทธ๋จ์ ์์ฐจ์ ์ผ๋ก ์ํํ๋ ๋์ค์ ์ธ๋ถ๋ก๋ถํฐ ์ธํฐ๋ฝํธ ์๊ตฌ๊ฐ ๋ค์ด์ค๊ฒ ๋๋ฉด, CPU๋ ์๋์ ํ๋ก๊ทธ๋จ ์ํ์ ์ค๋จํ๊ณ , ์๊ตฌ๋ ์ธํฐ๋ฝํธ๋ฅผ
hyeo-noo.tistory.com