Domain-based dynamic areas
From version 8.20 of the Kernel, it is possible to create a dynamic area using an ARM Domain. Domain numbers are allocated dynamically by the Kernel. Dynamic areas created in this way can be made inaccessible to the rest of the operating system. This may be useful to provide memory protection on certain administrative data. In conjunction with the Abort-Trapping flags introduced in the preceding version, this may be used to provide notifications of accesses to external memory.
To create a Domain-based dynamic area, bit 17 on the Dynamic Area flags should be set. Domain based dynamic areas will be limited in size and allocation in a slightly different manner to other dynamic areas :
- They will always be aligned to a megabyte boundary (in logical memory)
- They will always have a maximum size aligned to a megabyte boundary
Because of these requirements, use of many Domain dynamic areas will result in much faster consumption of logical address space. They should be used with care.
The ARM processors support 16 domains. Domain 0 is used by RISC OS for 'regular' memory access. Domain 1-13 will be allocated dynamically by the operating system. Domains 14 and 15 are reserved for internal use. Because of this limitation, only 13 Domain areas can be created at any one time. The limited utility of this interface means that this restriction should not be significant. Clients are expected to function where a domain could not be allocated. If a domain could not be allocated by the Operating system the flags returned from OS_DynamicArea will have bit 17 clear. Clients which cannot function without the support of the Domains should report an error.
An additional interface is available for clients using the Domain interface. This may change in the future.
OS_DynamicArea 19
On entry
R0 = DynArea_DomainState (19)
R1 = dynamic area number
R2 = state:
0 = abort all accesses ('no access')
1 = normal access ('client')
2 = reserved, must not be used
3 = access permissions ignored ('manager')
-1 = read state
On exit
R2 = old state
This SWI call is used to change the access of Domain dynamic areas to aborting, or to allow full access. This interface is of limited usefulness, but is provided for specific clients which require access to the domains system under the operating system's control.
Under current versions of the operating system, 'manager' mode is unreliable and should not be used.
|