장치 드라이버가 여러 번 호출되면 커널이 여러 프로세스를 생성합니까?

장치 드라이버가 여러 번 호출되면 커널이 여러 프로세스를 생성합니까?

open("/dev/mydrievr")여러 프로그램에서 장치 드라이버를 여러 번 호출하면 어떻게 되나요?

각 통화에 대한 프로세스를 만드시겠습니까?

프로세스 대신 스레드를 인스턴스화할 수 있습니까?

답변1

대부분의 경우 커널 요청은 새로운 프로세스나 스레드를 생성하지 않습니다. 호출 스레드의 컨텍스트에서 서비스를 제공합니다. 즉, 시스템 호출은 스케줄링 측면에서 커널로 전환되지 않습니다. 커널은 필요할 때 호출되는 별도의 프로세스가 아닙니다. 귀하의 예에서 각 호출은 open호출 프로그램의 컨텍스트에서 처리됩니다.

일부 장치 드라이버는 프로세스 컨텍스트 외부의 작업을 처리할 수 있어야 합니다.예를 들어처리 시간이 길어지는 중단을 처리합니다. 이 유형의 드라이버는작업 대기열. 커널에서 작업 대기열은 스레드를 효과적으로 사용하지만 외부에는 프로세스로 나타납니다. Linux에서 프로세스와 스레드 사이의 구별은 커널 스레드의 맥락에서는 그다지 의미가 없습니다. 그들은 모두 동일한 주소 공간을 공유하고 스케줄링 관점에서 볼 때 프로세스와 스레드는 어쨌든 동일합니다.

답변2

"장치 드라이버"에 대한 귀하의 이해가 올바르지 않습니다.

귀하의 공개 호출 예제는 "장치 드라이버를 호출"하지 않고 장치를 엽니다. 일반적으로 장치 드라이버와 장치는 프로세스를 전혀 생성하지 않습니다.

장치 파일은 일반적으로 물리적 하드웨어 장치에 해당하며 사용자 프로세스가 장치에 액세스하는 핸들 역할을 합니다. 장치는 장치 드라이버에 구현된 시스템 호출(예: 읽기, 쓰기, ioctl 등)을 지원합니다. 장치 드라이버는 각각 자체 장치 파일이 있는 여러 장치를 지원할 수 있습니다. 관련된 프로세스가 없습니다.

장치 드라이버의 목적 중 하나는 여러 프로세스와 커널의 장치에 대한 액세스를 조정하는 것입니다. (커널은 사용자 프로세스 없이 장치에 직접 액세스할 수 있지만 디스크와 같은 장치 드라이버를 통해 액세스할 수 있습니다.)

관련 정보