2017-02-15 21 views
0

ioctl으로 놀고 있었는데이 질문이 저에게 나왔습니다. 나는 시스템의 기본 동기 호출을 들었다왜 시스템 호출 수가 매우 제한적입니까?

  1. 배경은 허용 인터럽트 핸들러의 수는 매우 제한되어 있다는 점이다. 많은 OS들이 단지 하나의 인터럽트 번호 (리눅스의 경우 0x80)를 차지하지만 요청에 따라 다른 기능을 제공하기 위해 추가 인수를 허용하는 시스템 호출 (a.k.a. trap)의 추상화를 구현합니다.

  2. this thread은 실제로 시스템 호출 수가 너무 제한되어 있으므로 위에서 설명한 것과 동일한 이유가 다시 적용되어 ioctl이라는 것을 나타냅니다.

내 질문에. 왜 OS는 단지 충분한 시스템 콜을 제공하지 않고 ioctl을 제거하지 않습니까? (또는 그냥 더 나은 확장 성을 제공하기 위해 계층 적 구조를 만드는 것일뿐입니다)

답변

1

내 생각에 시스템 호출은 운영 체제 커널이 사용자 응용 프로그램에 제공하는 서비스 집합으로 볼 수 있지만, ioctl은 특정 장치 (또는 드라이버)에 사용자 지정 명령을 보낼 수있는 이러한 서비스 중 하나.

드라이버를 개발할 때 ioctl 요청에 대한 처리기를 작성할 수 있습니다. 자신의 시스템 호출을 구현하여 같은 일을 관리하는 것은 몇 가지 단점이 있습니다

  • 구현은 드라이버, 다른 구성 요소는 아마 그것을 사용하지 않습니다에 고유 한,
  • 는 쉬운 일이 아닙니다 새로운 시스템 호출을 추가 - Windows에서 , Windows에서 Patchguard (커널 패치 보호),
  • 으로 인해 실제로는 불가능합니다. 커널은 IOCTL 요청에 대한 I/O 버퍼의 "유효성 검사"에 도움이 될 수 있으므로 직접 구현하여 모든 작업을 수행해야합니다 자신의 시스템 호출.

readwrite에 대한 일반화로 ioctl을 볼 수 있습니다. 대상 (일반적으로 커널 드라이버)에서 요구되는 동작을 정의하는 제어 코드와 함께 입력 및 출력 버퍼를 모두 제공 할 수 있습니다.

+0

나는 당신의 대답이 앞서 말한 게시물보다 더 의미가 있다고 생각합니다. 시스템 호출은 운영체제가 CPU와 상호 작용할 수있는 커스터마이징 가능한 핸들러와 같지만 OS 내의 'ioctl'은 사용자 공간 애플리케이션과 커널 간의 상호 작용을위한 커스터마이징 가능한 핸들러인가? – wlnirvana

+0

시스템 호출 핸들러는 usermode와 kernelmode 사이의 통신 메커니즘으로 OS 커널에 의해 정의됩니다 (CPU는 사용자와 커널 모드를보다 쉽고 저렴하게 전환 할 수 있도록 특별한 지침을 제공함으로써 도움을 줄 수 있습니다). 개별 시스템 호출을 구현하는 고정 된 배열의 루틴). 'ioctl'과 몇 가지 다른 시스템 호출을 위해 생성 된 요청은 대개 ioctl 타겟을 담당하는 드라이버에게 보내 지므로'ioctl'은 개발자에 의해 (문서화 된 방식으로) 커스터마이징 될 수 있습니다. –