OS - YunByungKwan/Fundamental GitHub Wiki
-
ํ๋ก๊ทธ๋จ์ ํน์ ์์ ์ ์ํํ ์ ์๋ ์คํ ๊ฐ๋ฅํ ํ์ผ์ ๋งํฉ๋๋ค. -
ํ๋ก์ธ์ค๋ ๊ฐ๋จํ ์๊ธฐํ๋ฉด ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ๋งํ๊ณ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๊ณผ์ ์์ ๋ฉ๋ชจ๋ฆฌ์์ญ์code,data,heap,stack์์ญ์ ๊ณต๊ฐ์ ํ๋ณดํ๊ณ PCB๊ฐ ์์ฑ๋๊ฒ ๋ฉ๋๋ค.-
code: Program์ ์ฝ๋๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ -
data: ์ ์ญ ๋ณ์(static ๋ณ์)๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ -
heap: ๋์ ์ผ๋ก ์์ฑ๋ ๋ฐ์ดํฐ(new ๋ฑ)๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ -
stack: ๋งค๊ฐ ๋ณ์, ์ง์ญ ๋ณ์ ๋ฑ ์์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ
-
-
์ฐ๋ ๋๋ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ํ๋ฆ์ ๋จ์๋ฅผ ๋งํฉ๋๋ค. ๊ฐ์ ํ๋ก์ธ์ค ๋ด ์ฌ๋ฌ ์ฐ๋ ๋๋ค์ ๊ทธ ํ๋ก์ธ์ค์code,data,heap์์ญ์ ๊ณต์ ํ๊ณstack์์ญ๋ง ๋ณ๋๋ก ๊ฐ์ง๊ณ ์๋ ํน์ง์ด ์์ต๋๋ค.
PCB๋ ํ๋ก์ธ์ค์ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ๋งํฉ๋๋ค.
Linux ์ปค๋์์ PCB๋ ์ด์ค Linked List ํํ๋ก ๊ด๋ฆฌ๋๋ฉฐ
ํ๋ก์ธ์ค๊ฐ ์์ฑ๋ ๋๋ง๋ค ๊ทธ ํ๋ก์ธ์ค์ ๋ํ PCB๊ฐ ์์ฑ๋๊ณ
ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋๋ฉด PCB๋ ์ ๊ฑฐ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ปค๋์ ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ์ ์งํฉ๋๋ค.
PCB์ ์ ์ฅ๋ ์ ๋ณด๋ ์๋์ ๊ฐ์ต๋๋ค.
-
process number: ํ๋ก์ธ์ค ์๋ณ์(PID)
-
process state: ํ๋ก์ธ์ค ์ํ
-
program counter: ๋ค์ ์คํํ ๋ช ๋ น์ด์ ์ฃผ์(pc)
-
registers: CPU ๋ ์ง์คํฐ ๋ฐ ์ผ๋ฐ ๋ ์ง์คํฐ
-
memory limits: ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ณด
-
list of open files: ์ ์ถ๋ ฅ ์ํ ์ ๋ณด
-
...
-
PCB๋ ready queue(Linked List)์์ ๊ด๋ฆฌ๋๋ค
Context switching์ ํ์ฌ ์งํํ๊ณ ์๋ Task(Process, Thread)์ ์ํ๋ฅผ ์ ์ฅํ๊ณ
๊ทธ ๋ค์ ์งํํ Task์ ์ํ ๊ฐ์ ์ฝ์ด์ ์ ์ฉํ๋ ๊ณผ์ ์ ๋งํฉ๋๋ค.
๊ทธ๋์ ํ๋ก์ธ์ค์ Context Switching ๋ฐ์ ์
๋ฉ๋ชจ๋ฆฌ์ ๊ธฐ์กด ํ๋ก์ธ์ค์ code, data, heap, stack ์์ญ์ ๋ฐ์ดํฐ๋ค์ ๋ด๋ฆฌ๊ณ
์ ํ๋ ํ๋ก์ธ์ค์ code, data, heap, stack ์์ญ ๋ฐ์ดํฐ๋ฅผ ์๋ก ์ฌ๋ฆฌ๋ ๊ณผ์ ์ด ์ํ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ CPU์ register์๋ ์ ํ๋ ํ๋ก์ธ์ค์ PCB์ ์๋ register๋ธ๋ก์ผ๋ก ๊ต์ฒด๊ฐ ๋ฉ๋๋ค.
์ด๋ ๊ฒ ์ ํ๋๋ ๊ณผ์ ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค๊ณ ํ๊ณ ์ด ๋์์ CPU๊ฐ ๋ค๋ฅธ ์ผ์ ๋ชปํ๊ฒ ๋ฉ๋๋ค.
-
๋ฉํฐ ํ๋ก์ธ์ค
- ํ๋์ ์์ ์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
- ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC)์ด ํ์ํฉ๋๋ค.(๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ ๋ณด๋ฅผ ์ด์ฉํ๊ธฐ ์ํด)
- ์์ ํ๋ก์ธ์ค ์ค ํ๋๊ฐ ๋ฌธ์ ๊ฐ ์๊ฒจ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํฅ์ด ์์ต๋๋ค.
- Context Switching ๋น์ฉ์ด ํฝ๋๋ค.(PCB๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ค๋ ๊ณผ์ )
- Ex) Google Chrome(ํญ๋ง๋ค ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค)
-
๋ฉํฐ ์ฐ๋ ๋
- ํ๋์ ์์ ์ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
- ๊ฐ์ ํ๋ก์ธ์ค์ ์์์ ๊ณต์ ํฉ๋๋ค.(
code,data,heap) - Context Switching ๋น์ฉ์ด ์ ์ต๋๋ค.
- ํ ํ๋ก์ธ์ค ์์ ์ค๋ ๋๊ฐ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ๊ฐ์ ํ๋ก์ธ์ค ๋ด ๋ค๋ฅธ ์ค๋ ๋๋ค๋ ์ํฅ์ ๋ฐ๋ ๋จ์ ์ด ์์ต๋๋ค.
- ์์์ ๊ณต์ ํ๋ ๋งํผ ์ถฉ๋์ ์ฃผ์ํด์ผ ํฉ๋๋ค.(Thread-safeํ๋๋ก)
- Ex) Web Server
-
๋ฉํฐ ํ๋ก์ธ์ค์ ๊ฒฝ์ฐ- Context Switching ๋ฐ์ ์ ๋ฉ๋ชจ๋ฆฌ์
code,data,heap,stack์์ญ์ ๋ฐ์ดํฐ๋ค์ ๋ด๋ฆฌ๊ณ
์ ํ๋ ํ๋ก์ธ์ค์code,data,heap,stack์์ญ ๋ฐ์ดํฐ๋ฅผ ์๋ก ์ฌ๋ ค์ผ ํจ - CPU์ Register์ ํด๋น ํ๋ก์ธ์ค์ PCB์ ์๋ Register๋ค์ ์ฌ๋ ค์ผ ํ๋ค.
- Context Switching ๋ฐ์ ์ ๋ฉ๋ชจ๋ฆฌ์
-
๋ฉํฐ ์ฐ๋ ๋์ ๊ฒฝ์ฐ-
stack์์ญ๋ง ๊ต์ฒดํ๋ค. - CPU์ Register์ ํด๋น ์ฐ๋ ๋์ Register๋ค๋ง ๊ต์ฒดํ๋ฉด ๋๋ค.
-
-
์ฑ๊ธ ์ฝ์ด๋ ์ฑ๊ธ ์ฝ์ด๋ฅผ ๊ฐ์ง CPU๊ฐ ์ฌ๋ฌ ๊ฐ์ ์คํ ๋จ์๋ฅผ ์ฒ๋ฆฌํ ๋ ์งง์ ํ ์ผ๋ก ์ฌ๋ฌ ์คํ ๋จ์๋ฅผ ๋ฒ๊ฐ์ ๊ฐ๋ฉด์ ์คํํด์ ๋ง์น ๋์์ ์งํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฒ์ ๋งํฉ๋๋ค. (๋์์ฑ) -
๋ฉํฐ ์ฝ์ด๋ ์ฌ๋ฌ ๊ฐ์ ์ฝ์ด๋ฅผ ๊ฐ์ง CPU๊ฐ ์ฌ๋ฌ ๊ฐ์ ์คํ ๋จ์๋ฅผ ๋์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋งํฉ๋๋ค. (๋ณ๋ ฌ์ฑ)
์๊ณ๊ตฌ์ญ์ ์ฌ๋ฌ ๊ฐ์ ์ฐ๋ ๋๊ฐ ์ํ๋๋ ์์คํ
์์ ๊ฐ ์ฐ๋ ๋๋ค์ด
๊ณต์ ํ๋ ๋ฐ์ดํฐ(๋ณ์, ํ
์ด๋ธ, ํ์ผ ๋ฑ)๋ฅผ ๋ณ๊ฒฝํ๋ ์ฝ๋ ์์ญ์ ๋งํฉ๋๋ค.
(์๋ฅผ ๋ค๋ฉด ์ํ ๊ณ์ข ์์ ์์ ๋์ ์
๊ธํ๊ฑฐ๋ ์ถ๊ธํ๋ ์ฝ๋ ๋ถ๋ถ์ ๋งํจ)
- ์นด์ดํ ์ธ๋งํฌ์ด: ๊ฐ์ ์ ํ ์์
- ์ด์ง ์ธ๋งํฌ์ด: 0, 1 ๊ฐ๋ง ๊ฐ๋ฅ(๋ฎคํ ์ค ๋ฝ๊ณผ ์ ์ฌํ๊ฒ ๋์)
CPU <-> Main memory
- CPU๋ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ Main memory๋ก ์์ฒญ์ ํ๊ฑฐ๋, ํด๋น ์ฃผ์์ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ค.
- Main memory๋ CPU๊ฐ ์๊ตฌํ๋ ์ฃผ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ CPU์๊ฒ ์ ๋ฌํ๋ค.
- ํ๋ก๊ทธ๋จ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ํด๋น ์ฃผ์๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ์๊ฐํ์ง ์๊ณ ์ฃผ์๋ฅผ ์ฌ์ฉํ๋ค.
- ์๋ฅผ ๋ค์ด ํ๋ก๊ทธ๋จ ์์ ์ฃผ์๊ฐ 0๋ฒ์ง์ผ ๋ MMU๋ฅผ ํต๊ณผํ๋ฉด ์ฌ๋ฐฐ์น ๋ ์ง์คํฐ์ ์ํด์ ์ค์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์๋ 500๋ฒ์ง์ ํ ๋น๋๋ค.
- ๊ทธ๋์ CPU์์ ์ฌ์ฉ๋๋ ์ฃผ์(0๋ฒ์ง)๋ฅผ ๋ ผ๋ฆฌ ์ฃผ์(Logical address)๋ผ๊ณ ํ๊ณ , ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ์ฉํ๋ ์ฃผ์(500๋ฒ์ง)๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์(Physical address)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์๊ฐ์ด ์ง๋๋ฉด์ ํ๋ก์ธ์ค๋ค์ด ์์ฑ, ํ๊ดด๋จ์ ๋ฐ๋ผ์
๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ๋น์ด ์๋ ๊ณต๊ฐ๋ค์ด ์กด์ฌํ๊ฒ ๋๋๋ฐ ์ด ํ์์ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
-
์ธ๋ถ ๋จํธํ-
์ธ๋ถ ๋จํธํ๋?- ๋ฉ๋ชจ๋ฆฌ ๋จํธํ์ ์ํด 3๊ฐ์ ๊ณต๊ฐ(50byte, 50byte, 100byte)๊ฐ ์์ ๋, ์๋ก์ด ํ๋ก์ธ์ค 150byte๋ฅผ ํ ๋นํ๋ ค๊ณ ํ์ง๋ง ํ์ง ๋ชปํ๋ ํ์์ ๋งํ๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ
- ํ์ด์ง(Paging): ํ๋ก์ธ์ค๋ฅผ ์ผ์ ํ ํฌ๊ธฐ๋ก ๋๋ ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ํฉ์ด์ ธ์ ์ฌ๋ฆฐ๋ค๋ ์๊ฐ.
-
-
๋ด๋ถ ๋จํธํ-
๋ด๋ถ ๋จํธํ๋?- 15byte์ ํ๋ก์ธ์ค๊ฐ ์์ ๋ ํ์ด์ง ํฌ๊ธฐ๊ฐ 4byte๋ผ๋ฉด 4,4,4,3์ ํฌ๊ธฐ๋ก ์ด 4๊ฐ์ ํ์ด์ง๊ฐ ๋ง๋ค์ด์ง๋ค. ๋ง์ง๋ง ํ์ด์ง๋ 1byte๊ฐ ๋๊ฒ ๋๋๋ฐ ์ด๋ฅผ ๋ด๋ถ ๋จํธํ๋ผ๊ณ ํ๋ค.
-
-
OS๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฒ์ ํฌ๊ฒ 2๊ฐ์ง ๊ฐ ์๋ค.(์ฐ์์ , ๋ถ์ฐ์์ )
- ์ฐ์์ (1๊ฐ์ ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ํ ๋น)
- ๊ณ ์ ๋ถํ ๊ธฐ๋ฒ: ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณ ์ ๋ ํํฐ์ ์ผ๋ก ๋ถํ => ๋ด๋ถ ๋จํธํ ๋ฐ์
- ๋์ ๋ถํ ๊ธฐ๋ฒ: ํํฐ์ ๋ค์ ๋์ ์์ฑํ๊ณ ์์ ์ ํฌ๊ธฐ์ ๊ฐ์ ํํฐ์ ์ ์ ์ฌํ๋ ๊ฒ => ์ธ๋ถ ๋จํธํ ๋ฐ์
- ๋ถ์ฐ์์ (1๊ฐ์ ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ์ ๋ถ์ฐ์์ ์ผ๋ก ํ ๋น)
- ํ์ด์ง(Paging): ํ๋ก์ธ์ค๋ฅผ page๋ผ๋ ์กฐ๊ฐ์ผ๋ก ๋๋๊ณ , ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ frame์ด๋ผ๋ ์กฐ๊ฐ์ผ๋ก ๋๋ ์ ํ์ด์ง ํ ์ด๋ธ์ ๊ฐ๊ฐ์ page์ frame์ ๋งค์นญ.(page ํฌ๊ธฐ = frame ํฌ๊ธฐ). process ํฌ๊ธฐ < frame * N ์ผ ๊ฒฝ์ฐ ๋ง์ง๋ง ํ๋ ์์ด ์ ๋ถ ์ฌ์ฉ๋์ง ์์(=> ๋ด๋ถ ๋จํธํ ํด๊ฒฐ ๋ชปํจ)
- ์ธ๊ทธ๋ฉํ ์ด์ (Segmentation): ํ๋ก์ธ์ค๋ฅผ ๋ ผ๋ฆฌ์ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ๋๋ ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐฐ์นํ๋ ๊ฒ์ ๋งํ๋ค.(=> ์ธ๋ถ ๋จํธํ ๋ฐ์ํ ์ ์์) Ex) Process#1(10Byte) = segment#1(4Byte) + segment#2(4Byte) + segment#3(2Byte)
- ์ฐ์์ (1๊ฐ์ ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ํ ๋น)
- ํ๋ก๊ทธ๋จ์ ์คํ -> ํ๋ก์ธ์ค๊ฐ ์์ฑ๋จ -> ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ์ (์ฝ๋, ๋ฐ์ดํฐ, ์คํ) ์์ฑ -> ์ด ํ๋ก์ธ์ค์ ๋ฉํ ๋ฐ์ดํฐ๋ค์ด PCB์ ์ ์ฅ๋จ
- CPU์ ๊ตฌ์ฑ ์์ ์ค ๋ ์ง์คํฐ๊ฐ ์๋ค. ๋ ์ง์คํฐ๋ ๊ณ ์๊ธฐ์ต์ฅ์น๋ก ๋ช ๋ น์ด ์ฃผ์, ์ฝ๋, ์ฐ์ฐ์ ํ์ํ ๋ฐ์ดํฐ, ์ฐ์ฐ ๊ฒฐ๊ณผ ๋ฑ์ ์์๋ก ์ ์ฅํ๋ ์ญํ ์ ํ๋ค.