MonoSirius

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

《Linux操作系统分析》课程总结报告

一、Linux系统的一般执行过程

最一般的情况:正在运行的用户态进程X切换到运行用户态进程Y的过程

  1. 正在运行的用户态进程X

  2. 发生中断

    save cs:eip/esp/eflags(current) to kernel stack
    load cs:eip(entry of a specific ISR) and ss:esp(point to kernel stack)
    
  3. SAVE_ALL //保存现场

  4. 中断处理过程中或中断返回前调用了schedule(),其中的switch_to做了关键的进程上下文切换

  5. 标号1之后开始运行用户态进程Y(这里Y曾经通过以上步骤被切换出去过因此可以从标号1继续执行)

  6. restore_all //恢复现场

  7. iret - pop cs:eip/ss:esp/eflags from kernel stack

  8. 继续运行用户态进程Y

    进程间的特殊情况

    通过中断处理过程中的调度时机,用户态进程与内核线程之间互相切换和内核线程之间互相切换
    与最一般的情况非常类似,只是内核线程运行过程中发生中断没有进程用户态和内核态的转换;
    内核线程主动调用schedule(),只有进程上下文的切换,没有发生中断上下文的切换,与最一般
    的情况略简略;
    创建子进程的系统调用在子进程中的执行起点及返回用户态,如fork;
    加载一个新的可执行程序后返回到用户态的情况,如execve;<br>0-3G内核态和用户态都可以访问,3G以上只能内核态访问。<br>内核是所有进程共享的。<br>内核是各种中断处理过程和内核线程的集合。
    

1.1 从CPU的角度来看

1.2 从内存角度来看

1.3 linux虚拟化

在虚拟化技术中,Linux系统的一般执行过程与非虚拟化环境下有所不同。在虚拟化环境下,Linux系统运行在虚拟机(VM)中,而不是直接在物理硬件上运行。

  1. 在虚拟化环境下,虚拟化层会拦截所有的硬件访问,并将其重定向到虚拟机中。这意味着在启动引导程序时,虚拟化层会加载虚拟机的引导程序而非物理主机上的引导程序;
  2. 在第3步时,虚拟化层会加载虚拟机的操作系统内核,而不是物理主机上的操作系统内核。每个虚拟机都可以运行自己的Linux系统,就好像它们在各自的物理计算机上一样;
  3. 在启动用户空间时,虚拟化层会为每个虚拟机提供独立的资源,并对它们进行隔离,以确保它们之间不会相互干扰。

二、课程收获

  1. 学习了x86和ARM64指令集架构,具体包括寄存器布局和指令集
  2. 掌握了linux内核的架构和运行原理,并自己动手学会了如何编译、调试
  3. 学习了linux操作系统中中断的具体流程,李春杰老师从硬件和软件的角度细致的讲解了中断的流程,包括底层的数据结构和函数源码,这让我明白,中断响应时不是简单的向设备发出信号就可以了。
posted on 2023-05-15 11:20  monoSirius  阅读(60)  评论(0编辑  收藏  举报