Subsystem Class

This class represents the persistent configuration state of the RTX64 real-time Subsystem. Configuration changes made via this class become persistent immediately, but they do not take effect until the next time the real-time Subsystem is started.
Inheritance Hierarchy
SystemObject
  IntervalZero.RTX64RTX64Object
    IntervalZero.RTX64.ConfigSubsystem

Namespace:  IntervalZero.RTX64.Config
Assembly:  IntervalZero.RTX64 (in IntervalZero.RTX64.dll) Version: 3.3.0.0 (File version: 3.5.0)

Syntax
public class Subsystem : RTX64Object, IConfigSubsystem

The Subsystem type exposes the following members.

Constructors
NameDescription
Public methodSubsystem
Default constructor.
Top
Properties
NameDescription
Public propertyCreationTime
Date and time the object was created.
(Inherited from RTX64Object.)
Public propertyDefaultTimeQuantum
Accesses the configuration parameter that specifies the default Time Quantum (in microseconds) for newly created real-time threads. By default, RTX64 runs the highest-priority thread, either until completion or until it yields. There is no round robin scheduling within a given priority level. To make RTX64 perform time-sliced round robin scheduling within a priority level, set the default Time Quantum to a non-zero value. A value of 0 means the highest-priority thread runs until completion or until it yields (i.e., no round robin scheduling of threads within a given priority level). A non-zero value enables round robin scheduling of threads within a given priority level using the specified value as the Time Quantum. If this property is changed, the real-time Subsystem must be restarted for the change to take effect.
Public propertyDisableLocalMemoryExpansion
This property accesses the configuration parameter that specifies whether automatic expansion of Local Memory is disabled. The value true means automatic expansion of Local Memory is disabled. The value false means automatic expansion of Local Memory is enabled. When automatic expansion of Local Memory is enabled, the Local Memory pool will automatically allocated additional memory from Windows when it runs low. This automatic expansion is non-deterministic, because it requires allocating memory from Windows. If this parameter is changed, the real-time Subsystem must be restarted for the change to take effect.
Even if property UseLocalMemory is set to false, this property's value still affects real-time processes which are spawned with Local Memory enabled.
Public propertyDisableLocalMemoryShrink
This property accesses the configuration parameter that specifies whether automatic shrinking of Local Memory is disabled. The value true means automatic shrinking of Local Memory is disabled. The value false means automatic shrinking of Local Memory is enabled. When automatic shrinking of Local Memory is enabled, the Local Memory pool can return memory to Windows when a real-time process terminates. If this property is changed, the real-time Subsystem must be restarted for the change to take effect.

NOTE: Even if property UseLocalMemory is set to false, this property's value still affects real-time processes which are spawned with Local Memory enabled.

Public propertyDisableSpeedStep
This property specifies whether the Subsystem should disable SpeedStep power optimization. If this property is true, the Subsystem disables SpeedStep power optimization, otherwise it does not disable it. When this property is set to true, SpeedStep is only disabled when the RTX64 Subsystem is running.
Public propertyEnabledProcessors
Returns the total number of processors on the system, which can exceed the sum of properties WindowsProcessors and RtssProcessorsActual in the case where the RTX64 Subsystem is unable to start some of the requested RTSS processors (for instance, if the Runtime license limits the number of RTSS processors). The value of this property is only meaningful after the real-time Subsystem has been started at least once. If the real-time Subsystem has never been started, this property's value is 0.
Public propertyEnableLocalMemoryAccesses the configuration parameter that specifies whether the RTX64 Subsystem uses Local memory (MSpaces) or Windows memory. If true, the real-time Subsystem memory allocation uses Local memory MSpaces. If false, the Subsystem allocates memory by requesting it from Windows.
Public propertyExceptionBehavior
Controls Subsystem behavior when an exception occurs and that exception is configured to stop at the first exception (via property UseStructuredExceptionHandling). If this property is set to false (the default), RTX64 will terminate or freeze the process (according to the value of property FreezeFaultingProcessOnException). When this property is set to true, RTX64 will halt the system with a green screen and generate a memory dump. If this property is changed, the real-time Subsystem must be restarted for the change to take effect.
Public propertyFreeStackOnTerminateThread
Accesses the configuration parameter that specifies cleanup behavior when function TerminateThread is called. If set to true, RTX64 frees the memory allocated to the terminated thread's stack. If set to false, RTX64 does not free the memory allocated to the terminated thread's stack. If this parameter is changed, the real-time Subsystem must be restarted for the change to take effect.
Public propertyFreezeFaultingProcessOnException
Accesses the configuration parameter that specifies whether RTX64 terminates or freezes a faulting RTSS process (i.e., a process that has caused an exception) or a process in which a run-away thread has been detected (see property WatchdogEnabled). If set to true, a RTSS process in which a thread faults or becomes a run-away thread is frozen. If set to false, the process is terminated. If this property is changed, the real-time Subsystem must be restarted for the change to take effect.
Public propertyHALTimerPeriod
Accesses the configured HAL timer period (in microseconds) for the RTX64 Subsystem. This property must be set to a value between 1 and 1000 (inclusive). If any other value is assigned to this property, an exception of type RTX64InvalidPropertyValueException is thrown. The default value is 100 microseconds. Use caution when setting the HAL timer period below 100 microseconds: fully test the timer period on all systems on which you will deploy. If the HAL timer period is too small, it can cause Windows to hang. If this property is changed, the real-time Subsystem must be restarted for the change to take effect.
Protected propertyIsDisposed
True if the object has been disposed, false otherwise.
(Inherited from RTX64Object.)
Public propertyLocalMemoryPoolExpansionSize
This property accesses the configuration parameter that specifies the minimum expansion size (in bytes) of the Local Memory pool. If this property is changed, the real-time Subsystem must be restarted for the change to take effect.

