λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“ŒCS/OS

[OS] μ‹œμŠ€ν…œ 호좜(System Calls)

by dar0m! 2021. 8. 31.

μ‹œμŠ€ν…œ 호좜(System Calls)

μš΄μ˜μ²΄μ œλŠ” μ»€λ„ λͺ¨λ“œ(Kernel Mode)와 μ‚¬μš©μž λͺ¨λ“œ(User Mode)둜 λ‚˜λ‰˜μ–΄ κ΅¬λ™λœλ‹€. μš΄μ˜μ²΄μ œμ—μ„œ ν”„λ‘œκ·Έλž¨μ΄ κ΅¬λ™λ˜λŠ”λ° μžˆμ–΄ νŒŒμΌμ„ 읽어 μ˜€κ±°λ‚˜, νŒŒμΌμ„ μ“°κ±°λ‚˜, ν˜Ήμ€ 화면에 λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•˜λŠ” λ“± λ§Žμ€ 뢀뢄이 컀널 λͺ¨λ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

OSλŠ” λ‹€μ–‘ν•œ μ„œλΉ„μŠ€λ“€μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ ν•˜λ“œμ›¨μ–΄λ₯Ό μ§μ ‘μ μœΌλ‘œ κ΄€λ¦¬ν•œλ‹€. 이와 반면 μ‘μš© ν”„λ‘œκ·Έλž¨μ€ OSκ°€ μ œκ³΅ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν†΅ν•΄μ„œλ§Œ μžμ›μ„ μ‚¬μš©ν•  수 μžˆλ‹€. OSκ°€ μ œκ³΅ν•˜λŠ” μ΄λŸ¬ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‹œμŠ€ν…œ 콜(System Call) 라고 ν•œλ‹€.

μ‹œμŠ€ν…œ μ½œμ€ μ΄λŸ¬ν•œ 컀널 μ˜μ—­μ˜ κΈ°λŠ₯을 μ‚¬μš©μž λͺ¨λ“œκ°€ μ‚¬μš© κ°€λŠ₯ν•˜κ²Œ, 즉 ν”„λ‘œμ„ΈμŠ€κ°€ ν•˜λ“œμ›¨μ–΄μ— 직접 μ ‘κ·Όν•΄μ„œ ν•„μš”ν•œ κΈ°λŠ₯을 μ‚¬μš©ν•  수 있게 ν•΄μ€€λ‹€. 

μ‹œμŠ€ν…œ μ½œμ„ νŽΈν•˜κ²Œ μ‚¬μš©ν•˜κΈ° μœ„ν•œ μˆ˜λ‹¨μœΌλ‘œ APIλ₯Ό μ œκ³΅ν•œλ‹€. APIλŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ‰½κ²Œ λ§Œλ“€κΈ° μœ„ν•œ λ„κ΅¬λ‘œ 덕뢄에 μ‰½κ²Œ ν”„λ‘œκ·Έλž˜λ°μ΄ κ°€λŠ₯ν•΄μ‘Œλ‹€.

ν†΅μƒμ μœΌλ‘œ μ‹œμŠ€ν…œ μ½œμ€ μ—¬λŸ¬ μ’…λ₯˜μ˜ κΈ°λŠ₯으둜 λ‚˜λ‰˜μ–΄μ Έ μžˆλ‹€. 각 μ‹œμŠ€ν…œ μ½œμ—λŠ” λ²ˆν˜Έκ°€ ν• λ‹Ήλ˜κ³  μ‹œμŠ€ν…œ 콜 μΈν„°νŽ˜μ΄μŠ€λŠ” μ΄λŸ¬ν•œ λ²ˆν˜Έμ— 따라 인덱슀 λ˜λŠ” ν…Œμ΄λΈ”μ„ μœ μ§€λœλ‹€.

μ•„λž˜ 그림은 open() μ‹œμŠ€ν…œ μ½œμ„ 호좜 ν–ˆμ„ λ•Œ μš΄μ˜μ²΄μ œμ—μ„œ μ–΄λ–»κ²Œ μ²˜λ¦¬λ˜λŠ”μ§€λ₯Ό 보여쀀닀.

open() μ‹œμŠ€ν…œ μ½œμ„ ν˜ΈμΆœν•œ μ‚¬μš©μž μ‘μš©μ˜ 처리

