๐ฏ Computer Science์ ๋ํด ์ ๋ฆฌํฉ๋๋ค.
๐ Today I Learned
๋์งํธ ์ ๋ณด์ ํํ
์ปดํจํฐ ํ๋์จ์ด์ ๊ตฌ์ฑ
-
์ค์์ฒ๋ฆฌ์ฅ์น - CPU
-
์ฃผ๊ธฐ์ต์ฅ์น - Memory (RAM/ROM)
-
๋ณด์กฐ๊ธฐ์ต์ฅ์น - Storage (HDD, SSD, optical discs, magnetic tapes, ...)
-
์
์ถ๋ ฅ์ฅ์น - I/O Devices (keyboard, mouse, display, printer, network, ...)
์ค์์ฒ๋ฆฌ์ฅ์น (CPU)
-
์ ์ด์ฅ์น - ๋ช
๋ น์ด๋ฅผ ํด์ํ์ฌ ๊ทธ ์คํ์ ํ์ํ ์ ์ด ์ ํธ๋ฅผ ๋ฐ์์ํด
-
ALU - ์ฐ์ ๋ฐ ๋
ผ๋ฆฌ ์ฐ์ฐ ๋ฑ์ ์ํ
-
๋ ์ง์คํฐ - ์ฐ์ฐ์ ๋์ ๋ฐ ์ฐ์ฐ ๊ฒฐ๊ณผ ๋ฑ์ ์ ์ฅ
๋ช
๋ น์ด ์งํฉ ๊ตฌ์กฐ
-
ISA
- ๋ง์ดํฌ๋กํ๋ก์ธ์๊ฐ ์ธ์ํด์ ๊ธฐ๋ฅ์ ์ดํดํ๊ณ ์คํํ ์ ์๋ ๋ช
๋ น์ด
-
๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ ์ ์
-
๊ธฐ๊ณ์ด ๋ช
๋ น์ด๋ ์ฌ๋์ด ์์๋ณด๊ธฐ ๋ถํธํ๋ฏ๋ก ์ฃผ๋ก ์ด์
๋ธ๋ฆฌ๋ก ํํ
-
๊ฐ์ ISA๋ฅผ ๊ฐ์ง๋ ์ปดํจํฐ์๋ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์์
๋ง์ดํฌ๋ก์ํคํ
์ฒ
CISC vs RISC
-
CISC
-
์ฌ๋ฌ ๋์์ ํ๊บผ๋ฒ์ ํ ์ ์๋ ์ฌ๋ฌ ๊ฐ์ง์ ๋ช
๋ น์ด๋ค์ ์ ๊ณต
-
๋ช
๋ น์ด๋ค์ ํ์๊ณผ ๊ธธ์ด๊ฐ ๋ค์ํ๊ณ , ์ฃผ์ ์ง์ ๋ฐฉ์์ผ๋ก๋ ๋ค์ํจ
-
์ฃผ๋ก ๋ง์ดํฌ๋ก ํ๋ก๊ทธ๋จ ์ ์ด ๋ฐฉ์์ ํ๋ก์ธ์๋ก ๊ตฌ์ฑ
-
RISC
-
๊ณ ์ ๋ ๊ธธ์ด์ ์ต์ ์ข
๋ฅ์ ๋ช
๋ น์ด๋ค์ ์ ๊ณต
-
์ฃผ์ ์ง์ ๋ฐฉ์ ์ต์ํ, Load/Store ๋ฐฉ์์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ
-
ํ ํด๋ก ์ฌ์ดํด์ ํ๋์ ๋ช
๋ น์ ์คํํ ์ ์๋๋ก ์ค๊ณ
๋ช
๋ น์ด ํ์ดํ๋ผ์ธ
-
๋ชจ๋ ๋ช
๋ น์ด๋ค์ ์คํ์ ๋์ผํ ๋จ๊ฒ๋ค๋ก ๋๋๊ณ
-
ํ ํด๋ก ์ฌ์ดํด์ ํ ๋จ๊ณ์ฉ ์งํํ๋๋ก ํ์ฌ
-
๋์์ ์ฌ๋ฌ ๋ช
๋ น์ด๋ค์ ์๋ก ๋ค๋ฅธ ๋จ๊ณ๋ฅผ ์คํ
-
ํ์ดํ๋ผ์ธ ๋จ๊ณ
-
Instruction Fetch (IF)
-
Instruction Decode (ID)
-
Execute (EX)
-
Memory access (MEM)
-
Write Back (WB)
-
์ฌ๋ฌ ๋ช
๋ น์ด๊ฐ ํ์ดํ๋ผ์ธ์ ๊ฐ ๋จ๊ณ์์ ๋์์ ์ฒ๋ฆฌ๋์ด ์ฒ๋ฆฌ ํจ์จ์ด ๋์์ง
ํ๋ก๊ทธ๋จ์ ๋ฒ์ญ๊ณผ ์คํ
ํ๋ก๊ทธ๋จ ๋ฒ์ญ/์คํ์ ๋ชจ๋ธ ๋น๊ต
-
์ปดํ์ผ๋ฌ ๋ฐฉ์์ ์ฅ์
-
์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ์ฅ์
- ๋ค๋ฅธ ์ปดํจํฐ๋ก ์ฎ๊ฒจ ์คํํ๋ ๊ฒ์ด ํธ๋ฆฌํจ
- ๋ํํ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํจ
-
์ด ๋ ๋ฐฉ์์ ์ฅ์ ์ ํํ(์ด์ค๊ฐํ) ๋ฐฉ๋ฒ๋ค๋ ์ด์ฉ๋จ
๊ฐ์๊ธฐ๊ณ๋ฅผ ์ด์ฉํ ์คํ ๋ชจ๋ธ
-
์์์ฝ๋(source code)๋ฅผ ์ปดํ์ผ๋ฌ๊ฐ ๋ฒ์ญํ์ฌ ์คํ์ฝ๋(executable) ์์ฑ
-
์คํ์ฝ๋๋ ์ปดํจํฐ ํ๋์จ์ด์์ ์ง์ ์คํ
-
์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ์์์ฝ๋๋ฅผ ๋ฒ์ญ๊ธฐ๊ฐ ํ ์ค์ฉ ํด์ํ๋ฉฐ ๋ฐ๋ก ์คํ
-
๊ฐ์๊ธฐ๊ณ(VM, Virtual Machine)๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์์
-
์ปดํ์ผ๋ฌ๊ฐ ์์์ฝ๋๋ฅผ ๋ฐ์ดํธ์ฝ๋(byte code)๋ก ๋ณํ
-
๋ฐ์ดํธ์ฝ๋๋ ํ๋์จ์ด๊ฐ ์๋๋ผ ๊ฐ์๊ธฐ๊ณ(VM)์์ ์คํ
-
VM์ด ์ค์น๋ ์ด๋ค ์ปดํจํฐ์์๋ ๋์ผํ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ ์ ์์
-
๋คํธ์ํฌ๋ฅผ ํตํด ์ฝ๋ ๊ณต์ ๋ ์ผ๋ฐ์
-
์์
-
Java: ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผ๋ฌ๊ฐ ๋ฐ์ดํธ์ฝ๋(.class)๋ก ๋ณํ
-
๊ฐ ํ๋ซํผ์ Java Virtual Machine(JVM)์์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํ
-
Windows, Linux, Intel, AMD ๋ฑ ๋ค์ํ ํ๊ฒฝ์์ ๋์ผํ ๋ฐ์ดํธ์ฝ๋ ์คํ ๊ฐ๋ฅ
์ปดํ์ผ๋ฌ์ ๋ง์ปค/๋ก๋
-
์์์ฝ๋(source code)๋ ์ปดํ์ผ๋ฌ์ ์ํด ์ด์
๋ธ๋ฆฌ ์ฝ๋(assembly code)๋ก ๋ณํ
-
์ด์
๋ธ๋ฌ(assembler)๊ฐ ์ด์
๋ธ๋ฆฌ ์ฝ๋๋ฅผ ๋ชฉ์ ์ฝ๋(object code)๋ก ๋ณํ
-
์ฌ๋ฌ ๋ชฉ์ ์ฝ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(libraries)๋ฅผ ๋ง์ปค(linker)๊ฐ ๊ฒฐํฉํ์ฌ ์ ์ฌ ๊ฐ๋ฅํ ๋ชจ๋(loadable module) ์์ฑ
-
๋ก๋(loader)๊ฐ ์ด ๋ชจ๋์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํด ์คํ
๋ง์ปค(Linker)์ ๋ก๋(Loader)
-
์ฌ๋ฌ ๊ฐ์ ๋ชฉ์ ์ฝ๋(obj1, obj2 ๋ฑ)์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(lib1, lib2 ๋ฑ)๋ฅผ ํ๋์ ์คํ ํ์ผ๋ก ๊ฒฐํฉํ๋ ๊ณผ์ ์ ๋ง์ปค๊ฐ ์ฌ์ฉ๋จ
-
๋ณดํต ์ปดํ์ผ๋ฌ์ ํจ๊ป ์คํ๋จ
-
์ฌ๋ฌ ๋ฉ์ด๋ฆฌ์ ๋ชฉ์ ์ฝ๋๋ฅผ ์ฐ๊ฒฐ
-
์๋ก ๋ค๋ฅธ ๋ชจ๋ ์ฌ์ด์ ์ฃผ์ ์ํธ ์ฐธ์กฐ๋ฅผ ํด๊ฒฐ
-
๋ง์ปค๊ฐ ์์ฑํ ์คํ ํ์ผ(executable)์ ๋ก๋์ ์ํด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์ด ์คํ
- ๋ก๋๋ ์ด์์ฒด์ ์ ์ผ๋ถ๋ก์ ํ๋ก๊ทธ๋จ ์คํ์ ๋ด๋น
- ํ๋ก๊ทธ๋จ ํ์ผ์ ์ ์ฅ์ฅ์น๋ก๋ถํฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ
- ์ผ๋ฐ์ ์ผ๋ก ๋์ ์ ์ฌ ๋ฌธ์ ๋ ํจ๊ป ํด๊ฒฐ
๋ผ์ด๋ธ๋ฌ๋ฆฌ(Libraries)
-
๋ง์ ํ๋ก๊ทธ๋จ๋ค์ด ๊ณตํต์ ์ผ๋ก ์ด์ฉํ๋ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ์ํํธ์จ์ด๋ฅผ ๋ชจ๋ํํ์ฌ ์ค๋นํด ๋ ๊ฒ
-
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ข
๋ฅ
- ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Static Library): ๊ฐ ํ๋ก๊ทธ๋จ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๊ฐ ํฌํจ๋์ด ๋
๋ฆฝ์ ์ผ๋ก ์กด์ฌ
- ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Shared Library): ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ด ๋์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ฅผ ๊ณต์ ํ์ฌ ์ฌ์ฉ
-
์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ๊ฐ์ ํ๋ก๊ทธ๋จ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๊ฐ ๋ณต์ฌ๋์ด ํฌํจ๋จ
-
๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ด ํ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ฅผ ์ฐธ์กฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจ์จ์ด ๋์์ง
์ด์์ฒด์ ์ ์ญํ ๊ณผ ๊ตฌ์กฐ
์ํํธ์จ์ด์ ๋ถ๋ฅ
- ์์คํ
์ํํธ์จ์ด
- ์ปดํจํฐ ์์คํ
์ ์ด์ฉํ๊ฑฐ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ง์ํ๋ ๋ฐ ์ด์ฉ๋๋ ์ํํธ์จ์ด์ ๋ชจ์
- ์ด์์ฒด์ (operating system), ์ปดํ์ผ๋ฌ(compiler), ๋ง์ปค/๋ก๋(linker/loader), ์์คํ
์ด์ฉ ๋๊ตฌ ๋ฑ
- ์์ฉ ์ํํธ์จ์ด
- ์ปดํจํฐ ์์คํ
์ด ์์ฉ๋ ๋ถ์ผ์ ๋ฐ๋ฅธ ๊ธฐ๋ฅ์ ์ํํ๋๋ก ๋ง๋ค์ด์ง ์ํํธ์จ์ด
- ์๋ ํ๋ก์ธ์(word processor), ์คํ๋ ๋์ํธ(spreadsheet), ์น ๋ธ๋ผ์ฐ์ (web browser), ๊ฒ์(game) ๋ฑ
์ด์์ฒด์ (Operating System)์ ์ ์์ ์ญํ
- ์ปดํจํฐ ์์คํ
์ด ์ด์๊ฐ๊ธฐ ์ํด ๋ฐ๋์ ํ์ํ ์ํํธ์จ์ด(์ ๋ชจ์)
- ์ด์์ฒด์ ์ ์ญํ
- ์ปดํจํฐ ์์คํ
์ ์์์ ๊ด๋ฆฌ
- ํ๋ก์ธ์ ์๊ฐ, ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ, ์
์ถ๋ ฅ ์ฅ์น, ํ์ผ ๋ฑ
- ์ฌ์ฉ์์๊ฒ ์์คํ
์์์ ํ์ฉํ ์ ์๋ ๊ธฐ๋ฅ ์ ๊ณต
- ๋จ์ผ ์ฌ์ฉ์ ์์คํ
: ๋ค์ ๊ฐ๋จ
- ๋ค์ค ์ฌ์ฉ์ ์์คํ
: ๋ค์ ๋ณต์ก
์ด์์ฒด์ ์ ๋ถ๋ฅ
- ์ด์ฉ ๋์ ์์คํ
์ ์ข
๋ฅ
- ๋ฒ์ฉ(general purpose) / ๋ด์ฅํ(embedded)
- ์ฌ๋ฌ ์ฌ์ฉ์์ ๋ํ ์๋น์ค ์ ๊ณต ์ฌ๋ถ
- ๋จ์ผ ์ฌ์ฉ์(single-user) / ๋ค์ค ์ฌ์ฉ์(multi-user)
- ์ค์์ฒ๋ฆฌ์ฅ์น ๊ตฌ์ฑ
- ๋จ์ผ ํ๋ก์ธ์(uniprocessor) / ๋ค์ค ํ๋ก์ธ์(multiprocessor)
- ์์
์ฒ๋ฆฌ ๋ฐฉ์
- ์๋ถํ ๋ฐฉ์(batch processing) / ๋ค์ค ํ๋ก๊ทธ๋๋ฐ(multiprogramming)
์ด์์ฒด์ ์ ์ญํ
- ์ปดํจํฐ ์์คํ
์ ์์ ๊ด๋ฆฌ
- ํ๋ก์ธ์ค ๊ด๋ฆฌ
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
- ํ์ผ ์์คํ
๊ด๋ฆฌ
- ์
์ถ๋ ฅ ์ฅ์น ๊ด๋ฆฌ
- ์ฌ์ฉ์์๊ฒ ์์คํ
ํ์ฉ ๋๊ตฌ ์ ๊ณต
- ํ
์คํธ ์๋ํฐ
- ์์คํ
๊ด๋ฆฌ ๋๊ตฌ
- ์ํํธ์จ์ด ๊ฐ๋ฐ ๋๊ตฌ(ํ๊ฒฝ)
- ์น ๋ธ๋ผ์ฐ์ ๋ฑ
์ด์์ฒด์ ์ปค๋(kernel)
- ์ด์์ฒด์ ์ ํต์ฌ(core) ๋ถ๋ถ์ ์์น
- ์์คํ
์ ๋ชจ๋ ์ธก๋ฉด์ ๋ํ ์์ ํ ๊ถํ์ ๊ฐ์ง
- ์ฌ์ฉ์(๋ฐ ํ๋ก์ธ์ค) ๊ฐ ์ถฉ๋ ๋๋ ์นจํด๋ก๋ถํฐ์ ๋ณดํธ์ ํจ๊ป ํจ์จ์ ์ด๋ฉด์ ๊ณต์ ํ ์์ ๊ณต์ (๋ฐฐ๋ถ) ๋ด๋น
- ์์คํ
์์์ ๋ํ ์์ ํ ์ ์ด๊ถ์ ๊ตฌ์ฌํ๊ธฐ ์ํด ํ๋์จ์ด์ ์ง์์ด ํ์
- ๋ํ์ ์ผ๋ก User mode์ Kernel mode, ์์ธ ๋ ๋ฒจ(exception levels) ๊ตฌ๋ถ
- ์ปค๋ ์ธ์ ๋ถ๋ถ(โ์ฌ์ฉ์โ๋ผ๊ณ ๋ถ๋ฆ)์ ์ด๋ฃจ๋ ์ฝ๋๋ ์์คํ
์์ ์ ๊ทผ์ ์ํด ์ปค๋์ ์๋น์ค๋ฅผ ์ด์ฉ
- ๋ํ์ ์ผ๋ก ์์คํ
์ฝ(system call)์ ํตํด ์ปค๋์ ๊ธฐ๋ฅ์ ์ฌ์ฉ
- ์ปค๋์ ํ๋์จ์ด(CPU, ๋ฉ๋ชจ๋ฆฌ, ๊ฐ์ข
์ฅ์น)์ ์์ฉ ํ๋ก๊ทธ๋จ ์ฌ์ด์์ ์ธํฐํ์ด์ค ์ญํ
- ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ง์ ํ๋์จ์ด์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ๋ณดํธํ๊ณ , ์์ ๊ด๋ฆฌ์ ๋ณด์์ ๋ด๋น
์์คํ
์ฝ(System Calls)
- ์ด์์ฒด์ ์ปค๋์ด ์ ๊ณตํ๋ ์๋น์ค์ ๋ํ ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ฒญ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค
- ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ณดํต ๊ณ ๊ธ API(๋ผ์ด๋ธ๋ฌ๋ฆฌ) ํจ์๋ค์ ํตํด ์์คํ
ํธ์ถ์ ์ ๊ทผ
- ์์คํ
์ฝ์ ํธ์ถ์ ํ๋ก์ธ์์ ์คํ ๋ฌธ๋งฅ(context)์ ํน๊ถ ๋ชจ๋(privileged mode, kernel mode)๋ก ์ ํ์ํด
- ์ผ๋ฐ์ ์ผ๋ก ์ ์ ๋ชจ๋(user mode)์์ ์คํ๋๋ ํ๋ก๊ทธ๋จ์ด ์์คํ
์ฝ์ ํธ์ถํ๋ฉด ์ปค๋ ๋ชจ๋๋ก ์ ํ
- ์ปค๋ ๋ชจ๋์์ ์์คํ
์ฝ์ ์คํํ ๋ค, ๋ค์ ์ ์ ๋ชจ๋๋ก ๋ณต๊ท
- ์์คํ
์ฝ์ ํตํด ํ์ผ ์
์ถ๋ ฅ, ํ๋ก์ธ์ค ๊ด๋ฆฌ, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ๋คํธ์ํฌ ๋ฑ ๋ค์ํ ์ปค๋ ๊ธฐ๋ฅ์ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์์
- ์์คํ
์ฝ์ ์ด์์ฒด์ ์ ์์ ์ฑ๊ณผ ๋ณด์์ ์ํด ๋ฐ๋์ ์ปค๋ ๋ชจ๋์์๋ง ์คํ๋๋๋ก ์ค๊ณ๋จ
ํ๋ก์ธ์ค ๊ด๋ฆฌ์ ์ค์ผ์ค๋ง
ํ๋ก์ธ์ค (Process)
- ํ๋ก์ธ์ค๋?
- ์ปดํจํฐ ์์คํ
์์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์คํ ์ค์ธ ์์
- ์ปดํจํฐ ์์คํ
์์ ์คํ๋๋ ๊ฑฐ์ ๋ชจ๋ ์ํํธ์จ์ด๋ ํ๋ ์ด์์ ํ๋ก์ธ์ค๋ฅผ ์ด๋ฃธ
- ํ๋ก์ธ์ค๋ ์๋ช
์ฃผ๊ธฐ(life cycle)๋ฅผ ๊ฐ์ง๋ฉฐ, ์ด๋ ์ด์์ฒด์ ๊ฐ ๊ด๋ฆฌ
- ํ๋ก๊ทธ๋จ โ ํ๋ก์ธ์ค
- ํ๋ก๊ทธ๋จ: ์คํ์ด ์ค๋น๋ ์ํํธ์จ์ด์ ๋ฉ์ด๋ฆฌ
- ํ๋ก์ธ์ค: ์ง๊ธ ์คํํ๊ณ ์๋ ์ํํธ์จ์ด์ ์๋ช
์ฒด
ํ๋ก์ธ์ค ๊ด๋ฆฌ (Process Management)
- ์ด์์ฒด์ ๋ ๊ฐ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ์ ์งยท๊ด๋ฆฌ
- ๊ฐ ํ๋ก์ธ์ค๊ฐ ์์คํ
์์์ ์ฌ์ฉํ ์ ์๋๋ก ๊ด๋ฆฌ
- ์๋ฌด๋ ์์คํ
์์์ ๊ด๋ฆฌํ์ง ์์ผ๋ฉด ๋ณดํธ์ ์ธก๋ฉด๋ ์๊ฐํด์ผ ํจ
- ์ค์ ๋ก๋ Windows ์์
๊ด๋ฆฌ์, Linux์ top ๋ช
๋ น์ด ๋ฑ์ผ๋ก ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ์์ ์ฌ์ฉ ํํฉ์ ํ์ธํ ์ ์์
ํ๋ก์ธ์ค์ ์ํ (Process State)
- ํ๋ก์ธ์ค๋ ์คํ๋๋ ๋์ ์ฌ๋ฌ ์ํ๋ฅผ ๊ฑฐ์นจ
- ์ฃผ์ ์ํ
- Start: ํ๋ก์ธ์ค๊ฐ ์ฒ์ ์์ฑ๋ ์ํ
- Ready: ์คํ ์ค๋น๊ฐ ๋ ์ํ, CPU ํ ๋น์ ๊ธฐ๋ค๋ฆผ
- Running: CPU๋ฅผ ํ ๋น๋ฐ์ ์ค์ ๋ก ๋ช
๋ น์ ์คํ ์ค์ธ ์ํ
- Waiting / Blocked: ์
์ถ๋ ฅ ๋ฑ ์์์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๋๊ธฐํ๋ ์ํ
- Terminated: ์คํ์ด ์๋ฃ๋์ด ์ข
๋ฃ๋ ์ํ
- ์ํ ์ ์ด
- Start โ Ready: ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์ด
- Ready โ Running: CPU๊ฐ ํ ๋น๋จ(dispatch)
- Running โ Waiting/Blocked: ์
์ถ๋ ฅ ๋ฑ ์์์ ๊ธฐ๋ค๋ฆด ๋
- Waiting/Blocked โ Ready: ์์์ด ์ค๋น๋๋ฉด
- Running โ Ready: ์ธํฐ๋ฝํธ ๋ฑ์ผ๋ก CPU๋ฅผ ๋นผ์๊ธธ ๋
- Running โ Terminated: ์คํ ์ข
๋ฃ(exit)
- ๊ฐ ์ํ์ ์ ์ด๋ ์ด์์ฒด์ ๊ฐ ์ค์ผ์ค๋ง ๋ฐ ์์ ๊ด๋ฆฌ๋ฅผ ํตํด ์ ์ดํจ
ํ๋ก์ธ์ค์ ์ค๋ ๋ (Processes & Threads)
- ํ๋ก์ธ์ค
- ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ์ธ์คํด์ค
- ์ฝ๋, ๋ฐ์ดํฐ, ํ์ผ, ๋ ์ง์คํฐ, ์คํ ๋ฑ์ผ๋ก ๊ตฌ์ฑ
- ์ค๋ ๋
- ํ๋ก์ธ์ค ๋ด์์ ์คํ ํ๋ฆ์ ๋ด๋นํ๋ ์ต์ ๋จ์
- single-threaded process: ํ๋์ ์ค๋ ๋๋ง ์กด์ฌ
- multithreaded process: ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๊ฐ์ ์ฝ๋, ๋ฐ์ดํฐ, ํ์ผ์ ๊ณต์ ํ์ง๋ง, ๊ฐ์ ๋ ์ง์คํฐ์ ์คํ์ ๊ฐ์ง
- ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์๋ ์ฌ๋ฌ ์์
์ ๋์์ ์ฒ๋ฆฌํ ์ ์์
๋์์ฑ (Concurrency)
- ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์คํ๋๋ ๊ตฌ์กฐ
- ํ๋์ CPU์์ ์ฌ๋ฌ ์์
์ ๋์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํจ
- ๋ฌธ๋งฅ ์ ํ(context switch)์ด ๋ฐ์ํ๋ฉฐ, ๊ฐ ์ค๋ ๋์ ์คํ ๊ตฌ๊ฐ์ด ๊ต์ฐจ
- ๋์์ฑ์ ๊ฐ์ง๋ ์์
์ ์ฒ๋ฆฌํ ๋๋ ๋๊ธฐํ(synchronization)๊ฐ ํ์
- ๋๊ธฐํ๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๊ณต์ ์์์ ๋์์ ์ ๊ทผํ ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋งค์ฐ ์ค์ํ ์ด์์ฒด์ ์๋ฌด ์ค ํ๋
์ค์ผ์ค๋ง (Scheduling)
- ์ค์ผ์ค๋ง ๋ฌธ์ : ์ด๋ ์๊ฐ์ ์ด๋ค ์์
์ ์ํํ ์ง ๊ฒฐ์ ํ๋ ๋ฌธ์
- ํจ์จ์ฑ(efficiency)๊ณผ ๊ณต์ ์ฑ(fairness) ์ฌ์ด์ ์ดํด๋์ค ๊ด๊ณ
- ์๋ต ์๊ฐ(response time)์ ์ต์ํ
- ๊ฐ ์์
์ด ๋์ฐฉํ์ ๋๋ถํฐ ์๋ฃ๋ ๋๊น์ง์ ์๊ฐ์ด ์ค์
- ์์คํ
์ฒ๋ฆฌ์จ(throughput, ๋จ์ ์๊ฐ๋น ์ฒ๋ฆฌ ์์
๋)์ ๊ทน๋ํ
- ๋ฌธ๋งฅ ์ ํ์ ์ค๋ฒํค๋๋ฅผ ๊ณ ๋ คํ๋ฉด ์๋ต ์๊ฐ๊ณผ ๊ฐ์ ๊ธฐ์ค์ด ์๋
- ๊ณต์ ์ฑ์ ํด์น์ง ๋ง ๊ฒ
- ๋ฎ์ ์ฐ์ ์์ ์์
์ด ์์ํ ๊ธฐ๋ค๋ ค์ผ ํ๋ starvation ํ์ ๋ฐฉ์ง
์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์: FCFS (First-Come, First-Served Scheduling)
- ๋จผ์ ๋์ฐฉํ ์์
๋ถํฐ ์ฐจ๋ก๋ก ์ฒ๋ฆฌ
- ์์
- ์์
Pโ, Pโ, Pโ๊ฐ ๋์ฐฉ
- ์์์๊ฐ: Pโ=24, Pโ=3, Pโ=3
- ๋๊ธฐ ์๊ฐ(waiting time): Pโ=0, Pโ=24, Pโ=27
- ํ๊ท ๋๊ธฐ ์๊ฐ(average waiting time): (0+24+27)/3 = 17
- ํ๊ท ์๋ต ์๊ฐ(average response time): (24+27+30)/3 = 27
- FCFS๋ ๋จ์ํ์ง๋ง, ๊ธด ์์
์ด ๋จผ์ ์ค๋ฉด ์ ์ฒด ๋๊ธฐ ์๊ฐ์ด ๋์ด๋๋ ๋จ์ ์ด ์์
๋ฉ๋ชจ๋ฆฌ์ ์
์ถ๋ ฅ ๊ด๋ฆฌ
์ปดํจํ
์์คํ
์์์ ์ถ์ํ
- ํ๋ก์ธ์ค: CPU ์๊ฐ์ ๋ํ ์ถ์ํ
- ๊ฐ ํ๋ก์ธ์ค(์คํ ์ค์ธ ํ๋ก๊ทธ๋จ)๋ ์์ ์๊ฒ CPU ์๊ฐ์ด ์ ์ฒด ์ค ์ผ๋ถ๊ฐ ์ฃผ์ด์ง๋ ๊ฒ์ผ๋ก ๊ฐ์ํ ์ ์์
- ๊ฐ์๋ฉ๋ชจ๋ฆฌ: ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ํ ์ถ์ํ
- ๊ฐ ํ๋ก์ธ์ค๋ ์ ์ฒด ์ฃผ์ ๊ณต๊ฐ์ ๋ชจ๋ ์์ ์๊ฒ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ํ ์ ์์
- ํ์ผ์์คํ
: ์
์ถ๋ ฅ ์ฅ์น๋ค์ ์ผ๊ด๋ ์ธํฐํ์ด์ค๋ก ์ถ์ํ
- ๊ฐ ํ๋ก์ธ์ค๋ ์ค์ ์
์ถ๋ ฅ ์ฅ์น์ ๋์ ๋ฐฉ์๊ณผ๋ ๋ฌด๊ดํ๊ฒ ํ์ผ์ ์กฐ์ํ๋ ๊ฒ๊ณผ ๋์ผํ ์ผ๊ด๋ ๋ฐฉ๋ฒ์ ํตํด ์๋ก ๋ค๋ฅธ ์ฅ์น์ ์
์ถ๋ ฅ์ ์ด์ฉํ ์ ์์
๊ฐ์๋ฉ๋ชจ๋ฆฌ(Virtual Memory)์ ์ด์์ฒด์ ์ ์ญํ
- ํ๋ก์ธ์ค์๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ฃผ๊ณ , ํ๋ก์ธ์ค๊ฐ ๋ฐํํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ โ์ด์ฉ ๊ฐ๋ฅํ ๊ฒโ์ผ๋ก ๊ด๋ฆฌ
- ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋จ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์นจ๋ฒํ์ง ๋ชปํ๋๋ก ๋ณดํธ
- ์ด๋ฌํ ์ผ๋ค์ ๋ชจ๋ ์ด์์ฒด์ ์ ๋ชซ
- MMU(Memory Management Unit)๋ ๊ฐ์ ์ฃผ์์ ์ค์ ๋ฌผ๋ฆฌ ์ฃผ์์ ๋งคํ์ ๋ด๋น
- ๊ฐ ํ๋ก์ธ์ค๋ ์์ ๋ง์ ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ์ ๊ฐ์ง๋ฉฐ, ์ค์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ MMU๋ฅผ ํตํด ํ์ํ ๋ถ๋ถ๋ง ๋งคํ๋จ
ํ์ด์ง์ ์ํ ๊ฐ์๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๋ณํ
- ๊ฐ์ ์ฃผ์๋ ํ์ด์ง ๋๋ ํฐ๋ฆฌ(Page Directory)์ ํ์ด์ง ํ
์ด๋ธ(Page Table)์ ๊ฑฐ์ณ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ํ๋ ์(Frame)์ผ๋ก ๋ณํ๋จ
- 32๋นํธ ์ฃผ์ ์์
- ์์ ๋นํธ: ํ์ด์ง ๋๋ ํฐ๋ฆฌ ์ธ๋ฑ์ค
- ์ค๊ฐ ๋นํธ: ํ์ด์ง ํ
์ด๋ธ ์ธ๋ฑ์ค
- ํ์ ๋นํธ: ํ์ด์ง ๋ด ์คํ์
- PDE(Page Directory Entry), PTE(Page Table Entry), BR(Base Register) ๋ฑ์ผ๋ก ๊ณ์ธต์ ๋ณํ์ด ์ด๋ฃจ์ด์ง
- ์ค์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ ํ์ด์ง๋ 4KB ๋จ์๋ก ๊ด๋ฆฌ๋จ
์๊ตฌ ํ์ด์ง(Demand Paging)๊ณผ ์ง์ญ์ฑ(Locality)
- ํ์ด์ง ํดํธ(page fault)๋ฅผ ์ค์ด๋ ๊ฒ์ด ์ ์ฒด ์์คํ
์ฑ๋ฅ ํฅ์์ ๋งค์ฐ ์ค์
- ์ง์ญ์ฑ(locality)์ ๊ทผ๊ฑฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ์ด์ง๋ค์ ์ ์ฅ์ฅ์น๋ก๋ถํฐ ์ฝ์ด๋ค์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ
- ์บ์ ๋ฉ๋ชจ๋ฆฌ(cache memory) ๊ด๋ฆฌ์ ์ ์ฌํ ๋ฐฉ์
- ๊ต์ฒด ๊ธฐ๋ฒ์ผ๋ก LRU(Least Recently Used) ๋ฐ ๊ทผ์ฌํ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉ
- ์ฐธ์กฐ์ ์ง์ญ์ฑ(locality of references)
- ์๊ฐ์ ์ง์ญ์ฑ(temporal locality): ์ง๊ธ ์ฐธ์กฐ๋ ์ฃผ์๋ ๊ฐ๊น์ด ๋ฏธ๋์ ๋๋ค์ ์ฐธ์กฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์
- ๊ณต๊ฐ์ ์ง์ญ์ฑ(spatial locality): ์ง๊ธ ์ฐธ์กฐ๋ ์ฃผ์์ ๊ฐ๊น์ด ์ฃผ์๊ฐ ๋ฏธ๋์ ์ฐธ์กฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์
ํ์ผ์์คํ
(Filesystem)๊ณผ ์ฅ์น ๊ด๋ฆฌ
- ์ ์ฅ์ฅ์น(storage)์ ํน์ฑ
- ์ ์ฅ์ฅ์น๋ ๋จ์ ์
์ถ๋ ฅ ๊ธฐ๋ฅ ์ธ์๋ ๋ฉ๋ชจ๋ฆฌ ์๋ธ์์คํ
(๊ฐ์๋ฉ๋ชจ๋ฆฌ)์ ์ผ๋ถ๋ก ๋์ํ ์ ์์
- ์
์ถ๋ ฅ์ฅ์น์๋ ๊ตฌ๋ถ๋๋ ํน์ฑ์ ๊ฐ์ง
- ์ด์์ฒด์ ์ ํ์ผ์์คํ
์ถ์ํ
- ์ด์์ฒด์ ๋ ์ ์ฅ์ฅ์น๋ฅผ ํ์ผ์์คํ
ํํ๋ก ์ถ์ํํด ๊ด๋ฆฌ
- ๋์คํฌ ๋๋ผ์ด๋ธ ๋ฑ ์ ์ฅ์ฅ์น๋ ์
์ถ๋ ฅ ์ฅ์น ๊ด๋ฆฌ ๋ฐฉ์์ ๋ฐ๋ผ ์ด์์ฒด์ ์ ์ผ๋ถ(ํ์ผ์์คํ
)๋ก ํตํฉ
- ์ฌ์ฉ์๋ ํ์ผ์ด๋ผ๋ ํํ๋ก ๋ฐ์ดํฐ ์งํฉ์ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์์
- UNIX ๊ณ์ด์ ํ์ผ์์คํ
ํน์ง
- ๋ค์ํ ์ข
๋ฅ์ ์ฅ์น๋ฅผ ํ์ผ๋ก ๊ฐ์ฃผํ๋ ์ถ์ํ ๋ฐฉ์์ ์ฌ์ฉ
- ์ผ๊ด๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ๋ฌ ์ฅ์น์ ์ ๊ทผ ๊ฐ๋ฅ
- ์ฅ์น ๊ด๋ฆฌ์๋ ์ปค๋์ ๋ฌธ๋งฅ์์ ์คํ๋๋ฉฐ ๊ฐ ์ฅ์น์ ์
์ถ๋ ฅ ๋ฐ ์ ์ด๋ฅผ ๋ด๋น
์
์ถ๋ ฅ ์ฅ์น ๊ด๋ฆฌ ๊ตฌ์กฐ
- ์ฌ์ฉ์ ํ๋ก์ธ์ค๋ ์์คํ
์ฝ(system call)์ ํตํด ์ด์์ฒด์ ์ปค๋์ ์
์ถ๋ ฅ ์์ฒญ
- ์ปค๋์ ๊ฐ ์ฅ์น๋ณ ์ฅ์น ๊ด๋ฆฌ์(device driver)์๊ฒ ์์ฒญ์ ์ ๋ฌ
- ์ฅ์น ๊ด๋ฆฌ์๋ ์ค์ ํ๋์จ์ด์ ์ง์ ํต์ ํ๋ฉฐ ์
์ถ๋ ฅ ๋์์ ์ํ
- ํ๋๋์คํฌ, USB, ์ฌ์ด๋, ๋ง์ดํฌ ๋ฑ ๋ค์ํ ์ฅ์น๊ฐ ๊ฐ๊ฐ์ ์ฅ์น ๊ด๋ฆฌ์๋ฅผ ํตํด ์ ์ด๋จ
์ฅ์น ๊ด๋ฆฌ์(Device Driver)
- ์ฅ์น ๊ด๋ฆฌ์๋ ํ๋์จ์ด ์ ์กฐ์ฌ์์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ๋ ๋ง์ง๋ง, ์ด์์ฒด์ ์ ์ผ๋ถ๋ก ํฌํจ๋๊ธฐ๋ ํจ
- ์๋์ฐ, ๋ฆฌ๋
์ค ๋ฑ ์ด์์ฒด์ ์ ์ฅ์น ๊ด๋ฆฌ์ ๋ฉ๋ด์์ ๋ค์ํ ํ๋์จ์ด ์ฅ์น๋ฅผ ๊ด๋ฆฌํ ์ ์์
- ์: ๋คํธ์ํฌ ์ด๋ํฐ, ๋์คํฌ ๋๋ผ์ด๋ธ, ๋ชจ๋ํฐ, ํค๋ณด๋, ํ๋ฆฐํฐ, ์ฌ์ด๋, ๋ธ๋ฃจํฌ์ค ๋ฑ
- ์ฅ์น ๊ด๋ฆฌ์๋ ๊ฐ ํ๋์จ์ด์ ์
์ถ๋ ฅ, ์ ์ด, ์ํ ๊ด๋ฆฌ ๋ฑ ํต์ฌ ๊ธฐ๋ฅ์ ๋ด๋น
- ์ฌ์ฉ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฅ์น ๊ด๋ฆฌ์ ๋๋ถ์ ํ๋์จ์ด์ ์ธ๋ถ ๋์์ ๋ชฐ๋ผ๋ ์ผ๊ด๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฅ์น์ ์ ๊ทผํ ์ ์์