内存或 kmem 特殊文件

用途

提供特权限定的虚拟内存的读和写访问权。

描述

注: 通过这些文件对虚拟内存进行不正确访问时,可能会导致进程终止,系统崩溃或系统数据完整性丢失。

/dev/mem /dev/kmem 字符 特殊文件 提供对伪设备驱动程序的访问,该驱动程序允许对系统内存或 I/O 地址空间进行读写访问。 通常,这些特殊文件由操作系统实用程序和命令 (例如 sariostat) 使用。 和 vmstat) 以获取有关系统的状态和统计信息。

注: 访问这些特殊文件的程序必须具有相应的特权。 商业应用程序应避免使用 /dev/mem/dev/kmem 文件,因为虚拟内存映像非常特定于操作系统级别和机器平台。 因此,使用这些特殊文件会严重影响应用程序到其他系统的可移植性。

使用注意事项

kmem 特殊文件访问

kmem 特殊文件提供对当前进程的虚拟内存地址空间的访问,正如内核所看到的那样。 由 lseek 子例程设置的寻道偏移量用于指定读或写的目标虚拟地址。 kmem 伪设备驱动程序仅支持 openclosereadreadx writex, 和 write 子例程。

knlist 系统子例程通常用于获取要通过 kmem 特殊文件提供的访问来读取或写入的内核符号的地址。

在发出读或写操作之前,必须使用 lseek 子例程来指定虚拟内存中的相关起始地址。 如果此地址在前两个千兆字节的地址空间内,那么可以使用 readwrite 子例程调用。 但是,如果要访问地址空间的上限为 2 千兆字节,那么必须使用子例程调用的 readx writex 格式。 在这种情况下,必须将 ext (扩展) 参数设置为值 True。 这将导致相对于地址空间的 2 千兆字节上限来解释 lseek 偏移量。

注: 进程地址空间如 实现内存特殊文件访问 部分中所示定义。 此地址空间布局可以在其他机器平台和操作系统版本上有所不同。

内存特殊文件访问

注: 应严格避免应用程序使用此特殊文件,因为仅针对诊断和问题确定过程提供此文件。

mem 特殊文件访问特定于运行操作系统的系统。

请参阅 实现内存特殊文件访问 部分,以获取有关此特殊文件提供的功能的详细信息。

/dev/kmem 特殊文件的进程地址空间区域

"进程地址空间图" 说明通过此系统上的 /dev/kmem 特殊文件访问的进程地址空间区域的布局。
描述
较低的 2 千兆字节地址空间: 使用读或写子流
lseek 偏移量的 4 位上限
进程地址空间区域
 
0
主内核区域
 
1
用户文本区域
 
2
进程专用区域
 
3
附加数据映射文件区域
 
4
附加数据映射文件区域
 
5
附加数据映射文件区域
 
6
附加数据映射文件区域
 
7
附加数据映射文件区域
地址空间的上限 2 千兆字节: 使用带有 ext 参数 = TRUE 的 readx 或 writex 子例程。
0
附加数据映射文件区域
 
1
附加数据映射文件区域
 
2
附加数据映射文件区域
 
3
附加数据映射文件区域
 
4
附加数据映射文件区域
 
5
共享库文本区域
 
6
辅助内核区域
 
7
共享数据区域

实现内存特殊文件访问

传统上, mem 特殊文件提供对物理内存的直接访问。 此功能及其接口需求特定于机器。 但是,对于此操作系统,此函数是通过在 子例程调用上使用 扩展 (扩展) 参数间接提供的。 当发出与 /dev/mem 特殊文件相关联的 readxwritex 子例程调用时, ext 参数必须包含有效的段寄存器值,如 POWERstation and POWERserver Hardware Technical Reference-General Information 文档中针对将运行程序的平台类型所定义。 这允许程序访问由页表映射的所有物理内存以及特定于平台的 I/O (T=1) 段。

lseek 子例程调用设置的寻道偏移量用于指定由 ext 参数描述的段中的地址偏移量。 不使用偏移量的上四个位。 伪设备驱动程序仅支持 openclose read readx write, 和 writex 子例程调用。 在发出 readxwritex 子例程调用之前,还必须使用 lseek 子例程调用,以便指定地址偏移量。

如果将 readwrite 子例程调用与此特殊文件配合使用,那么对内存的访问与 /dev/kmem 特殊文件提供的访问相同。

mem 特殊文件是基本操作系统 (BOS) 运行时的一部分。

文件

描述
/dev/mem 提供特权限定的虚拟内存的读和写访问权。
/dev/kmem 提供特权限定的虚拟内存的读和写访问权。