iczelion Vxd cntut2

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

虚拟机管理器

虚拟机管理器(VMM)是Windows 95的实际操作系统,它建立和维护一个管理虚拟机的框架,同时为其他vxd程序提供许多重要的服务。其中三种重要的服务是:

  • 内存管理
  • 中断处理
  • 线程调度

内存管理

VMM使用Intel 80386或更新的处理器的内存调页能力来为系统虚拟机创建一个32位的虚地址空间。它把这个地址空间分为四个不同的部分:

  • V86区 地址从0H到10FFEFH,这个区属于当前执行的虚拟机。
  • 应用程序私有区地址从4MB到2GB。这是Win32应用程序运行的空间。每个Win32的进程都有它自己的2GB(要减去4MB)。
  • 应用程序共享区地址从2GB到3GB。这个区域是在虚拟机内的所有 应用程序共享的。系统DLL(user32,kernel32,gid32)都驻存在这里。所有的Win16程序也放在这里,因为它们行为都是不规范的的:它们对内存中的其他Win16程序进行读写。只有在这个区域里,Win16程序才可以看到其他所有的Win16程序。内存映射文件和分配给DPMI的内存也被存放在这里。
  • 系统共享区地址从3GB到4GB。这里是VMM和VXM存放的地方。

VMM为VxD程序提供三种VxD服务:

  • 页面内存服务 这种服务分配/管理页面大小为4KB的内存。这是提供的最低级的服务,其他所有的服务都是建立在页面内存服务上的。
  • 堆内存服务 管理小的内存块。这种高级别的内存管理服务建立在页面内存服务的基础上。
  • 表服务管理可用来实行链结表的固定大小的内存块。

处理中断

在保护模式下,中断指向中断描述表(IDT)。VMM通过VxD的帮助监视虚拟机的IDT。通常VMM处理IDT内几乎所有的中断入口。它进行第一级的中断处理:保存被中断程序的状态,把控制传送到第二级的中断处理,第二级的中断处理通常由各种VxD程序来进行实际的处理。当第二级中断处理程序完成了它的工作之后,它把控制转交给重分派程序,由重分派程序来恢复被中断程序的状态并从先前被中断的地方继续执行。
上面的描述太过简单。由于被中断的虚拟机的时间片可能已过,重分派也许不会马上执行。VxD程序通过VMM服务如:Set_PM_Int或Hook_V86_Int_Chain来安装中断处理。VxD程序不应该直接改动IDT中的中断入口(除非你很确切的知道将发生的后果)。

线程调度

VMM使用两个调度器组件来在虚拟机之间实现有优先级的多线程处理:

  • 主调度器
  • 时间片管理器副调度器

主调度器的任务是选择有最高优先级的线程来执行。这种选择在VMM处理一个中断(如计时器中断)时进行。选择的结果决定了当VMM从中断服务返回时由哪一个线程/虚拟机获得控制权。主调度器工作的结果是确定的,一个线程要么获得控制权,要么没有,只有一个线程可以得到控制权。VMM和其他的VxD可以通过VMM服务来调整线程的执行优先级。例如,当一个硬中断发生时,VMM就会增加中断处理的执行优先级以便让它在尽可能短的时间内有更高的机会被调用。
副调度器通过主调度器提供的服务来给享有最高优先级的线程分配cpu时间。副调度器给每个线程一个时间片。当一个线程执行到它的时间片完结时,副调度器就增加下一个线程的优先级,这样它就会被主调度器选中并执行。

你可以从Walter Oney's Systems Programming for Windows 95Windows 95 DDK 文档里面得到关于这个问题的细节。


一个虚拟机管理器(VMM)的实现 Little Computer-3(简称 LC-3)是用于教学的汇编语言,它有着相比于 x86 更为简洁的指令集,同时包含了主流 CPU 的经典思想。LC-3 麻雀虽小,五脏俱全。它的规范不算太多,本文实现一个LC-3 CPU的虚拟机管理程序。 阅读详情

