实验总结分析报告:从系统的角度分析影响程序执行性能的因素
1、请您根据本课程所学内容总结梳理出一个精简的Linux系统概念模型,最大程度统摄整顿本课程及相关的知识信息,模型应该是逻辑上可以运转的、自洽的,并举例某一两个具体例子(比如读写文件、分配内存、使用I/O驱动某个硬件等)纳入模型中验证模型。
2、然后将一个应用程序放入该系统模型中系统性的梳理影响应用程序性能表现的因素,并说明原因。
3、产出要求是发表一篇博客文章,长度不限,1要简略,2是重点,只谈自己的思考和梳理,严禁引用任何资料(包括本课程的资料)造成文章虚长。
1.精简的Linux系统概念模型

如图所示,是一个简单粗略的Linux包含的模块,一般包括文件系统,内存管理,进程管理,网络服务四个方面的组件,这些工作在内核态,用户程序通过系统调用来获取系统资源。
2.举例说明
2.1读写文件
Linux通过虚拟文件系统即VFS对具体的文件系统的构建标准化,使各种具体的文件系统在VFS的管理之下,而VFS对系统调用提供服务,这样对于系统调用来说不用关注每个文件系统调用差异,对于文件系统的构建着而言也有章可循,只需对对应的调用提供实现即可。
当Linux启动之时就挂载根文件系统,在某用户需要对某个文件进行读写时,首先调用open()函数打开文件,按文件名查找对应的 inode,如果有那么对其进行引用并加 1。如果没有将创建新的 vfs的 inode 对象和目录项对象等。open()函数接受的参数为文件目录和访问的模式,以便检测存在与否及权限控制。如果文件存在则返回一个文件描述符fd,如果不存在则返回-1。 在进行权限校验后针对读写分别调用Read 和write 函数分调用的服务例程是 sys_read 和 sys_write,接受三个参数。分别是一个文件描述符 fd,一个对数据缓存地址buf,和需要传输的数据量 count。
2.2进程管理

如图为进程的五种状态及之间的转换
对于进程的创建而言主要是创建进程描述符PID;对于进程的状态转换一般与终端相关,Linux操作系统通过schedule函数实现进程的调度,涉及到调度的策略及算法等。schedule函数负责在运行的队列中选择一个进程,然后把它切换到CPU的执行状态,故调用一次schedule函数就涉及一次进程的调用。
进程的切换主要涉及全局页表项的切换以及内存堆栈和硬件上下文的切换,故schedule函数通过调用context_switch()函数实现全页的切换,在context_switch()函数中调用switch_to()函数去处理内存堆栈和硬件上下文。
3.影响应用程序性能表现的因素
一段完整代码的执行涉及到一下几个步骤,编译,链接,装载,创建进程,调度运行,调用资源,运行结束。
针对以上几个步骤,编译、链接和装载一般由对应的语言负责,例如java,c等等,相对而言,对于同样的逻辑实现c要比java运行的更快,主要涉及java的可移植性引入的jvm。在进程的创建这一步,不同的操作系统有不同的实现方式,但一般都涉及进程描述符的创建,资源分配等等。在调度运行上,根据不同的调度策略及算法的不同,在此处程序的运行时间可能有较大差异,对于调用资源也是同样的道理。同时系统资源也在制约着程序的运行时间,例如较大的应用程序跑在一个内存有限的计算机上,纵使交换区的存在可以使程序正常运行但是性能的表现会有很大的差异,包括与cpu最近的各级缓存的大小等等。

浙公网安备 33010602011771号