Download VAX MP Technical Overview
Transcript
Per-unit registers described by UDATA_GBL have loctype set to REG_LOCTYPE_GBL_UNIT and are accessed with accessor method sim_reg::getloc_unit_idx(RUN_DECL, uint32 unit_index) whenever indexing is required. • Macros that define backing store location of virtual registers (HRDATA, DRDATA, ORDATA, FLDATA, GRDATA, BRDATA) had been split into two versions: xxDATA_GBL defines location for registers shared by all CPU units, xxDATA_CPU defines location of per-CPU registers private to each processor. For BRDATA registers, BRDATA_CPU used together with BRDATA_CPU_QPTR additionally define a per-cpu location for qptr field. Methods sim_reg::getqptr and sim_reg::setqptr had been provided to access qptr regardless of the kind of baking store in use. • Virtual device interrupt raising and dispatching mechanics has been revised to support multiprocessor environment. Some IO devices in the initial release of VAX MP normally do not have threads of their own and their implementation code executes in the thread context of one virtual processor or another, i.e. the context of the worker thread for some virtual processor. Other devices do have worker threads associated with them and can send interrupts from these threads (although in most cases they signal the completion of IO operation to the part of SIMH handler executing in the context of primary VCPU and performs post-processing there, such as queuing device event entries, before sending an interrupt to VAX level). Accordingly there are several scenarios for raising interrupts in VAX MP: 135 o When a per-CPU device raises an interrupt, this happens in the context of the thread executing the device’s owning processor. In this case processor’s thread sends the interrupt to the current processor. o Interrupts from system-wide (not per-CPU) devices are handled, by design, by the primary CPU (CPU0). 135 When a system-wide device raises an interrupt, the device can be executing in the context of any virtual processor in the system (unless guest OS affinity mask “pins” device to a particular virtual processor or processors), leading to this processor’s thread sending an interrupt to the CPU0. Thus, when system-wide device raises an interrupt, it can be sent from the execution context of any processor to CPU0. See discussion in section “Dispatching device interrupts” above. 119