芯片组对于服务器而言的重要性是什么?

芯片组对于服务器而言的重要性是什么?,第1张

如果说中央处理器(CPU)是整个电脑系统的大脑,那么芯片组将是整个身体的心脏。在电脑界称设计芯片组的厂家为Core Logic,Core的中文意义是核心或中心,光从字面的意义就足以看出其重要性。对于主板而言,芯片组几乎决定了这块主板的功能,进而影响到整个电脑系统性能的发挥,芯片组是主板的灵魂。芯片组性能的优劣,决定了主板性能的好坏与级别的高低。这是因为目前CPU的型号与种类繁多、功能特点不一,如果芯片组不能与CPU良好地协同工作,将严重地影响计算机的整体性能甚至不能正常工作。主板芯片组几乎决定着主板的全部功能,其中CPU的类型、主板的系统总线频率,内存类型、容量和性能,显卡插槽规格是由芯片组中的北桥芯片决定的;而扩展槽的种类与数量、扩展接口的类型和数量(如USB20/11,IEEE1394,串口,并口,笔记本的VGA输出接口)等,是由芯片组的南桥决定的。还有些芯片组由于纳入了3D加速显示(集成显示芯片)、AC’97声音解码等功能,还决定着计算机系统的显示性能和音频播放性能等。

Intel VT-x开启对电脑系统没有影响,对运行虚拟机有帮助。

VT-x是intel运用Virtualization虚拟化技术中的一个指令集,是CPU的硬件虚拟化技术,VT可以同时提升虚拟化效率和虚拟机的安全性,在x86平台上的VT技术,一般称之为VT-x,而在Itanium平台上的VT技术,被称之为VT-i。

为解决纯软件虚拟化解决方案在可靠性、安全性和性能上的不足,Intel在它的硬件产品上引入了Intel VT(Virtualization Technology,虚拟化技术)。2005年8月,Intel首次公布了针对硬件辅助虚拟化的Vanderpool(Intel VT虚拟化技术的前身)技术细节。Vanderpool技术通过增加新的指令,使得Intel处理器支持硬件虚拟化。2005年11月,Intel宣布,虚拟化技术Vanderpool改成VT,被Acer和联想应用在其基于Intel Pentium 4的PC上。

Intel VT可以让一个CPU工作起来像多个CPU在并行运行,从而使得在一部电脑内同时运行多个操作系统成为可能。这种VT技术并不是一个新鲜事物,市面上已经有一些软件可以达到虚拟多系统的目的,比如VMware workstation、Virtual PC等,使用这种技术就可以单CPU模拟多CPU并行,可以实现单机同时运行多操作系统。

扩展资料:

Intel VT-d,VT-d进行的改动还有很多,如硬件缓冲、地址翻译等,通过这些种种措施,VT-d实现了北桥芯片级别的I/O设备虚拟化。VT-d最终体现到虚拟化模型上的就是新增加了两种设备虚拟化方式:

直接I/O设备分配, 虚拟机直接分配物理I/O设备给虚拟机,这个模型下,虚拟机内部的驱动程序直接和硬件设备直接通信,只需要经过少量,或者不经过VMM的管理。为了系统的健壮性,需要硬件的虚拟化支持,以隔离和保护硬件资源只给指定的虚拟机使用,硬件同时还需要具备多个I/O容器分区来同时为多个虚拟机服务,这个模型几乎完全消除了在VMM中运行驱动程序的需求。例如CPU,虽然CPU不算是通常意义的I/O设备——不过它确实就是通过这种方式分配给虚拟机,当然CPU的资源还处在VMM的管理之下。

运用VT-d技术,虚拟机得以使用直接I/O设备分配方式或者I/O设备共享方式来代替传统的设备模拟/额外设备接口方式,从而大大提升了虚拟化的I/O性能。

VT-d技术:

我们知道对于服务器而言,很重要的一个组成部分就I/O,CPU的计算能力提升虽然可以更快地处理数据,但是前提是数据能够顺畅的到达CPU,因此,无论是存储,还是网络,以及图形卡、内存等,I/O能力都是企业级架构的一个重要部分。为此,人们不但在传输带宽上投资(比如从百兆以太网到千兆以太网再到万兆以太网),还在各种系统和架构上进行了大量的投入(比如吞吐量更高的RAID系列、多层数据中心)

I/O虚拟化的关键在于解决I/O设备与虚拟机数据交换的问题,而这部分主要相关的是DMA直接内存存取,以及IRQ中断请求,只要解决好这两个方面的隔离、保护以及性能问题,就是成功的I/O虚拟化。和处理器上的Intel VT-i和VT-x一样,Intel VT-d技术是一种基于North Bridge北桥芯片的硬件辅助虚拟化技术,通过在北桥中内置提供DMA虚拟化和IRQ虚拟化硬件,实现了新型的I/O虚拟化方式,Intel VT-d能够在虚拟环境中大大地提升 I/O 的可靠性、灵活性与性能。

