λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
운영체제

이쀑λͺ¨λ“œ(Dual Mode)와 μ‹œμŠ€ν…œν˜ΈμΆœ(System Call)

by μ„œμ•„λž‘πŸ˜ 2023. 10. 28.

 

이쀑λͺ¨λ“œ(Dual mode)

운영체제의 μ΄μ€‘λͺ¨λ“œ(dual mode)λŠ” μ»΄ν“¨ν„° μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©μž ν”„λ‘œκ·Έλž¨κ³Ό μš΄μ˜μ²΄μ œ(OS) κ°„μ˜ λ³΄μ•ˆκ³Ό μ•ˆμ „성을 μœ μ§€ν•˜κΈ° μœ„ν•œ κΈ°μˆ μ μΈ κ΅¬μ‘°λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ΄μ€‘λͺ¨λ“œλŠ” λ˜ν•œ μ‹œμŠ€ν…œ μžμ›μ„ νš¨μœ¨μ μœΌλ‘œ κ΄€λ¦¬ν•˜κ³  ν”„λ‘œμ„ΈμŠ€ κ°„ μΆ©λŒμ„ λ°©μ§€ν•˜λ©° μ‹œμŠ€ν…œ μ „λ°˜μ˜ μ•ˆμ •μ„±μ„ λ³΄μž₯ν•˜λŠ” λ° μ€‘μš”ν•œ μ—­ν• μ„ ν•©λ‹ˆλ‹€.

μš΄μ˜μ²΄μ œλŠ” 일반적으둜 두 가지 λͺ¨λ“œλ‘œ λ™μž‘ν•©λ‹ˆλ‹€.

1. μ‚¬μš©μž λͺ¨λ“œ(User Mode):
   - μ‚¬μš©μž ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” ν™˜κ²½μž…λ‹ˆλ‹€.
   - μ‚¬μš©μž λͺ¨λ“œμ—μ„œλŠ” μΌλ°˜μ μΈ μ‘μš© ν”„λ‘œκ·Έλž¨λ“€μ΄ μ‹€ν–‰λ˜λ©°, μ΄ ν”„λ‘œκ·Έλž¨λ“€μ€ μ‹œμŠ€ν…œ μžμ›μ— μ§μ ‘μ μœΌλ‘œ μ ‘κ·Όν•  μˆ˜ μ—†μŠ΅λ‹ˆλ‹€.
   - μ‚¬μš©μž ν”„λ‘œκ·Έλž¨μ΄ μ§μ ‘ ν•˜λ“œμ›¨μ–΄ μžμ›μ— μ ‘κ·Όν•˜λ €κ³  ν•  λ•Œ λ°œμƒν•  μˆ˜ μžˆλŠ” μ˜€λ₯˜λ‚˜ λ³΄μ•ˆ μœ„ν˜‘μœΌλ‘œλΆ€ν„° μ‹œμŠ€ν…œμ„ λ³΄ν˜Έν•©λ‹ˆλ‹€.

