Linux操作系统分析-课程总结

 

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

一、      Linux系统运行一般场景:用户进程之间切换                     

( 1 )用户态进程X调用系统调用或触发异常

用户态进程X需要进行进程切换时,可以通过调用一些特定的系统调用(例如fork、exec等)或者发生异常(例如缺页异常等)来触发进程切换。

 

(2)发生中断,由进程X的用户态进入内核态

具体操作: 

save cs:eip/ss:esp/eflags :当前 CPU 上下文压入用户态进程 X 的内核堆栈。

load cs:eip(entry of a specific ISR) and ss:esp(point to kernel stack) :加载当前进程内

核堆栈相关信息,跳转到中断处理程序,即中断执行路径的起点。

SAVE_ALL ,保存现场,此时完成了中断上下文切换,即从进程 X 的用户态到进

程 X 的内核态。

 

(3)系统内核保存进程X的上下文

当进程X触发进程切换时,操作系统内核需要将进程X的上下文信息保存下来,包括程序计数器、寄存器状态、堆栈指针等。

 

(4)内核切换到进程Y的上下文

接下来,内核需要进行进程切换,将处理器的上下文切换到进程Y的上下文中。这包括将进程Y的上下文信息加载到处理器中,例如程序计数器、寄存器状态、堆栈指针等。

 

(5)结束中断,由进程Y的内核态返回用户态

具体操作:

restore_all ,恢复现场,与(3)中保存现场相对应。

iret - pop cs:eip/ss:esp/eflags ,从 Y 进程的内核堆栈中弹出此前压入栈中的内容。此时完成了中断上下文的切换,即从进程 Y 的内核态返回到进程 Y 的用户态。

 

  (6)用户态进程Y恢复执行

当进程Y的上下文信息被加载到处理器中后,处理器开始执行进程Y的代码,从上次执行的位置继续执行。

 

二、      一些特殊情况

(1)用户态进程与内核线程之间切换、内核线程之间切换,与一般情况(用户进程之间切换)类似,区别是内核线程运行过程中发生中断没有进程用户态和内核态的转换;

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

(3)一些系统调用,如:

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

execve:加载一个新的可执行程序后返回到用户态的情况

 

三、      结合虚拟化

(1)     虚拟机管理器(VMM)

VMM一种用于实现虚拟化技术的软件程序,将物理服务器分割为多个虚拟服务器,并控制它们的运行。

使用VMM可以方便的进行硬件资源管理(CPU、内存、磁盘、外设等),指定参数进行灵活配置(如CPU核心数量、内存大小),对虚拟机进行实时监控,保证虚拟机间的通信以及隔离性

 

(2)     虚拟机中断

主要包括物理外设产生的虚拟机中断和虚拟外设产生的虚拟机中断:

一、在虚拟化环境中,物理外设通过虚拟化软件与虚拟机进行通信。当物理外设产生中断时,虚拟化软件需要将中断信号传递给虚拟机,这个过程称为物理外设产生虚拟中断的过程。

 

二、虚拟外设可以模拟物理外设的行为,与虚拟机进行通信。当虚拟外设产生中断时,虚拟机需要处理该中断,这个过程称为虚拟外设产生虚拟中断的过程

 

三、一般处理过程

1. 物理/虚拟外设发起中断请求 当外设产生中断时,它会向主机的中断控制器发送中断请求信号。

2. 中断传递到虚拟化软件 中断控制器将中断请求传递给主机上运行的虚拟化软件,虚拟化软件根据配置信息判断该中断请求是否需要传递给虚拟机。

3. 虚拟化软件将中断传递给虚拟机 如果该中断请求需要传递给虚拟机,则虚拟化软件会将中断信息传递给虚拟机,以模拟物理硬件中断的效果。

4. 虚拟机处理中断 虚拟机收到中断请求后,会将中断信息传递给虚拟机内的操作系统进行处理。操作系统会保存当前的上下文信息,然后转入中断处理程序执行。

中断处理程序会根据中断类型进行相应的处理,例如读取硬件设备的数据或发送数据到硬件设备等。中断处理程序执行完毕后,操作系统会根据之前保存的上下文信息恢复虚拟机的执行状态,并返回到之前的执行点继续执行。

 

  • 结合课程学习情况谈谈在Linux操作系统分析课程中的收获

本课程主要对linux操作系统的各个主要组成部分进行分析,包括基本的程序运行原理、汇编执行、中断的原理和应用,以及linux操作系统的启动和基本运行框架,linux系统运行的细节如进程切换、进程调度,linux的文件系统和IO管理等。通过学习我们关注Linux系统的主干,将庞大的操作系统分为不同的模块,并从底层去理解内核的运行原理,同时通过编译内核、构建根文件系统、使用gdb调试内核等实操,进一步印证了linux运行方式的理论知识,为linux以及操作系统内核的学习打下了基础。

 

 

posted @ 2023-05-15 22:12  skadfj  阅读(85)  评论(0)    收藏  举报