周报1

起止时间:2015.8.10(星期一)—2015.8.14(星期五)

工作地点:

 

本周工作计划:

完成情况:

 

下周工作计划: 

可能风险:

2015.8.14 星期五

 

今日内容

1. Libvirt架构学习之二

libvirt是用来管理虚拟机,主要包括libvirt APIlibvirtd进程和virsh工具集三部分。

1Libvirt API主要为不同的虚拟化技术方案对外提供统一的接口,隔离底层硬件虚拟化接口对上层的影响,同时支持多种Host OS,如linuxwindowssolairs等,从而加快软件开发的过程。并提供各种加密协议,如TLS, SASL, SSH, PolicyKit等,保证了上层应用对下层资源的安全访问。libvirt具备SNMP的功能,可通过SNMP来监控和设置每个node上不同domain信息。 bf'g

2libvirtd进程是一个后台daemon进程。首先起到远程代理的作用,当remote client发送来的命令,由该进程监测执行。其次控制本地环境的初始化,及libvirt服务的启停,以及用户connection的响应等。最后将不同虚拟化技术以Driver形式实现的接口注册到libvirt中。

3virsh工具集的内容较为单一,即将libvirt API封装为Command Line Interface形式提供对外的接口。

 

2. Shell脚本的学习

大体上,程序设计语言可以分为编译型语言和解释型语言两类。编译型语言需要将源代码转换成目标代码的编译过程,执行效率很高。解释型语言也被称作“脚本语言”,解释器需要读取我们编写的源代码,并将其转换成目标代码,再由计算机运行。使用脚本编程语言的好处是它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象。

 

 

明日计划

 

2015.8.13 星期四

 

今日内容

1. 1.Libvirt架构学习之三

理一下通过virsh命令实例的代码执行路径:

1virsh命令或API接口创建虚拟机,使用virsh create vm.xml 或者 virDomainPtr virDomainCreateXML (virConnectPtr conn, const char * xmlDesc, unsigned int flags)等接口。

2)调用libvirt提供的统一接口,如conn->driver->domainCreateXML(conn, xmlDesc, flags);  这里的domainCreateXML即抽象的统一接口。

3)调用底层的相应虚拟化技术的接口,即具体的驱动,如domainCreateXML = qemuDomainCreateXML; driver=qemu,那么此处即调用的qemu注册到抽象驱动层上的函数qemuDomainCreateXML

4)拼装shell命令,并执行。以qemu为例,qemuDomainCreateXML首先会拼装一条创建虚拟机的命令,比如qemu -hda disk.img,然后创建一个新的线程来执行

 libvirt通过4步,将最底层的直接在shell中输入命令来完成的操作进行了抽象封装,给应用程序开发人员提供了统一的,易用的接口。

 

2. LIbvirt代码分析

 

3. Shell脚本的学习

学习了shell printf命令,Shell if else语句,Shell case esac语句,Shell for循环,Shell while循环,Shell until循环等知识。

 

 

明日计划

 

 

2015.8.11 星期二

 

今日内容

1. OJ练习总结

今日做一OJ题,需要用到ST算法,该算法可以用来求解区间最值问题,即对给定的起点和终点,迅速找出这段区间的最值。类似于二分的动态规划思想,其复杂度降低为O(nlogn)

主要分为两步,先初始化,然后求解。设原数组为x[N]。其中dp[i][j]表示的是从下标为i的元素开始,到下标为(i + 2^j - 1)的元素为止,这些元素中的最大值。对于整型而言,其值不会超过2^32,因此第二维大小为33已经足够。因此dp[i][0]表示的是元素本身,因此可以初始化为dp[i][0] = x[i]。对于其他的dp[i][j],可以采用动态规划的方式求出,递推式为dp[i][j] = max(dp[i][j - 1], dp[i + 2 ^ (j - 1)][j - 1]),其实就是把一段区间切成两段大小相等的区间,当前区间的最大值就是两个子区间的最大值中的较大者。

对于给定的起点beg及终点end,可以得出区间大小为range = end - beg + 1。因此可以找到一个整数k = (int)(log(range) / log2)。这样区间就可以被划分为子区间1,即[beg, beg + (2 ^ k) - 1],子区间2,即[end - (2 ^ k) + 1, end]。这两个可能会有重叠,但重叠不会影响最大值的求解。因此对于begend,可以得到解为res = max(dp[beg][k], dp[end - (2 ^ k) + 1][k])

 

 

关键代码

k = 0; x = 2;

range = end - beg + 1;

while (x <= range)  {

    k++;

    x <<= 1;

 

 

2. Shell脚本的学习

学习了Shell字符串,Shell数组等知识。

用括号来表示数组,数组元素用“空格”符号分割开,如array_name=(value0 value1 value2 value3)。还可以单独定义数组的各个分量,可以不使用连续的下标,同样从0开始,而且下标的范围没有限制。读取数组元素值的一般格式是:${array_name[index]}。获取数组长度的方法与获取字符串长度的方法相同,例如: length=${#array_name[@]}

 

3. Libvirt代码分析

 

 

 

明日计划

 

2015.8.10 星期一

 

今日内容

1. OJ练习总结

今日做一OJ题,就是用程序来实现一笔画,理论上该题同著名的七桥问题一样,属于一个欧拉道路的问题,可以采用深度搜索树的方法,但是代码在使用递归的过程中较为麻烦。在与同事的交流中,学习了使用flerry算法,就是一个加圈的过程,减少了代码的实现量。

欧拉路径:图中经过每条边一次且仅一次的路径;个无向图是欧拉图当且仅当该图是连通的(注意,不考虑图中度为0的点,因为它们的存在对于图中是否存在欧拉环、欧拉路径没有影响)且所有点的度数都是偶数;一个无向图是半欧拉图当且仅当该图是连通的且有且只有2个点的度数是奇数(此时这两个点只能作为欧拉路径的起点和终点)。

 

2. Shell编程的学习

学习了Shell变量,Shell特殊变量,Shell替换,Shell运算符等知识。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值