NOTE: Even if property UseLocalMemory is set to false, this property's value still affects real-time processes which are spawned with Local Memory enabled.

Public propertyLocalMemoryPoolInitialSize
This property accesses the configuration parameter that specifies the initial size (in bytes) of the Local Memory pool. If this property is changed, the real-time Subsystem must be restarted for the change to take effect.

NOTE: Even if property UseLocalMemory is set to false, this property's value still affects real-time processes which are spawned with Local Memory enabled.

Public propertyMinidump
Accesses the configuration parameter that specifies whether RTX64 includes additional RTSS-specific information in a Windows-generated minidump. If set to true, additional information is included in minidumps, otherwise additional information is not included in minidumps. If this property is changed, the real-time Subsystem must be restarted for the change to take effect. This property is deprecated.
Public propertyNALExtMSpacePoolMinimumSizeAccesses the configuration parameter that specifies the minimum size, in kilobytes, of the local pool within the Network Abstraction Layer (NAL) external MSpace.
Public propertyNALMSpacesPoolExpandableAccesses the configuration parameter that specifies whether the local pool within the Network Abstraction Layer (NAL) MSpaces is expandable. If true, the local pool within the NAL MSpace is expandable by the amount specified by NALMSpacesPoolExpandSize when depleted.
Public propertyNALMSpacesPoolExpandSizeAccesses the configuration parameter that specifies the size, in kilobytes, by which to expand the local pool within the Network Abstraction Layer (NAL) MSpaces when NALMSpacesPoolExpandable is set to true.
Public propertyName
Name of the object.
(Inherited from RTX64Object.)
Public propertyPriorityInversionEnabled
Accesses the priority inversion protocol configuration state of the Subsystem. If set to true, a "tiered demotion" priority inversion protocol is used. If set to false, no priority inversion protocol is enabled. If this property is changed, the real-time Subsystem must be restarted for the change to take effect.
Public propertyProcessExtMSpacePoolMinimumSizeAccesses the configuration parameter that specifies the minimum size, in kilobytes, of the local pool within the RTSS process external MSpace.
Public propertyProcessIntMSpacePoolMinimumSizeAccesses the configuration parameter that specifies the minimum size, in kilobytes, of the local pool within the RTSS process internal MSpace.
Public propertyProcessMSpacesPoolExpandableAccesses the configuration parameter that specifies whether the local pool within the RTSS process MSpace is expandable. If true, the local pool within the RTSS process MSpace is expandable by the amount specified by ProcessMSpacesPoolExpandSize when depleted.
Public propertyProcessMSpacesPoolExpandSizeAccesses the configuration parameter that specifies the size, in kilobytes, by which to expand the local pool within the RTSS process MSpace when ProcessMSpacesPoolExpandable is set to true.
Public propertyProcessMSpacesPoolShrinkableAccesses the configuration parameter that specifies whether the local pool within the RTSS process MSpace is shrinkable.
Public propertyRDTFeatureMode CATModeRetrieves the current Intel® Cache Allocation Technology (CAT) mode for performance differentiation among RTSS threads.
Public propertyRDTFeatureMode MBAModeRetrieves the current Intel® Memory Bandwidth Technology (MBA) mode for performance differentiation among RTSS threads.
Public propertyRDTState RDTRetrieves the current state of Intel® Resource Director Technology (RDT) performance optimization.
Public propertyRestartNeeded
This property's value indicates whether the real-time Subsystem needs to be restarted or the computer needs to be restarted in order for configuration changes made with this class to take effect, even if the changes were made in another process. If the value of this property is RestartKind.NONE, no restart of the real-time Subsystem or computer is needed. If the value of this property is RestartKind.SUBSYSTEM, the real-time Subsystem needs to be restarted. If the value of this property is RestartKind.COMPUTER, the computer needs to be restarted.
Public propertyRtssProcessorsActual
Returns the actual number of RTX64 processors being used by the real-time Subsystem. The value of this property can differ from the value of property RtssProcessorsRequested if the real-time Subsystem is unable to start some of the requested RTSS processors. The value of this property is only meaningful after the real-time Subsystem has been started at least once. If the real-time Subsystem has never been started, this property's value is 0. See method SetWindowsAndRtssProcessorsRequested().
Public propertyRtssProcessorsRequested
Read-only. Returns the requested number RTSS processors. If processor configuration has not happened yet, this property will return a RTX64NotConfiguredException, and the real-time Subsystem cannot be started. See method SetWindowsAndRtssProcessorsRequested().
Public propertySearchPath
This property's value is a list of strings specifying directories to be searched when a real-time process calls LoadLibrary or RtCreateProcess and does not pass an absolute pathname to the RTDLL or RTSS file. Each element of this array must be an absolute path ending with a '\' character.
Public propertyStartMode
Accesses the RTSS boot start mode of the real-time Subsystem. The value of this property is one of the SubsystemStartMode enumerators.
Public propertySystemExtMSpacePoolCommitAccesses the configuration parameter that specifies whether the local pool within the system process external MSpace is committed at startup.
Public propertySystemMSpacesPoolExpandableAccesses the configuration parameter that specifies whether the local pool within the system process MSpace is expandable by the amount specified by SystemMSpacesPoolExpandSize when depleted.
Public propertySystemMSpacesPoolExpandSizeAccesses the configuration parameter that specifies the size, in kilobytes, by which to expand the local pool within the system process MSpace when SystemMSpacesPoolExpandable is set to true.
Public propertySystemExtMSpacePoolMinimumSizeAccesses the configuration parameter that specifies the minimum size, in kilobytes, of the local pool within the system process internal MSpace.
Public propertySystemIntMSpacePoolMinimumSizeAccesses the configuration parameter that specifies the minimum size, in kilobytes, of the local pool within the system process external MSpace.
Public propertySystemMSpacesPoolShrinkableAccesses the configuration parameter that specifies whether the local pool within the system process MSpace is shrinkable.
Public propertyTCPIPExtMSpacePoolMinimumSizeAccesses the configuration parameter that specifies the minimum size, in kilobytes, of the local pool within the RT-TCP-IP Stack external MSpace.
Public propertyTCPIPMSpacesPoolExpandableAccesses the configuration parameter that specifies whether the local pool within the RT-TCP/IP Stack MSpace is expandable. If true, the local pool within the RT-TCP/IP Stack MSpace is expandable by the amount specified by TCPIPMSpacesPoolExpandSize when depleted.
Public propertyTCPIPMSpacesPoolExpandSize Accesses the configuration parameter that specifies the size, in kilobytes, by which to expand the local pool within the RT-TCP/IP Stack MSpace when TCPIPMSpacesPoolExpandable is set to true.
Public propertyUseLocalMemory
This property accesses the configuration parameter that specifies whether Local Memory is used by default in newly spawned real-time processes. The value true means real-time processes will use the Local Memory Pool by default. The value false means real-time processes will use Windows memory by default. If this property is changed, the real-time Subsystem must be restarted for the change to take effect.
Public propertyUseStructuredExceptionHandling
This property controls how exception handling works. If this parameter is changed, the real-time Subsystem must be restarted for the change to take effect. When this property is false and an exception occurs, RTX64 will either freeze the process, terminate the process, or halt the system with a green screen (depending the values of properties FreezeFaultingProcessOnException and ExceptionBehavior). When this property is true and an exception occurs, the exception is handled using RTX64 structured exception handling, and, if the exception is unhandled, the process is frozen/terminated (according to the value of property FreezeFaultingProcessOnException).
Public propertyWatchdogEnabled
Accesses the configuration parameter that enables or disables runaway real-time thread detection. If this configuration parameter is set to true, runaway thread detection is enabled, otherwise it is disabled. If a real-time thread executes continuously for more than the amount of time specified by property IntervalZero.RTX64.Config.Subsystem.WatchdogTimeout, all real-time threads are suspended on all processors, and those real-time processes must be terminated with the RTSSkill utility. In a production environments, it is recommended this this configuration parameter be set to false to disable runaway thread detection.
Public propertyWatchdogTimeout
Accesses the timeout (in microseconds) for a real-time thread to be considered a runaway thread. If this configuration parameter is set to 0, runaway thread detection is disabled. If a real-time thread executes continuously for more than this amount of time, all real-time threads are suspended on all processors, and those real-time processes must be terminated with the RTSSkill utility. In production environments, it is recommended this this configuration parameter be set to 0 to disable runaway thread detection.
Public propertyWindowsEnergyPerformanceBiasConfigures the Windows Processor Energy/Performance Bias setting.
Public propertyWindowsProcessors
Read-only. Returns the configured number of Windows processors. If processor configuration has not happened yet, this property will return a RTX64NotConfiguredException, and the real-time Subsystem cannot be started. See method SetWindowsAndRtssProcessorsRequested().
Public propertyZeroMemoryAtAllocationAccesses the configuration parameter that specifies whether the memory allocated by malloc or similar functions is initialized to zero (according to the C99 specification). This setting is disabled by default, as zeroing memory causes a performance lag. Therefore, memory requests from some C-Runtime functions or RTAPIs will not be initialized to zero at allocation. However, by definition, memory requests from calloc/_recalloc, VirtualAlloc, and HeapAlloc/HeapReAlloc with the HEAP_ZERO_MEMORY flag will be initialized to zero at allocation, regardless of the value of this property.
Top
Methods
NameDescription
Public methodAddScheduledProcess
Adds a ScheduledProcess to be started on start up of the Subsystem.
Public methodDispose
Dispose method.
(Inherited from RTX64Object.)
Public methodGetArrayOfScheduledProcesses
Returns a list of ScheduledProcess Objects. This can be used to make changes to scheduledProcesses that have already been added.

