Skip to content

Latest commit

ย 

History

History
111 lines (92 loc) ยท 6.8 KB

File metadata and controls

111 lines (92 loc) ยท 6.8 KB

System Call

OS Structure2 OS Structure

์‹œ์Šคํ…œ ์ฝœ(System Call)

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ปดํ“จํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ์ธ ์šด์˜์ฒด์ œ์—๊ฒŒ ์–ด๋–ค ๊ธฐ๋Šฅ(์„œ๋น„์Šค)๋ฅผ ์‚ฌ์šฉ ์š”์ฒญ -> ์ปค๋„๊ณผ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์„ ์ด์–ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ• 
  • ์šด์˜์ฒด์ œ๋Š” ์ปดํ“จํ„ฐ๋ฅผ ์‹คํ–‰ ๋ฐ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋ฉด ์‹œ์Šคํ…œ ์ฝœ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์šด์˜์ฒด์ œ์—๊ฒŒ ์šด์˜์ฒด์ œ ๊ธฐ๋Šฅ์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ํŒŒ์ผ์„ ์ฝ๊ณ , ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์€ ์šด์˜์ฒด์ œ์˜ ์—ญํ• ์ด๊ณ  ํ”„๋กœ์„ธ์Šค๋Š” ๊ด€๋ฆฌ์ž๋Š” ์šด์˜์ฒด์ œ์—๊ฒŒ ํ—ˆ๋ฝ์„ ์š”์ฒญ๋ฐ›๊ธฐ ์œ„ํ•ด ์‹œ์Šคํ…œ ์ฝœ๋กœ ํ•˜์—ฌ๊ธˆ ํ—ˆ๋ฝ์„ ์š”์ฒญํ•œ๋‹ค
  • ํŒŒ์ผ ๋ฟ ์•„๋‹ˆ๋ผ ์šด์˜์ฒด์ œ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋“  ์ž์›(๋„คํŠธ์›Œํฌ, ๋””์Šคํฌ, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ)์ด ํ•„์š”ํ• ๋•Œ ํ”„๋กœ์„ธ์Šค๋Š” ์‹œ์Šคํ…œ ์ฝœ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ -> User mode์—์„œ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ Protected Instruction์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด OS๊ฐ€ ์ œ๊ณตํ•˜๋Š” system call์„ ์ด์šฉํ•˜์—ฌ ์ปค๋„๋ชจ๋“œ๋กœ switch ํ• ๋•Œ ์‚ฌ์šฉ(์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•˜๋ฉด User mode์—์„œ Kernel mode๋กœ Context Switch๊ฐ€ ๋ฐœ์ƒ)
  • ์‹œ์Šคํ…œ ์ฝœ์€ ์ปค๋„ ์˜์—ญ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ์ž ๋ชจ๋“œ๊ฐ€ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋„๋ก ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋“œ์›จ์–ด์— ์ง์ ‘ ์ ‘๊ทผํ•ด์„œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ๋™์ž‘ ๊ณผ์ •์€ ๊ธฐ์ˆ ํ•˜์˜€์Œ

์‹œ์Šคํ…œ ์ฝœ ์œ ํ˜• ๋ฐ ์ข…๋ฅ˜

1. ํ”„๋กœ์„ธ์Šค ์ œ์–ด (Process Control)

  • ๋๋‚ด๊ธฐ(exit), ์ค‘์ง€(abort)
  • ์ ์žฌ(load), ์‹คํ–‰(execute)
  • ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ(create process) - fork
  • ํ”„๋กœ์„ธ์Šค ์†์„ฑ ํš๋“๊ณผ ์„ค์ •(get process attribute and set process attribute)
  • ์‹œ๊ฐ„ ๋Œ€๊ธฐ(wait time)
  • ์‚ฌ๊ฑด ๋Œ€๊ธฐ(wait event)
  • ์‚ฌ๊ฑด์„ ์•Œ๋ฆผ(signal event)
  • ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ ํ•ด์ œ(malloc, free)

2. ํŒŒ์ผ ์กฐ์ž‘(File Manipulation)

  • ํŒŒ์ผ ์ƒ์„ฑ(create file), ํŒŒ์ผ ์‚ญ์ œ(delete file)
  • ์—ด๊ธฐ(open), ๋‹ซ๊ธฐ(close)
  • ์ฝ๊ธฐ(read), ์“ฐ๊ธฐ(write), ์œ„์น˜ ๋ณ€๊ฒฝ(reposition)
  • ํŒŒ์ผ ์†์„ฑ ํš๋“ ๋ฐ ์„ค์ •(get attribute and set file attribute)