参考资料:

-Intel VT-d

用tcp无法达到广播模式效果,这个我已经尝试过很多次,A客户端信息可以传到B,但B传不到A。而且无法像聊天室那样两个客户端同时交互。

以下是我用tcp做得聊天程序,用tcp大概只能到这效果了。

import javaawt;

import javaawtevent;

import javaapplet;

import javanet;

import javaio;

import javautil;

public class ChatClient extends Applet {

TextField tfName = new TextField(15); //姓名输入文本域

Button btConnect = new Button("连接"); //连接按钮

Button btDisconnect = new Button("断开连接");

TextArea tfChat = new TextArea(8,27); //显示聊天信息文本框

Button btSend = new Button("发送");

TextField tfMessage = new TextField(30); //聊天输入

javaawtList list1 = new javaawtList(9); //显示在线用户信息

Socket socket=null; //连接端口

PrintStream ps=null; //输出流

Listen listen=null; //监听线程

public void init() { //Applet初始化

tfChatsetEditable(false); //设置信息显示框为不可编辑

Panel panel1 = new Panel(); //实例化面板

Panel panel2 = new Panel();

Panel panel3 = new Panel();

tfChatsetBackground(Colorwhite); //设置组件背景颜色

panel1setBackground(Colororange);

panel2setBackground(Colorpink);

panel3setBackground(Colororange);

panel1add(new Label("姓名:")); //增加组件到面板上

panel1add(tfName);

panel1add(btConnect);

panel1add(btDisconnect);

panel2add(tfChat);

panel2add(list1);

panel3add(new Label("聊天信息"));

panel3add(tfMessage);

panel3add(btSend);

setLayout(new BorderLayout()); //设置Applet布局管理器

add(panel1, BorderLayoutNORTH); //增加面板到Applet上

add(panel2, BorderLayoutCENTER);

add(panel3, BorderLayoutSOUTH);

}

public boolean action(Event evt,Object obj){ //事件处理

try{

if(evttarget==btConnect){ //点击连接按钮

if (socket==null){

socket=new Socket(InetAddressgetLocalHost(),5656); //实例化一个套接字

ps=new PrintStream(socketgetOutputStream()); //获取输出流

StringBuffer info=new StringBuffer("INFO: ");

String userinfo=tfNamegetText()+":"+InetAddressgetLocalHost()toString();

psprintln(infoappend(userinfo)); //输出信息

psflush();

listen=new Listen(this,tfNamegetText(),socket); //实例化监听线程

listenstart(); //启动线程

}

}

else if(evttarget==btDisconnect){ //点击断开连接按钮

disconnect(); //调用断开连接方法

}

else if(evttarget==btSend){ //点击发送按钮

if(socket!=null){

StringBuffer msg=new StringBuffer("MSG: ");

String msgtxt=new String(tfMessagegetText());

psprintln(msgappend(tfMessagegetText())); //发送信息

psflush();

}

}

}

catch (Exception ex){

exprintStackTrace(); //输出错误信息

}

return true;

}

public void disconnect() { //断开连接方法

if(socket!=null){

psprintln("QUIT"); //发送信息

psflush();

}

}

class Listen extends Thread{ //监听服务器传送的信息

String name=null; //用户名

BufferedReader reader ; //输入流

PrintStream ps=null; //输出流

Socket socket=null; //本地套接字

ChatClient client=null; //客户端ChatClient实例

public Listen(ChatClient p,String n,Socket s) {

client=p;

name=n;

socket=s;

try{

reader = new BufferedReader(new InputStreamReader(sgetInputStream())); //获取输入流

ps=new PrintStream(sgetOutputStream()); //获取输出流

}

catch(IOException ex){

clientdisconnect(); //出错则断开连接

exprintStackTrace(); //输出错误信息

}

}

public void run(){

String msg=null;

while(socket!=null){

try{

msg=readerreadLine(); //读取服务器端传来信息

}

catch(IOException ex){

clientdisconnect(); //出错则断开连接

exprintStackTrace(); //输出错误信息

}

if (msg==null) { //从服务器传来的信息为空则断开此次连接

clientlisten=null;

clientsocket=null;

clientlist1removeAll();

return;

}

StringTokenizer st=new StringTokenizer(msg,":"); //分解字符串

String keyword=stnextToken();

if(keywordequals("newUser")) { //新用户连接信息

clientlist1removeAll(); //移除原有用户名

while(sthasMoreTokens()) { //取得目前所有聊天室用户名

String str=stnextToken();

clientlist1add(str); //增加到用户列表中

}

}

else if(keywordequals("MSG")) { //聊天信息

String usr=stnextToken();

clienttfChatappend(usr); //增加聊天信息到信息显示框

clienttfChatappend(stnextToken("\0"));

clienttfChatappend("\n");

}

else if(keywordequals("QUIT")) { //断天连接信息

Systemoutprintln("Quit");

try{

clientlisten=null;

clientsocketclose(); //关闭端口

clientsocket=null;

}

catch(IOException e){}

clientlist1removeAll(); //移除用户列表

return;

}

}

}

}

}

