虚拟桌面详细资料大全

如题所述

第1个回答  2022-10-12

“Desk virtualization (或者称为Virtual Desk Infrastructure) 是一种基于伺服器的计算模型,VDI概念最早由桌面虚拟化厂商VMware提出,目前已经成为标准的技术术语。虽然借用了传统的瘦客户端的模型,但是让管理员与用户能够同时获得两种方式的优点:将所有桌面虚拟机在数据中心进行托管并统一管理;同时用户能够获得完整PC的使用体验。

基本介绍

    中文名 :虚拟桌面 外文名 :Desk virtualization 类型 :计算模型类 起源 :桌面虚拟化厂商VMware提出
定义,虚拟桌面架构,CreateDesk,

定义

简单的来说,虚拟桌面是指:支持企业级实现桌面系统的远程动态访问与数据中心统一托管的技术。一个形象的类比,就是现在,我们可以通过任何设备、在任何地点,任何时间访问在网路上的我们的邮件系统,或者网盘;而未来我们可以通过任何设备,在任何地点、任何时间访问在网路上的属于我们个人的桌面系统。 行业现状 思科在2010年年底的时候,推出了 VMware View 4.5 Citrix XenDesk 两款产品,该两款产品已经在2011年3月上市。这两款产品的价格都低于500美元,包括 一个USB键盘、滑鼠和客户端授权。除此之外,思科表示该公司此前发布的Cius平板电脑将支持VMware View、Citrix Receiver 和Wyse Pocket 云计算虚拟软体;并且将会和微软的Windows在一个数据中心进行互联。Cius同样也在2011年3月上市。 桌面虚拟化和瘦客户端计算机已经推出了很多年,通过数据中心伺服器中心化电脑的功能、数据和应用程式给予数据和安全更多的控制。 虚拟桌面技术架构 VDI桌面虚拟化的优势在于运算集中在伺服器端,因此在以下两种环境中特别合适:1、在极小的广域网频宽环境下,例如低于500Kbs的线路下,可以采用VMware等VDI产品进行部署,用户可以使用平板电脑或者手机接入,访问自己的桌面环境,实现随时随地办公;2、在新建的全千兆网路环境下,同时业务套用比较简单的环境中,用户部署VDI桌面虚拟化后可以购买100元左右的云终端作为客户机,大大减少客户机的硬体投入,拉平在伺服器上的硬体投入,使得总投资更加合理。 VDI虚拟桌面基础架构 虚拟桌面基础架构(Virtual Desk Infrastructure,简称VDI)是许多机构目前正在评估的全新模式,它是基于早期的RDP协定和瘦客户机逐步演变而来的,也是目前国外VMware等国外虚拟化厂家长期鼓吹的模式。VDI旨在为智慧型分散式计算带来出色的回响能力和定制化的用户体验,并通过基于伺服器的模式提供管理和安全优势。它能够为整个桌面映像提供集中化的管理,但这一模式目前也存在着其固有的问题。主要表现为:因其利用硬体仿真及瘦协定,使得视频、Adobe Flash、IP 语音(VoIP)以及其它计算或图形密集型套用不适用于该模式,而且VDI 需要持久的网路连线,因此不适于要求离线移动性的场合。此外,其基于伺服器的模式对伺服器的配置有极高的要求,这些问题的存在不能不让众多的用户重新考虑部署VDI的实际意义及成本。 从实际套用方面来分析,VDI模式还存在诸多需要解决的问题,而与之相关的虚拟化桌面,如远程托管桌面、远程虚拟应用程式、远程托管专用虚拟桌面、本地虚拟应用程式及本地虚拟作业系统等虚拟化桌面也都存在着各种问题;另外还有对终端硬体的支持问题、对网路及伺服器硬体过度依赖的问题、以及数据安全性问题等。 VOI虚拟作业系统基础架构 虚拟作业系统基础架构(Virtual OS Infrastructure,简称VOI)成为一个新的桌面虚拟化发展方向。而在国内,和信最早推出了基于VOI桌面虚拟化架构的虚拟终端管理系统。VOI桌面虚拟化技术不仅可实现基于服务端的远程虚拟OS、APPS、UserProfiles的按需交付,也可实现基于客户端的本地快取OS、APP及UserProfiles,这样不仅仅可利用终端本地资源处理计算及图形密集型套用,比如:如音视频、大型设计及工业软体等,也可支持各种计算机外设以适应复杂的套用环境及未来的套用扩展。同时,对网路和伺服器的依赖性将大大降低,即使网路中断或伺服器宕机终端也可继续使用,数据可实现云端集中存储,也可实现终端本地加密存储,且终端套用数据不会因网路或服务端故障而丢失。

