[OS] ์์คํ ์ฝ (system call)
๐ system call์ด๋?
OS๋ ํฌ๊ฒ ์ปค๋๋ชจ๋์ ์ฌ์ฉ์๋ชจ๋๋ก ๋๋์ด ์ง๋๋ค.
- ์ปค๋๋ชจ๋ : ๋ชจ๋ ์์คํ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ๊ฐ๋ฅ. ๋ชจ๋ CPU๋ช ๋ น ์คํ ๊ฐ๋ฅ
- ์ฌ์ฉ์๋ชจ๋ : ์ฌ์ฉ์ ์ ํ๋ฆฌ์ผ์ด์ ์คํ. ํ๋์จ์ด ์ง์ ์ ๊ทผ ๋ถ๊ฐ. System call ํธ์ถ์ ์ผ์์ ์ผ๋ก ์ปค๋๋ชจ๋๋ก ์ ํ.
- ์ปค๋๋ชจ๋์์ ์ฌ์ฉ๊ฐ๋ฅ ํ์ง๋ง ์ ์ ๋ชจ๋์์๋ ์ฌ์ฉํ์ง ๋ชปํ๋ ๋ช ๋ น์ด๋ค์ด ์๋๋ฐ ์ด๋ฅผ Privileged Instruction์ด๋ผ๊ณ ํ๋ค.
์ปค๋์์ญ์ ๊ธฐ๋ฅ์ ์ฌ์ฉ์ ๋ชจ๋๊ฐ ์ ๊ทผํ๊ฒ ๋์์ฃผ๋ ๊ธฐ๋ฅ์ System call์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค..
๐ System call์ ์ฌ์ฉํ๋ ์ด์ ?
- ๊ฐ์ฅ ํฐ ์ด์ ๋ ์ ์ ์ ํ๋ฆฌ์ผ์ด์ (ex. ์ฐ๋ฆฌ๊ฐ ํํ ๊ฐ๋ฐํ์ฌ ์คํํ๋ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ )์ด ์ด์์ฒด์ ์ ์น๋ช ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์์ /์ญ์ ํ๋ ๊ถํ์ ๋ง๊ธฐ ์ํด์ ์ ๋๋ค. ์ง์ ์ ์ธ ํ๋์จ์ด ์์ฒญ์ด๋ ๊ธฐํ ์์คํ ์์ฒญ์ OS๊ฐ ์ ๊ณตํ๋ System call์ ํตํด ํธ์ถํ๋๋ก ์ ๊ณตํด์ค๋๋ค.
- ๋ง์ฝ ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด System call์ ํธ์ถํ์ฌ ์ฌ์ฉํ๋ฉด, ํด๋น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปค๋๋ชจ๋๋ก ์ ์ ์ ํ๋๋ ์์ ์ ๊ฑฐ์น๊ฒ ๋ฉ๋๋ค.
- ์ผ๋ฐ ์ ์ ๋ชจ๋์์ ์ปดํจํฐ๊ฐ ๋์์ค์ด๋ค๊ฐ interrupt๊ฐ ๋ฐ์ํ๋ ์๊ฐ CPU๋ ์ปค๋๋ชจ๋๋ก ๋ฐ๊พธ๊ณ ์ด์์ฒด์ ๋ ๋ฐ์ํ interrupt๋ฅผ ๊ฐ์ง๊ณ ์ผ์ ํ๋ค.
- ๋ฐ๋ผ์, interrupt๊ฐ ๋ฐ์ํ๋ฉด ์ ์ ๋ชจ๋์์ ์ปค๋๋ชจ๋๋ก ๋ณํ์ด ์ผ์ด๋๋ค๊ณ ํ ์ ์๋ค. ์ ์ ๋ชจ๋์์ ์ปค๋๋ชจ๋๋ก ๋ณํ๊ฒ ๋ง๋๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ํ๊ฐ์ง ์๋๋ฐ, ๊ทธ๊ฒ์ ๋ฐ๋ก **์์คํ ์ฝ(system call)**์ด๋ค.
- ์์คํ ์ฝ์ด๋ "์ด์์ฒด์ ๊ฐ ์ ๊ณตํ๋ ์๋น์ค๋ฅผ ๋ถ๋ฅด๊ธฐ ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค" ๋ผ๊ณ ์ ์ํ ์ ์๋ค.
- ๋ณดํต ์์คํ ์ฝ์ API (Application Programming Interface)๋ฅผ ํตํ์ฌ ํธ์ถ์ด ๋๋ค. ์ฆ, ๋ง์ฝ ์ ์ ๊ฐ ์คํ์ค์ธ ์ ์ ํ๋ก์ธ์ค๊ฐ ์ปค๋๋ชจ๋์์๋ง ์ํ ๊ฐ๋ฅํ ์๋น์ค๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด, ์ปค๋ ๋ชจ๋๋ฅผ ๊ด๋ฆฌ๊ฐ๋ ํ๊ณ ์๋ ์ด์์ฒด์ ์๊ฒ ๋ถํํด์ผ ํ๋๋ฐ ์ด์์ฒด์ ์๊ฒ ๋ถํํ ๋ ํ์ํ ์ธํฐํ์ด์ค๊ฐ ๋ฐ๋ก '์์คํ ์ฝ' ์ด๋ผ๋ ๊ฒ์ด๋ค.
๐ System call์ ๋ํ์ ์ธ ํจ์ ์์๋ณด๊ธฐ
์ฐ์ file descriptor๊ฐ ๋ฌด์์ธ์ง ์์์ผํ๋ค.. ?
์ฌ์ฉ์๊ฐ ํ์ผ์ ๊ด๋ฆฌํ ๋ ์๋ก ๋ค๋ฅธ ํ์ผ์ด๋ผ๋ ๊ฒ์ ์ง์ ํ๊ธฐ ์ํด์ ํ์ผ ์ด๋ฆ์ ์ฌ์ฉํ๊ณค ํ์ฃ . OS๋ ์๋ก ๋ค๋ฅธ ํ์ผ์ด๋ผ๋ ๊ฒ์ inode number์ด๋ผ๋ ๊ฒ์ ํตํด์ ๋ด๋ถ์ ์ผ๋ก ๊ตฌ๋ถํ๊ณ ์์ต๋๋ค.์ค์ฌ์ id๋ผ๊ณ ํ๊ณ Id๋ ์ซ์๊ฐ ๋ฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ปดํจํฐ์ ์๋ ์ด๋ค ํ์ผ์ ์ฝ๊ณ ์ถ๋ค๋ฉด, OS๋ ๋์คํฌ์์ ํด๋นํ๋ ํ์ผ์ ์ฐพ๊ณ , ํ์ผ์ ๋ํ ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ(dram)๋ก ๋ณด๋ด๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ์์์ ํ์ผ์ ์๋์ฒ๋ผ ๊ฐ์ฒดํ์ํต๋๋ค. ์ด๋ ๊ฐ์ฒด์ ํฌ์ธํฐ, ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ๊ฐ๋ฅดํค๋ ๊ฒ file descriptor๋ผ๊ณ ํฉ๋๋ค.
๐ open()
openํจ์๋ ํ์ผ์ ์ฝ๊ฑฐ๋ ์ฐ๊ธฐ ์ํด ํ์ผ์ open ํ๋ ํจ์์ ๋๋ค. ๋๋ ํ์ผ์ด ์๋ค๋ฉด ๋น ํ์ผ์ ์์ฑํ ์๋ ์์ต๋๋ค. ํจ์๊ฐ ์ฑ๊ณต์ ์ผ๋ก ํธ์ถ์ด ๋๋ค๋ฉด file descriptor๊ฐ์ ๋ฐํํ๊ฒ ๋ฉ๋๋ค. ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ฉด -1์ ๋ฐํํ๊ฒ ๋ฉ๋๋ค. ์ฒซ ๋ฒ์งธ ์ธ์๋ก๋ ํ์ผ์ ์ด๋ฆ ๋๋ ๊ฒฝ๋ก ๋ ๋ฒ์งธ ์ธ์๋ก๋ ํ์ผ์ ์ด๋ ํ ๋ฐฉ์์ผ๋ก open์ ํ ๊ฒ ์ธ์ง ์ง์ ํ๊ฒ ๋ฉ๋๋ค. ์๋์ ์ฌ๋ฌ ๊ฐ์ ์ธ์ ์ค ์ด๋ค ๊ฐ์ ๋ฃ๋๋์ ๋ฐ๋ผ open ๋ฐฉ์์ด ๋ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค.
๐ close()
ํ์ผ์ open ํ์ผ๋ฉด ์์ ์ ์ํํ ๋ค์ close๋ฅผ ํด์ฃผ์ด์ผ ํฉ๋๋ค. closeํจ์๋ ์๋์ ๊ฐ์ต๋๋ค.
์ฑ๊ณตํ๋ฉด 0์ ๋ฐํํ๊ณ ์คํจํ๋ฉด -1์ ๋ฐํํฉ๋๋ค. ์ฌ๊ธฐ์ ๋ค์ ์ค๋ช ์ ์ถ๊ฐํ์๋ฉด Open ํ ํ์ผ๋ค์ ๊ตฌ๋ถํ๊ธฐ ์ํ ๊ฒ์ด ๋ฐ๋ก file desciptor์ ๋๋ค. ์คํํ์ง ์์ ํ์ผ์ ๋ํด์๋ file desciptor๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค. ์คํ ํ๋ ์คํํ์ง ์๋
ํ์ผ์ ๊ตฌ๋ถํ๊ธฐ ์ํด id๋ฅผ ์ฌ์ฉํ๊ณ file descriptor์ ์คํํ ํ์ผ๋ค์ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
๐ read()
์ด๋ ค ์๋ ํด๋น ํ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ํ ํฌ๊ธฐ๋งํผ ์ฝ๊ณ buffer์ ์ ์ฅํฉ๋๋ค.
์ฒซ ๋ฒ์งธ ์ธ์ : file descriptor
๋ ๋ฒ์งธ ์ธ์ : ํ์ผ์์ ์ฝ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
์ธ ๋ฒ์งธ ์ธ์ : ํ์ผ์์ ์ฝ์ ๋ฐ์ดํฐ์ ํฌ๊ธฐ
๐ write()
ํ์ผ์ ์คํ ํ ๋ค ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ค๋ฉด ์์คํ ์ฝ writeํจ์๊ฐ ํ์ํฉ๋๋ค.
์ฒซ ๋ฒ์งธ ์ธ์ : file descriptor
๋ ๋ฒ์งธ ์ธ์ : ํ์ผ์ ์ธ ๋ฐ์ดํฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ํ ํฌ์ธํฐ
์ธ ๋ฒ์งธ ์ธ์ : ํ์ผ์ ์ธ ๋ฐ์ดํฐ์ ํฌ๊ธฐ
๐ EX)
int argc : ๋ฉ์ธ ํจ์์ ์ ๋ฌ๋๋ ์ ๋ณด์ ๊ฐฏ์๋ฅผ ์๋ฏธํ๋ค
*char argv[] : ๋ฉ์ธํจ์์ ์ ๋ฌ๋๋ ์ค์ง์ ์ ๋ณด์ด๊ณ , ๋ฌธ์์ด์ ๋ฐฐ์ด์ ์๋ฏธํ๋ค
์ฒซ๋ฒ์งธ ๋ฌธ์์ด์ ํญ์ ํ๋ก๊ทธ๋จ์ ์คํ๊ฒฝ๋ก๋ก ! ๊ณ ์ ๋์ด ์๋ค
- ์ฒ์์ ./printfile์ ์ปดํ์ผํ๊ณ ์คํํ์ ๋ arument๊ฐ ์๊ธฐ ๋๋ฌธ์ usage : ./printfile [file name] , [start offset] ์ ์ถ๋ ฅํฉ๋๋ค.
- hello.c ์ 0 ์ด๋ผ๋ ๋ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ ฅํด์ฃผ์๋๋ start offset์ 0์ด ๋๊ณ (atoi ๋ ascii to integer๋ก string์ integer๋ก ๋ณํ์์ผ์ค๋ค.) ํ์ผ์ ๋๊น์ง ์ถ๋ ฅํด์ฃผ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ฆ ์ฒ์๋ถํฐ ๋๊น์ง ์ถ๋ ฅํด์ค๋ค.
- hello.c ์ 10 ์ด๋ผ๋ ๋ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ ฅํด์ฃผ์๋๋ start offset์ 10์ด ๋์๊ณ #include <๊น์ง ์ถ๋ ฅ์ด ๋์ง ์๊ณ ๊ทธ ์ดํ ๋ถํฐ ์ถ๋ ฅ๋ ๋ชจ์ต์ ๋ณผ ์ ์์ต๋๋ค.
- ./ ๋ค์ ์คํํ๋ ค๋ ํ๋ก๊ทธ๋จ์ ์ด๋ฆ์ ๋ถ์ด๋ฉด ํด๋น ํ๋ก๊ทธ๋จ์ด ์คํ๋ฉ๋๋ค. ์ด๋ ํ์ฌ ๋๋ ํ ๋ฆฌ์์ ์คํํ๋ ค๋ ํ๋ก๊ทธ๋จ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๋ ๊ฒ์ ๋๋ค.
- ์๋ฅผ ๋ค์ด, ํ์ฌ ๋๋ ํ ๋ฆฌ์ my_program์ด๋ผ๋ ์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. ๊ทธ๋ ๋ค๋ฉด ./my_program ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ด ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์์ต๋๋ค. ์ด๋ ./๋ ํ์ฌ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ํ๋ด๋ฉฐ, my_program์ ์คํํ ํ๋ก๊ทธ๋จ์ ์ด๋ฆ์ ๋๋ค.
- ๋ฐ๋ผ์ ./ ๋ค์ ํ๋ก๊ทธ๋จ ์ด๋ฆ์ ๋ถ์ด๋ฉด ํด๋น ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉฐ, ์ด๋ ํ์ฌ ๋๋ ํ ๋ฆฌ์์ ์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ ๊ฒฝ๋ก๋ฅผ ๋ช ์ํ๋ ๊ฒ์ ๋๋ค.
์ฐธ์กฐ ๋ฌธ์