3. ์žฅ์น˜ ์กฐ์ž‘(Devide Management)

  • ํ•˜๋“œ์›จ์–ด์˜ ์ œ์–ด์™€ ์ƒํƒœ ์ •๋ณด๋ฅผ ์–ป์Œ(ioctl (Input/Output control์˜ ์•ฝ์ž))
  • ์žฅ์น˜๋ฅผ ์š”๊ตฌ(request devices), ์žฅ์น˜๋ฅผ ๋ฐฉ์ถœ(release device)
  • ์ฝ๊ธฐ(read), ์“ฐ๊ธฐ(write), ์œ„์น˜ ๋ณ€๊ฒฝ
  • ์žฅ์น˜ ์†์„ฑ ํš๋“, ์žฅ์น˜ ์†์„ฑ ์„ค์ •
  • ์žฅ์น˜์˜ ๋…ผ๋ฆฌ์  ๋ถ€์ฐฉ(attach) ๋˜๋Š” ๋ถ„๋ฆฌ(detach)

4. ์ •๋ณด ์œ ์ง€๋ณด์ˆ˜(Information Maintenance)

  • getpid(), alarm(), sleep()
  • ์‹œ๊ฐ„๊ณผ ๋‚ ์งœ์˜ ์„ค์ •๊ณผ ํš๋“(time)
  • ์‹œ์Šคํ…œ ๋ฐ์ดํ„ฐ์˜ ์„ค์ •๊ณผ ํš๋“(date)
  • ํ”„๋กœ์„ธ์Šค ํŒŒ์ผ, ์žฅ์น˜ ์†์„ฑ์˜ ํš๋“ ๋ฐ ์„ค์ •

5. ํ†ต์‹ (Communication)

  • pipe(), shm_open(), mmap()
  • ํ†ต์‹  ์—ฐ๊ฒฐ์˜ ์ƒ์„ฑ, ์ œ๊ฑฐ
  • ๋ฉ”์‹œ์ง€์˜ ์†ก์‹ , ์ˆ˜์‹ 
  • ์ƒํƒœ ์ •๋ณด ์ „๋‹ฌ
  • ์›๊ฒฉ ์žฅ์น˜์˜ ๋ถ€ํƒ ๋ฐ ๋ถ„๋ฆฌ

6. ๋ณดํ˜ธ(Protection)

  • chmod()
  • umask()
  • chown()

System Call API

API(Application Programming Interface)

  • ๋Œ€๋ถ€๋ถ„์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž๋“ค์€ API์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค๊ณ„ -> ๋ณดํ†ต ์‹œ์Šคํ…œ ์ฝœ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ํ•ด๋‹น ์‹œ์Šคํ…œ ์ฝœ์„ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“  ๊ฐ ์–ธ์–ด๋ณ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(API)๋ฅผ ์‚ฌ์šฉํ•จ
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ํ”ํ•œ API 3๊ฐ€์ง€๋Š” Windows APU, POSIX API, Java API ์กด์žฌ
  • ์ตœ์ข…์ ์œผ๋กœ API๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•จ์ˆ˜๋“ค์€ ํ†ต์ƒ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์‹ค์ œ ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•จ
  • ์‹œ์Šคํ…œ ์ฝœ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ค‘์š”ํ•œ ๋‹ค๋ฅธ ์š”์†Œ๋Š” ์‹คํ–‰ ์‹œ๊ฐ„ ํ™˜๊ฒฝ(๋Ÿฐํƒ€์ธ ํ™˜๊ฒฝ, RTE)์œผ๋กœ RTE๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝœ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ ์—ญํ• ์„ ํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณต. ์ด ์‹œ์Šคํ…œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” API ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์„ interceptํ•ด์„œ ํ•„์š”ํ•œ ์šด์˜์ฒด์ œ ์‹œ์Šคํ…œ ์ฝœ์„ ๋ถ€๋ฆ„
  • ์šด์˜์ฒด์ œ ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ์ž์„ธํ•œ ๋‚ด์šฉ์€ API์— ์˜ํ•ด ํ”„๋กœ๊ทธ๋ž˜๋จธ๋กœ๋ถ€ํ„ฐ ์ˆจ๊ฒจ์ง€๊ณ  RTE์— ์˜ํ•ด ๊ด€๋ฆฌ๋จ
  • ์‹œ์Šคํ…œ ์ฝœ ํ˜ธ์ถœ์„ ์œ„ํ•ด์„œ๋Š” ์šด์˜์ฒด์ œ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์•ผ๋งŒ ํ•˜๋Š”๋ฐ ํ•ด๋‹น ๋‚ด์šฉ์€ ์•„๋ž˜ ๊ธฐ์ˆ 

์ปค๋„ (Kernel)

  • ์šด์˜์ฒด์ œ ์ค‘ ํ•ญ์ƒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ์šด์˜์ฒด์ œ์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„

  • ์ปค๋„์€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ์จ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ˆ˜ํ–‰์— ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ•˜๋“œ์›จ์–ด ๋“ฑ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• 

  • ์ปค๋„์€ ์œ ์ €๋ชจ๋“œ์™€ ์ปค๋„๋ชจ๋“œ๊ฐ€ ์กด์žฌ

    • ์ปค๋„๋ชจ๋“œ๋Š” I/O devices๋ฅผ ํฌํ•จํ•ด ๋ชจ๋“  ์ฃผ์†Œ ์˜์—ญ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ์œ ์ €๋ชจ๋“œ๋Š” ๋ช…๋ น์–ด์˜ ์ผ๋ถ€์™€ HW feature์˜ ์ผ๋ถ€๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์ปค๋„ ์ •๋ฆฌ ๋งํฌ

