热插拔

Linux Device Driver 3rd 下

做~自己de王妃 提交于 2020-02-16 09:34:54
第十一章 内核的数据类型 坚持使用严格的数据类型,并且使用-Wall -Wstrict-prototypes选项编译可以防止大多数的代码缺陷 内核使用的数据类型主要分为三大类: ① 标准C语言类型,类似int ② 类似u32这样有确定大小的类型 ③ 类似pid_t这样用于特定内核对象的类型 使用标准C语言类型 在不同的体系架构上,普通C语言的数据类型所占空间的大小并不相同。 Linux系统中,指针和long整型的大小总是相同的。 为数据项分配确定的空间大小 有时内核代码需要特定大小的数据项,多半是用来匹配预定义的二进制结构或者和用户口空间进行通讯或者通过在结构体中插入"填白 padding"字段 来对齐数据。 当需要知道自己的数据大小时,内核提供了下列数据类型,定义在<asm/types.h>中 ① u8; 无符号字节8位 ② u16; 无符号字 16位 ③ u32; 无符号32位 ④ u64; 无符号64位 相应的有符号类型也存在,只需将名字中的u用s替换就可以了。 接口特定的类型 内核中最常用的数据类型由typedef声明,这样可以防止出现任何移植性问题。 当需要打印一些接口特定的数据类型时,最行之有效的方法就是将其强制转换成可能的最大类型(通常是long或者unsigned long),然后用相应格式。 因为格式和类型相匹配,而且也不会丢失数据位

KVM命令--使用篇(1)

佐手、 提交于 2020-01-27 00:36:41
1. KVM常见使用命令: 1.1 查看命令 列出所有虚拟机 virsh list --all 显示虚拟机信息 virsh dominfo vm_name 显示虚拟机内存和cpu使用情况 virsh-top 显示虚拟机分区信息 virsh-df vm_name 1.2 修改命令 给虚拟机添加硬盘(支持热插拔) virsh attach-disk vm_name /dev/sdb vdb --driver qemu --mode shareable 卸载硬盘(支持热插拔) virsh detach-disk vm_name vdb 更改信息(需要关机) virsh shutdown vm_name 更改内存 virsh setmem vm_name 或者: virsh edit vm_name virsh create /etc/libvirt/demu/kvn_name/xml 更改cpu virsh edit vm_name virsh create /etc/libvirt/demu/kvn_name/xml 删除虚拟机: 1. virsh shutdown vm_name 2. virsh destroy vm_name 3. virsh undefine vm_name 保存虚拟机状态 virsh save vm_name /tmp/vm_name.bin 还原虚拟机状态

【Spring】IOC

二次信任 提交于 2019-12-22 08:44:50
浅谈IOC IOC的理论背景 图1:传统系统中,对象之间相互引用的一幅图,在采用面向对象方法设计的软件系统中,它的底层的实现都是由n个对象所组成的,所有的对象通彼此之间的合作最终实现系统的业务逻辑,如果我们打开机械式手表的后盖,我们就会看到与图1类似的清形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。这些齿轮相互耦合在一起,共同完成某项任务。在这样的齿轮组中,如果有一个齿轮出现一个问题,可能会影响到整个齿轮组的正常运转,齿轮组齿轮间的耦合关系与软件系统中对象之间的耦合关系非常相似。随着系统规模变大,对象之间依赖关系越来越复杂,架构师和设计师对系统的设计和分析面临更大的挑战,对象之间的耦合度过高的系统,必然会出现牵一发而动全身的情形,降低系统之间、模块之间、对象之间的耦合度是软件工程追求的目标。IOC理论的提出,就是为了解决对象之间耦合度过高的问题,实现对象之间的解耦。 图2 解耦的过程 IOC理论提出的观点大致是这样的:借助于第三方来实现对具有依赖关系的对象之间的解耦,对象之间没有了耦合关系。由于引进了第三方IOC容器,使得对象A、B、C、D之间没有了耦合关系,齿轮之间的传动全部依靠了第三方,全部对象的控制权全部交给了第三方IOC容器,IOC容器成了整个系统的关键核心,它起到了一种凝合剂i的作用,把系统中的所有对象凝合在一起发挥作用。 图3 理想的系统

