NeXTSTEPDRIVERKIT:Chapter2 3

From 흡혈양파의 번역工房
Revision as of 05:26, 10 October 2017 by Onionmixer (talk | contribs) (NeXTSTEP DRIVER KIT 드라이버와 다른 드라이버들을 연결 내용 추가)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Connecting a Driver to Other Drivers

드라이버와 다른 드라이버들을 연결

The driverLoader program loads your driver's code into the kernel, either because you invoke it or as a result of the driver being specified in the system configuration. The driverLoader program uses the loadable kernel server mechanism and is described in Chapter 4. Once loaded, the driver needs to be connected with the appropriate direct and indirect device drivers that are already in the kernel.
driverLoader 프로그램은 드라이버를 호출하거나 시스템 구성에 지정된 드라이버의 결과로 드라이버의 코드를 커널에 로드합니다. driverLoader 프로그램은 로드 가능한 커널 서버 메커니즘을 사용하며 4 장에서 설명합니다. 로드된 드라이버는 커널에 이미 있는 직접 및 간접 장치 드라이버와 연결되어야 합니다.


For example, suppose you load a new indirect device driver that controls a SCSI scanner. The SCSI scanner driver works in combination with one or more SCSI controller drivers, so the SCSI scanner driver needs to find each IOSCSIController object in the system.
예를 들어, SCSI 스캐너를 제어하는 ​​새로운 간접 장치 드라이버를 로드한다고 가정합니다. SCSI 스캐너 드라이버는 하나 이상의 SCSI 컨트롤러 드라이버와 함께 작동하기 때문에, SCSI 스캐너 드라이버는 시스템에서 각 IOSCSIController 개체를 찾아야합니다.


For another example, consider a direct device driver that manages a SCSI controller. Once the driver is loaded and initialized, you want to give all of the SCSI indirect devices (such as disks and scanners) a chance to connect to this controller. Each SCSI disk that's attached to the controller needs a new IODisk instance that's connected to an instance of the IOSCSIController.
또 다른 예로서, SCSI 컨트롤러를 관리하는 직접 장치 드라이버를 고려해 보겠습니다. 드라이버가 로드되고 초기화되면 모든 SCSI 간접 장치 (예 : 디스크 및 스캐너)에 이 컨트롤러에 연결할 기회를 부여하려고 합니다. 컨트롤러에 연결된 각 SCSI 디스크에는 IOSCSIController 의 인스턴스에 연결된 새로운 IODisk 인스턴스가 필요합니다.


Terminology: Protocols
용어 : 프로토콜(Protocols)


A protocol is a list of method declarations, unattached to a class definition. Any class, and perhaps many classes, can implement a particular protocol.
프로토콜은 클래스 정의에 연결되지 않은 메소드의 정의(definition) 목록입니다. 모든 클래스 및 아마도 많은 클래스가 특정 프로토콜을 구현할 수 있습니다.


Protocols are discussed in Chapter 3 of NEXTSTEP Object-Oriented Programming and the Objective C Language.
프로토콜은 NEXTSTEP Object-Oriented Programming and the Objective C Language 3장에서 논의됩니다.



다른 객체의 발견

When any IODevice subclass is instantiated and initialized, it's automatically connected with any IODevices in the system that need to work with it. Here's how this happens:
임의의 IODevice 하위 클래스가 인스턴스화되고 초기화되면, 시스템에서 작업해야하는 IODevices 와 자동으로 연결됩니다. 이런 작용이 일어나는 방법은 다음과 같습니다.

  • All IODevices to which an indirect device can be connected must declare their exported interface as an Objective C protocol. For example, the IOSCSIController class declares its exported methods (the messages that indirect devices can send it) in the IOSCSIControllerExported protocol.
    간접 장치를 연결할 수있는 모든 IODevice 는 내보내는(exported) 인터페이스를 Objective C 프로토콜로 선언해야합니다. 예를 들어, IOSCSIController 클래스는 IOSCSIControllerExported 프로토콜에서 내보낸 메소드 (간접 디바이스가 보낼 수있는 메시지)를 선언합니다.
  • All IODevices that are indirect device drivers must implement the requiredProtocols class method. This method returns a list of protocols the driver's direct devices must conform to.
    간접 장치 드라이버인 모든 IODevices 는 requiredProtocols 클래스 메서드를 구현해야 합니다. 이 메서드는 드라이버의 직접 장치가 준수해야하는 프로토콜 목록을 반환합니다.
  • Each IODevice must implement the deviceStyle class method, which identifies the driver as a direct, indirect, or pseudo device driver.
    각 IODevice 는 드라이버를 직접, 간접 또는 의사 디바이스 드라이버로 식별하는 deviceStyle 클래스 메소드를 구현해야 합니다.
  • Each IODevice instance must invoke registerDevice when it's initialized (usually in its implementation of initFromDeviceDescription:). This method tells the rest of the system that the driver exists and also probes all indirect IODevices that require this object's protocols, giving them a chance to connect to this object.
    각 IODevice 인스턴스는 초기화될 때 registerDevice 를 호출해야 합니다 (일반적으로 initFromDeviceDescription: 구현시). 이 메서드는 나머지 시스템에 드라이버가 있음을 알리고, 이 객체의 프로토콜이 필요한 간접 IODevices 를 모두 검사해서 이 객체에 연결할 기회를 제공합니다.