NOTE: The order of the scheduled tasks is the order by which they will be executed. You can remove scheduled tasks by calling .Delete() on one of the objects returned in the list. This object becomes disposed and will throw an exception if any of its properties are referenced again. If another instance of this list exists and contains the object that was deleted from the other list it too will crash if any properties of the deleted are referenced.

Protected methodOnNotifyPropertyChanged
Called when a property is changed
(Inherited from RTX64Object.)
Public methodRemoveScheduledProcess
Removes a Process from the List of Scheduled Processes
Public methodReset
Resets all Subsystem configuration parameters to their default values. After this method is called, the machine must be rebooted for the changes to take effect.
Public methodResetDefaultTimeQuantum
Resets property DefaultTimeQuantum to its default value (0). After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetDisableLocalMemoryExpansion
Resets property DisableLocalMemoryExpansion to its default value (false). After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetDisableLocalMemoryShrink
Resets property DisableLocalMemoryShrink to its default value (false). After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetDisableSpeedStep
Resets property DisableSpeedStep to its default value (true). After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetEnableLocalMemory Resets property EnableLocalMemory to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetExceptionBehavior
Reset the Exception behavior property to it's default value of false. false give it the behavior to halt the process.
Public methodResetFreeStackOnTerminateThread
Resets property FreeStackOnTerminateThread to its default value (false). After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetFreezeFaultingProcessOnException
Resets property FreezeFaultingProcessOnException to its default value (false). After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetHALTimerPeriod
Resets property HALTimerPeriod to its default value (100). After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetLocalMemoryPoolExpansionSize
Resets property LocalMemoryPoolExpansionSize to its default value (1,048,576 bytes -- 1 MB). After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetLocalMemoryPoolInitialSize
Resets property LocalMemoryPoolInitialSize to its default value (1,048,576 bytes). After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetMinidump
Resets property Minidump to its default value (true). After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetNALExtMSpacePoolMinimumSize Resets property NALExtMSpacePoolMinimumSize to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetNALMSpacesPoolExpandable Resets property NALMSpacesPoolExpandable to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetNALMSpacesPoolExpandSize Resets property NALMSpacesPoolExpandSize to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetPriorityInversionEnabled
Resets property PriorityInversionEnabled to its default value (true). After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetProcessExtMSpacePoolMinimumSize Resets property ProcessExtMSpacePoolMinimumSize to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetProcessIntMSpacePoolMinimumSize Resets property ProcessIntMSpacePoolMinimumSize to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetProcessMSpacesPoolExpandable Resets property ProcessMSpacesPoolExpandable to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetProcessMSpacesPoolExpandSize Resets property ProcessMSpacesPoolExpandSize to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetProcessMSpacesPoolShrinkable Resets property ProcessMSpacesPoolShrinkable to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetRDTFeatureMode CATMode Method Resets property RDTFeatureMode CATMode to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetRDTFeatureMode MBAMode Method Resets property RDTFeatureMode MBAMode to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetRDTState RDT Method Resets property RDTState RDT to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetSearchPath
Resets property Path to its default value of an empty array of strings. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetStartMode
Resets property StartMode to its default value (SubsystemStartMode.DEMAND_START).
Public methodResetSystemExtMSpacePoolCommit Resets property SystemExtMSpacePoolCommit to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetSystemExtMSpacePoolMinimumSize Resets property SystemExtMSpacePoolMinimumSize to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetSystemIntMSpacePoolMinimumSize Resets property SystemIntMSpacePoolMinimumSize to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetSystemMSpacesPoolExpandable Resets property SystemMSpacesPoolExpandable to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetSystemMSpacesPoolExpandSize Resets property SystemMSpacesPoolExpandSize to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetSystemMSpacesPoolShrinkable Resets property SystemMSpacesPoolShrinkable to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetTCPIPExtMSpacePoolMinimumSize Resets property TCPIPExtMSpacePoolMinimumSize to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetTCPIPMSpacesPoolExpandable Resets property TCPIPMSpacesPoolExpandable to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetTCPIPMSpacesPoolExpandSize Resets property TCPIPMSpacesPoolExpandSize to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetUseLocalMemory
Resets property UseLocalMemory to its default value (false). After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetUseStructuredExceptionHandling
Resets property UseStructuredExceptionHandling to its default value.
Public methodResetWatchdogEnabled
Resets property WatchdogEnabled to its default value (true). After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetWatchdogTimeout
Resets property WatchdogTimeout to its default value (5,000,000 microseconds). After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodResetZeroMemoryAtAllocation Resets property WatchdogEnabled to its default value. After this method is called, the real-time Subsystem must be restarted for the change to take effect.
Public methodSetHALTimerPeriodSets the HAL timer period (in microseconds) for the RTX64 Subsystem.
Public methodSetWindowsAndRtssProcessorsRequested
This method atomically sets the requested number of Windows and RTSS processors. If the requested number of RTSS processors is changed, the real-time Subsystem must be restarted for the change to take effect. If the requested number of Windows processors is changed, the machine must be rebooted for the change to take effect.
Top
Events
NameDescription
Public eventPropertyChanged
Event Fired when a property value is changed
(Inherited from RTX64Object.)
Top
Fields
NameDescription
Public fieldStatic memberHAL_TIMER_PERIOD_1
These constants specify some commonly-used HAL timer period values (in microseconds) that can be assigned to property HALTimerPeriod.
Public fieldStatic memberHAL_TIMER_PERIOD_2This represents a HAL timer period of 2 microseconds.
Public fieldStatic memberHAL_TIMER_PERIOD_5This represents a HAL timer period of 5 microseconds.
Public fieldStatic memberHAL_TIMER_PERIOD_10This represents a HAL timer period of 10 microseconds.
Public fieldStatic memberHAL_TIMER_PERIOD_20This represents a HAL timer period of 20 microseconds.
Public fieldStatic memberHAL_TIMER_PERIOD_50This represents a HAL timer period of 50 microseconds.
Public fieldStatic memberHAL_TIMER_PERIOD_100This represents a HAL timer period of 100 microseconds.
Public fieldStatic memberHAL_TIMER_PERIOD_200This represents a HAL timer period of 200 microseconds.
Public fieldStatic memberHAL_TIMER_PERIOD_500This represents a HAL timer period of 500 microseconds.
Public fieldStatic memberHAL_TIMER_PERIOD_1000This represents a HAL timer period of 1000 microseconds.
Top
See Also