๋ณดํ˜ธ ๋ช…๋ น( Protected Instruction )
- ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰, ์ข…๋ฃŒ๋‚˜ I/O ์ž‘์—… ๋“ฑ์˜ ์‚ฌ์šฉ์ž๊ฐ€ ํ•จ๋ถ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋  ๋งŒํ•œ ๋ช…๋ น๋“ค
- OS์˜ ์ปค๋„๋ชจ๋“œ์™€ ์œ ์ €๋ชจ๋“œ ์ค‘ ์ปค๋„ ๋ชจ๋“œ์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ
- ์ด์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด์„œ ์œ ์ €๋ชจ๋“œ์—์„œ ์ปค๋„๋ชจ๋“œ๋กœ trapํ•˜๋Š” system call์„ ์‚ฌ์šฉ

์‹œ์Šคํ…œ ์ฝœ์œผ๋กœ ์ปค๋„ ๋™์ž‘ ๊ณผ์ •

  1. ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์œ ์ € ๋ชจ๋“œ์—์„œ ์‹คํ–‰
  2. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ์ธํ„ฐ๋ŸฝํŠธ(interrupt)๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์‹œ์Šคํ…œ ์ฝœ(system call)์„ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด ์ปค๋„ ๋ชจ๋“œ๋กœ ์ „ํ™˜ (read)
  3. ์ปค๋„ ๋ชจ๋“œ์—์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ํ˜„์žฌ CPU ์ƒํƒœ๋ฅผ ์ €์žฅ. ํŒŒ์ผ์„ ์ฝ์„ ์ค€๋น„ (waiting)
  4. ์ปค๋„์ด ์ง์ ‘ ํ•ด๋‹น ์ธํ„ฐ๋ŸฝํŠธ ํ˜น์€ ์‹œ์Šคํ…œ ์ฝœ ์‹คํ–‰/์ฒ˜๋ฆฌ (running)
  5. ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ค‘๋‹จ ๋ฌ๋˜ ํ”„๋กœ๊ทธ๋žจ์˜ CPU ์ƒํƒœ ๋ณต์›
  6. ๋‹ค์‹œ ํ†ต์ œ๊ถŒ์„ ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•ด ์ปค๋„๋ชจ๋“œ์—์„œ ์œ ์ €๋ชจ๋“œ๋กœ ๋‹ค์‹œ ๋ณ€๊ฒฝ๋จ

์‹œ์Šคํ…œ ์ฝœ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ „์†ก

  • ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด๋‚˜ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ System Call์ด ๋ฐœ์ƒํ•  ๋•Œ ์ข€ ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ
  • ๊ทธ๋Ÿฌํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์šด์˜์ฒด์ œ์— ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋Œ€๋žต 3๊ฐ€์ง€ ์ •๋„์˜ ๋ฐฉ๋ฒ•์ด ์กด์žฌ
    • ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ํ†ตํ•œ ์ „์†ก : ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ CPU ๋ ˆ์ง€์Šคํ„ฐ ๋‚ด์— ์ „๋‹ฌ. ์ด ๊ฒฝ์šฐ์— ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ์ˆ˜๊ฐ€ CPU ๋‚ด์˜ ์ด ๋ ˆ์ง€์Šคํ„ฐ ๊ฐœ์ˆ˜๋ณด๋‹ค ๋งŽ์„ ์ˆ˜ ์žˆ์Œ. ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ง์ ‘ ์ „๋‹ฌ๋˜๋‚˜ ๋ ˆ์ง€์Šคํ„ฐ ํฌ๊ธฐ๋ณด๋‹ค ๋” ๋งŽ์€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ ์ข‹์ง€ ์•Š์€ ๋ฐฉ๋ฒ•
    • ๋ธ”๋ก ํ˜น์€ ํ…Œ์ด๋ธ”์„ ํ†ตํ•œ ์ „์†ก : ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์˜ ๋ธ”๋ก์ด๋‚˜ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•˜๊ณ  ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ€ ๋ ˆ์ง€์Šคํ„ฐ์— ์ „๋‹ฌ
    • ์Šคํƒ์„ ํ†ตํ•œ ์ „์†ก : ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด ์Šคํƒ(stack)์œผ๋กœ ์ „๋‹ฌ(push) ๋  ์ˆ˜๋„ ์žˆ์Œ. ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด ์Šคํƒ์— ๋„ฃ์–ด์ง€๊ณ  ์šด์˜์ฒด์ œ์˜ ์˜ํ•ด ๊บผ๋‚ด์ง

22-08-23

Reference