avatar
文章
48
标签
19
分类
9

主页
归档
标签
分类
H4wk1ns's blog
搜索
主页
归档
标签
分类

H4wk1ns's blog

qemu设备模型
发表于2024-07-31|虚拟化|虚拟化•qemu
前言Qemu支持种类繁多的外部设备,并且支持多种架构,这些架构和设备的模拟在Qemu的代码中占了大头。 这里简单介绍一下Qemu中用于设备模拟的模型,主要分为总线、设备前端和设备后端。 总线实际上,PC中各组件是通过总线互联通信的。再具体的说,设备与总线是交替的,总线下面只能连接设备,设备也只能连接到总线上,总线与总线、设备与设备之间是不能直接连接的,如下图所示。 参考之前的qemu基本知识中对象初始化内容,根据总线的TypeInfo,即bus_info,即可了解总线对象的相关信息。1234567891011121314static const TypeInfo bus_info = { .name = TYPE_BUS, .parent = TYPE_OBJECT, .instance_size = sizeof(BusState), .abstract = true, .class_size = sizeof(BusClass), .instance_init = qbus_initfn, .instance_finalize = ...
qemu内存模型
发表于2024-07-20|虚拟化|虚拟化•qemu
前言这里简单介绍一些QEMU的内存模型,即QEMU是如何管理gpa到hva的映射关系。 其内存模型主要由RAMBlock、MemoryRegion、AddressSpace和FlatView等结构构成。 RAMBlock无论如何,Qemu都需要申请一段内存空间用来存放虚拟机内存的真实数据,而这部分内存空间由struct RAMBlock来管理。 struct RAMBlock1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465struct RAMBlock { struct rcu_head rcu; struct MemoryRegion *mr; uint8_t *host; uint8_t *colo_cache; /* For colo, VM's ram cache */ ram_addr_t offset; ram_addr_t u ...
网卡与网络栈
发表于2024-04-14|内核|linux•内核•网络
前言偶然看到了arthurchiao大佬写的Linux 网络栈接收数据(RX):原理及内核实现(2022)文章,从中学习到了许多中断子系统和网络子系统的知识,收获颇丰,特别记录一下。 数据包处理流程下图是一个数据包从网卡通过内核网络栈到达用户空间的流程 网卡通过DMA写入数据到设备驱动预留的ring buffer中 网卡产生IRQ硬件中断 软中断处理线程ksoftirq基于ring buffer生成内核协议栈的数据包skb 内核链路层协议栈处理 内核网络层协议栈处理 内核传输层协议栈处理 参考 Linux 网络栈接收数据(RX):原理及内核实现(2022) Linux 内核网络栈
qemu基本知识
发表于2024-04-08|虚拟化|虚拟化•qemu
前言这里简单介绍一些QEMU相关的基本知识,从而方便后续更深入的研究QEMU QOM(QEMU Object Model)QEMU提供了一套面向对象编程的模型,从而实现各种具有继承关系的设备的模拟。 面向对象编程通常涵盖了类和对象这两个关键概念,其中类是对象的抽象定义,而对象则是类的具体实例。在QOM中,这些概念得到了实现和体现。12345678910111213141516171819202122232425 struct OjbectProperty ┌────────────┐ │ │ └─────▲──────┘ │ ┌──┬──────────────┬──┐ │ │ │ class ├──┼──────►┌──┬──────────────┬──┐ │ │ ├──────────────┤ │ │ │ type ├──┼────►┌──────────────┐◄──────── ...
Linux终端
发表于2023-09-21|内核|linux•内核
前言之前就对TTY、PTY和PTS等概念比较迷惑,但因为知识储备问题并没有细究。最近刚好看到几篇相关的文章,觉得讲的非常不错,打算整理一下。 终端架构目前Linux中终端的整体架构如下所示 其基本的工作流程如下所示: 终端模拟器(Terminal Emulator)打开/dev/ptmx(pseudo terminal master multiplexer)设备,分配一个可用的ptm(pseudo terminal master)设备的文件描述符。如ptmx_open()所示,Linux内核在打开ptm设备时,也会自动的创建一个pts(pseudo terminal slave)设备,与该ptm一一对应。 终端模拟器fork()子进程。子进程打开之前ptm设备对应的pts设备,并使用dup()将打开的pts设备的文件描述符设备为子进程的标准输入、标准输出和标准错误输出。 子进程执行bash程序。此时,bash和终端模拟器通过伪终端(pty, pseudo terminal)进行通信,即终端模拟器通过ptm设备读取的数据是bash通过pts设备写入的数据,而bash通过pts设备读取 ...
linux内核硬中断分析
发表于2023-08-23|内核|linux•内核
前言最近几天的面试刚好问到了内核中断子系统的相关问题,发现自己对这部分了解的不是非常清晰,因此面试后就读了读Linux 6.5-rc6相关代码。结果发现这部分的代码逻辑并不是非常清楚,所以记录下这篇博客,帮助梳理一下Linux内核的x86-64架构的中断子系统的硬中断部分的逻辑,方便以后快速查阅这部分代码细节。 整个内核中断子系统,简单可以分为上半部(硬中断)和下半部。上半部中断可以理解为从CPU被中断到CPU从中断栈中退出的部分,一般处理一些中断任务中非常紧急的工作;其余工作会推迟到下半部中断,包括softirq、tasklet和workqueue等。 这篇文章主要分析上半部中断,也就是硬中断。 整体流程硬件中断整体流程如所示,整体可以分为硬件保存/恢复现场,保存/恢复上下文等步骤。 硬件保存/恢复现场这部分实际上完全是硬件的工作,我们阅读Intel® 64 and IA-32 Architectures Software Developer’s Manual 3A手册的6.12 EXCEPTION AND INTERRUPT HANDLING章节即可。 对于保存现场来说,硬件主要做 ...
123…8
avatar
H4wk1ns
coder && ctfer
文章
48
标签
19
分类
9
Follow Me
最新文章
中断简介2025-01-22
libvirt基础知识2024-12-04
glib的事件循环2024-11-07
virtio简介2024-08-23
qemu的PCI设备2024-08-04
分类
  • ctf5
  • 信息安全2
  • 内核6
  • 手写23
  • 杂谈1
  • 算法1
  • 编程1
  • 虚拟化7
标签
linux内核手写设置杂谈信息安全ctf虚拟化libvirt系统启动qemunodejshexo操作系统算法编程c++编译原理网络
归档
  • 一月 20251
  • 十二月 20241
  • 十一月 20241
  • 八月 20242
  • 七月 20242
  • 四月 20242
  • 九月 20231
  • 八月 20231
网站资讯
文章数目 :
48
本站访客数 :
本站总访问量 :
©2021 - 2025 By H4wk1ns
come to hack me!!
本地搜索