本文主要介绍了linux的组成,介绍了内核作用和分析了进程切换对性能的影响
linux一般由内核、shell、文件结构组成。其中,内核是所有组成部分中最为基础、最重要的部分。本课程对文件结构,内核进行了着重讲解。
一、linux文件结构
文件结构是文件存放在磁盘等存储设备上的组织方法,主要体现在对文件和目录的组织上。目录提供了管理文件的一个方便而有效的途径。我们能够从一个目录切换到另一个目录,而且可以设置目录和文件的权限,设置文件的共享程度。
二、linux shell
shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。实际上,shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。shell还有自己的编程语言用于命令编辑,它允许用户编写由shell命令组成的程序。shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。
三、linux内核
内核(Kernal)是整个操作系统的核心,管理着整个计算机的软硬件资源。内核控制整个计算机的运行,提供相应的硬件驱动程序、网络接口程序,并管理所有程序的执行。内核提供的都是操作系统最基本的功能。
linux内核源代码主要是用C语言编写的,linux内核采用比较模块化的结构,主要模块包括存储管理、进程管理、文件系统管理、设备管理和驱动、网络通信和系统调用等。
课程中对中断、进程切换、程序执行过程有着重的讲解,下面就进程切换进行分析。
1.进程切换
进程调度的时机
中断处理过程(包括时钟中断、I/O中断、系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule();比如sleep,就可能直接调用了schedule
内核线程可以直接调用schedule()进行进程切换,也可以在中断处理过程中进行调度,也就是说内核线程作为一类的特殊的进程可以主动调度,也可以被动调度;
用户态进程无法实现主动调度,仅能通过陷入内核态后的某个时机点进行调度,即在中断处理过程中进行调度。用户态进程只能被动调度。
进程的切换过程
为了控制进程的执行,内核必须有能力挂起正在CPU上执行的进程,并恢复以前挂起的某个进程的执行,这叫做进程切换、任务切换、上下文切换;即进程上下文切换!
挂起正在CPU上执行的进程,与中断时保存现场是不同的,中断前后是在同一个进程上下文中,只是由用户态转向内核态执行;
进程上下文包含了进程执行需要的所有信息
用户地址空间:包括程序代码,数据,用户堆栈等
控制信息:进程描述符,内核堆栈等
硬件上下文(注意中断也要保存硬件上下文只是保存的方法不同)
2.进程切换对应用的性能影响
使用sysbench工具手动增加十个进程,模拟进程切换过程
查看资源消耗情况
cs切换达到了87万多,cpu使用率加起来已经到100%其中系统 CPU 使用率,也就是 sy 列高达 87%,说明 CPU 主要是被内核占用了,因此,在Linux程序中,对多线程的创建和使用需要考虑其影响后使用。