mutatingmutating์ ๊ฐ ํ์
์ธ ๊ตฌ์กฐ์ฒด๋ ์ด๊ฑฐํ์ ๋ฉ์๋์์ ํด๋น ์ธ์คํด์ค ํ๋กํผํฐ๋ฅผ ์์ ํ ์ ์๋๋ก ํ์ฉํ๋ ํค์๋์
๋๋ค.struct Person { var name: String mutating func changeName() { name = "Lee" }}var person = Person(name: "Kim")person.changeName()print(person.name) // Lee ๊ตฌ์กฐ์ฒด๋ ์ด๊ฑฐํ์์๋ง mutating์ ์ฌ์ฉํ๋ ์ด์ ๊ตฌ์กฐ์ฒด๋ ์ด๊ฑฐํ์ ์ธ์คํด์ค ๋ฉ์๋์ mutating์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.๊ตฌ์กฐ์ฒด์ ์ด๊ฑฐํ์ ๊ฐ ํ์
์ด๊ณ , ๊ฐ ํ์
์ ์ธ์คํด์ค๋ฅผ ๋ณต์ฌํ๋ฉด ์๋ณธ ๋ฐ์ดํฐ๋ ๊ทธ๋๋ก์ด๊ธฐ ๋๋ฌธ์ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ..
๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ
Multiple-Processor Scheduling(๋ค์ค ์ฒ๋ฆฌ๊ธฐ ์ค์ผ์ค๋ง)๋ค์ค ์ฒ๋ฆฌ๊ธฐ ์ค์ผ์ค๋ง์ CPU๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ํ๊ฒฝ์์์ ์ค์ผ์ค๋ง์ผ๋ก, ๋์ฑ ๋ณต์กํด์ง๋ค. โ Homogeneous Processor์ธ ๊ฒฝ์ฐ (์ ์ฝ ์กฐ๊ฑด์ด ์๋ ํ๊ฒฝ)Queue์ ํ ์ค๋ก ์ธ์์ ๊ฐ ํ๋ก์ธ์๊ฐ ์์์ ๊บผ๋ด๊ฐ๊ฒ ํ ์ ์๋ค.๋ฐ๋์ ํน์ ํ๋ก์ธ์์์ ์ํ๋์ด์ผ ํ๋ ํ๋ก์ธ์ค๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋ฌธ์ ๊ฐ ๋ ๋ณต์กํด์ง๋ค. โ Long Sharing์ผ๋ถ ํ๋ก์ธ์์ job์ด ๋ชฐ๋ฆฌ์ง ์๋๋ก ๋ถํ๋ฅผ ์ ์ ํ ๊ณต์ ํ๋ ๋ฉ์ปค๋์ฆ์ด ํ์ํ๋ค.๋ณ๊ฐ์ ํ๋ฅผ ๋๋ ๋ฐฉ๋ฒ vs. ๊ณต๋ ํ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ โ Symmetric Multiprocessing (SMP)๋ชจ๋ CPU๋ค์ด ๋๋ฑํ๊ฒ ์ผ์ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ ํ๋ก์ธ์๊ฐ ๊ฐ์ ์์์ ์ค์ผ์ค๋ง ๊ฒฐ์ โ Asy..
CPU ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆnonpreemptive(๋น์ ์ ํ)CPU๋ฅผ ๊ฐ์ ๋ก ๋นผ์์ง ์๊ณ ์์ง ๋ฐ๋ฉํ ํ๋ก์ธ์ค์๊ฒ CPU๋ฅผ ์ฃผ์์ ๋ ๊ทธ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ๋ค ์ฌ์ฉํ๊ณ ๋ด์ด๋์ ๋๊น์ง ๋นผ์์ง ์๋๋ค. preemptive(์ ์ ํ)CPU๋ฅผ ๊ฐ์ ๋ก ๋นผ์์ํ ํ๋ก์ธ์ค์๊ฒ CPU๋ฅผ ์ฃผ์๋ค๊ฐ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ ์ฃผ์ด์ผ ํ ๋ ๋นผ์๋๋ค. CPU ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ข
๋ฅ1๏ธโฃ FCFS (First-Come First-Served)๋จผ์ ์จ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ ์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ๋จผ์ ์จ ํ๋ก์ธ์ค๊ฐ ์ผ๋ง๋ ๋ฒํฐ๊ณ ์๋๋์ ๋ฐ๋ผ์ ์ฒ๋ฆฌ ์๊ฐ์ด ๊ต์ฅํ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ์ข์ ์ค์ผ์ค๋ง ๋ฐฉ๋ฒ์ ์๋๋ค. โ Convoy Effect (ํธ์ ํจ๊ณผ)๊ธด burst time์ ๊ฐ์ง ํ๋ก์ธ์ค๊ฐ ์งง์ burst time์ ๊ฐ์ง ํ๋ก์ธ์ค ์์์ ..
CPU ์ค์ผ์ค๋งCPU ์ค์ผ์ค๋ง์ด๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์กด์ฌํ ๋ ์ด๋ ํ๋ก์ธ์ค์๊ฒ CPU๋ฅผ ๋จผ์ ์ค ๊ฒ์ธ์ง, ์ผ๋ง๋งํผ์ ์๊ฐ ๋์ CPU๋ฅผ ์ค ๊ฒ์ธ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค. CPU and I/O Bursts in Program Executionํ๋์ ํ๋ก์ธ์ค์ ์ผ์์ ์์๋ถํฐ ์ข
๋ฃ๊น์ง CPU burst์ I/O burst๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ํํ๋ค.burst๋ ํ ์์
์ ์ฐ์์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํ๋ค.CPU burst: CPU์์ ๊ธฐ๊ณ์ด๋ฅผ ์คํํ๋ ๋จ๊ณI/O burst: I/O ์์
๋จ๊ณ CPU-burst Time์ ๋ถํฌ ์ด๋ ์์
์๊ฒ CPU๋ฅผ ์ ์ ํ๋๋ก ํ๋ ๊ฒ์ด ํจ์จ์ /๊ณต์ ํ ๊ฒ์ผ๊น?์์คํ
์์์ ์ด์ง์ ์ธ ์์
๋ค์ด ์์ฌ ์์ง ์๋ค๋ฉด CPU ์ค์ผ์ค๋ง์ด ์ค์ํ์ง ์์ ์ ์๋ค.CPU๋ฅผ ์ค๋ ์ฌ์ฉํ๋ ค๋ job๊ณผ ..
ํ๋ก์ธ์ค ์์ฑ (Process Creation)๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ฅผ ๋ณต์ ์์ฑํ๋ค. ์ด๋ ๋ถ๋ชจ์ ์์ ํ๋ก์ธ์ค๋ ๋ณ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๋๋ค.์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ์ง์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์, ์ด์์ฒด์ ์๊ฒ System Call์ ์์ฒญํ์ฌ ์์ฑํ๋ค. (fork() System Call)ํ๋ก์ธ์ค์ ํธ๋ฆฌ(๊ณ์ธต ๊ตฌ์กฐ) ํ์ฑํ๋ก์ธ์ค๋ ์์์ ํ์๋ก ํจ์ด์์ฒด์ ๋ก๋ถํฐ ๋ฐ๊ณ , ๋ถ๋ชจ์ ๊ณต์ ํ๋ค.๊ฐ ํ๋ก์ธ์ค๋ค๋ผ๋ฆฌ๋ ์์์ ๊ณต์ ํ๋ ๊ฒ์ด ์๋ ์์์ ์ป์ผ๋ ค๊ณ ๊ฒฝ์ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค. ํ์ง๋ง ๋ถ๋ชจ์ ์์ ๊ด๊ณ์ ํ๋ก์ธ์ค ๋ค์ ์ด๋ก์ ์ธ ๊ฒฝ์ฐ๋ก ์ฝ๊ฐ์ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ค.์์์ ๊ณต์ ๋ถ๋ชจ์ ์์์ด ๋ชจ๋ ์์์ ๊ณต์ ํ๋ ๋ชจ๋ธ์ผ๋ถ๋ฅผ ๊ณต์ ํ๋ ๋ชจ๋ธ์ ํ ๊ณต์ ํ์ง ์๋ ๋ชจ๋ธ์ํ(Execution)๋ถ๋ชจ์ ์์์ ๊ณต์กดํ๋ฉฐ ์ํ๋๋ ..
Threadํ๋ก์ธ์ค ์ค์์ CPU ์ํ ๋จ์๋ฅผ ๋ํ๋ธ๋ค. ํ๋ก์ธ์ค๊ฐ ๋ง๋ค์ด์ง๋ฉด ๊ฐ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ณต๊ฐ์ด ์์ฑ๋๊ณ , ์ด์์ฒด์ ๊ฐ ์ด ํ๋ก์ธ์ค ํ๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด์ PCB๊ฐ ์์ฑ๋๋ค.์ด๋ ๋์ผํ ํ๋ก์ธ์ค๊ฐ ๋์์ ํ ๋ ๊ฐ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ฉด ๊ณต๊ฐ ๋ญ๋น๊ฐ ๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Thread๋ฅผ ๋๋ค. ๋์ผํ ํ๋ก๊ทธ๋จ์ ์คํํ๋๋ผ๋ ํ๋์ ํ๋ก์ธ์ค๋ง ์์ฑ๋๋ค. ๊ฐ๊ฐ์ ํ๋ก๊ทธ๋จ์ ์๋ก ๋ค๋ฅธ ๋ถ๋ถ์ code๋ฅผ ์คํํ๊ฒ ๋๋๋ฐ, ํ๋ก์ธ์ค์์ CPU ์ํ๊ณผ ๊ด๋ จ๋ ๋ถ๋ถ๋ง ๋ณ๋๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด Thread๋ฅผ ์ฌ์ฉํ๋ค.๊ทธ ์ธ์ ๋ถ๋ถ๋ค์ ๋จ์ผ ํ๋ก์ธ์ค๋ก ๊ณต์ ํ๋ ๊ตฌ์กฐ๋ก ๋์ํ๋ค. Thread์ ์ฅ์ ํ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ๋์ด๊ฐ๋ ๋ฌธ๋งฅ ๊ตํ์ context๋ฅผ ์ ์ฅํ๊ณ ๋ณต์ํ๋ ๊ณผ์ ์ผ๋ก..
ํ๋ก์ธ์ค์ ๊ฐ๋
“Process is a program in execution.”์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ํ๋ก์ธ์ค๋ผ๊ณ ํ๋ค. ํ๋ก์ธ์ค์ ๋ฌธ๋งฅ(Context)CPU ์ํ ์ํ๋ฅผ ๋ํ๋ด๋ ํ๋์จ์ด ๋ฌธ๋งฅ์ผ๋ก, CPU์์ ๋ฌด์์, ์ด๋ป๊ฒ, ์ด๋๊น์ง ์ํํ๋์ง๋ฅผ ๋ํ๋ธ๋ค.Program Counter๊ฐ์ข
registerํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋์ง๋ฅผ ๋ํ๋ด๋ ๋ฌธ๋งฅ ์์code, data, stackํ๋ก์ธ์ค ๊ด๋ จ ์ปค๋ ์๋ฃ ๊ตฌ์กฐPCBkernel stack ํ๋ก์ธ์ค ์ํ(Process State)ํ๋ก์ธ์ค๋ ์ํ(state)๊ฐ ๋ณ๊ฒฝ๋๋ฉฐ ์ํ๋๋ค. New(์์ฑ)ํ๋ก์ธ์ค๊ฐ ์์ฑ ์ค์ธ ์ํReady(์ค๋น)CPU๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํ (๋ฉ๋ชจ๋ฆฌ ๋ฑ ๋ค๋ฅธ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ๊ณ )ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์ ์๋..
ํ๋ก๊ทธ๋จ์ ์คํ (๋ฉ๋ชจ๋ฆฌ Load)ํ๋ก๊ทธ๋จ์ ์คํ ๋จ๊ณํ๋ก๊ทธ๋จ์ File System์ ์คํ ํ์ผ ํํ๋ก ์ ์ฅ๋์ด ์๋ค.์คํ ํ์ผ์ ์คํ์ํค๋ฉด ์คํ ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ํ๋ก์ธ์ค๊ฐ ๋๋ค. ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ(Virtual Memory)์คํ ํ์ผ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๊ธฐ ์ ์ ํ ๋จ๊ณ๋ฅผ ๋ ๊ฑฐ์น๋ค.๊ฐ๊ฐ์ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋๋ ๊ทธ ํ๋ก๊ทธ๋จ์ ๋
์์ ์ธ ์ฃผ์ ๊ณต๊ฐ(Adress Space)์ด ๋ง๋ค์ด์ง๋๋ฐ, ์ด๋ฅผ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ผ๊ณ ํ๋ค.๋น์ฅ ํ์ํ ํ๋ก๊ทธ๋จ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๊ณ , ๊ทธ๋ ์ง ์์ ๋๋จธ์ง๋ Swap Area์ ๋ฐฐ์น๋๋ค. ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ์ ๋ด์ฉCode์คํ ํ์ผ์ ์๋ ์ฝ๋์ค์ ๋ก CPU์์ ์คํํ ๊ธฐ๊ณ์ด๋ค์ด ์์นํด ์๋ ๊ณณData๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ๊ณต๊ฐ์ ์ญ ๋ณ์๋ ํ๋ก๊ทธ๋จ์ด ์์๋๊ณ ์ข
๋ฃํ ๋๊น์ง ๋จ์ ์๋ ๋ฐ์ดํฐ๊ฐ..
๊ทธ๋ํ(Graph)๊ทธ๋ํ๋ ๋
ธ๋์ ๊ฐ์ ์ ์งํฉ์ผ๋ก ์ด๋ฃจ์ด์ง ์๋ฃ๊ตฌ์กฐ์ด๋ค.๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ผ๋ก ์ฐ๊ฒฐํ์ฌ ํํํ๋ ํํ๋ก, ๊ฐ ์ ์ ๊ฐ์๋ ๋ถ๋ชจ-์์ ๊ด๊ณ๊ฐ ์๋ค.๋๋น ์ฐ์ ํ์(BFS), ๊น์ด ์ฐ์ ํ์(DFS) ์๊ณ ๋ฆฌ์ฆ์์ ๊ทธ๋ํ๋ฅผ ์ํํ๋ ๋ฐฉ์์์ ์ฌ์ฉํ๋ค. ๊ทธ๋ํ์์ ์ฌ์ฉํ๋ ์ฉ์ด๋
ธ๋/์ ์ (Vertex): ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ธฐ๋ณธ ๊ฐ์ฒด๊ฐ์ (Edge): ์ ์ ์ ์ฐ๊ฒฐํ๋ ์ ์ธ์ ์ ์ : ๊ฐ์ ์ ์ํด ์ง์ ์ฐ๊ฒฐ๋ ๋
ธ๋๋ก, ํ ์ ์ ์์ ๊ฐ์ ์ ํ ๋ฒ์ ๊ฐ ์ ์๋ค๋ฉด ํด๋น ์ ์ ๋ค์ ์ธ์ ํ๋ค๊ณ ํ ์ ์๋ค.๋จ์ ๊ฒฝ๋ก: ๊ฒฝ๋ก ์ค์์ ๋ฐ๋ณต๋๋ ์ ์ ์ด ์๋ ๊ฒฝ์ฐ ๊ทธ๋ํ ์ข
๋ฅ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ๋ชจ๋ ๊ฐ์ ์ด ์๋ฐฉํฅ์ธ ๊ทธ๋ํ๋ก, ๋ฐฉํฅ์ด ์๊ธฐ ๋๋ฌธ์ ์์ชฝ์ ๋ฐฉํฅ ๋ชจ๋ ์ด๋์ด ๊ฐ๋ฅํ๋ค.๋ฐฉํฅ ๊ทธ๋ํ๊ฐ์ ๋ค์ ๋ฐฉํฅ์ด ์กด์ฌํ๋ ๊ทธ๋ํ๋ก, ..
์์กด์ฑ์ด ์๊ธฐ๋ ๊ฒฝ์ฐํ ํด๋์ค์์ ๋ค๋ฅธ ํด๋์ค์ ์ ๊ทผํ ๋ ์๋์ ๊ฐ์ ์ฝ๋๋ก ์ ๊ทผ์ ํฉ๋๋ค. ์ด๋ ํด๋์คB๋ ํด๋์คA์ ์์กดํ๊ฒ ๋ฉ๋๋ค.์์กด์ฑ์ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด ์ฌ์ด์ ์์กด ๊ด๊ณ๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.class A { var name: String = "A"}class B { // ํด๋์คB๋ ํด๋์คA์ ์์กดํ๋ค. (์์กด์ฑ์ด ์๊ธด๋ค.) var a: A = A() func printName() { print(a.name) }}let b: B = B()b.printName() // "A" ์์กด์ฑ ์ฃผ์
์ด๋ ๊ฒ ์์กด์ฑ์ด ์๊ธฐ๋ ์ฝ๋๋ค์ ์ข์ง ์์ต๋๋ค. ์์กดํ๊ณ ์๋ ํด๋์ค ๋ด์ ์ฝ๋๊ฐ ๋ฐ๋๋ฉด ํด๋น ํด๋์ค๋ฅผ ์์กดํ๊ณ ์๋ ๋ค๋ฅธ ํด๋์ค๋ค๋ ์์ ํด ์ฃผ์ด์ผ ํ๊ธฐ ..