When driver code is loaded into the kernel, the kernel probes the newly added class and possibly other classes in the system. The result is that each class is probed exactly once per object that it might need to connect to. The kernel probes classes with the probe: method as described below.
드라이버 코드가 커널에 로드되면, 커널은 새로 추가된 클래스 및 시스템에서 가능한 다른 클래스를 검사합니다. 결과적으로 각 클래스는 연결할 필요가 있는 객체당 정확히 한 번씩 탐색됩니다. 커널은 아래에 설명 된대로 probe: 메소드를 사용해서 클래스를 조사(probes)합니다.


If the newly loaded class is an indirect device driver (the system determines this using the deviceStyle class method), the kernel does the following:
간접 장치 드라이버 (시스템이 deviceStyle 클래스 메소드를 사용해서 이를 결정하면) 커널은 다음을 수행합니다:

    
For each IODevice object (not just IODirectDevices)
각 IODevice 객체 (IODirectDevices 뿐만 아니라)
    If the object supports all protocols needed by the new class
    만약 객체가 새로운 클래스에 필요한 모든 프로토콜을 지원하는 경우라면
        The kernel creates an IODeviceDescription that has this object as the directdevice
        커널은 이 객체를 직접 디바이스로 가지는 IODeviceDescription 을 생성
            The kernel probes the new class with the IODeviceDescription as its parameter
            커널은 IODeviceDescription 을 매개 변수로 사용해서 새 클래스를 검사


If the newly loaded class is a direct device or pseudo device driver, the kernel simply probes the new class, without trying to connect it yet.
새로 로드 된 클래스가 직접 장치 또는 의사 장치 드라이버인 경우라면, 커널은 연결을 시도하기 전에 먼저 새 클래스를 탐색합니다.


Whenever a device of any style invokes registerDevice—which should happen whenever a driver object is initialized—the following happens:
어떤 스타일의 장치가 registerDevice(드라이버 개체가 초기화 될 때마다 발생해야 함)를 호출할 때마다 다음과 같은 일이 발생합니다.

    
For each indirect device class
각 간접 장치 클래스
    If the newly registered object supports all protocols needed by the indirect driver
    만약 새로 등록 된 객체가 간접 드라이버에 필요한 모든 프로토콜을 지원하는 경우라면
        The kernel creates an IODeviceDescription that has this object as the direct device
        커널은 이 객체를 직접 디바이스로 가지는 IODeviceDescription 을 생성
            The kernel probes the indirect device class, giving it the IODeviceDescription
            커널은 간접 장치 클래스를 조사해서 IODeviceDescription 을 제공

In this way, every indirect driver is probed with the device description for every possible direct driver object it could feasibly be connected to. When the indirect driver's probe: method examines the direct device description, it instantiates itself only when the indirect device it supports is physically connected to the direct device, that is, when the hardware is really present.
이런 식으로 모든 간접 드라이버는 가능한 모든 직접 드라이버 객체에 대한 장치 설명(device description)을 기반으로 조사합니다. 간접 드라이버의 probe: 메서드는, 직접 장치 설명을 검사할 때 직접 장치에서 지원하는 간접 장치가 직접 장치에 물리적으로 연결되어 있을 때, 즉 하드웨어가 실제로 존재할 때에만 인스턴스를 생성합니다.