从大的方面讲,为了保护内核安全,一个 Linux 系统分为两部分,用户空间和内核空间,一般用户程序还有 shell,一些 lib 库运行于用户空间,完整的 Linux 内核运行于内核空间,向下,它管理系统的所有硬件设备;向上,它通过提供系统调用接口,为用户应用程序提供特权操作的接口。
Linux 内核管理着所有的操作系统资源,主要组件有:系统调用接口、进程管理、内存管理、虚拟文件系统、网络服务和硬件驱动程序。
应用程序不直接与系统资源打交道,当需要这些资源时,用户程序通过系统调用从用户态切换到核心态,并将任务委派给内核执行,在内核中,一般每个系统调用对应一个系统调用的封装例程,函数库再用这些封装例程定义出给程序员调用的 API,这样把系统调用最终封装成方便程序员使用的库函数。
负责管理 CPU 资源,Linxu 是一个多任务操作系统,通过进程管理实现多个进程的公平调度尽可能提高系统的吞吐量和资源利用率。
在 Linux 内核中,进程是由一个被称为 task_struct 的结构表示的,此结构包含了表示此进程所必需的数据,此外,还包含了大量的其他数据用来统计和维护与其他进程的关系。其中,init_task 为第一个进程(0号进程)的进程描述符结构体变量,它的初始化是通过硬编码方式固定下来的,除此之外,所有其他进程的初始化都是通过 do_fork 复制父进程的方式初始化的。fork 系统调用会创建一个子进程,而exec 则会用新程序代替当前进程上下文。
进程管理的重点是进程的调度。在内核中,这些进程被称为 Thread,代表了单独的处理器虚拟化(线程代码、数据、堆栈和 CPU 寄存器)。进程的调度时机有:1.进程的时间片用完。2.进程状态发生改变。3.高优先级进程从其他状态转换为就绪态或者高优先级进程被创建。4.系统调用或者中断处理退出。
负责管理内存资源,以便让各个进程可以安全的共享机器的内存资源。另外,内存管理会提供虚拟内存的机制,该机制可以让进程使用多于系统可用 Memory 的内存,不用的内存会通过文件系统保存在外部非易失存储器中,需要使用的时候再取回到内存中。
Linux 内核将不同功能的外部设备,例如磁盘、输入输出设备、显示设备等等,抽象为可以通过统一的文件操作接口(open、close、read、write 等)来访问。这就是 Linux 系统 “一切皆是文件“ 的体现。
负责管理网络资源,提供了通过网络与外部机器通信的能力。
负责管理所有外部硬件,提供对这些硬件设备的操作。
考虑一个读文件的程序,在 Linux 系统模型中要经过以下步骤完成:
接下来我们将一个应用程序放入该系统模型中来系统性的梳理影响程序性能表现的因素:
首先应用程序经过预处理、编译、汇编和链接最终成为一个单一可执行文件
程序在系统中以进程的形式执行,可执行文件首先被装载到内存中,然后分配内存资源完成进程的创建,这个过程中影响性能表现的因素有:
进程创建后处于就绪状态,等待分配 CPU 资源后才能执行,这里影响性能表现的因素是:
进程成功获得执行后,接下来的性能表现则更多地与应用程序本身的代码和它要完成的任务有关:
以上是从软件系统角度分析影响应用程序性能表现的因素,除此之外,硬件能力也是影响性能的直接因素,不过这些因素只能通过升级硬件解决:
原文:https://www.cnblogs.com/Hui4401/p/14772036.html