import javanet;

import javaio;

import javautil;

public class ChatServer {

static int port=5656; //端口号

static Vector clients=new Vector(10); //存储连接客户信息

static ServerSocket server=null; //建立服务器socket

static Socket socket=null; //套接字连接

public ChatServer() {

try {

Systemerrprintln("Server start");

server=new ServerSocket(port); //初始化服务器套接字

while(true){

socket=serveraccept(); //等待连接

Systemerrprintln(socketgetInetAddress()+"连接\n"); //得到客户机地址

Client client=new Client(socket); //实例化一个客户线程

clientsaddElement(client); //增加客户线程到向量中

clientstart(); //启动线程

notifyChatRoom(); //监视聊天室连接变化

}

}

catch(Exception ex) {

exprintStackTrace(); //输出出错信息

}

}

public static void notifyChatRoom() {

StringBuffer newUser=new StringBuffer("newUser");

for(int i=0;i<clientssize();i++){

Client c=(Client)clientselementAt(i);

newUserappend(":"+cname); //客户端姓名字符串

}

sendClients(newUser); //发送信息到客户端

}

public static void sendClients(StringBuffer message){

for(int i=0;i<clientssize();i++){

Client client=(Client)clientselementAt(i); //分别得到每个客户端的连接

clientsend(message); //发送信息

}

}

public void closeAll() { //关闭所有连接

while(clientssize()>0) { //遍历整个Vector

Client client=(Client)clientsfirstElement(); //得到一个客户端

try{

clientsocketclose(); //关闭端口

}

catch(IOException ex){

exprintStackTrace(); //输出错误信息

}

clientsremoveElement(client); //移出客户端信息

}

}

public static void disconnect(Client c){ //断开客户端

try{

Systemerrprintln(cip+"断开连接\n");

csend(new StringBuffer("QUIT")); //向客户发送断开连接信息

csocket=null; //关闭端口

}

catch(Exception ex){

exprintStackTrace();

}

clientsremoveElement(c); //移出客户端信息

}

public static void main(String[] args) {

new ChatServer(); //实例化一个ChatServer类

}

class Client extends Thread {

Socket socket; //连接端口

String name; //用户姓名

String ip; //客户端IP地址

BufferedReader reader ; //输入流

PrintStream ps; //输出流

public Client(Socket s){

socket=s;

try{

reader = new BufferedReader(new InputStreamReader(sgetInputStream())); //得到输入流

ps=new PrintStream(sgetOutputStream()); //得到输出流

String info=readerreadLine(); //读取接受到的信息

StringTokenizer stinfo=new StringTokenizer(info,":"); //分解字符串

String head=stinfonextToken(); //获取关键字

if(stinfohasMoreTokens())

name=stinfonextToken(); //获取用户名

if(stinfohasMoreTokens())

ip=stinfonextToken(); //获取IP地址

}

catch(IOException ex){

exprintStackTrace();

}

}

public void send(StringBuffer msg) {

psprintln(msg); //输出信息

psflush();

}

public void run(){

while(true){

String line=null;

try{

line=readerreadLine(); //读取数据流

}

catch(IOException ex){

exprintStackTrace(); //输出错误信息

ChatServerdisconnect(this); //断开连接

ChatServernotifyChatRoom(); //更新信息

return;

}

if(line==null){ //客户离开

ChatServerdisconnect(this);

ChatServernotifyChatRoom();

return;

}

StringTokenizer st=new StringTokenizer(line,":"); //分解字符串

String keyword=stnextToken();

if(keywordequals("MSG")){ //发送来的是聊天信息

StringBuffer msg=new StringBuffer("MSG:");

msgappend(name); //在信息上增加用户名

msgappend(stnextToken("\0"));

ChatServersendClients(msg); //发送聊天语句到各个客户端

}

else if(keywordequals("QUIT")){ //退出命令

ChatServerdisconnect(this); //断开连接

ChatServernotifyChatRoom(); //刷新信息

}

}

}

}

}

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 芯片组对于服务器而言的重要性是什么?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情