์šด์˜์ฒด์ œ

[OS] ์‹œ์Šคํ…œ ์ฝœ (system call)

499.token.required 2024. 7. 1. 15:55

๐Ÿ“Œ 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์€ ์‹คํ–‰ํ•  ํ”„๋กœ๊ทธ๋žจ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ./ ๋’ค์— ํ”„๋กœ๊ทธ๋žจ ์ด๋ฆ„์„ ๋ถ™์ด๋ฉด ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉฐ, ์ด๋Š” ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฝ๋กœ๋ฅผ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

์ฐธ์กฐ ๋ฌธ์„œ