2. 컀널 λͺ¨λ“œ(Kernel Mode):
   - μš΄μ˜μ²΄μ œμ˜ ν•΅μ‹¬ λΆ€λΆ„, μ¦‰ μ»€λ„μ΄ μ‹€ν–‰λ˜λŠ” ν™˜κ²½μž…λ‹ˆλ‹€.
   - μ»€λ„ λͺ¨λ“œμ—μ„œλŠ” μš΄μ˜μ²΄μ œμ˜ ν•΅μ‹¬ κΈ°λŠ₯ λ° μ‹œμŠ€ν…œ μžμ›μ— λŒ€ν•œ μ ‘근이 ν—ˆμš©λ©λ‹ˆλ‹€.
   - μš΄μ˜μ²΄μ œλŠ” μ΄ λͺ¨λ“œμ—μ„œ ν•˜λ“œμ›¨μ–΄ μžμ›μ„ μ§μ ‘ μ œμ–΄ν•˜κ³  μ‚¬μš©μž ν”„λ‘œκ·Έλž¨λ“€ κ°„μ˜ μΆ©λŒμ„ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
   - μ‚¬μš©μž ν”„λ‘œκ·Έλž¨μ΄ μ‹œμŠ€ν…œ ν˜ΈμΆœ(system call)을 ν†΅ν•΄ μš΄μ˜μ²΄μ œ μ„œλΉ„μŠ€λ₯Ό μš”μ²­ν•  λ•Œ, μ΄ μš”청은 μ‚¬μš©μž λͺ¨λ“œμ—μ„œ μ»€λ„ λͺ¨λ“œλ‘œ μ „ν™˜λ˜μ–΄ μ²˜λ¦¬λ©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•¨μœΌλ‘œμ¨ μš΄μ˜μ²΄μ œλŠ” μ‚¬μš©μž ν”„λ‘œκ·Έλž¨μ— ν•„μš”ν•œ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λ©΄μ„œλ„ μ•ˆμ „성을 μœ μ§€ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

이쀑λͺ¨λ“œλŠ” μ‹œμŠ€ν…œμ˜ μ•ˆμ •μ„±κ³Ό λ³΄μ•ˆμ„ ν™•λ³΄ν•˜κΈ° μœ„ν•œ μ€‘μš”ν•œ λ³΄μ•ˆ κΈ°λŠ₯ μ€‘ ν•˜λ‚˜μ΄λ©°, μ»΄ν“¨ν„° μ‹œμŠ€ν…œμ΄ μ•ˆμ •μ μœΌλ‘œ λ™μž‘ν•˜κ³  μ™ΈλΆ€ κ³΅κ²©μœΌλ‘œλΆ€ν„° μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έλ˜λ„둝 λ„μ™€μ€λ‹ˆλ‹€.

 

 

 

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

운영체제의 μ‹œμŠ€ν…œ ν˜ΈμΆœ(System Call)은 μ‚¬μš©μž ν”„λ‘œκ·Έλž¨μ΄ μš΄μ˜μ²΄μ œμ˜ μ„œλΉ„μŠ€λ₯Ό μš”μ²­ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€μž…λ‹ˆλ‹€. μ‚¬μš©μž ν”„λ‘œκ·Έλž¨μ΄ μ§μ ‘ ν•˜λ“œμ›¨μ–΄ μžμ›μ— μ ‘κ·Όν•˜λŠ” κ²ƒμ€ ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹ , μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ ν†΅ν•΄ μš΄μ˜μ²΄μ œμ—κ²Œ νŠΉμ • μž‘업을 μˆ˜ν–‰ν•΄λ‹¬λΌκ³  μš”μ²­ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. μ‹œμŠ€ν…œ ν˜ΈμΆœμ€ μ‚¬μš©μž λͺ¨λ“œ(User Mode)μ—μ„œ μ‹€ν–‰ μ€‘인 ν”„λ‘œκ·Έλž¨μ΄ μ»€λ„ λͺ¨λ“œ(Kernel Mode)둜 μ „ν™˜λ  μˆ˜ μžˆκ²Œ ν•΄μ€λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•¨μœΌλ‘œμ¨ μš΄μ˜μ²΄μ œλŠ” ν”„λ‘œκ·Έλž¨μ˜ μš”청을 λ°›μ•„듀이고 μ•ˆμ „ν•˜κ²Œ μ‹€ν–‰ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

 



μ‹œμŠ€ν…œ 호좜의 μ˜ˆμ‹œλ‘œλŠ” λ‹€μŒκ³Ό 같은 μž‘μ—…μ΄ 포함될 수 μžˆμŠ΅λ‹ˆλ‹€.

