시스템콜 예제

일부 시스템에서는 프로세스가 다른 프로세스가 실행을 완료할 때까지 기다릴 수 있습니다. 이는 부모 프로세스가 자식 프로세스를 만들고 자식 프로세스가 실행될 때까지 부모 프로세스의 실행이 일시 중단될 때 발생합니다. 부모 프로세스의 일시 중단은 wait() 시스템 호출에서 발생합니다. 자식 프로세스가 실행을 완료하면 컨트롤이 상위 프로세스로 반환됩니다. 기록된 후 (공식) 시스템 호출을 등록하는 것은 간단합니다: 일부 일반적인 시스템 호출은 생성, 삭제, 읽기, 쓰기, 재배치 또는 닫힙니다. 또한 파일 특성인 파일 속성을 얻고 설정해야 합니다. OS는 이러한 시스템 호출을 위해 API를 제공하는 경우가 많습니다. 다음 예제는 재부팅() 시스템 호출입니다. 첫 번째 단계에서 호출 프로세스에 CAP_SYS_REBOOT가 있는지 확인하는 방법에 유의하십시오. 하나의 조건문이 제거된 경우 모든 프로세스가 시스템을 재부팅할 수 있습니다. 이전 x86 메커니즘은 호출 게이트입니다.

프로그램이 운영 체제가 사전에 설정하는 안전 제어 전송 메커니즘을 사용하여 커널 함수를 직접 호출할 수 있습니다. 이 방법은 x86 메모리 세분화를 사용하는 far 호출(현재 코드 세그먼트[11]과 다른 세그먼트에 있는 프로시저에 대한 호출)의 요구 사항과 이로 인해 발생하는 이식성 및 존재로 인해 인기가 없었습니다. 위에서 언급 한 빠른 지침의. Linux에서 시스템 호출의 실제 구현은 시스템 호출 처리기의 동작과 관련이 없습니다. 따라서 Linux에 새 시스템 호출을 추가하는 것은 비교적 쉽습니다. 어려운 작업은 시스템 호출을 설계하고 구현하는 데 있습니다. 커널에 등록하는 것은 간단합니다. 명시적으로 지정되지는 않았지만 시스템 호출에는 다음 후속 syscall 번호(이 경우 338)가 지정됩니다. 새 시스템 호출의 인수, 반환 값 및 오류 코드를 생각해 보십시오. 시스템 호출에는 가능한 한 적은 수의 인수로 깔끔하고 간단한 인터페이스가 있어야 합니다. 시스템 호출의 의미 체계와 동작이 중요합니다.

기존 응용 프로그램이 의존하게 되므로 변경해서는 안 됩니다. 많은 시스템 호출은 전달 호환성을 해결하기 위한 플래그 인수를 제공합니다. 플래그는 단일 시스템 호출(허용되지 않음)에서 서로 다른 동작을 다중화하는 데 사용되지 않지만 이전 버전과의 호환성을 손상시키거나 새 시스템 호출을 추가할 필요 없이 새 기능과 옵션을 사용하도록 설정합니다.

Posted in Bez kategorii