• 内核态与中断相关理论


    虚拟化之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不可屏蔽);软中断不可屏蔽
  • 相关阅读:
    【笔试强训day01】组队竞赛 && 删除公共字符
    C语言进制转换(1112:进制转换(函数专题))
    Python基础教程:关于序列操作的方式方法
    【Windows无法修复问题】“启动修复”无法修复你的电脑解决方法
    一个简单HTML5期末考核大作业,学生个人html静态网页制作代码
    js如何操作video标签
    多目标海洋捕食者算法(MOMPA)(Matlab代码)
    如何从无法开机的手机中恢复数据?4个解决方案解决了
    结合实战,浅析GB/T28181(七)—— 球机云台控制
    【Java八股文总结】之类
  • 原文地址:https://blog.csdn.net/qq_39376697/article/details/132760352