1. 파일 관리(File Management): νŒŒμΌμ„ μ—΄κ³  λ‹«λŠ” 것, 읽고 μ“°λŠ” 것, 파일과 디렉토리λ₯Ό μƒμ„±ν•˜κ±°λ‚˜ μ‚­μ œν•˜λŠ” λ“±μ˜ 파일 κ΄€λ ¨ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. ν”„λ‘œμ„ΈμŠ€ μ œμ–΄(Process Control): μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€λ₯Ό μƒμ„±ν•˜κ±°λ‚˜ 기쑴의 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ’…λ£Œν•˜λŠ” μž‘μ—…, ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신을 μœ„ν•œ κΈ°λŠ₯ 등이 ν¬ν•¨λ©λ‹ˆλ‹€.

3. μž₯치 관리(Device Management): μž…μΆœλ ₯ μž₯μΉ˜μ™€μ˜ 톡신을 μœ„ν•œ κΈ°λŠ₯, 예λ₯Ό λ“€μ–΄ ν”„λ¦°ν„°λ‘œ 좜λ ₯ν•˜κ±°λ‚˜ ν‚€λ³΄λ“œμ—μ„œ μž…λ ₯을 λ°›λŠ” μž‘μ—… 등이 μžˆμŠ΅λ‹ˆλ‹€.

4. 톡신(Communication): ν”„λ‘œμ„ΈμŠ€ κ°„μ˜ 톡신을 μœ„ν•œ μž‘μ—…, 예λ₯Ό λ“€μ–΄ μ†ŒμΌ“μ„ μ—΄μ–΄ λ„€νŠΈμ›Œν¬λ₯Ό ν†΅ν•œ 톡신을 ν•˜λŠ” μž‘μ—…μ΄ 여기에 μ†ν•©λ‹ˆλ‹€.

5. λ©”λͺ¨λ¦¬ 관리(Memory Management): λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κ³  ν•΄μ œν•˜λŠ” μž‘μ—…, λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ™€μ˜ λ©”λͺ¨λ¦¬ 곡유 등이 여기에 ν¬ν•¨λ©λ‹ˆλ‹€.

μ‹œμŠ€ν…œ ν˜ΈμΆœμ€ μΌλ°˜μ μœΌλ‘œ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬ ν•¨μˆ˜λ₯Ό ν†΅ν•΄ μ ‘κ·Όλ©λ‹ˆλ‹€. μ΄ ν•¨μˆ˜λ“€μ€ μ‚¬μš©μž ν”„λ‘œκ·Έλž¨μ΄ νŠΉμ • μš΄μ˜μ²΄μ œ κΈ°λŠ₯을 μ‚¬μš©ν•  μˆ˜ μžˆλ„둝 λ„와주며, λ‚΄λΆ€μ μœΌλ‘œλŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ ν˜ΈμΆœν•˜μ—¬ μš΄μ˜μ²΄μ œμ—κ²Œ μž‘업을 μš”μ²­ν•©λ‹ˆλ‹€. μ‹œμŠ€ν…œ ν˜ΈμΆœμ€ μš΄μ˜μ²΄μ œμ˜ ν•΅μ‹¬ κΈ°λŠ₯을 μ™ΈλΆ€μ— λ…ΈμΆœν•˜μ§€ μ•ŠμœΌλ©΄μ„œλ„ μ•ˆμ „ν•˜κ²Œ μ‚¬μš©μž ν”„λ‘œκ·Έλž¨κ³Ό μš΄μ˜μ²΄μ œ κ°„μ˜ μƒν˜Έμž‘μš©μ„ κ°€λŠ₯μΌ€ ν•©λ‹ˆλ‹€.

 

 

 

μ‹œμŠ€ν…œ 호좜의 μ’…λ₯˜

μ‹œμŠ€ν…œ ν˜ΈμΆœμ˜ μ’…λ₯˜λŠ” μš΄μ˜μ²΄μ œλ§ˆλ‹€ μ‘°κΈˆμ”© λ‹€λ₯Ό μˆ˜ μžˆμ§€λ§Œ, μΌλ°˜μ μœΌλ‘œ μ‚¬μš©λ˜λŠ” λͺ‡ κ°€μ§€ μ‹œμŠ€ν…œ ν˜ΈμΆœμ˜ μ’…λ₯˜λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€

