抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

垃圾回收机制原理与实现

前言 动态内存分配在堆上进行 堆用free list管理空闲块 堆的每次动态分配内存是从它现有的free list中取出一块(或块中的一部分,这取决于管理free list的策略) 堆的free list中没有适合的块时再尝试”堆扩容”,即堆一开始并不是就拥有整个内存来分配的 所谓garbage就是内存中永远无法使用到的部分。这往往是由于动态申请内存后没有及时释放导致的内存泄漏。 垃圾回收...

QEMU设备通信

Preface现实世界中设备之间通过总线互联/通信,其中sysbus一般负责与cpu直接相连的设备与cpu的通信,外围设备则会通过各种类型的总线(如pci总线)间接地与cpu通信。本文主要讨论QEMU中是如何对总线进行模拟来实现设备间通信。 QEMU中实现了BusState和SysBusDevice等BUS类来表示总线类型的继承关系,将设备强制转换成DeviceState结构后使用Devic...

关于qemu使用树状MemoryRegion的分析

树状结构的MemoryRegion这章关注的重点是:设计树状结构MR的目的。包括中间节点,叶子节点是什么,父子关系代表什么,以及为何这么设计。 首先说明结论: 非叶子节点都是container抽象,叶子节点是真正会被映射的MR 这么设计可以加速地址地址空间映射的过程(即在适当的位置插入一段地址空间) 父子关系一方面可以方便管理(如下文ccsr的例子),另一方面将整个大的线性空间分成了数个小...

qemu gdbserver internal

Prefacegdb设置断点的原理是使用ptrace系统调用建立gdb与目标程序的调试关系,gdb因此能够控制目标程序并先行对信号进行处理。因此设置断点的原理是:在断点处插入int 3触发软中断,gdb先行受到该软中断发出的SIGTRAP信号,从而转入gdb命令行,被调试程序停止。 利用gdb远程连接到和qemu中的gdbserver可以调试linux内核的执行过程。那qemu内的gdbse...

qemu monitor的工作模型

前言gdb调试程序会阻塞被调试程序运行,gdb走一步,程序才能走一步,形如: 1234gdbprocgdbproc 那qemu的monitor中使用HMP/QMP与虚拟机交互交互会不会导致qemu挂起呢?monitor和qemu交互是同步还是异步?如果是同步那qemu是如何挂起的 monitor等待命令输入时不会阻塞qemu进行,不像gdb那样等待命令时阻塞被调试程序运行。只是在输入命令敲...

qemu磁盘文件打开过程

磁盘文件打开过程通过gdb追踪openat系统调用得知,raw格式文件会使用raw_open_common()函数打开,调用栈如下: 通过分析源码得到qemu打开磁盘文件的过程:QEMU使用一个BlockDriverState结构体来管理块设备驱动信息,其中就包括了操作和数据。块设备创建的关键就在于初始化BlockDriverState结构体。 1234567struct BlockDr...

qemu如何由事件循环找到真正要操作的目标设备

从eventfd联系到fd的流程非阻塞事件循环中,通过修改eventfd来通知qemu有事情需要qemu处理,如调用读写回调函数等。已知eventfd仅做通知的作用,qemu事件循环能够监听到eventfd的改变然后做相应处理。但是qemu如何由eventfd找到真正要进行处理的对象呢(如由磁盘读写关联的eventfd找到磁盘的fd进行读写)?本文将以virtio的磁盘读写为例,介绍从eve...

OpenRC和Runit

前言很多人讨厌systemd,说systemd违背了UNIX哲学的”do one thing and do it well”。这里不讨论systemd的功过,而是通过介绍OpenRC和Runit两个init程序来体会什么叫小而精, KISS。 OpenRC使用逻辑OpenRC在/etc/init.d维护每个service的控制脚本,可以通过/etc/init.d/<service>...

Linux中分区扩容与磁盘数据迁移

分区扩容注意,这种方法只能用于最后一个分区的扩容 使用lsblk查看现有分区情况,如: 12345$ lsblkvda 253:0 0 12G 0 disk├─vda1 253:1 0 1K 0 part├─vda2 253:2 0 2G 0 part [SWAP]└─vda3 253:3 0 8G 0 part / 使...

QEMU虚拟机开发与环境配置

QEMU虚拟机开发与环境配置QEMU虚拟机开发与环境配置大体分为以下三个步骤: qemu虚拟机开发 准备虚拟机运行所需环境 qemu运行参数配置 虚拟机开发虚拟机开发可以从最简单的图灵机模型开始,创建内存、创建CPU,再在此基础上添加需要的设备。需要注意的是图灵机模型不包括屏幕回显功能(毕竟有输出才方便debug嘛),所以含有CPU,内存,serial设备的机器才是人类能够交互的最小虚拟...