相关推荐

demoProg_VMM2.2.rar

能实现GDI+画线、圆等图形,并能实现拾取图元的功能,初步实现了测量圆心距的功能,如有感兴趣的自行下载,研究与完善!

虚拟机管理器VMM(Vxd教程2)

虚拟机管理器 由 Ryo 翻译,发表于 http://asm.yeah.net,英文版本来自 [Iczelions Win32 Assembly Homepage] <FONT size=-1>虚拟机管理器(VMM)是Windows 95的<FONT color=#ffff99>实际操作系统,它建立和维护一个管理虚拟机的框架,同时为其他vxd程序提供许多重要的服务。其中三

讲武堂-Jiangtao 5052

Iczelion 的 Win32asm 教程

经典的32位汇编语言程序设计教程,供大家方便学习,欢迎下载使用! 学习32位汇编语言程序设计的人不看看这个教程,实是遗憾

kvm虚拟机转换VMware可以使用vmkd格式

因为工作需要,转换KVM虚拟机格式给VMware使用,一点想法分享给大家 首先,找到KVM虚拟机地址,然后执行 cd /path/to/vm_disk qemu-img convert test_vm.img -O vmdk /tmp/test_vm.vmdk #将img格式转换为vmdk 其次,新建虚拟机,然后选择使用现有虚拟环境,具体步骤如下 打开

立志宜思真品格,读书须尽苦功夫。 3150

虚拟设备驱动程序结构(Vxd教程3)

虚拟设备驱动程序结构 由 Ryo 翻译,发表于 http://asm.yeah.net,英文版本来自 [Iczelions Win32 Assembly Homepage] 现在大家对vmm和vxd有了一定的了解,接下来我们来看一看如何编写vxd代码。首先,你必须具备Windows 95/98 Device Driver Development Kit。Window95 dd

讲武堂-Jiangtao 3914

SC2012_VMM详细安装过程

安装好VMM必备的相应组件后,接下来就可以开始进入真正的VMM安装过程,在安装VMM之前,请切记没有挂起需要重启的进程,以避免安装过程中出现的错误。     一、打开SC2012_VMM文件夹,以管理员身份运行Setup.exe程序,进入安装窗口,点击安装。           二、安装开始后,首先进入准备过程,加载相应的文件,时间会稍久。此时安装会进行必备文件检查,如此时没有安装.Net

SuperITPro的专栏 3749

iczelion Vxd cntut2 (转)

iczelion Vxd cntut2 (转)[@more@] 虚拟机管理器 虚拟机管理器(VMM)是windows 95的实际操作系统,它建立和维护一个管理虚拟机的框架,同时为其他vxd程序提供许多重要的服务。其中三种重要...

csd3176的博客 116

游戏任务解谜全攻略:从断档排查到机关拆解的通用思路

在游戏任务与解谜设计中,任务链逻辑与机关机制是核心基础。任务链由前置条件、目标描述、环境线索等环节构成,其断裂常因玩家忽略关键NPC对话、未完成前置任务或遗漏道具所致。解谜机制则涉及顺序激活、符号对应、元素互动等类型,需通过识别规则提示、建立假设并小范围测试来拆解。掌握系统化的排查方法,如重建任务链、扫描环境线索、验证前置完整性,能显著提升自主解谜效率与游戏体验。本文以实战案例,具体解析如何应对任务断档、逻辑卡壳等常见问题,帮助玩家形成通用的解谜思维框架。

cuiji1279的博客 411

iczelion Vxd cntut6

DeviceIoControl接口在这一节中我们将要关于学习动态VXD,特别是如何创建,加载和使用。点击这里下载例子VxD接口VxD总共提供了4种接口。l         VxD services                    VxD服务l         V86 Interface                   V86接口l         Prot

jimgreen的专栏 924