1. νŒŒμΌ μ‹œμŠ€ν…œ κ΄€λ ¨ μ‹œμŠ€ν…œ ν˜ΈμΆœ
   - open() νŒŒμΌμ„ μ—΄ λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.
   - close() νŒŒμΌμ„ λ‹«μ„ λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.
   - read() νŒŒμΌμ—μ„œ λ°μ΄ν„°λ₯Ό μ½μ„ λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.
   - write() νŒŒμΌμ— λ°μ΄ν„°λ₯Ό μ“Έ λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.
   - create() μƒˆλ‘œμš΄ νŒŒμΌμ„ μƒμ„±ν•  λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.
   - delete() νŒŒμΌμ„ μ‚­μ œν•  λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.

2. ν”„λ‘œμ„ΈμŠ€ μ œμ–΄ κ΄€λ ¨ μ‹œμŠ€ν…œ ν˜ΈμΆœ
   - fork() ν˜„μž¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ³΅μ œν•˜μ—¬ μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€λ₯Ό μƒμ„±ν•  λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.
   - exec() μƒˆλ‘œμš΄ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•  λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.
   - exit() ν˜„μž¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ’…λ£Œν•  λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.
   - wait() μžμ‹ ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ  λ•ŒκΉŒμ§€ λŒ€κΈ°ν•  λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.

3. λ©”λͺ¨λ¦¬ κ΄€λ¦¬ κ΄€λ ¨ μ‹œμŠ€ν…œ ν˜ΈμΆœ
   - malloc() λ™μ μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•  λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.
   - free() λ™μ μœΌλ‘œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•  λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.
   - brk() ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ μ‘°μ •ν•  λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.

4. ν†΅μ‹ κ³Ό λ„€νŠΈμ›Œν‚Ή κ΄€λ ¨ μ‹œμŠ€ν…œ ν˜ΈμΆœ
   - socket() μ†ŒμΌ“을 μƒμ„±ν•  λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.
   - connect() μ†ŒμΌ“을 νŠΉμ • μ£Όμ†Œμ™€ μ—°κ²°ν•  λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.
   - send() λ°μ΄ν„°λ₯Ό μ†ŒμΌ“을 ν†΅ν•΄ λ³΄λ‚Ό λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.
   - recv() μ†ŒμΌ“을 ν†΅ν•΄ λ°μ΄ν„°λ₯Ό λ°›μ„ λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.

5. μ‹œκ°„ κ΄€λ ¨ μ‹œμŠ€ν…œ ν˜ΈμΆœ
   - time() ν˜„μž¬ μ‹œκ°„을 κ°€μ Έμ˜¬ λ•Œ μ‚¬μš©λ˜λŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœ.


μ΄λŸ¬ν•œ μ‹œμŠ€ν…œ ν˜ΈμΆœλ“€μ€ μš΄μ˜μ²΄μ œκ°€ μ œκ³΅ν•˜λŠ” μ„œλΉ„μŠ€μ— μ ‘κ·Όν•˜κΈ° μœ„ν•΄ μ‚¬μš©μž ν”„λ‘œκ·Έλž¨μ— μ˜ν•΄ ν˜ΈμΆœλ©λ‹ˆλ‹€. μ‚¬μš©μž ν”„λ‘œκ·Έλž¨μ€ μ΄λŸ¬ν•œ μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ μ‚¬μš©ν•˜μ—¬ 운영체제의 κΈ°λŠ₯을 ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 더 μžμ„Έν•œ μ‹œμŠ€ν…œ ν˜ΈμΆœμ€ https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.mdμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

Chromium OS Docs - Linux System Call Table

Linux System Call Table These are the system call numbers (NR) and their corresponding symbolic names. These vary significantly across architectures/ABIs, both in mappings and in actual name. This is a quick reference for people debugging things (e.g. secc

chromium.googlesource.com

 

 

 

λŒ“κΈ€