os_basic - KimTaebin-ai/study_posts GitHub Wiki
์ด์์ฒด์ ๋ ๋ฌด์์ ํ๋๊ฐ?
์ด์์ฒด์ ๋ ์์ฉ ํ๋ก๊ทธ๋จ(Application Programs)๊ณผ ํ๋์จ์ด(Hardware) ์ฌ์ด์ ์์นํฉ๋๋ค. ๊ทธ๋์ ์ฌ์ฉ์๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ํตํด์ ์ด๋ค ์๋น์ค๋ฅผ ์์ฒญํ๋ฉด ์์ฉ ํ๋ก๊ทธ๋จ์ ์ด์์ฒด์ ์๊ฒ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๊ณ ํ๋์จ์ด๋ฅผ ์กฐ์ํด๋ฌ๋ผ๊ณ ์์ฒญํฉ๋๋ค. ๊ทธ ์ ๋ฌ์ ๋ฐ์ ์ด์์ฒด์ ๋ ์๋น์ค์ ๋ง๋ ํ๋์จ์ด(CPU, ๋ฉ๋ชจ๋ฆฌ, HDD, ๋ชจ๋ํฐ ๋ฑ)๋ฅผ ์๋์์ผ ์๋น์ค๋ฅผ ์์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ๊ณ์ฐ๊ธฐ๋ผ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ "3+4"์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ์์ฒญํฉ๋๋ค. ์ด ์์ฒญ์ ๋ฐ์ ๊ณ์ฐ๊ธฐ๋ ํ๋ก๊ทธ๋จ๋ด์์ ์์์ ๊ณ์ฐํ๋ ๋ช ๋ น์ด๋ฅผ ์ด์์ฒด์ ์๊ฒ ์ ๋ฌํฉ๋๋ค. ์ด์์ฒด์ ๋ CPU, ๋ฉ๋ชจ๋ฆฌ ๋ฑ์ ํ๋์จ์ด๋ฅผ ์กฐ์ํ์ฌ 7์ด๋ผ๋ ๋ต์ ๋์ถํ๊ณ ๋ฐํํฉ๋๋ค.
์์ ๊ฐ์ ์์๋ฅผ ํตํ์ฌ ์ด์์ฒด์ ๋ฅผ ํ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌํ๋ฉด ์ด์์ฒด์ ๋ ํ๋์จ์ด๋ฅผ ์ ์ดํ๋ ์ํํธ์จ์ด์ด๊ณ ์ ์ ์ ํ๋์จ์ด ์ฌ์ด์์ ์ค๊ณ์๋ก์จ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ํํธ์จ์ด์ ๋๋ค
์ด์์ฒด์ ์ ์ ์
์ด์์ฒด์ ๋ฅผ ํ๋ฌธ์ฅ์ผ๋ก ์ ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํํํ ์ ์์ต๋๋ค.
- ์ปดํจํฐ ์์์ ํญ์ ์คํ๋๋ ํ๋์ ํ๋ก๊ทธ๋จ
- Kernel๋ก๋ ์ ์
- ํ๋์จ์ด๋ฅผ ์ ์ดํ๋ ์ํํธ์จ์ด
- ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ํ๋์จ์ด ์ฌ์ด์ ์ค๊ณ์
์์ ๊ทธ๋ฆผ์ ํด๋์ํ ์ปดํจํฐ ์์คํ ์ ๋ณด์ฌ์ค๋๋ค. 1๊ฐ ์ด์์ CPU๋ก ๊ตฌ์ฑ๋์๊ณ ๋ฒ์ค(Bus)๋ฅผ ํตํด์ ์ฐ๊ฒฐ๋ ๊ธฐ๊ธฐ ์ ์ด๊ธฐ(Device Controller)๋ก ์ฐ๊ฒฐ๋์์ต๋๋ค. CPU๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ช ๋ น์ด๋ค์ ์ ์ฅํ๊ณ ๊ธฐ๊ธฐ ์ ์ด๊ธฐ๋ฅผ ํตํด์ ํ๋์จ์ด์ ์ธ ์์ ์ ์ํํฉ๋๋ค.
์ธํฐ๋ฝํธ(Interrupt)
์ธํฐ๋ฝํธ๋ ํ๋์จ์ด๊ฐ ์๋์ค์ CPU์๊ฒ ์๋ ค์ฃผ๋ ์ ํธ(signal)์ ๋๋ค. ์์คํ ๋ฒ์ค(system bus)๋ฅผ ํตํด์ CPU์๊ฒ ์ ํธ๋ฅผ ์ ์กํจ์ผ๋ก์จ ์ด๋ ์๊ฐ์ด๋ ํ๋์จ์ด๋ ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์ํฌ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ํค๋ณด๋ "A"ํค๋ฅผ ๋๋ฅธ๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ์ A ๋๋ฆ ๋ช ๋ น์ด๊ฐ ์ ์ฌ๋๊ณ CPU์๊ฒ ์๋ ค์ค๋๋ค. (Interrupt)
ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ(von Neumann architecture)
ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ๋ ํฐ๋ ธ์ด๋ง์ด๋ผ๋ ์ฌ๋์ด ์ ์ํ ํ๋ก๊ทธ๋จ ๋ด์ฅ ๋ฐฉ์์ ๋๋ค. ์ด ๋ฐฉ์์ ํ์ฌ ์ปดํจํฐ์ ๊ธฐ๋ฐ์ด ๋๋ ๊ตฌ์กฐ๊ฐ ๋์์ต๋๋ค. ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ์ ํ๋ก๊ทธ๋จ ๋ด์ฅ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ผ๋ก ์ํ๋ฉ๋๋ค.
1. Fetch (๋ช ๋ น์ด ์ธ์ถ)
CPU์ ์ ์ด ์ฅ์น(Control Unit)๊ฐ ๋ฉ๋ชจ๋ฆฌ(RAM)์์ ์คํํ ๋ช ๋ น์ด๋ฅผ ๋ฐ์ดํฐ ๋ฒ์ค๋ฅผ ํตํด ๊ฐ์ ธ์ค๋ ๊ณผ์ ์ ๋๋ค. ์ด ๋จ๊ณ์์๋ ํ๋ก๊ทธ๋จ ์นด์ดํฐ(PC)๊ฐ ํ์ฌ ์คํํด์ผ ํ ๋ช ๋ น์ด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ณ , ํด๋น ๋ช ๋ น์ด๋ฅผ ์ฝ์ด์ต๋๋ค.
2. Decode (๋ช ๋ น์ด ํด์)
์ธ์ถ๋ ๋ช ๋ น์ด๋ฅผ CPU๊ฐ ์ดํดํ ์ ์๋๋ก ์ ์ด ์ฅ์น์์ ํด์ํ๋ ๊ณผ์ ์ ๋๋ค. ๋ช ๋ น์ด์ ์ฐ์ฐ ์ฝ๋(OPCODE)๋ฅผ ๋ถ์ํ์ฌ ํ์ํ ์ฐ์ฐ ์ ํ ๋ฐ ๋ฐ์ดํฐ ์์น๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
3. Calculation/Control (๊ณ์ฐ ๋ฐ ์ ์ด)
์ ์ด ์ฅ์น๋ ํด์๋ ๋ช ๋ น์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์คํ ๋จ๊ณ๋ฅผ ์ค๋นํ๋ฉฐ, ์ฐ์ ๋ ผ๋ฆฌ ์ฐ์ฐ ์ฅ์น(ALU)์ ํ์ํ ์ ์ด ์ ํธ๋ฅผ ๋ณด๋ ๋๋ค. ๋์์ ๋ช ๋ น์ด์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ๋ ๋ ์ง์คํฐ์์ ๊ฐ์ ธ์ฌ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
4. Execute (์คํ)
ALU๊ฐ ๋ช ๋ น์ด์ ์ง์ ๋ ์ฐ์ฐ(์ฐ์ ์ฐ์ฐ, ๋ ผ๋ฆฌ ์ฐ์ฐ ๋ฑ)์ ์ํํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ๋ช ๋ น์ด ์คํ ๊ฒฐ๊ณผ๋ ๋ ์ง์คํฐ์ ์ ์ฅ๋๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ธฐ๋ก๋ฉ๋๋ค.
5. Store (์ ์ฅ)
์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ดํฐ ๋ฒ์ค๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ฑฐ๋, ๋ค์ ์์ ์ ์ํด ๋ ์ง์คํฐ์ ์ ์ฅํ๋ ๊ณผ์ ์ ๋๋ค. ๋ช ๋ น์ด ์คํ์ด ์๋ฃ๋๋ฉด, ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ๋ก๊ทธ๋จ ์นด์ดํฐ๊ฐ ๊ฐฑ์ ๋ฉ๋๋ค.
์ ์ถ๋ ฅ ๊ตฌ์กฐ(I/O Structure)
์ด์์ฒด์ ์ฝ๋์ ๋ง์ ๋ถ๋ถ์ด ์ ์ถ๋ ฅ(Input/Output)์ ๊ด๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ๋ค์ ๊ทธ๋ฆผ์ ํ๋ ์ปดํจํฐ ์์คํ ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง๋ฅผ ๋ํ๋ด๋ ๊ทธ๋ฆผ์ ๋๋ค.
- CPU๋ ๋๋ฐ์ด์ค(ํค๋ณด๋, ๋ชจ๋ํฐ ๋ฑ)์๊ฒ ์ ์ถ๋ ฅ์ ์์ฒญํฉ๋๋ค.
- CPU์ ๋๋ฐ์ด์ค๋ ์๋ก ๋ฐ์ดํฐ๋ฅผ ํต์ ํฉ๋๋ค.
- ๋๋ฐ์ด์ค์์ CPU์๊ฒ ์ธํฐ๋ฝํธ๋ฅผ ์ ์กํ ์ ์์ต๋๋ค.
- CPU๋ ๋ฉ๋ชจ๋ฆฌ๋ก๋ถํฐ ๋ช ๋ น์ด๋ฅผ ์ธ์ถํ๊ณ ์คํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ ์ ์์ต๋๋ค.
- ๋๋ฐ์ด์ค์ ๋ฉ๋ชจ๋ฆฌ๋ DMA(Direct Memory Access) ๋ผ๋ ๊ฒ์ ํ ์ ์์ต๋๋ค.
DMA(Direct Memory Access)๋ ๋ฌด์์ธ๊ฐ?
- ํ๋์จ์ด(HDD, ๊ทธ๋ํฝ ์นด๋ ๋ฑ)๋ค์ด ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ ๊ทผํ์ฌ ์ฝ๊ฑฐ๋ ์ธ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ
- CPU์ ๊ฐ์ ์ด ์์ต๋๋ค.
- CPU๊ฐ ํด์ผํ ์ฃผ๋ณ์ฅ์น์์ ์ ์ก์ DMA ์ฅ์น๊ฐ ๋์ ํด์ค๋๋ค. ๋ฐ๋ผ์ CPU์ ํจ์จ์ ํฅ์์ํต๋๋ค.
์ปดํจํฐ ์์คํ ๋ถํ๋ค์ ์ ์
- CPU : ๋ช ๋ น์ด๋ค์ ์คํ์ํค๋ ํ๋์จ์ด, ํ๋ก์ธ์์ ์ข ๋ฅ ์ค ํ๋
- Processor : ํ๋ก์ธ์๋ CPU์ ์ผ๋ถ๋ถ์ผ๋ก์ CPU์ ํต์ฌ ๊ธฐ๋ฅ์ ์ํํ๋ ์ค์ ์นฉ(chip)์ ๊ฐ๋ฆฌํด
- Core : ์ฝ์ด๋ CPU ๋ด๋ถ์ ์คํ ์์ง์ผ๋ก ์ค์ ๋ก ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ฐ์ฐ์ ์ํํจ. ์ฝ์ด๋ค์ CPU ๋ด๋ถ์ ์์นํ์ฌ ๋ ๋ฆฝ์ ์ผ๋ก ์๋ํ๊ฑฐ๋ ๋ณ๋ ฌ์ ์ผ๋ก ์ํํ ์ ์์ต๋๋ค
๋์นญํ ๋ค์ค ์ฒ๋ฆฌ(Symmetric Multiprocessing, SMP)
- ์ฌ๋ฌ๊ฐ์ ํ๋ก์ธ์ ๋๋ ์ฝ์ด๊ฐ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ์ ์์คํ ๋ฒ์ค์ ์ ๊ทผํ์ฌ ์๋ํ๋ ์ํคํ ์ฒ
- SMP ์์คํ ์์๋ ๊ฐ ํ๋ก์ธ์๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์๋ํ์ง๋ง ๋ชจ๋ ํ๋ก์ธ์๊ฐ ๊ณต์ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผ ๊ฐ๋ฅ
๋ฉํฐ ์ฝ์ด ์ค๊ณ(Multi-core design)
- ํ๋์ CPU ์นฉ์ ์ฌ๋ฌ๊ฐ์ ์ฝ์ด๋ฅผ ํตํฉํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํค๋ ์ปดํจํฐ ๊ตฌ์กฐ
- ๋ฉํฐ ์ฝ์ด๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๊ณ , ๋ค์์ ์์ ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋๋ก ํจ
๋ฉํฐํ๋ก๊ทธ๋๋ฐ(Multiprogramming)
๋ฉํฐํ๋ก๊ทธ๋๋ฐ์ด๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฌ ๊ฐ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ์ฌํ๋ ๊ฒ์ ๋๋ค. ๋ฉํฐํ๋ก๊ทธ๋๋ฐ์ ํ๋ ์ด์ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฌ๊ฐ์ ํ๋ก๊ทธ๋จ์ ์ฌ๋ ค๋์ด์ CPU๊ฐ ํ๋์ ํ๋ก๊ทธ๋จ์ด ๋๊ธฐ์ค์ผ๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ์ํ์์ผ ํจ์จ์ ๊ทน๋ํํ๊ธฐ ์ํด์์ ๋๋ค.
ํ๋ก๊ทธ๋จ์ด๋ ๋ฌด์์ธ๊ฐ?
ํ๋ก๊ทธ๋จ์ด๋ ๋ช ๋ น์ด์ ์งํฉ(Set of Instruction)์ด๋ผ๊ณ ์ ์ํ ์ ์์ต๋๋ค.
๋ฉํฐํ์คํน=๋ฉํฐํ๋ก์ธ์ฑ(Multitasking=Multiprocessing)์ด๋ ๋ฌด์์ธ๊ฐ?
๋ฉํฐํ๋ก์ธ์ฑ์ด๋ ๋ฉํฐํ๋ก๊ทธ๋๋ฐ์ ๋ ผ๋ฆฌ์ ์ธ ํ์ฅ์ ๋๋ค. ์์์ ๋ฉํฐ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฌ๊ฐ์ ํ๋ก๊ทธ๋จ์ ์ฌ๋ ค๋์ด์ CPU๊ฐ ์ฌ์ง์๊ณ ์ผ์ํ๊ฒ ๋ง๋ค๊ฒ ํ๋ ๊ฒ์ด๋ผ๊ณ ํ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ CPU๊ฐ ํ๋์ ํ๋ก๊ทธ๋จ์ ์์ ํ๋ ๋์ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ๋ค์ ์ํ๋์ง ์์ต๋๋ค. ํ์ง๋ง ์ง๊ธ์ ์ฌ์ฉ์๋ค์ ์ฌ๋ฌ๊ฐ์ ํ๋ก๊ทธ๋จ์ ๋์ฐ๊ณ ๋์์ ์ฌ์ฉํฉ๋๋ค. ์์ ๊ฐ์ด ํ๋ก๊ทธ๋จ๋ค์ ๋์์ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๊ธฐ์ ์ ๋ฉํฐํ๋ก์ธ์ฑ์ด๋ผ๊ณ ํฉ๋๋ค.
์์์ ๋ฉํฐํ๋ก์ธ์ฑ์ด๋ ํ๋ก๊ทธ๋จ์ ๋์์ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค๊ณ ๋ ํ์์ง๋ง ์ ํํ๋ ์ฌ์ฉ์๊ฐ ๋์์ ์ฌ๋ฌ๊ฐ์ ํ๋ก๊ทธ๋จ๋ค์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ฐฉ๊ฐ์ ์ผ์ผํฌ ์ ๋๋ก CPU๊ฐ ๋น ๋ฅด๊ฒ ์ํ๋๋ ๊ฒ์ ๋๋ค. ์ด๋ CPU๊ฐ ๋์์ ์ํ๋๋ ๊ฒ์ฒ๋ผ ๋น๋ฒํ๊ฒ ํ๋ก๊ทธ๋จ๋ค์ ๊ต์ฒดํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๋ค์ ์ฌ๋ฌ๊ฐ์ ํ๋ก๊ทธ๋จ๋ค์ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ ๋๋ค.
CPU๊ฐ ์ฌ๋ฌ๊ฐ์ ํ๋ก๊ทธ๋จ๋ค์ ๋น ๋ฅด๊ฒ ๊ต์ฒดํ๊ธฐ ์ํด์ ํ๋ก๊ทธ๋จ์ ์คํ ์์๋ฅผ ๊ฒฐ์ ํ๋ CPU ์ค์ผ์ค๋ง์ ์ํํฉ๋๋ค. CPU ์ค์ผ์ค๋ง์ด๋ ๋ง์ฝ ์ฌ๋ฌ๊ฐ์ ํ๋ก์ธ์ค๋ค์ด ๊ฐ์ ์๊ฐ์ ์คํ๋ ์ค๋น๊ฐ ๋์๋ค๋ฉด ์ด์์ฒด์ ๋ ๋ค์์ ์คํ๋ ํ๋ก๊ทธ๋จ์ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ์ฆ, ์ด์์ฒด์ ๊ฐ ๋ค์์ CPU์ ์ํด ์คํ๋ ํ๋ก๊ทธ๋จ์ ๊ณ ๋ฅด๋ ๊ฒ์ CPU ์ค์ผ์ค๋ง์ด๋ผ๊ณ ํฉ๋๋ค.
๋ํ์ ์ธ CPU ์ค์ผ์ค๋ง ๋ฐฉ์์ผ๋ก ์๋ถํ ์์คํ (time-sharing) ๋ฐฉ์์ด ์์ต๋๋ค. ์ด์์ฒด์ ๊ฐ ์ปดํจํฐ ์์์ ์ผ์ ์๊ฐ๋์ ๋ถํ ํ๊ณ CPU๋ ํด๋น ํ๋ก๊ทธ๋จ์ ๋ฐฐ๋ถ๋ฐ์ ์๊ฐ๋์๋ง ์ํ์ํค๊ณ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ์ํ์ํค๋ ๋ฐฉ์์ ๋๋ค.
์ด์์ฒด์ ์ฐ์ฐ์ 2๊ฐ์ง ๋ชจ๋
์ ์ ๋ชจ๋(user mode)
- ์ฌ์ฉ์๊ฐ ์ ๊ทผํ ์ ์๋ ์์ญ์ ์ ํ์ ์ผ๋ก ๋๊ณ , ํ๋ก๊ทธ๋จ์ ์์์ ํจ๋ถ๋ก ์นจ๋ฒํ์ง ๋ชปํ๋ ๋ชจ๋
- ์ ์ ๋ชจ๋์์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ ๋ฑ์ ํ๋์ ํ ์ ์์
์ปค๋ ๋ชจ๋(kernel mode)
- ์ปค๋ ๋ชจ๋๋ ์๋ชป๋ ํ๋ก๊ทธ๋จ์ผ๋ก ์ธํด ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ด ์๋ชป ์คํ๋์ง ์๋๋ก ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ชจ๋์ ๋๋ค.
- ์ปค๋ ๋ชจ๋๋ ๋ชจ๋ ์์(๋๋ผ์ด๋ฒ, ๋ฉ๋ชจ๋ฆฌ, CPU ๋ฑ)์ ์ ๊ทผ, ๋ช ๋ น์ ํ ์ ์์