๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ComputerScience ๐Ÿ“š/์šด์˜์ฒด์ œ

[OS] ์‹œ์Šคํ…œ ์ฝœ(System Calls)

by dkswnkk 2022. 2. 5.

ํ•™์Šตํ•  ๊ต์žฌ

 

์‹œ์Šคํ…œ ์ฝœ

์‹œ์Šคํ…œ ์ฝœ์€ ์šด์˜์ฒด์ œ์— ์˜ํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์ €์ˆ˜์ค€ ์ž‘์—…(์˜ˆ๋ฅผ ๋“ค๋ฉด ํ•˜๋“œ์›จ์–ด๋ฅผ ์ง์ ‘ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…)์€ ์–ด์…ˆ๋ธ”๋ฆฌ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑ๋˜์–ด์•ผ ํ•˜๋”๋ผ๋„ ์ด๋Ÿฌํ•œ ํ˜ธ์ถœ์€ ์ผ๋ฐ˜์ ์œผ๋กœ C์™€ C++ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํ•จ์ˆ˜ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

 

(1) ์˜ˆ์ œ

์šด์˜์ฒด์ œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์‹œ์Šคํ…œ ์ฝœ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š”์ง€์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ธฐ ์ „์— ์‹œ์Šคํ…œ ์ฝœ์ด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์˜ˆ๋ฅผ ํ•œ๋ฒˆ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•œ ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ ๋‹ค๋ฅธ ํŒŒ์ผ๋กœ ๋ณต์‚ฌํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”๋กœ ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์ž…๋ ฅ์€ ๋‘ ๊ฐœ์˜ ํŒŒ์ผ, ์ฆ‰ ์ž…๋ ฅ ํŒŒ์ผ๊ณผ ์ถœ๋ ฅ ํŒŒ์ผ์˜ ์ด๋ฆ„์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ด๋ฆ„๋“ค์€ ์šด์˜์ฒด์ œ ์„ค๊ณ„์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ๋ช…๋ น์˜ ์ผ๋ถ€๋กœ ๋‘ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.(์˜ˆ: UNIX cp ๋ช…๋ น)

cp in.txt out.txt