基于 AppDomain 热插拔 \"插件式\" 技术开发

折月煮酒 提交于 2019-12-21 04:53:17
很多时候,我们都想使用(开发)USB式(热插拔)的应用,例如,开发一个WinForm应用,并且这个WinForm应用能允许开发人员定制扩展插件,又例如,我们可能维护着一个WinService管理系统,这个WinService系统管理的形形色色各种各样的服务,这些服务也是各个"插件式"的类库,例如: public interface IJob { void Run(DateTime time); } public class CollectUserInfo : IJob { public void Run(DateTime time) { //doing some thing... } } 我们提供了一个IJob接口,所有"服务"都继承该接口,然后做相关的配置,在服务启动时,就可以根据配置,反射加载程序集,执行我们预期的任务. 更新程序集(dll/exe) 服务/插件程序( 后面只称为服务,虽然两者应用不同,但是在此处他们所运用的原理和作用是相同的 :-) )很健稳的运行着.但在服务/插件程序运行一段时间之后,某些"插件"的业务需求发生的变化,或者版本升级等种种外部原因,导致我们对原本的"插件"程序集进行了升级(可能从v1.0升级至v2.0).当我们想像Asp.net应用一样.把新的dll替换旧dll的时候,错误发生了. 发生该错误的原因很简单,因为我们的程序中已经调用了该dll

转载: QEMU深入浅出: guest物理内存管理

♀尐吖头ヾ 提交于 2019-12-17 06:48:27
作 者:Stefan Hajnoczi 领 域:Open source and virtualization 适宜读者:对虚拟化有一定了解 背景知识:KVM,Qemu 前言: 众所周知,内存是计算机系统的一个关键组成部分。使用Qemu-kvm方式创建虚拟机时,guest物理内存是由几个不同层面共同管理的。本篇基于Qemu2.5的代码对管理guest物理内存的这几个重要层面进行概括性的解释,为读者深究Qemu源代码奠定了理论基础。 需要注意的是本篇并未涉及guest虚拟内存方面的内容,后续会对其介绍。毕竟使用KVM虚拟化技术的一个重要前提是支持guest与host之间物理内存的转换,并未涉及Qemu中软件模拟的内存管理(即guest虚拟地址与guest物理地址之间的转换)。 一、Guest RAM的配置参数 Qemu命令行选项“-m [size=]megs[,slots=n,maxmem=size]”分别定义了guest物理内存的初始化值,内存条(如DIMM)的可用插槽数以及可支持的guest物理内存最大值。 有了slot与maxmem这两个参数的定义,在Qemu模拟DIMM热插拔的过程中,guest操作系统像host一样,能够监测到内存块的添加或移除。比如向guest中热插拔一块DIMM内存条,就像是在真实物理机上进行的。再者,guest内存热插拔的操作单位并不是字节

电磁干扰(EMI)

浪尽此生 提交于 2019-12-11 18:23:26
文章目录 1 电磁干扰(EMI)的基本概念 1.1 ESD 1.2 EFT 1.3 Surge 1 电磁干扰(EMI)的基本概念 1.1 ESD 冬天的时候,空气比较干燥的城市,朋友们经常对电脑,铁柜等等放电,这就是“静电放电(ESD)”干扰。 1.2 EFT 使用电钻的时候听收音机,看电视有杂音,这就是“快速瞬间脉冲群(EFT)”的效果。 1.3 Surge 电脑性能不好,热插拔优盘等外围设备会出现蓝屏重启电脑等现象,这就是热插拔“浪涌(Surge)“的效果。 参考资料 手把手教你学51单片机:C语言版 来源: CSDN 作者: SlowIsFastLemon 链接: https://blog.csdn.net/SlowIsFastLemon/article/details/103496830

W5500不能热插拔

匿名 (未验证) 提交于 2019-12-03 00:34:01
一种比较笨的方法是在上位机和下位机之间同来设置一个心跳,多长时间后没有心跳了,w5500重启 第二种和第一种差不多,但是简单,只需在w5500寄存器里面改个参数就行,具体参照 https://blog.csdn.net/wiznet2012/article/details/38340375 如需以上图片内容做参考,请点击 https://download.csdn.net/download/fei_yang_yf/10481429 本人用的笨方法解决的热插拔 下位机(STM32)程序 上位机(qt5)程序: //定时器做心跳 myTime = new QTimer(); myTime->setInterval(1000);//1s定时 connect(myTime,SIGNAL(timeout()),this,SLOT(AutoSend())); void MainWindow::AutoSend()//定时器自动发送 { QString str0 = "aa 03 03 ff 05 06 07 bb";//发送心跳 QByteArray sendBuf0 = " "; sendBuf0 = QByteArray::fromHex (str0.toLatin1().data()); tcpSocket->write(sendBuf0); } 具体定时器什么时候开启,关闭要酌情添加

usb热插拔原理

匿名 (未验证) 提交于 2019-12-02 23:43:01
在讲插拔时,我们先了解一下设备插入到hub里面,会有什么结果。 “USB主机是如何检测到设备的插入的呢?首先,在USB集线器的每个下游端口的D+和D-上, 分别接了一个15K欧姆的下拉电阻到地。这样,在集线器的端口悬空时,就被这两个下拉电阻 拉到了低电平。而在USB设备端,在D+或者D-上接了1.5K欧姆上拉电阻。对于全速和高速设备, 上拉电阻是接在D+上;而低速设备则是上拉电阻接在D-上。这样,当设备插入到集线器时, 由1.5K的上拉电阻和15K的下拉电阻分压,结果就将差分数据线中的一条拉高了。集线器检测 到这个状态后,它就报告给USB主控制器(或者通过它上一层的集线器报告给USB主控制器), 这样就检测到设备的插入了。USB高速设备先是被识别为全速设备,然后通过HOST和DEVICE 两者之间的确认,再切换到高速模式的。在高速模式下,是电流传输模式,这时将D+上的 上拉电阻断开。”引用自《USB入门系列之五》。 文章来源: https://blog.csdn.net/hbcbgcx/article/details/91884216

QEMU-KVM设备热插拔机制简析

匿名 (未验证) 提交于 2019-12-02 23:03:14
针对新型硬件设备(GPU/FPGA),为同时实现高性能和共享的需求,其最适合的虚拟化方式是直通共享,即设备支持SR-IOV扩展功能,包含多个功能接口VF,结合硬件辅助虚拟化技术VT-d(Intel)/IOMMU(AMD),使每个接口VF通过直通的方式单独分配给一个虚拟机,以便虚拟机直接和设备通信,提高I/O性能。 在虚拟化环境中,实现设备的热插拔,可与设备直通技术正交互补。在设备不支持SR-IOV扩展的情况下,此时直通的是完整的设备(或者说PF),借助于热插拔可在多个虚拟机间实现设备的共享。若设备支持SR-IOV,则透传给虚拟机的是VF,则可使设备支持更多的虚拟机。 1.KVM下设备直通方式 无论透传的是PF还是VF,其透传给虚拟机的方式是没区别的。针对KVM虚拟机环境下,有两种直通方式:pci-stub和vfio。另外,设备能透传有一个前提,即主板芯片必须支持硬件辅助虚拟化技术VT-d(Intel)/IOMMU(AMD),目前应该都是支持的。在这里,简单介绍大致流程,详情参见[1]。 第一步,使能VT-d(Intel)/IOMMU(AMD) 第二步,主机端安装对应的驱动模块 针对pci-stub: modprobe pci_stub 针对vfio: modprobe vfio modprobe vfio-pci 第三步,找到主机端待透传的PCI设备(以BDF=0000:01:00

C# 插件热插拔

匿名 (未验证) 提交于 2019-12-02 22:10:10
所谓热插拔就是插件可以 在主程序不重新启动的情况直接更新插件, 网上有很多方案: https://www.cnblogs.com/happyframework/p/3405811.html 如下: 但是我发现有一种最简单粗暴的办法, 就是把插件加载到内存当中,然后使用Assembly从内存中加载DLL信息, 这样插件就可以直接被删除,而不会提示文件已被进程占用,而无法删除和更新的问题。 文章来源: C# 插件热插拔