rmmap_create 内核服务
用途
定义有效地址 [EA] 到实际地址 [RA] 转换区域。
语法
参数
| 项 | 描述 |
|---|---|
| 埃德尔 | 映射区域的必需流程有效地址。 |
| iomp | 埃德尔 参数所描述的有效地址必须与之对应的总线内存。 对于实内存,必须将总线标识设置为 REALMEM_BID ,并且必须将总线地址设置为实内存地址。 大小字段必须至少为 页大小,不大于 SEGSIZE,且必须为 页大小的倍数。 必须将密钥设置为 IO_MEM_MAP。 不使用 flags 字段。 |
| 标志 | 这些标志用于选择翻译的页面和段属性。 并非所有页面属性标志都兼容。 页属性标志的有效组合如下。
|
描述
使用 rmmap_create 内核服务创建的转换区域在 I/O 映射段中进行维护。 任何单个这样的段都可能在单个区域中转换多达 256 兆字节的实内存或内存映射 I/O。 可能启动 rmmap_remove 服务的唯一详细程度是通过对 rmmap_create的单个调用创建的单个映射。
对于映射和 标志 参数的大小存在约束 (稍后描述) ,这会导致调用失败,而不考虑是否存在足够的有效地址空间。
如果在有效地址为零的情况下调用 rmmap_create 内核服务,那么该函数将尝试在进程地址空间中查找可用空间。 如果成功,那么会创建 I/O 映射段,并将有效地址 (通过引用传递) 更改为映射到 国际木 内存的第一页的有效地址。
如果使用非零有效地址调用 rmmap_create 内核服务,那么会将其作为必需的有效地址,必须将其转换为传递的 国际木 内存。 此功能验证请求的范围是否可用。 否则,它将失败并返回 EINVAL。 如果有效地址的映射未包含在单个段中,那么该函数将失败并返回 ENOSPC。 否则,将分配该区域,并且不会修改有效地址。 该有效地址将映射到 国际木 内存的第一页。 在已映射区域之外但在同一段内的引用无效。
返回的有效地址 (如果提供) 和总线地址必须是 页大小 或 EINVAL 的倍数。
子进程在 叉 子例程之后不继承 I/O 映射段。
在 叉 子例程之后,子进程不会继承 I/O 映射段,除非指定了 RMMAP_INHERIT 。 这些段将被段中最后一个范围的 执行, 退出或 rmmap_remove 删除。
根据所映射的内存类型,仅允许使用某些标志组合。 对于实内存映射, RMMAP_PAGE_M 是必需的,而不允许 RMMAP_PAGE_W, RMMAP_PAGE_I和 RMMAP_PAGE_G 。 对于 I/O 映射,仅指定 RMMAP_PAGE_M,而不指定其他页面属性标志是有效的。 也可以指定 RMMAP_PAGE_I 以及 (可选) RMMAP_PAGE_M和 RMMAP_PAGE_G中的任何一个或全部。 从不允许 RMMAP_PAGE_W 。
国际木 参数所描述的实际地址范围在此 I/O 映射段中必须是唯一的。
执行环境
rmmap_create 内核服务只能从进程环境中进行调用。
返回值
在成功完成时, rmmap_create 内核服务将返回零,并将有效地址修改为新创建的映射区域附加到进程地址空间的值。 否则,它将返回下列其中一个错误:
| 项 | 描述 |
|---|---|
| EINVAL | 发生某种类型的参数错误。 这些参数包括 (但不限于) 大小错误和互斥标志选项。 |
| ENOMEM | 操作系统无法分配用于表示映射的必需数据结构。 |
| ENOSPC | 埃德尔所指示的区域中的有效地址空间已耗尽。 |
| EPERM | 此硬件平台未实现此服务。 |
实现细节
此服务仅在 PowerPC 微处理器上起作用。