iczelion Vxd cntut3

 虚拟设备驱动程序结构现在大家对vmm和vxd有了一定的了解,接下来我们来看一看如何编写vxd代码。首先,你必须具备Windows 95/98 Device Driver Development Kit。Window95 ddk只有MSDN 订户才能拿到,但Windows98 ddk却可以免费从Microsoft公司取得。尽管Windows 98 ddk是面向WDM的,但你还是

jimgreen的专栏 1006

iczelion Vxd cntut4

VxD 程序设计入门We 我们在上一节学会了如何编写一个什么事也不做的VxD程序。在这一节里,我们要给它增加处理控制消息的功能。 VxD的初始化和结束VxD程序分为两种:静态的和动态的。每种的加载方法都不同,接受到的初始化和结束的控制消息也不同。 静态VxD:下列情况下,VMM加载一个静态VxD: 一个实模式常驻程序通过调用中断2FH,1605H,来调用此VxD

jimgreen的专栏 947

iczelion Vxd cntut5

VxD例程:消息框在上一节教程里,我们讲了编写一个VxD程序的方法。现在我们要学以致用。在这一节里,我们要编写一个静态VxD,这个静态VxD在一个虚拟机创建或销毁时就会弹出一个消息框。 在这里下载例子。 捕获虚拟机创建和结束事件当一个虚拟机创建时,VMM发送Create_VM控制消息给所有的VxD程序。当一个虚拟机退出时,它也发送VM_Terminate和VM_Terminate2

jimgreen的专栏 888

iczelion Vxd cntut9

 虚拟8086模式的内存管理下边我们用到的V86即指虚拟8086模式。 在以前的教程中,你学习了怎样模拟V86中断,但还有一个问题没有解决:在VxD和V86代码之间交换数据。我们将在此学习如何使用V86内存管理器来实现这个功能。在这里下载例子程序理论假如你的VxD和一些V86程序一起运行,如何传送大量数据到V86程序中或从V86程序中传送大量数据迟早是一个大问题。通过寄存器

jimgreen的专栏 900

iczelion Vxd cntut8

 客户寄存器结构我们将学习本教程中另外一个重要的结构,叫客户寄存器结构。在本文中,V86指虚拟8086模式。在这里下载例子程序理论VxDs与正常的win32/win16/DOS应用程序有很大不同。大多数情况下,当其他应用程序正常工作时,它们是休眠的。它们象一个监管者一样工作,其作用是监视ring-3应用程序并在其出错时改正它们。下面是其工作时的典型的情况:1、中断发生时

jimgreen的专栏 1055

iczelion Vxd cntut1

虚拟设备驱动程序初步在本教程里,我假定读者对诸如虚8086模式,调页,GDT,LDT,IDT之类的INTEL 80x86保护模式的操作比较熟悉。如果你不了解这些,那你要先在 http://developer.intel.com/design/pentium/manuals/阅读INTEL的文档。 内容:Windows95是一个运行在最高级特权,第0层级别的多线程操作系统。所有的应用程序都运

jimgreen的专栏 1054

iczelion Vxd cntut7

请求执行时间段与Shell函数 下载例子程序理论:请求执行时间段通常被简称为"appy time"。是指当系统VM稳定到充许VxDs和ring-3级别的应用软件(特别是16-bit的应用软件)交互时的时间段。例如,在一个特定时间段,VxDs能加载并调用在16-bit Dlls中的函数。这个appy time在Windows 3.x中是无效的。在Windows3.x,一个Vx

jimgreen的专栏 946

iczelion Vxd cntut4 (转)

iczelion Vxd cntut4 (转)[@more@] VxD 程序设计入门 We 我们在上一节学会了如何编写一个什么事也不做的VxD程序。在这一节里,我们要给它增加处理控制消息的功能。 VxD的初始化和结束 ...

cuiji1279的博客 164

iczelion Vxd cntut6 (转)

iczelion Vxd cntut6 (转)[@more@]DeviceIoControl接口XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:of...

csd3176的博客 139
上一篇: iczelion Vxd cntut1
下一篇: iczelion Vxd cntut3
jimgreen
博客等级 码龄26年 1粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值