课程学习总结报告

Linux内核实现了操作系统的三⼤核⼼功能,即进程管理、内存管理和⽂件系统。

程序和数据均储存在硬盘中,由文件系统管理,Linux系统中一切皆文件。运行中的程序在内存中以进程为单位进行管理,用进程控制块来描述进程。
 
电脑加电启动⾸先从硬盘中加载操作系统内核至内存中运行,接着挂载⽂件系统,之后不断地将需要的程序和数据从硬盘调入内存中。
 
宏观上 Linux 操作系统的体系架构分为⽤户态和内核态。
 
CPU在任何时刻都处于以下3种情况之⼀:
  运⾏于⽤户态,执⾏⽤户进程上下⽂。
  运⾏于内核空间,处于进程(内核线程)上下⽂。
  运⾏于内核空间,处于中断(中断处理程序ISR,包括系统调⽤处理过程)上下⽂。
 
操作系统的运行过程即是所有进程轮流在CPU上执行的过程。管理进程的核心问题是进程调度,进程调度需要在内核态中进行。
 
中断实现了方便地从用户态进入内核态。
中断(广义)会改变处理器执行指令的顺序。中断分外部中断(硬件中断)和内部中断(软件中断),内部中断⼜称为异常(Exception),异常⼜分为故障(fault)和陷阱(trap)。
 

总的来说,进程调度时机就是内核调⽤schedule函数的时机:
  1)⽤户进程上下⽂中主动调⽤特定的系统调⽤进⼊中断上下⽂,系统调⽤返回⽤户态之前, 中断处理程序主动调⽤schedule函数进⾏进程调度。

  2)内核线程或可中断的中断处理程序,执⾏过程中发⽣中断进⼊中断上下⽂,在中断返回前, 中断处理程序主动调⽤ schedule函数进⾏进程调度。

  3)内核线程主动调⽤schedule函数进⾏进程调度。

 
进程调度涉及到进程的切换,利用进程上下文和中断上下文完成。
 
有了以上基本功能,所有进程就轮流运行了起来,用户可以编写自己的应用程序,在用户态下以进程为单位来执行,而应用程序使用计算机的功能和设备时必须在内核态中,需要使用系统调用进入内核态。
 
系统调⽤的意义是操作系统为⽤户态进程与硬件设备进⾏交互提供了⼀组接⼝。
 
系统调⽤就是利⽤陷阱(trap)这种软件中断⽅式主动从⽤户态进⼊内核态的。
 
系统调⽤具有以下功能和特性:
  把⽤户从底层的硬件编程中解放出来。操作系统为我们管理硬件,⽤户态进程不⽤直接与硬件设备打交道。
  极⼤地提⾼系统的安全性。如果⽤户态进程直接与硬件设备打交道,会产⽣安全隐患,可能引起系统崩溃。
  使⽤户程序具有可移植性。⽤户程序与具体的硬件已经解耦合并⽤接⼝代替了,不会有紧密的关系,便于在不同系统间移植。
 
下图为程序运行的基本架构:

 

以读取文件为例分析这个过程。用户应用程序要读取硬盘上的某个文件,调用了系统库中的接口,系统库中的该功能通过系统调用实现,由用户态切换到内核态中执行系统调用,对硬件进行操作,读取出文件后再传回给应用程序,然后从内核态回到用户态,应用程序继续执行。

 

 整个课程学完,对Linux系统有了基本的理解,对程序的运行过程有了更深入的认识,收获很多。
个人建议,读系统内核代码过于枯燥和繁琐,自己动手编写简单的系统内核功能是个很好的方向,希望增加这方面的内容。
posted @ 2020-07-09 22:36  广宇  阅读(168)  评论(0编辑  收藏  举报