์ด ๋ช…๋ น์€ ์ž…๋ ฅ ํŒŒ์ผ in.txt๋ฅผ ์ถœ๋ ฅ ํŒŒ์ผ out.txt์— ๋ณต์‚ฌํ•œ๋‹ค์ž…๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด๋ฆ„์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€ํ™”ํ˜• ์‹œ์Šคํ…œ์—์„œ ์ด ๋ฐฉ๋ฒ•์€ ์ผ๋ จ์˜ ์‹œ์Šคํ…œ ์ฝœ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ํ™”๋ฉด์— ํ”„๋กฌํ”„ํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•œ ๋‹ค์Œ ํ‚ค๋ณด๋“œ์—์„œ ๋‘ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๋ฌธ์ž๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ๋งˆ์šฐ์Šค ๊ธฐ๋ฐ˜ ๋ฐ ์•„์ด์ฝ˜ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์—์„œ ํŒŒ์ผ ์ด๋ฆ„ ๋ฉ”๋‰ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ฐฝ์— ํ‘œ์‹œ๋˜๋Š”๋ฐ ์‚ฌ์šฉ์ž๋Š” ๋งˆ์šฐ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์†Œ์Šค ์ด๋ฆ„์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋Œ€์ƒ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ฐฝ์„ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ผ๋ จ์˜ ์ž‘์—…์„ ์œ„ํ•ด์„œ๋Š” ๋งŽ์€ I/O ์‹œ์Šคํ…œ ์ฝœ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 ์ผ๋‹จ ๋‘ ๊ฐœ์˜ ํŒŒ์ผ ์ด๋ฆ„์ด ์–ป์–ด์ง€๋ฉด, ํ”„๋กœ๊ทธ๋žจ์€ ๋ฐ˜๋“œ์‹œ ์ž…๋ ฅ ํŒŒ์ผ์„ ์˜คํ”ˆํ•˜๊ณ  ์ถœ๋ ฅ ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ ํ›„ ์˜คํ”ˆํ•ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์ด๋Ÿฌํ•œ ์—ฐ์‚ฐ์€ ๋˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ์ฝœ์„ ํ•„์š”๋กœ ํ•˜๋ฉฐ, ๊ฐ ์‹œ์Šคํ…œ ์ฝœ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ๊ทธ๋žจ์ด ์ž…๋ ฅ ํŒŒ์ผ์„ ์˜คํ”ˆํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ๊ทธ ์ด๋ฆ„์„ ๊ฐ–๋Š” ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ทธ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด ๊ธˆ์ง€๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ (๋˜ ๋‹ค๋ฅธ ์ผ๋ จ์˜ ์‹œ์Šคํ…œ ์ฝœ), ๊ทธ๋ฆฌ๊ณ  ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ(๋˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ์ฝœ)ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ž…๋ ฅ ํŒŒ์ผ์ด ์กด์žฌํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ถœ๋ ฅ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ถœ๋ ฅ ํŒŒ์ผ์ด ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์€ ํ”„๋กœ๊ทธ๋žจ์„ ์ค‘๋‹จ(abort)(ํ•˜๋‚˜์˜ ์‹œ์Šค์—  ์ฝœ)ํ•˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜, ๋˜๋Š” ๊ธฐ์กด์˜ ํŒŒ์ผ์„ ์‚ญ์ œ(๋‹ค๋ฅธ ์‹œ์Šคํ…œ ์ฝœ) ํ•œ ํ›„, ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ™”ํ˜• ์‹œ์Šคํ…œ์—์„œ ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ๊ธฐ์กด์˜ ํŒŒ์ผ์„ ๋Œ€์ฒดํ•  ๊ฒƒ์ธ์ง€, ํ˜น์€ ํ”„๋กœ๊ทธ๋žจ์„ ์ค‘๋‹จํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฌผ์–ด๋ณด๋Š”(ํ”„๋กฌํ”„ํŠธ ๋ฉ”์‹œ์ง€์˜ ์ถœ๋ ฅ๊ณผ ํ„ฐ๋ฏธ๋„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ์ฝ๊ธฐ ์œ„ํ•œ ์ผ๋ จ์˜ ์‹œ์Šคํ…œ ์ฝœ)๊ฒƒ์ž…๋‹ˆ๋‹ค.

 ์ด์ œ ๋‘ ๊ฐœ์˜ ํŒŒ์ผ์ด ์ค€๋น„๋˜๋ฉด, ์ž…๋ ฅ ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ์ฝ์–ด์„œ(ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ ์ฝœ), ์ถœ๋ ฅ ํŒŒ์ผ์— ๊ธฐ๋ก(๋˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ์ฝœ) ํ•˜๋Š” ๋ฃจํ”„์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๋Š” ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜ค๋ฅ˜ ์ƒํ™ฉ์˜ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ์—์„œ, ํ”„๋กœ๊ทธ๋žจ์ด ํŒŒ์ผ์˜ ๋์— ๋„๋‹ฌํ•˜๊ฑฐ๋‚˜ ์ฝ๊ธฐ ์ค‘์— ํ•˜๋“œ์›จ์–ด ์˜ค๋ฅ˜(์ด๋ฅผํ…Œ๋ฉด ํŒจ๋ฆฌํ‹ฐ ์˜ค๋ฅ˜)๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์“ฐ๊ธฐ ์—ฐ์‚ฐ ์‹œ ์ถœ๋ ฅ ์žฅ์น˜์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜ค๋ฅ˜๋“ค(์˜ˆ๋ฅผ ๋“ค์–ด, ๋””์Šคํฌ ๊ณต๊ฐ„์˜ ๋ถ€์กฑ)์ด ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ์ฝœ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์˜ ์˜ˆ

 

 