虚拟桌面架构

虚拟桌面整体架构分为以下四层: l 终端接入层 用户的终端处于这个层面,虚拟桌面可以接受各种终端的接入。 l 接入网路层 接入网路层负责保证用户安全接入,并且为桌面云资源提供负载均衡。 l 桌面管理层 桌面管理层负责整个虚拟桌面系统的调度,如新虚拟桌面的注册及将虚拟桌面的请求指向可用的系统,认证用户身份并为其授权可以使用的桌面,除此之外桌面管理层本身也承担负载均衡的作用。 l 资源池层 资源池层负责对计算资源池、存储资源池、网路资源池的统一管理,按需分配部署、资源动态调度等。

CreateDesk

在 Windows Api 中提供了 CreateDesk 函式来创建新的虚拟桌面,通过 SwitchDesk 函式可以转入到指定的桌面,在新创建的桌面中可以打开进程explorer.exe,CreateProcess 有个TStartupInfo结构的参数,该结构中有个叫lpDesk的成员,它指定了在哪个桌面创建进程;该函式实现的虚拟桌面为Windows视图系统创建多桌面扩展,使用户或程式可以多个桌面上相互切换可视化的套用,与Linux 图形界面中四方格切换相似,但是该技术与现行“桌面虚拟化技术”是两种完全不同的概念,不可以混淆。 引用MSDN: Creates a new desk, associates it with the current window station of the calling process, and assigns it to the calling thread. The calling process must have an associated window station, either assigned by the system at process creation time or set by the SetProcessWindowStation function. To specify the size of the heap for the desk, use the CreateDeskEx function. 函式原型 HDESK WINAPI CreateDesk( _In_ LPCTSTR lpszDesk, _Reserved_ LPCTSTR lpszDevice, _Reserved_ DEVMODE *pDevmode, _In_ DWORD dwFlags, _In_ ACCESS_MASK dwDesiredAess, _In_opt_ LPSECURITY_ATTRIBUTES lpsa ); Parameters lpszDesk [in] The name of the desk to be created. Desk names are case-insensitive and may not contain backslash characters (\). lpszDevice Reserved; must be NULL. pDevmode Reserved; must be NULL. dwFlags [in] This parameter can be zero or the following value. 在C语言中的实现 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { TODO: Place code here. HDESK hOld = GetThreadDesk(GetCurrentThreadId()); HDESK hNew = CreateDeskA("Test", NULL, NULL, NULL, GENERIC_ALL, NULL); if ((NULL == hOld) || (NULL == hNew)) { MessageBox(NULL, "失败!", "测试", MB_OK | MB_ICONERROR); return 1; } SetThreadDesk(hNew); SwitchDesk(hNew); MessageBox(NULL, "成功!", "测试", MB_OK); SwitchDesk(hOld); CloseDesk(hNew); return 0; } 在VB中的实现 Private Sub Form_Load() g_hDeskThreadOld = GetThreadDesk(App.ThreadID) '得到正常的桌面句柄 RegisterHotKey Me.hWnd, 1, MOD_CONTROL, Asc("Q") '注册热键 RegisterHotKey Me.hWnd, 2, MOD_CONTROL, Asc("W") '注册热键 g_hDeskNameNew = "MyNewDesk" g_hDeskNew = OpenDesk(g_hDeskNameNew, 0, False, DESKTOP_ALL) '如果新桌面已经存在,就打开它 If g_hDeskNew = 0 Then g_hDeskNew = CreateDesk(g_hDeskNameNew, vbNullString, ByVal 0&, 0, MAXIMUM_ALLOWED, ByVal 0&) '如果不存在,就新建一个 End If Call SetThreadDesk(g_hDeskNew) lpOldWinProc = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf myWindowProc) '子类化主视窗,接收热键讯息 End Sub Private Sub Form_Unload(Cancel As Integer) If g_hDeskNew <> 0 Then CloseDesk g_hDeskNew '关闭新建的桌面句柄 End If SetWindowLong Me.hWnd, GWL_WNDPROC, lpOldWinProc End Sub

相似回答