ν•„μš”ν•œ κΈ°λŠ₯μ΄λ‚˜ μ‹œμŠ€ν…œ ν™˜κ²½μ— 따라 μ‹œμŠ€ν…œ 콜이 λ°œμƒν•  λ•Œ μ’€ 더 λ§Žμ€ 정보가 ν•„μš”ν•  수 μžˆλ‹€. κ·ΈλŸ¬ν•œ 정보가 λ‹΄κΈ΄ λ§€κ°œλ³€μˆ˜λ₯Ό μš΄μ˜μ²΄μ œμ— μ „λ‹¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” λŒ€λž΅ 3가지 방법이 μžˆλ‹€.

  1. λ§€κ°œλ³€μˆ˜λ₯Ό CPU λ ˆμ§€μŠ€ν„° 내에 μ „λ‹¬ν•œλ‹€. 
    • 이 κ²½μš°μ— λ§€κ°œλ³€μˆ˜μ˜ κ°―μˆ˜κ°€ CPU λ‚΄μ˜ 총 λ ˆμ§€μŠ€ν„° κ°œμˆ˜λ³΄λ‹€ λ§Žμ„ 수 μžˆλ‹€.
  2. μœ„μ™€ 같은 κ²½μš°μ— λ§€κ°œλ³€μˆ˜λ₯Ό λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜κ³  λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œκ°€ λ ˆμ§€μŠ€ν„°μ— μ „λ‹¬λœλ‹€. (μ•„λž˜ κ·Έλ¦Ό μ°Έκ³ )
  3. λ§€κ°œλ³€μˆ˜λŠ” ν”„λ‘œκ·Έλž¨μ— μ˜ν•΄ μŠ€νƒ(stack)으둜 전달(push) λ  μˆ˜λ„ μžˆλ‹€.
    • 2, 3번 λ°©λ²•μ˜ 경우 μ „λ‹¬λ˜λŠ” λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜λ‚˜ 길이에 μ œν•œμ΄ μ—†κΈ° λ•Œλ¬Έμ— λͺ‡λͺ‡ μš΄μ˜μ²΄μ œμ—μ„œ μ„ ν˜Έν•˜λŠ” 방식이닀.

λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•œ λ§€κ°œλ³€μˆ˜λ₯Ό 전달

 

μ‹œμŠ€ν…œ 콜의 μœ ν˜•

μ‹œμŠ€ν…œ μ½œμ€ μ—¬μ„― κ°€μ§€μ˜ μ€‘μš”ν•œ λ²”μ£Όλ‘œ λ‚˜λˆŒ 수 μžˆλ‹€.

  1. ν”„λ‘œμ„ΈμŠ€ μ œμ–΄
  2. 파일 μ‘°μž‘
  3. μž₯치 μ‘°μž‘
  4. 정보 μœ μ§€λ³΄μˆ˜
  5. 톡신
  6. 보호

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 file attribute and set file attribute)

3 μž₯치 관리(Devide Management)

  • ν•˜λ“œμ›¨μ–΄μ˜ μ œμ–΄μ™€ μƒνƒœ 정보λ₯Ό μ–»μŒ(ioctl)
  • μž₯치λ₯Ό μš”κ΅¬(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()
일반적인 톡신 λͺ¨λΈμ—λŠ” λ©”μ‹œμ§€ 전달과 κ³΅μœ  λ©”λͺ¨λ¦¬ λ‘κ°€μ§€κ°€ μžˆλ‹€.

λ©”μ‹œμ§€ 전달 λͺ¨λΈμ—μ„œλŠ” λ‘ ν”„λ‘œμ„ΈμŠ€μ˜ 톡신에 μ •λ³΄ κ΅ν™˜μ„ μœ„ν•œ λ©”μ‹œμ§€λ₯Ό μ£Όκ³  λ°›λŠ”λ‹€.
곡유 λ©”λͺ¨λ¦¬ λͺ¨λΈμ—μ„œλŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ μ†Œμœ ν•œ λ©”λͺ¨λ¦¬μ— 접근을 μœ„ν•΄ νŠΉμ • μ‹œμŠ€ν…œ μ½œμ„ ν˜ΈμΆœν•œλ‹€. 일반적으둜 μš΄μ˜μ²΄μ œλŠ” μ„œλ‘œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°„μ˜ λ©”λͺ¨λ¦¬ 접근을 μ°¨λ‹¨ν•œλ‹€. 곡유 λ©”λͺ¨λ¦¬ 기법을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν†΅μ‹ ν•˜λ €λŠ” ν”„λ‘œμ„ΈμŠ€λ“€μ΄ μ΄λŸ¬ν•œ 차단을 ν’€μ–΄μ£ΌλŠ”λ° λ™μ˜ν•΄μ•Όν•œλ‹€.

 

μ°Έκ³ 

λŒ“κΈ€