Changes between Version 30 and Version 31 of io_operations

Nov 22, 2017, 1:09:24 PM (6 years ago)



  • io_operations

    v30 v31  
    9393The ''device'' argument is the extended pointer on the device descriptor.
    95 == F) Implementation ==
     95== F) I/O operation ==
    97 This general I/O operation mechanism involves generally three clusters : client cluster / server cluster / IO cluster. But it does not use any RPC:
     97The I/O operation mechanism involves generally three clusters : client cluster / server cluster / IO cluster. It does not use any RPC:
    9898 * To post a new command in the waiting queue of a given (remote) device descriptor, the client thread uses only few remote accesses to be registered in the distributed XLIST rooted in the server cluster.
    9999 * To launch the I/O operation on the (remote) peripheral, the server thread uses only remote accesses to the physical registers located in the I/O cluster.
    100100 * To complete the I/O operation, the ISR running on the client cluster accesses peripheral registers in the I/O cluster, reports the I/O operation status in the command descriptor, and unblocks the client and server threads, using only local or remote accesses.
     102== G) Interrupts Routing ==
     104The completion of an I/O operation is signaled by the involved hardware device using an interrupt. This interrupt must be handled by the core running the server thread that launched the I/O operation. Therefore, the interrupt must be routed to the cluster containing the device descriptor involved in the I/O operation. ALMOS-MKH makes the assumption that interrupt routing (from peripherals to cores) is done by a dedicated hardware device, called PIC (Programmable Interrupt Controller). The main service provide by the PIC device is to allow the OS to route any IRQ (generated by a given peripheral channel to any core.
     106This generic PIC device is supposed to be implemented by a ''distributed'' hardware infrastructure containing two types of hardware components:
     107 * The IOPIC component (one single component in I/O cluster) interfaces the externals peripheral IRQs (one IPQ per channel) to the PIC infrastructure
     108 * The LAPIC components (one component per cluster) interfaces the PIC infrastructure to the local cores in a given cluster.
     109The actual interrupt routing is defined during the PIC device initialization, using the architecture specific PIC driver. The PIC device is the first device initialized by the kernel_init() function.