(2) ์‘์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค(Application Programming Interface)

๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋„ ์šด์˜์ฒด์ œ์˜ ๊ธฐ๋Šฅ์„ ์•„์ฃผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ข…์ข… ์ดˆ๋‹น ์ˆ˜์ฒœ ๊ฐœ์˜ ์‹œ์Šคํ…œ ์ฝœ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๋Œ€๋ถ€๋ถ„์€, ์ด๋Ÿฌํ•œ ์ •๋„์˜ ์ƒ์„ธ๋ฅผ ๊ฒฐ์ฝ” ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‘์šฉ ๊ฐœ๋ฐœ์ž๋“ค์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค(application programming interface, API)์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. API๋Š” ๊ฐ ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜์–ด์•ผ ํ•  ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์„ ํฌํ•จํ•˜์—ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜์˜ ์ง‘ํ•ฉ์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ํ”ํ•œ ์„ธ ๊ฐ€์ง€ API๋Š” Windows ์‹œ์Šคํ…œ์„ ์œ„ํ•œ Windows API, POSIX ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ POSIX API(๊ฑฐ์˜ ๋ชจ๋“  ๋ฒ„์ „์˜ UNIX, Linux, ๋ฐ Mac OS X๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค)์™€ Java ๊ฐ€์ƒ ๊ธฐ๊ณ„์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•œ Java API์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ฝ”๋“œ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•˜์—ฌ API๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. UNIX์™€ Linux ์‹œ์Šคํ…œ์—์„œ C์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•ด์„œ ์ œ๊ณต๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” libc๋ผ๊ณ  ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค. ๋ชจ๋“  ์šด์˜์ฒด์ œ๋Š” ๊ณ ์œ ์˜ ์‹œ์Šคํ…œ ์ฝœ ์ด๋ฆ„์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

 API๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•จ์ˆ˜๋“ค์€ ํ†ต์ƒ ์‘์šฉ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์‹ค์ œ ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด Windows ํ•จ์ˆ˜ CreateProcess()(๋‹น์—ฐํ•˜๊ฒŒ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค)๋Š” ์‹ค์ œ๋กœ Windows ์ปค๋„์˜ NTCreateProcess() ์‹œ์Šคํ…œ ์ฝœ์„ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

 ์™œ ์‘์šฉ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์‹ค์ œ ์‹œ์Šคํ…œ ์ฝœ์„ ๋ถ€๋ฅด๋Š” ๊ฒƒ๋ณด๋‹ค API์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋ฐ์„ ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ• ๊นŒ์š”? ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋ฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ์ด์ ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ํ˜ธํ™˜์„ฑ๊ณผ ๊ด€๋ จ ์žˆ์Šต๋‹ˆ๋‹ค. API์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค๊ณ„ํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ž์‹ ์˜ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ™์€ API๋ฅผ ์ง€์›ํ•˜๋Š” ์–ด๋Š ์‹œ์Šคํ…œ์—์„œ๊ฑด ์ปดํŒŒ์ผ๋˜๊ณ  ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ˜„์‹ค์ ์œผ๋กœ๋Š” ์ปดํ“จํ„ฐ ๊ตฌ์กฐ์˜ ์ฐจ์ด ๋•Œ๋ฌธ์— ๋ณด์ด๋Š” ๊ฒƒ๋ณด๋‹ค ์‰ฝ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค). ๊ฒŒ๋‹ค๊ฐ€ ์‹ค์ œ ์‹œ์Šคํ…œ ์ฝœ์€ ์ข…์ข… ์ข€ ๋” ์ž์„ธํ•œ ๋ช…์„ธ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์ƒ์—์„œ ์ž‘์—…ํ•˜๊ธฐ๊ฐ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ๊ฐ€์šฉํ•œ API๋ณด๋‹ค ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  APIํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๊ณผ ์ปค๋„๊ณผ ๊ด€๋ จ๋œ ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์—๋Š” ๊ฐ•ํ•œ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๋Œ€๋ถ€๋ถ„์˜ POSIX์™€ Windows API๋Š” UNIX, Linux ๋ฐ Windows ์šด์˜์ฒด์ œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ณ ์œ ์˜ ์‹œ์Šคํ…œ ์ฝœ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ‘œ์ค€ API์˜ ์˜ˆ

 ์‹œ์Šคํ…œ ์ฝœ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์žˆ์–ด ์ค‘์š”ํ•œ ๋˜ ๋‹ค๋ฅธ ์š”์†Œ๋Š” ์‹คํ–‰์‹œ๊ฐ„ ํ™˜๊ฒฝ(RTE)์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ ๋˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ํฌํ•จํ•˜์—ฌ ํŠน์ • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ „์ฒด ์†Œํ”„ํŠธ์›จ์–ด ์ œํ’ˆ๊ตฐ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” ๋กœ๋”์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ•จ๊ป˜ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. RTE๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝœ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ ์—ญํ• ์„ ํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์Šคํ…œ ์ฝœ ์ธํ„ฐํŽ˜์ด์Šค๋Š” APIํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„์–ด ํ•„์š”ํ•œ ์šด์˜์ฒด์ œ ์‹œ์Šคํ…œ ์ฝœ์„ ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ํ†ต์ƒ ๊ฐ ์‹œ์Šคํ…œ ์ฝœ์—๋Š” ๋ฒˆํ˜ธ๊ฐ€ ํ• ๋‹น๋˜๊ณ  ์‹œ์Šคํ…œ ์ฝœ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ด ๋ฒˆํ˜ธ์— ๋”ฐ๋ผ ์ƒ‰์ธ๋˜๋Š” ํ…Œ์ด๋ธ”์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์ฝœ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์˜๋„ํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝœ์„ ๋ถ€๋ฅด๊ณ  ์‹œ์Šคํ…œ ์ฝœ์˜ ์ƒํƒœํ™” ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋Œ๋ ค์ค๋‹ˆ๋‹ค.

 ํ˜ธ์ถœ์ž๋Š” ์‹œ์Šคํ…œ ์ฝœ์ด ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜๊ณ  ์‹คํ–‰ ์ค‘ ๋ฌด์Šจ ์ž‘์—…์„ ํ•˜๋Š”์ง€ ์•„๋ฌด๊ฒƒ๋„ ์•Œ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ˜ธ์ถœ์ž๋Š” ๋‹จ์ง€ API๋ฅผ ์ค€์ˆ˜ํ•˜๊ณ  ์‹œ์Šคํ…œ ์ฝœ์˜ ๊ฒฐ๊ณผ๋กœ์จ ์šด์˜์ฒด์ œ๊ฐ€ ๋ฌด์—‡์„ ํ•  ๊ฒƒ์ธ์ง€๋งŒ ์ดํ•ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šด์˜์ฒด์ œ ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ์ž์„ธํ•œ ๋‚ด์šฉ์€ API์— ์˜ํ•ด ํ”„๋กœ๊ทธ๋ž˜๋จธ๋กœ๋ถ€ํ„ฐ ์ˆจ๊ฒจ์ง€๊ณ  RTE์—  ์˜ํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. API, ์‹œ์Šคํ…œ ์ฝœ, ์šด์˜์ฒด์ œ์˜ ๊ด€๊ณ„๊ฐ€ ์•„๋ž˜ ์ด๋ฏธ์ง€์— ๋‚˜ํƒ€๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ ์‚ฌ์šฉ์ž ์‘์šฉ์ด open() ์‹œ์Šคํ…œ ์ฝœ์„ ๋ถˆ๋ €์„ ๋•Œ ์šด์˜์ฒด์ œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

open() ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•˜๋Š” ์‚ฌ์šฉ์ž ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ฒ˜๋ฆฌ

 ์‹œ์Šคํ…œ ์ฝœ์€ ์‚ฌ์šฉ๋˜๋Š” ์ปดํ“จํ„ฐ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ข…์ข…, ๋‹จ์ˆœํžˆ ์›ํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝœ์ด ๋ฌด์—‡์ธ์ง€๋ณด๋‹ค ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ์š”๊ตฌ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์ •๋ณด์˜ ์œ ํ˜•๊ณผ ์–‘์€ ํŠน์ • ์šด์˜์ฒด์ œ์™€ ํ˜ธ์ถœ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ž…๋ ฅ์„ ๋ฐ›์•„๋“ค์ด๊ธฐ ์œ„ํ•ด, ์ž…๋ ฅ์›(source)์œผ๋กœ ์‚ฌ์šฉ๋  ํŒŒ์ผ์ด๋‚˜ ์žฅ์น˜์™€ ํ•จ๊ป˜ ์ฝ์–ด ๋“ค์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ์˜ ์ฃผ์†Œ์™€ ๊ธธ์ด๋ฅผ ๋ช…์‹œํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์žฅ์น˜๋‚˜ ํŒŒ์ผ ๊ทธ๋ฆฌ๊ณ  ๊ธธ์ด๋Š” ์‹œ์Šคํ…œ ์ฝœ์— ์•”๋ฌต์ (Implicit) ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 ์šด์˜์ฒด์ œ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์„ธ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ ๋‚ด์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ๊ฒฝ์šฐ๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋ณด๋‹ค ๋” ๋งŽ์€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์˜ ๋ธ”๋ก์ด๋‚˜ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋˜๊ณ , ๋ธ”๋ก์˜ ์ฃผ์†Œ๊ฐ€ ๋ ˆ์ง€์Šคํ„ฐ ๋‚ด์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์•„๋ž˜์˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌ

Linux๋Š” ์ด๋Ÿฌํ•œ ์ ‘๊ทผ๋ฒ•์„ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 5๊ฐœ ์ดํ•˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์‚ฌ์šฉ๋˜๊ณ , ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ 5๊ฐœ๋ฅผ ๋„˜์œผ๋ฉด ๋ธ”๋ก ๋ฐฉ๋ฒ•์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด ์Šคํƒ์— push ๋  ์ˆ˜ ์žˆ๊ณ , ์šด์˜์ฒด์ œ์— ์˜ํ•ด pop ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์šด์˜์ฒด์ œ๋Š” ๋ธ”๋ก์ด๋‚˜ ์Šคํƒ ๋ฐฉ๋ฒ•์„ ์„ ํ˜ธํ•˜๋Š”๋ฐ, ์ด๋“ค ์ ‘๊ทผ๋ฒ•์€ ์ „๋‹ฌ๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค์˜ ๊ฐœ์ˆ˜๋‚˜ ๊ธธ์ด๋ฅผ ์ œํ•œํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

 

(3) ์‹œ์Šคํ…œ ์ฝœ์˜ ์œ ํ˜•(Types of Systems Calls)

์‹œ์Šคํ…œ ์ฝœ์€ ๋‹ค์„ฏ ๊ฐ€์ง€์˜ ์ค‘์š”ํ•œ ๋ฒ”์ฃผ, ์ฆ‰ ํ”„๋กœ์„ธ์Šค ์ œ์–ด, ํŒŒ์ผ ์กฐ์ž‘, ์žฅ์น˜ ์กฐ์ž‘, ์ •๋ณด ์œ ์ง€ ๋ณด์ˆ˜์™€ ํ†ต์‹ ๊ณผ ๋ณดํ˜ธ ๋“ฑ์œผ๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ์ฝœ์˜ ์œ ํ˜•

๋Œ“๊ธ€