๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ค. ์ ํํ๊ฒ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ณต์ ์์ฑ์ด๋ค. ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๋๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค.
-> ๋ณต์ ๋ผ๋ ๊ฒ์ ํ๋ก์ธ์ค์ ๋ฌธ๋งฅ์ ๋ชจ๋ ๋ณต์ ํ๋ ๊ฒ์ด๋ค
-> ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์ฃผ์๊ณต๊ฐ์ธ ์ฝ๋, ๋ฐ์ดํฐ, ์คํ์ ๋ชจ๋ ๋ณต์ฌํด์ ์์ ํ๋ก์ธ์ค๋ฅผ ํ๋ ๋ง๋ค๊ณ ๋ถ๋ชจ ํ๋ก์ธ์ค์ CPU๋ฌธ๋งฅ ์ฆ, ๋ถ๋ชจ ํ๋ก์ธ์ค์์ instruction์ ์ด๋๊น์ง ์คํํ๋๊ฐ ๊ทธ๊ฑธ ๋ํ๋ด๋ ๋ ์ง์คํฐ์ธ ํ๋ก๊ทธ๋จ์นด์ดํฐ๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌํ๋ค.
์ผ๋จ ํ๋ก์ธ์ค๊ฐ ํ๋ ๋ง๋ค์ด์ง๋ฉด ๊ทธ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์ ์์์ ๊ณต์ ํ๊ธฐ๋ณด๋ค๋ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์์ ์ฐจ์งํ๋ ค๊ณ ๊ฒฝ์์ ํ๋ค -> ์์น์ ์ผ๋ก๋ ์ด๊ฒ ๋ง๋ค
๊ณต์ ๋ผ๋ ์ด์ผ๊ธฐ๊ฐ ๋์จ ์ด์
-> ์์ ํ๋ก์ธ์ค๋ ๋ถ๋ชจ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ์ ์ฝ๋, ๋ฐ์ดํฐ, ์คํ์ ๊ทธ๋๋ก ์นดํผํ๋ค. ๊ฒฐ๊ตญ์๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ๊ฒ์ด ๋๊ฐ ์ฌ๋ผ๊ฐ๋ค
-> ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น
-> ์๋ ๋ถ๋ชจํ๊ณ ์์์ด ๋ด์ฉ์ด ๊ฐ๋ค๋ฉด ๋น์ฅ ์นดํผ๋ฅผ ํ ํ์๊ฐ ์๋ค.
-> ๋ฆฌ๋
์ค๋ ์ผ๋ถ ๋ชจ๋ธ์์๋ ๊ณต์ ํ ์ ์๋๊ฒ์ ์ผ๋จ ๊ณต์ ํ๋ค.
ํ๋ก๊ทธ๋จ ์นด์ดํฐ๋ง ํ๋ ์นดํผํด์ ๋๊ฐ์ ์์น๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค.
-> ๊ทธ๋ฐ ์ํ๋ก ์คํ์ ํ๋ค๊ฐ ๋ถ๋ชจ์ ์์์ ๋ด์ฉ์ด ๋ค๋ฅผ ์ ์๋ค. (๋ณ๊ฐ์ ํ๋ก์ธ์ค์ด๊ธฐ ๋๋ฌธ์)
-> ๋ฐ์ดํฐ์ ์๋ ๊ฐ์ด ๋ฌ๋ผ ์ง ์ ์๊ณ CPU๋ฅผ ์ก๊ณ instruction์ ์ํํ๊ธฐ ๋๋ฌธ์ ํจ์ ํธ์ถ์ด ๋ฌ๋ผ ์ง ์ ์์ผ๋ฉด ์คํ์ ์์ด๋ ๊ฒ๋ค์ด ๋ฌ๋ผ ์ง ์ ์๋ค.
-> ๊ฒฐ๊ตญ์๋ ๊ฐ์์ ๊ธธ์ ๊ฑท๊ฒ ๋๋ค
-> ๊ทธ์ ์์ผ ๋ถ๋ชจ์ ๊ณต์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์นดํผํด์ ์์์ด ๊ฐ๊ฒ ๋๋ค.
-> ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ copy-on-write(COW)๊ธฐ๋ฒ์ด๋ผ๊ณ ํ๋ค.
-> Write๊ฐ ๋ฐ์ํ์ ๋ ์นดํผ๋ฅผ ํ๊ฒ ๋ค๋ ์๋ฏธ
Wirte๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ ์๋ ๋ด์ฉ์ด ๋ฐ๊ผ๋ค๋ ์๋ฏธ์ด๋ฉฐ ๋ด์ฉ์ด ๋ฐ๋ ๋ ๊ทธ๊ฒ์ ์นดํผํด์ ์๋ก์ด ๊ฒ์ ๋ง๋ค๊ณ ๊ทธ ์ด์ ๊น์ง๋ ๊ทธ๋ฅ ๋ถ๋ชจ๊บผ๋ฅผ ๊ทธ๋๋ก ๊ณต์ ํ๊ณ ์๋ ๊ฒ์ด๋ค.
์นดํผ๋ฅผ ํ๋ค๊ณ ํด์ ํต์งธ๋ก ์นดํผํ๋ ๊ฒ์ด ์๋๋ผ ์ฝ๋, ๋ฐ์ดํฐ, ์คํ์ด ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ์ ์๊ฒ ์ชผ๊ฐ์ ธ์ ํ์ํ ๋ถ๋ถ๋ง ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ค. ๊ทธ๋์ ์๊ฒ ์ชผ๊ฐ์ง ๋ถ๋ถ์์ write๊ฐ ๋ฐ์ํ๋ฉด ๊ทธ ๋ถ๋ถ๋ง ์นดํผํด์ ๋ถ๋ชจ๊ฑฐ์ ๊ณต์ ํ์ง ์๊ฒ ๊ด๋ฆฌํ๋ค.
๊ณต์ ๋ฅผ ํ ์ ์์ผ๋ฉด ํ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ฉฐ ์์น์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด๋ค.
๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ฅผ ๋ณต์ ์์ฑํ๋๋ฐ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์ง์ ํ๋ ๊ฒ์ด ์๋๋ผ ์ด์์ฒด์ ํํ
์์ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค์ด ๋ฌ๋ผ๊ณ ์์ฒญ์ ํ๋ค
-> ์์คํ
์ฝ ( fork() )
์ผ๋จ ๋ถ๋ชจ ํ๋ก์ธ์ค๋ฅผ ์นดํผํ๊ธฐ ๋๋ฌธ์ ์ปดํจํฐ ์์ ์๋ ๋ชจ๋ ํ๋ก์ธ์ค๋ ๊ฐ์ ํ๋ก์ธ์ค์ด๋ค.
-> ๋ค์ํ ํ๋ก๊ทธ๋จ์ด ๋์๊ฐ๊ณ ์๋ฏ์ด ๋ณต์ ์์ฑ ํ ํ์ํ ๊ฒฝ์ฐ ์๋ก์ด ํ๋ก๊ทธ๋จ์ ๋ฎ์ด์์ธ ์ ์๋ค (exec())
fork๋ฅผ ์ฌ์ฉํด์ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ํ๋ก์ธ์ค๋ฅผ ๋ง๋๋ ์ฝ๋๋ฅผ ๋ณด์!
๋ถ๋ชจ ํ๋ก์ธ์ค๋ fork()์ดํ ์์ฐจ์ ์ผ๋ก ์ฝ๋ ์คํํ์ง๋ง
-> ์์ฑ๋ ์์ ํ๋ก์ธ์ค๋ fork() ์ดํ๋ถํฐ ์ฝ๋๋ฅผ ์คํํ๋ค.
-> fork๋ฅผ ํ ๋ ํ๋ก๊ทธ๋จ ์นด์ดํฐ๋ fork๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ ๊ฒ์ด๋ค.
-> ๋ณต์ ์์ฑ์ด ๋ ํ๋ก์ธ์ค์ ํ๋ก๊ทธ๋จ ์นด์ดํฐ ๋ํ fork๋ฅผ ๊ฐ๋ฆฌ์ผฐ๊ธฐ ๋๋ฌธ์ fork์ดํ๊ฐ ์งํ๋๋ ๊ฒ์ด๋ค!
fork๋ฅผ ํ์ ๋์ ๋ฌธ์ ์
-> ๋ณต์ ๋ณธ์ด ์๋ณธ์ด๋ผ๊ณ ์ฃผ์ฅํ๋ ๊ฒ์ด ๋ฌธ์ ์ด๋ค.
-> ๋ชจ๋๋ค ๋๊ฐ์ ์ ์ดํ๋ฆ์ ๋ฐ๋ผ๊ฐ์ผ ํ ๊ฒ๊ฐ์ ๋ฌธ์ ์
-> ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ง๊ธฐ ์ํด์ fork์ ์ํด ์ด์์ฒด์ ๊ฐ ๋ณต์ ๋ฅผ ํ๊ฒ ๋๋ฉด ์์ํ๊ณ ๋ถ๋ชจํ๊ณ ๊ตฌ๋ณ์ ํด์ค๋ค. -> fork์ ๋ฆฌํด๊ฐ์ด ๋ค๋ฅด๋ค!
-> ๋ถ๋ชจ์ ํ๋ก์ธ์ค์ ๋ฆฌํด๊ฐ์ ์์์ด๊ณ ์์์ ๋ฆฌํด๊ฐ์ 0์ด๋ค.
-> ์์๊ณผ ๋ถ๋ชจ์ ๊ตฌ๋ณ์ด ๊ฐ๋ฅํจ!
fork์ ๋ฆฌํด๊ฐ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ์ ์์์ ๊ตฌ๋ณ์ด ๊ฐ๋ฅํ๋ฉฐ ๋ค๋ฅธ ์ผ์ ์ํฌ ์ ์๋ค.
์ด๋ค ํ๋ก๊ทธ๋จ์ ์์ ํ ์๋ก์ด ํ๋ก์ธ์ค๋ก ํ์ด๋๊ฒ ํ๋ ์ญํ ์ ํ๋ค.
execlp๋ ํจ์์ด๋ฉฐ ์ด ํจ์๊ฐ ๊ฒฐ๊ตญ์ exec()์์คํ
์ฝ์ ํ๊ฒ ๋๋ค.
-> ์ฃผ์ด์ง ๊ฒ์ผ๋ก ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค์ด์ค๋ค.
-> ์์๋ถ๋ถ๋ถํฐ ์งํ๋จ!
ํ ๋ฒ execํ๋ฉด ๋๋์ ๊ฐ ์ ์๋ค.
ํ๋ก์ธ์ค๋ผ๋ฆฌ ์ง์ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ผ ๋ฐฉ๋ฒ์ ์๋ค.
-> ์ค๊ฐ์ ์ปค๋์ด ํ์ํจ!
shared memory๋ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋๊ฒ ์๋๋ผ ์ปค๋ํํ shared memory๋ฅผ ์ฌ์ฉํ๋ค๋ ์์คํ ์ฝ์ ํด๋๊ณ shared memory๋ฅผ mapping ํด๋์์ผ ํ๋ค.
Message Passing์ ๋๊ฐ์ง๋ก ๋๋๋ฉฐ(direct, indirect) ๋๊ฐ ๋ชจ๋ ์ปค๋์ ํตํด์ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด์ผ ํ๋ค.
indirect๋ ์ปค๋์ ์๋ ๋ฉ์ผ๋ฐ์ค์ ๋ฉ์ธ์ง๋ฅผ ๋ฃ๊ฒ ๋ค๋ ์๋ฏธ
[์ถ์ฒ] ๋ฐํจ๊ฒฝ ๊ต์๋ ๊ฐ์