CS 지식/시스템프로그래밍
Chapter 5 : System Calls
goldpig
2023. 12. 25. 16:36
728x90
System Call Principles
- 응용 프로그램(Applications)과 하드웨어(hardware) 사이에 추가적인 계층을 두는 것의 장점은 다음과 같습니다:
- 프로그래밍이 쉬워집니다(easy to program): 사용자가 하드웨어 장치의 저수준(low-level) 프로그래밍 특성을 인지할 필요가 없어집니다.
- 시스템 보안이 증가합니다(Increasing system security): 커널이 인터페이스 수준에서 요청의 정확성을 확인할 수 있습니다.
- 프로그램의 이식성이 증가합니다. (Increase program portability)
- 시스템 호출에 대해:
- UNIX 시스템은 사용자 모드(User Mode) 프로세스와 하드웨어 장치 간의 대부분의 인터페이스를 커널로 발행된 시스템 호출을 통해 구현합니다.
- 사용자 모드 프로세스와 하드웨어 장치 사이의 인터페이스입니다. (interfaces between User Mode processes and hardware devices)
- 커널 서비스를 요청하는 데 사용됩니다.
- System Call
- 소프트웨어 인터럽트를 통해 커널에 명시적으로 요청을 하는 것입니다.
- 커널 설계자의 관점에서 볼 때 커널에 속한 기능입니다.
- 일부 시스템 호출은 하나 이상의 인자를 필요로 합니다.
- 성공적인 종료를 의미하는 양수나 0 값을 반환합니다.
- 실패할 경우: -1을 반환하고 오류 코드를 errno에 설정합니다 (예: include/asm-i386/errno.h를 보세요).
- 시스템 호출은 사용자 공간의 libc에 있는 래퍼 루틴(예: _syscall3())으로 구현됩니다.
- 소프트웨어 인터럽트를 통해 커널에 명시적으로 요청을 하는 것입니다.
시스템 호출이 사용자 공간의 응용 프로그램과 커널 사이의 인터페이스 역할을 하며, 이를 통해 커널 서비스를 요청하고 결과를 반환하는 과정을 나타냅니다. 오류 발생 시 시스템 호출은 특정 오류 코드를 errno 변수에 설정하여, 호출한 프로그램이 오류를 처리할 수 있도록 정보를 제공합니다.
System Call Handling In x86/Linux
전반적인 시스템 콜 처리과정은 다음과 같습니다.
- Saves the contents of most registers in the Kernel Mode stack
- Handles the system call by invoking the system call service routine.
- Exits from the handler: restore the register and swtiches back to User Mode
728x90