08 2012 档案

摘要:记得C++ 沉思录上说过,如果数据成员有指针类型的,最好把三大函数补全,不然的话容易产生浅拷贝和内存泄露。这里给出一个简单的例子。#include #include #include #include using namespace std;class CDemo{public: CDemo():str(new char[1]) { str[0] = '\0'; cout * a1 = new vector(); a1->push_back(d1); coutfront().c_str()front().c_st... 阅读全文
posted @ 2012-08-28 22:39 KingsLanding 阅读(1214) 评论(0) 推荐(0) 编辑
摘要:#include <iostream>#include <stack>#include <queue>using namespace std;template<class DataType>struct BiNode{ DataType data; struct BiNode *left,*right; BiNode():left(NULL),right(NULL){}};template<class DataType>class BiTree{ public: BiTree() { root = Create();} BiTree( 阅读全文
posted @ 2012-08-25 15:33 KingsLanding 阅读(894) 评论(0) 推荐(0) 编辑
摘要:I/O Operations and Activities 使用SR-IOV 的根本原因就是使得虚拟机中的一个驱动可以直接访问PCI进行I/O操作,并能够在虚拟机之间共享设备。Intel VF 驱动了解自己运行在一个虚拟化的环境中拥有优先的PCI资源。 可用的资源包括基本的接收和发送以太网包的能力,Intel VF 还提供了额外的硬件包括: ·状态信息: ·链路速度 ·链路状态 ·复用模式 ·统计数据包括: ·收到的包计数 ·发送的包计数 ·收到的八位组计数 ·发送的八位组计数 ·收到的多播包计 阅读全文
posted @ 2012-08-23 21:33 KingsLanding 阅读(7037) 评论(0) 推荐(0) 编辑
摘要:Physical Function Driver: PF 驱动是一个专门管理SR-IOV设备全局功能驱动,而且还要配置相关共享资源。PF 驱动 随着Hypervisor 的不同而不同,一般需要具有比普通虚拟机更高的权限才能对其进行操作。PF驱动包含了所有传统驱动的功能,使得Hypervisor能够访问设备I/O资源。也可以通过调用PF驱动执行相关操作从而影响整个设备。PF驱动必须在VF驱动之前加载,而且需要等VF驱动卸载之后才能卸载。 Intel SR-IOV 驱动包含了所有 Intel 以太网卡的功能,并且还有下面使用SR-IOV时拥有的特殊功能: ·给每个VF生成一个MAC .. 阅读全文
posted @ 2012-08-23 21:25 KingsLanding 阅读(6162) 评论(0) 推荐(0) 编辑
摘要:SR-IOV Overview:当在主机接口之后使用普通共享设备时,本地共享设备会为每个接口提供单独的内存空间,工作队列,中断和命令处理。这些共享资源也需要被管理,它们会向Hypervisor中可信分区提供一系列用于管理自己的寄存器。当拥有独立的工作队列和命令处理机制后,这些设备就可以同时从多种资源接受命令,并将这些命令智能的融合在一起,在传递给下一级结构之前。虚拟化软件不用再对I/O请求进行复用,这减少了软件的压力。本地共享设备能够通过很多方式实现,可以按照标准实现也可以使用其他专门的实现方式。因为大多数这些设备都是通过PCI 访问的,PCI-SIG 决定定义一种实现标准用语创建和管理本地共 阅读全文
posted @ 2012-08-23 21:13 KingsLanding 阅读(7939) 评论(0) 推荐(0) 编辑
摘要:/* 注意C++ 的内存管理的复杂性 尤其是在merge() 之中,当融合之后如何保证被合并了的链表之后的对象的析构函数会出错,不会被delete两次 还有就是友元函数的模板写法*/#include <iostream>#include <typeinfo>using namespace std;template<class DataType>struct Node{ DataType data; Node<DataType> *next;};template<class DataType>class Linklist;templat 阅读全文
posted @ 2012-08-20 21:06 KingsLanding 阅读(742) 评论(0) 推荐(0) 编辑
摘要:bind() 和 lambda 表达式都可以实现类似的功能,在使用的时候有时候不知道选择哪一个。这里来做一个简单的总结。主要参考了一下的文章:http://stackoverflow.com/questions/1930903/bind-vs-lambdahttp://www.gockelhut.com/c++/articles/lambda_vs_bind1. bind() 在多层嵌套的时候会使代码非常难看懂(参见文章一)2. lambda 不支持“多态性”(其实就是泛型),需要在定义的时候指定参数类型3. lambda 运行速度会比bind() 函数快很多4. lambda 可以通过 .. 阅读全文
posted @ 2012-08-12 17:00 KingsLanding 阅读(2584) 评论(1) 推荐(0) 编辑
摘要:#include <random>#include <iostream>#include <functional> void f(int n1, int n2, int n3, const int& n4, int n5){ std::cout << n1 << ' ' << n2 << ' ' << n3 << ' ' << n4 << ' ' << n5 << &# 阅读全文
posted @ 2012-08-12 10:56 KingsLanding 阅读(1402) 评论(0) 推荐(0) 编辑
摘要:复习effective C++ ,今天看到了"virtual 函数以外的其它选择",里面介绍了Strategy 模式的两种实现方式,也介绍了std::function 和 std::bind 函数等,结合这段时间学习的进行一个总结。首先还是先来回顾书上的内容:问题引入:一个游戏需要对其中人们生命值,健康状况进行监控计算,因此需要定义一个专门的函数,但是不同的人物的计算方式是不同的,也就是说这个函数需要不同的实现方式。可以使用多态,这是最基本的方法。实例:class GameCharacter {public:virtual int healthValue() const;/ 阅读全文
posted @ 2012-08-12 10:40 KingsLanding 阅读(912) 评论(0) 推荐(0) 编辑
摘要:FC拥有自己的独立层次结构,FC-0到FC-4对应OSI模型的1-5层,但也并非一一对应,完整协议内容请大家自行查阅标准文档。其中FC-2定义了数据通信的内容,是与网络方面息息相关的,下面介绍的内容也都是以FC-2为主。 在FC网络中一共有三种主要的接口角色,NPort,FPort和EPort,其中N是服务器或存储等终端节点连接FC网络的的接口,F是FC交换机设备连接服务器或存储等终端节点的接口,E是FC交换机互联接口。FC设备都拥有2个重要标识:WWN(World Wide Name):64bit,节点和每个接口都有各自固定的WWN且所有的WWN均是唯一的,WWN的作用是为了身份识别和... 阅读全文
posted @ 2012-08-11 09:52 KingsLanding 阅读(5417) 评论(1) 推荐(1) 编辑
摘要:通过以太网传输的光纤通道流量(FCoE)就是要求无丢包服务的一个典型示例。为了使以太网能够满足应用的无丢包要求,需要制定一种方法来通过以太网提供无损服务。基于优先级的流量控制正是在这种背景下出现。 基于优先级的流量控制(PFC)是对暂停机制的一种增强(如下图)。当前以太网暂停选择(IEEE802.3 Annex 31B)也能达到无丢包的要求,但它会阻止一条链路上的所有流量,本质上来讲,它会暂停整条链路。PFC 允许在一条以太网链路上创建 8 个虚拟通道,并为每条虚拟通道指定一个 IEEE 802.1P 优先等级,允许单独暂停和重启其中任意一条虚拟通道,同时允许其它虚拟通道的流量无中断通过... 阅读全文
posted @ 2012-08-11 09:39 KingsLanding 阅读(9793) 评论(1) 推荐(0) 编辑
摘要:FCoE 采用增强型以太网作为物理网络传输架构,能够提供标准的光纤通道有效内容载荷,避免了 TCP/IP 协议开销,而且 FCoE 能够像标准的光纤通道那样为上层软件层(包括操作系统、应用程序和管理工具)服务。 FCoE 可以提供多种光纤通道服务,比如发现、全局名称命名、分区等,而且这些服务都可以像标准的光纤通道那样运作。不过,由于 FCoE 不使用 TCP/IP 协议,因此 FCoE 数据传输不能使用 IP 网络。FCoE 是专门为低延迟性、高性能、二层数据中心网络所设计的网络协议。 和标准的光纤通道 FC 一样,FCoE 协议也要求底层的物理传输是无损失的。因此,国际标准化组织已经... 阅读全文
posted @ 2012-08-11 09:22 KingsLanding 阅读(16974) 评论(0) 推荐(0) 编辑
摘要:数据中心桥接交换协议(DCBX)是一种数据中心自动化管理的协议基础,主要供 IEEE 数据中心桥接发现对等的配置,并在符合 DCB 要求的桥接之间交换配置信息,同时 DCBX 能够检测出桥接之间错误的配置信息或用于引导对端进行配置等。· 数据中心桥接交换协议(DCBX)通常在数据中心环境中使用,用于通告数据中心桥接的相关参数,如 ETS 的优先级组、是否支持和使能 PFC 等;· 数据中心桥接交换协议(DCBX)作为信息的承载体,需要与其它数据中心协议配合使用。DCBX 需要从其它协议获取本地的数据中心相关参数配置信息通告给邻居设备,同时它能够接收和存储邻居设备发送的配置信 阅读全文
posted @ 2012-08-11 09:12 KingsLanding 阅读(13491) 评论(1) 推荐(0) 编辑
摘要:数据中心的网络以交换以太网为主,只有传统意义的汇聚层往上才是IP的天下。数据中心的以太网络会逐步扩大,IP转发的层次也会被越推越高。 数据中心网络从设计伊始,主要着眼点就是转发性能,因此基于CPU/NP转发的路由器自然会被基于ASIC转发的三层交换机所淘汰。传统的Ethernet交换技术中,只有MAC一张表要维护,地址学习靠广播,没有什么太复杂的网络变化需要关注,所以速率可以很快。而在IP路由转时,路由表、FIB表、ARP表一个都不能少,效率自然也低了很多。数据中心网络设备就是交换机,而交换机就分为框式与盒式两种。当前云计算以大量X86架构服务器替代小型机和大型机,导致单独机架Rack上的.. 阅读全文
posted @ 2012-08-11 09:03 KingsLanding 阅读(1595) 评论(0) 推荐(0) 编辑
摘要:云计算的各方面定义很多,基于用户的视角来看,目的就是让使用者在不需了解资源的具体情况下做到按需分配,将计算资源虚拟化为一片云。站在高处看,当前的主流云计算更贴切于云服务,个人认为可理解为早先运营商提供数据中心服务器租用服务的延伸。以前用户租用的是一台台物理服务器,现在租用的是虚拟机,是软件平台甚至是应用程序。公认的三个云计算服务层次是IaaS(Infrastructure as a Service)、PaaS(Platform as a Service)和SaaS(Software as a Service),分别对应硬件资源、平台资源和应用资源。对于用户来说:1、当提供商给你的是一套a .. 阅读全文
posted @ 2012-08-11 08:50 KingsLanding 阅读(1907) 评论(0) 推荐(0) 编辑
摘要:C++ 沉思录也算是C++中的经典书籍,其中介绍OO思想的我觉得很好,但是全书中贯穿了handle,使用引用计数等,也有点不适合现代C++的设计思想。这里使用shared_ptr 智能指针改写了“句柄”这一章的程序,明显使代码量下降,而且管理方便。下面来看代码:#include <iostream>#include <memory>using namespace std;class Point{public: Point() : xval(0),yval(0){}; Point(int x, int y): xval(x), yval(y){}; Point(const 阅读全文
posted @ 2012-08-10 21:11 KingsLanding 阅读(1657) 评论(0) 推荐(0) 编辑
摘要:shared_ptr的作用有如同指针,但会记录有多少个shared_ptrs共同指向一个对象。这便是所谓的引用计数(reference counting)。一旦最后一个这样的指针被销毁,也就是一旦某个对象的引用计数变为0,这个对象会被自动删除。shared_ptr 在 Technique report I 中已经出现,在effective C++ 中提到过shared_ptr 的使用,现在已经成为C++11 的正式成员。shared_ptr 的自动删除功能是一个很好的防止内存泄露的方法,在C++中也称为RAII(Resource Acquisition Is Initialization).. 阅读全文
posted @ 2012-08-10 21:02 KingsLanding 阅读(2362) 评论(0) 推荐(0) 编辑
摘要:rtl8139 网卡驱动分析:(注:这里只分析了主要函数,代码版本是:8139too.c71420 bytes2010-04-01 22:56:18)/* * 提供了一系列驱动程序可调用的接口,主要用于发现和初始化设备 */static struct pci_driver rtl8139_pci_driver = { .name = DRV_NAME, .id_table = rtl8139_pci_tbl, .probe = rtl8139_init_one, .remove ... 阅读全文
posted @ 2012-08-04 21:35 KingsLanding 阅读(2068) 评论(0) 推荐(0) 编辑
摘要:紧接上一篇,这里简要介绍net_device 结构和网卡驱动框架。 struct net_device 是一个比sk_buff 更复杂的结构,里面包含了与TCP/IP协议栈通信的接口函数,但是自从2.6.31 之后的内核中这些接口函数就被封装在了 stuct net_device_ops 结构中,在net_device 结构中以 netdev_ops 成员的形式出现。我们就来看如何使用该结构:1. 在初始化幻术中驱动需要分配一个net_device 结构,可以使用alloc_netdev()函数,也可以使用一个更常用的函数 alloc_etherdev() 函数来实现。这个函数在创建... 阅读全文
posted @ 2012-08-04 21:33 KingsLanding 阅读(2849) 评论(1) 推荐(0) 编辑
摘要:接上一篇,我们来看与skb相关的一些重要函数:网络模块中,有两个用来分配SKB描述符的高速缓存,在SKB模块初始函数skb_init()中被创建:void __init skb_init(void){skbuff_head_cache = kmem_cache_create("skbuff_head_cache", sizeof(struct sk_buff), 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);skbuff_fclone_cache = kmem_cache_create("skbuff_fclone_cache&q 阅读全文
posted @ 2012-08-04 21:26 KingsLanding 阅读(1908) 评论(0) 推荐(0) 编辑
摘要:参考:1. 深入理解Linux网络技术内幕 PartIII 2. Essential Linux Device Driver Chap15 3. Linux 内核源码剖析——TCP/IP 实现 5. rtl8139too.c 2010.4 修订 6. Linux 内核 2.6.33 7. google当你在写一个网卡驱动的时候回接触到3个重要的数据结构:1. struct sk_buff sk_buff 结构贯穿整个协议栈2. struct net_device 该结构定义了网卡驱动和协议栈之间的接口3. I/O 总线相关的结构,比如 struct pci_... 阅读全文
posted @ 2012-08-04 21:08 KingsLanding 阅读(1337) 评论(0) 推荐(0) 编辑
摘要:Array 是一种大小固定的顺序容器。array 的申明:template <class T, size_t N>class array;Array内部只存储所包含的数据,哪怕是大小也只不过是个模板参数。和普通使用‘[]’语法申明的数组相比,只不过显得更加高效(操作高效),因为这个类添加了一系列的全局成员函数用来操作这些元素。下面来列一些主要的操作:// ‘[]’ 操作#include <iostream>#include <array> int main (){ std::array<int,10> myarray; unsigned int 阅读全文
posted @ 2012-08-02 22:54 KingsLanding 阅读(7028) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示