在Windows系统上实现轻量级的线程间及进程间消息队列

看IaaS 资料时,捎带研究下硬件虚拟化,主要参考《基于intel VT-x 的Xen
全虚拟化实现》,《intel 开发手册 第三卷 19/20章》

Intel VT 是intel
X86架构的CPU硬件虚拟化技术,新增两种模式:

  • VM root: 即虚拟机管理系统运行模式;

  • VM non root:即虚拟机运行模式;

如下图:

VMXON、VMXOFF用以实现打开或关闭虚拟化功能;

VM Exit和VM Entry 用以实现non
root和root之间的切换;这种转换被VMCS(VM Control
Structure)这个数据结构控制,对每一个虚拟CPU都会对应一个VMCS。

VMCS包含六个域,分别是:

  • Guest-State Area: 处理器状态在VM
    Exit时被保存,在进入VM Entry时被加载,即退出non root时保存客户机状态;

  • Host State Area: 处理器状态在VM
    Exit被加载;

  • VM Excution Control Field,定义vm在non
    root下的执行行为,哪些指令会切换到root;

  • VM Entry 控制域

  • VM Exit  控制域

  • VM Exit  信息域,记录上一次VM
    Exit信息

举例Xen:

当需要执行一些特权指令时(如I/O控制访问),切入root模式,Xen取得控制权,通过VMCX中的信息得知VM
Exit的原因,调用vmx_vmexit_handler执行;

在Windows系统上实现轻量级的线程间及进程间消息队列,布布扣,bubuko.com

时间: 2024-08-04 08:37:42

在Windows系统上实现轻量级的线程间及进程间消息队列的相关文章

在Windows系统上以C++打印出当前活动用户的环境变量

在Windows系统上以C++打印出当前活动用户的环境变量,代码如下(QT环境): [cpp] view plain copy void getEnvironmentVariables() { DWORD sessionId = WTSGetActiveConsoleSessionId(); qInfo() << "Session ID = " << sessionId; HANDLE token; if (!WTSQueryUserToken(sessionI

如何在Windows系统上利用Telnet协议连接Linux服务器

Telnet协议是Internet远程登录服务的标准协议,它为用户提供了在本地计算机上完成远程主机工作的能力.很多终端使用者都习惯在计算机上利用Telnet会话来远程控制服务器.这里小编就分两步为大家演示如何在Windows系统上利用Telnet协议连接Linux服务器. 步骤一:在Windows系统上打开Telnet功能:  步骤二:在Linux系统上启用Telnet服务. 步骤一:Windows终端开启Telnet功能 1/由于在Windows Vista之后的版本默认并没有提供Telnet

在Linux和Windows系统上安装Nginx服务器的教程

在Linux和Windows系统上安装Nginx服务器的教程 ?1.在CentOS系统上安装Nginx 在 CentOS6 版本的 EPEL 源中,已经加入了 nginx 的 rpm 包,不过此 RPM 包版本较低.如果需要更新版本,可以使用官方制作的 rpm 包,或者使用源码包编译安装. 还可以使用一些二次开发功能增强的 nginx 版本,例如淘宝的 Tengine 和 OpenResty 都是不错的选择.1.1 常用编译参数 ??? --prefix=PATH:指定 nginx 的安装目录?

windows系统上安装与使用Android NDK r5

windows系统上安装与使用Android NDK r5  很早就听说了android的NDK应用,只是一直没有时间去研究,今天花了点时间在windows平台搭建了NDK环境,并成功运行了第一个简单的android应用. 一:什么是NDK? NDK 提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so 和 java 应用一起打包成apk.这些工具对开发者的帮助是巨大的. NDK 集成了交叉编译器,并提供了相应的mk 文件隔离CPU.平台.ABI 等差异,开发人员只需要简

解决Tomcat6解压版在64位windows系统上无法启动服务的问题

解决Tomcat6解压版在64位windows系统上无法启动服务的问题 由于客户环境为64位windows系统,开发环境一直用32位.tomcat使用6.0.20非安装版.部署时发现在64位系统下,注册服务后无法正常启动服务(直接运行startup.bat可以成功启动tomcat),日志中报错信息为: 引用 [174  javajni.c] [error] %1 不是有效的 Win32 应用程序. [994  prunsrv.c] [error] Failed creating java D:\

快速获取Windows系统上的国家和地区信息

Windows系统上包含了200多个国家和地区的数据,有时候编程需要这些资料.以下代码可以帮助你快速获取这些信息.将Console语句注释掉,可以更快的完成分析. 1 static void Main(string[] args) { 2 Console.WriteLine("Start!"); 3 // 这里可以修改文件路径和文件名称. 4 var sw = new StreamWriter(new FileStream("RegionInfo.txt", Fil

如何在Windows系统上用抓包软件Wireshark截获iPhone等网络通讯数据

http://www.jb51.net/os/windows/189090.html 今天给大家介绍一种如何在Windows操作系统上使用著名的抓包工具软件Wireshark来截获iPhone.iPad等iOS设备或Android设备的网络通讯数据的方法 不管是iPhone的iOS还是Android系统上开发的应用App基本上都会需要使用网络通讯来传输数据.开发者有的时候可能会需要通过抓包的方式来了解应用具体在传输些什么数据,以及数据是否正确.今天给大家介绍一种如何在Windows操作系统上使用

spm完成dmp在windows系统上导入详细过程

--查询dmp字符集 cat spmprd_20151030.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6 select nls_charset_name(to_number('0345','xxxx')) from dual; spm完成dmp在windows系统上导入详细过程 create tablespace SPMSIT datafile 'D:\DATAS\DATA01.dbf' size 200m autoextend on ne

oracle监听服务在windows系统上设置为自动重启但是不成功?

问:oracle安装在windows 系统上,服务设置为自动重启,但是没有系统启动后,oracle监听服务没有启动成功答:一种变相的解决的方法,使用计划任务启动,启动的脚本为:@echo  offping -n 10 127.0.0.1 > nulsc start OracleOraDb11g_home1TNSListener > nulexit@echo  on