Windows95下物理内存单元的可靠读写_第1页
Windows95下物理内存单元的可靠读写_第2页
Windows95下物理内存单元的可靠读写_第3页
Windows95下物理内存单元的可靠读写_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windows95 下物理内存单元的可靠读写 1 引言 计算机运行于 DOS 平台下时 内存寻址模式为实模式 采用 80286 的 20 位地址 线的存 储器分页线性管理技术 存储器容量最大为 1MB 线性地址与物理地址一致 对物理 内存单元读写直接 灵活 但因受限于 640K 基本内存 使大量的扩展内存的使 用受 到制约 同时 分页的 64K 范围限制影响了内存访问的连续性 从而使系统的 内存资 源难以得到充分利用 计算机运行于 Windows95 保护模式下时 由于系统或系统中的驱动程序兼容性 不好等 原因 系统可能处于两种内存寻址模式之一 或是保护模式下的内存寻址模式 或 是保护模式下的虚拟 8086 内存寻址模式 V86 模式 对于这两种模式 要实现 对物理 内存单元的读写 方法截然不同 我们在运行含有进行内存读写的 Windows 程 序时 常常因为不清楚系统目前处于何种寻址模式而导致访问失败 因此有必要对此 进行 一番探讨 2 保护模式下的内存寻址模式 当 CPU 运行于分段管理的保护模式下时 可利用其 32 位地址线提供 4G 字节地 址访问空 间的虚拟存储器 通过特权位和界限值的检查实现完整的保护功能 此时 Windows 的内存被全局描述符表 GDT 和局部描述符表 LDT 所控制 并以选择器 Selector 的方式供程序使用 每一个段的说明都对应描述符表中的一项 称为一个段描 述符 分别对应一个相应的物理内存段 每个段描述符都由三个参数来构成 段基址 Base 规定线性地址空间的开始地址 段界限 Limit 表示段内的最大偏移量 保护 属性 Property 表示此段的一些特征 物理内存访问的远指针由选择器 Selector 偏移量 Offset 构成 这里的 selector 不象实模式寻址那样代表 某个 段寄存器的真实地址 而是用来确定段描述符在描述符表中的入口地址 描述符 表表 中相应位置所存的数据内容才是其真正的物理内存地址 在没有分页的情况下 分页 情况由 Property 来决定 将段描述符的 Base 左移 16 位再加上 Offset 的值就 形成了 32 位内存物理地址 保护模式下的这种寻址模式打破了实模式下内存寻址所受到的制约 提高了内存 资源 的使用效率 3 保护模式下的 V86 模式 为了使 DOS 实模式应用程序无需修改就可以在 Windows95 保护模式下直接运行 系统 提供了 V86 模式 它与实模式下的内存寻址模式非常相似 提供了段内线性分 页管理 技术 由段的属性部分控制分页特征 当系统进入 V86 模式后 在应用程序中 对物理 内存单元的读写方法与 DOS 实模式下完全相同 当在保护模式方式下运行 DOS 实模式 下的应用程序时 Windows 的虚拟机器管理器 VMM 就创建一个虚拟的 8086 机 器 它 仿真了全部的 8086 处理器 包括内存 I O 设备和所有在启动 Windows 时运行 着的 TSR 设备驱动程序以及网络软件 以便使该应用程序在其上运行 执行完应用 程序 后再重新恢复原来的保护模式 值得注意的是 尽管 V86 模式下运行了 DOS 实 模式的 程序代码 但并不是和实模式相似的方式运行 而是和保护模式相似的方式运 行 所以说 V86 模式实质是一种能运行实模式软件的保护模式 如果系统正处于 V86 模式 那么使用保护模式下的内存寻址模式就无法读写物 理内存 单元 而必须用实模式下的内存寻址模式来进行读写 在 Windows95 下你可以 查看 控制面板 系统 性能 页 如果看到 驱动器 C 正在使用兼容的分页存储技 术 兼容的分页存储技术降低了整个系统性能 的信息 就表示系统正处于 V86 模 式 如果看到的是 您的系统是按照最优性能配置的 的信息 则表示系统正 处于 保护模式下的内存寻址模式 4 Windows95 下物理内存单元的可靠读写 由于上述原因 我们在编写 Windows95 下内存读写程序时 必须兼顾两种寻址 模式 使得程序不仅在真正的保护模式下能运行 在系统处于 V86 模式时也能正常运 行 以 提高程序运行的可靠性 下面是程序的主要代码 LONG FAR PASCAL export WndProc HWND hWnd UNIT Message WPARPAM wParam LPARAM lParam unsigned int i char far pt 内存单元读写指针 UINT Selector1 Selector2 WORD Segment Offset Start DWORD Base Limit BOOL flag flag TRUE char Test 10 switch Message case WM CREATE asm move Selector1 DS 将数据段寄存器 DS 作为模板 Selector2 AllocSelector Selector1 分配一个新选择器 if Selector2 NULL 保护模式失败 flag FALSE pt char far 0 xD000 V86 模式下的指针 else Segment 0 xD000 访问的物理段基址 Offset 0 x0100 访问界限 Start 0 x0000 访问偏移起始地址 Base unsigned long Segment 4 Start 形成基地址 Limit unsigned long Offset 1 形成访问界限值 SetSelectorBase Selector2 Base 设置物理起始地址 SetSelectorLimit Selector2 Limit 设置物理访问界限 pt char far unsigned long selector2 16 Start 形成保护模式下的远指针 for i 0 i0 i Test i pt 用 pt 进行读操作 break case WM DESTROY if flag TRUE FreeSelector Selector2 释放选择器 PostQuitMessage 0 break 5 结束语 以上介绍的主要内容是对保护模式下的物理内存单元读写失败后 自动转入到 DOS 实 模式进行读写 提高了程序运行的可靠性 Windows 下的物理内存单元读写用 途十分 广泛 如直接读写 BIOS 数据区 直接对视频缓冲区操作 数据 I O 板的扩展地 址存取 以及与 DOS 的 TSR 程序通信等等 值得注意的是 在使用时一定要小心 必须 保证指 针指向一个有效的 固定的内存块 且操作不能越出界限 以免带来麻烦 还 有 对指定的内存操作完毕后 切莫

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论