课程总结报告

课程总结报告

一、结合虚拟化技术分析Linux系统的一般执行过程

1、一般情况

1.正在运行的用户态进程 X 。
2.发生中断(包括异常、系统调用等),硬件完成以下动作。当前 CPU 上下文压入用户态进程 X 的内核堆栈。加载当前进程内核堆栈相关信息,跳转到中断处理程序,即中断执行路径的起点。
3. 保存现场,此时完成了中断上下文切换,即从进程 X 的用户态到进
程 X 的内核态。
4.中断处理过程中或中断返回前调用了 schedule 函数,其中的 switch_to 做了关键的
进程上下文切换。将当前用户进程 X 的内核堆栈切换到选出的 next 进程。
5.标号 1 ,即上述代码第 50 行“ 1:\t ”(地址为 switch_to 中的“ $1f ”) , 之后开
始运行用户态进程 Y (这里 Y 曾经通过以上步骤被切换出去,因此可以从标号 1 继续
执行)。
6. 恢复现场,与(3)中保存现场相对应。
7.从 Y 进程的内核堆栈中弹出(2)中硬件完成的压栈
内容。此时完成了中断上下文的切换,即从进程 Y 的内核态返回到进程 Y 的用户态。
8.继续运行用户态进程 Y 。

2、特殊情况

1.通过中断处理过程中的调度时机,用户态进程与内核线程之间互相切换和内核线程之间互相切换,与最一般的情况非常类似,只是内核线程运行过程中发生中断没有进程用户态和内核态的转换;

2.内核线程主动调用schedule(),只有进程上下文的切换,没有发生中断上下文的切换,与最一般的情况略简略;

3.创建子进程的系统调用在子进程中的执行起点及返回用户态,如fork;

4.加载一个新的可执行程序后返回到用户态的情况,如execve;

3、虚拟化技术

虚拟化技术支持:虚拟化管理程序在后台负责监控和管理虚拟机的运行。它可以提供虚拟机的迁移、快照、资源调整和故障恢复等功能,以确保虚拟机的稳定和高可用性。

虚拟机间通信:在虚拟化环境中,不同虚拟机之间可能需要进行通信和数据交换。虚拟化管理程序提供了不同虚拟机之间的网络连接和数据传输机制,例如虚拟网络设备、虚拟交换机等。Linux系统可以利用这些机制进行网络通信。

虚拟内存分配:在程序执行之前,Linux会为程序分配虚拟内存空间,这个虚拟内存空间可以比物理内存更大,可以让程序访问更多的内存空间。虚拟内存是通过页表映射实现的,它可以提高系统的内存利用率,并且可以防止程序之间相互干扰。

4、结合虚拟化技术分析中断过程

1:物理外设产生虚拟中断流程:

外设中断信号(Hypervisor已经将其配置成虚拟中断)到达GIC;

GIC Distributor将该物理IRQ发送至CPU;

CPU trap到Hyp模式,此时将会退出Guest OS的运行,并返回到Host OS;

Host OS将响应该物理中断,也就是Host OS驱动响应外设中断信号;

Hypervisor往List Register写入虚拟中断,Virtual CPU interface将virtual irq信号发送至vCPU;

CPU将处理该异常,Guest OS会从Virtual CPU Interface读取中断状态进行响应;

2:虚拟外设产生虚拟中断流程:

Qemu模拟外设,通过irqfd来触发Hypervisor进行中断注入;

Hypervisor往List Register写入虚拟中断,Virtual CPU interface将virtual irq信号发送至vCPU;

CPU将处理该异常,Guest OS会从Virtual CPU Interface读取中断状态进行响应;

irqfd提供了一种机制用于注入虚拟中断,而这个中断源可以来自虚拟外设;

irqfd是基于eventfd的机制来实现的,用于用户态与内核态,以及内核态之间的事件通知;

事件源可以是虚拟设备,比如VFIO框架等。

i.初始化的操作包括两部分:1)设置Routing entry(【a】vgic_init初始化的时候创建默认的entry;【b】:用户层通过KVM_SET_GSI_ROUTING来设置);2)设置irqfd;

ii.初始化设置完成后,系统可以随时响应事件触发了,当事件源触发时,将调度到irqfd_inject函数;

iii.irqfd_inject函数完成虚拟中断的注入操作,在该函数中会去回调set函数,而set函数是在Routing entry初始化的时候设置好的;

iv.实际的注入操作在vgic_irqfd_set_irq函数中完成;

v.kvm_vcpu_kick函数,将Guest OS切回到Host OS,中断注入后再切回到Guest OS就可以响应了;

二、课程收获

通过这门课程的学习,第一个收获就是学习了很多关于Linux的一些常见的基本命令,比如文件夹的建立,在不同文件夹之间的转换,解压缩文件,压缩文件,并且在安装不同的Linux内核时反复使用熟悉了这些命令。

除此之外,通过对于底层代码的运行和阅读,我还在这门课程中再次具体地了解到了操作系统的种种概念。以前虽然学习了操作系统的课程,但对这些概念仅限于概念上的了解,理解的还是不够深刻。在课程中,通过对于源码的讲解与阅读,可以了解到这些过程究竟是怎样的,包括:Linux的核心编译、系统调用、进程的创建(调度以及切换)、可执行程序的原理。这使得我对于操作系统的理解更加深入,对于Linux系统也有了一定的理解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值