内核态与中断相关理论

虚拟化之Libvirt、Kvm与Qemu

Kvm:kvm是硬件辅助的虚拟化技术,在x86平台上实现了全虚拟化功能,提供了一个基于内核的虚拟机。

Qemu:qemu则提供了一个开源的全虚拟化解决方案,几乎可以模拟任何硬件设备,作为用户空间工具与kvm配合使用(kvm负责cpu和内存虚拟化,qemu则负责IO虚拟化)。

Libvirt:是一种管理平台虚拟化技术的工具,提供了一系列开源的程序接口,其作为中间适配层,屏蔽了底层的hypervisor的细节,为上层管理工具提供了一个统一的、较稳定的接口。

用户态与内核态

以Inter cpu为例,操作的权限分为4级:ring 0-3,0级权限最高,3级权限最低,Linux系统仅采用ring0 和 ring3这2个权限。

  • ring0:内核态,具有硬件的所有操作权限,可以执行所有cpu指令集,访问任意地址的内存
  • ring3:用户态,没有对硬件的直接控制权限,也不能直接访问地址的内存,通过调用系统接口访问硬件和内存

内核态涉及的主要操作包括:文件IO,网卡IO,内存分配,CPU调度。

32位系统用户进程最大可以访问3GB,内核代码可以访问所有物理内存。

64位系统用户进程最大可以访问超过512GB,内核代码可以访问所有物理内存。

由于内核可使用的内存有限,通过使用高端内存并通过逻辑地址访问所有物理内存。

切换

  • 保留用户态现场(上下文、寄存器、用户栈等)
  • 复制用户态参数,用户栈切到内核栈,进入内核态
  • 额外的检查(内核代码对用户不信任)
  • 执行内核态代码
  • 复制内核态代码执行结果,回到用户态
  • 恢复用户态现场(上下文、寄存器、用户栈等)

切换原因

  • 系统调用:用户态进程主动切换到内核态的方式,机制的核心为系统特别开放的软中断,如Linux 的int 80h
  • 异常:cpu执行过程中,发生异常后会切换到处理此异常的内核相关进程中
  • 中断:外围设备在完成用户请求的操作后,会向cpu发出相应的中断信息,cpu会暂停执行下条指令并转到中断信号对应的处理程序中执行,这里的中断主要是硬中断
硬中断与软中断

硬中断

  1. 硬中断是由硬件产生,对CPU的中断
  2. 不同硬件基本都有自己的中断请求(IRQ),基于IRQ,CPU可以将请求分发到对应的硬件驱动上(内核中的一个子程序,不是一个独立的进程)
  3. 当中断产生的时候,CPU会中断当前正在运行的任务来处理中断,通常一个中断只能中断一个CPU

软中断

  1. 软中断由当前正在运行的进程所产生
  2. 软中断通常是一些对I/O的请求,这些请求会调用内核中可以调度I/O发生的程序,根据不同的I/O模型,进程或许会被挂起直到I/O完成,此时内核调度器就会选择另一个进程执行
  3. 软中断并不会直接中断CPU,这种中断通常是需要内核帮忙做一些事情

差别

  1. 硬中断具有随机性和突发性;软中断是固定发生的
  2. 硬中断响应周期中,CPU需要发中断回合信号(NMI不需要);软中断响应周期CPU不需要发
  3. 硬中断的中断号是由中断控制器提供;软中断的中断号由指令给出
  4. 硬中断是可屏蔽的(NMI不可屏蔽);软中断不可屏蔽
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值