Java教程

实验总结分析报告:从系统的角度分析影响程序执行性能的因素

本文主要是介绍实验总结分析报告:从系统的角度分析影响程序执行性能的因素,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

首先,针对本次课程所学习的内容进行了梳理总结,总结思维导图,如下:

Linux概念模型:

基本工作原理:

冯诺依曼体系结构:运算器、存储器、控制器、输入设备和输出设备。

Linux的系统层次结构包括用户空间和内核空间,用户空间包含了用户应用程序、函数库等;内核空间包括系统调用,内核,以及与平台架构相关的代码。

Linux内核的主要组件包括系统调用接口、进程管理、内存管理、文件系统、设备驱动程序等。

 Linux内核实现了操作系统的三大核心功能,即进程管理、内存管理和文件系统。Linux的内核结构如下图:

进程管理:

进程创建:在Linux中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号。 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。 每个进程都可能以两种方式存在的。

进程状态:运行态、可运行态、等待态、暂停态、僵死态

中断:

进程上下文:进程切换就是变更进程上下文

(1)用户地址空间:程序代码、数据、用户堆栈等

(2)控制信息:进程描述符、内核堆栈

(3)硬件上下文:相关寄存器的值

中断类型

中断可分为两大类:异常和中断 。

异常又分为 故障(Fault)和陷阱(Trap),它们的共同特点是既不使用中断控制器,又不能被屏蔽(异常其实是CPU发出的中断信号)。

中断又分为外部可屏蔽中断(INTR)和外部非屏蔽中断(NMI),所有I/O设备产生的中断请求(IRQ)均引起屏蔽中断,而紧急的事件(如硬件故障)引起的故障产生非屏蔽中断。

外部中断/硬件中断:在用户进程执行时,硬件中断信号到来,进入内核态,执行这个中断对应的中断服务程序。

内部中断/软件中断/异常:分为故障和陷进,陷阱是用户态程序执行过程中,调用了一个系统调用,陷入了内核态

内存管理:

虚拟内存:虚拟内存抽象了应用程序物理内存的细节,只允许物理内存保存所需的信息(按需分页),并提供了一种保护和控制进程间数据共享数据的机制。有了虚拟内存机制之后,每次访问可以使用更易理解的虚拟地址,让CPU转换成实际的物理地址访问内存,降低了直接使用、管理物理内存的门槛。

段页机制:段页机制是操作系统管理内存的一种方式,简单的来说,就是如何管理、组织系统中的内存。要理解这种机制,需要了解一下内存寻址的发展历程。

文件系统:

        Linux内核支持装载不同的文件系统类型,不同的文件系统有各自管理文件的方式。为支持各种文件系统,Linux内核在用户进程=和具体的文件系统之间引入了一个抽象层,该抽象层称之为虚拟文件系统(VFS)。

      在LINUX系统中有一个重要的概念:一切都是文件。 其实这是UNIX哲学的一个体现,而Linux是重写UNIX而来,所以这个概念也就传承了下来。在UNIX系统中,把一切资源都看作是文件,包括硬件设备。UNIX系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。这样带来优势也是显而易见的:
UNIX 权限模型也是围绕文件的概念来建立的,所以对设备也就可以同样处理了

文件读写的例子:

读取文件:

    1. 进程调用库函数向内核发起读文件请求;
    2. 内核通过检查进程的文件描述符定位到虚拟文件系统的已打开文件列表表项;
    3. 调用该文件可用的系统调用函数read();
    4. read()函数通过文件表项链接到目录项模块,根据传入的文件路径,在目录项模块中检索,找到该文件的inode;
    5. 在inode中,通过文件内容偏移量计算出要读取的页;
    6. 通过inode找到文件对应的地址空间;
    7. 在地址空间中访问该文件的页缓存树,查找对应的页缓存结点: 
      (1)如果页缓存命中,那么直接返回文件内容; 
      (2)如果页缓存缺失,那么产生一个页缺失异常,创建一个页缓存页,同时通过inode找到文件该页的磁盘地址,读取相应的页填充该缓存页;重新进行第6步查找页缓存

写入文件:

前5步和读文件一致,在地址空间中查询对应页的页缓存是否存在:

    1. 如果页缓存命中,直接把文件内容修改更新在页缓存的页中。写文件就结束了。这时候文件修改位于页缓存,并没有写回到磁盘文件中去;
    2. 如果页缓存缺失,那么产生一个页缺失异常,创建一个页缓存页,同时通过inode找到文件该页的磁盘地址,读取相应的页填充该缓存页。此时缓存页命中,进行第6步。
    3. 一个页缓存中的页如果被修改,那么会被标记成脏页。脏页需要写回到磁盘中的文件块。有两种方式可以把脏页写回磁盘: 
      (1)手动调用sync()或者fsync()系统调用把脏页写回 
      (2)pdflush进程会定时把脏页写回到磁盘

应用程序性能表现因素:

一 : 磁盘 I/O

磁盘的读写速度远慢于内存的读写速度,系统运行是如果需要等待磁盘I/O的完成,将导致整个系统的性能下降;

二: CPU性能

应用对CPU的占用时间不同,应用间对CPU的抢占也将导致系统性能受到影响;

三: 网络状态

网络本身存在不确定性,其读写速度可能比磁盘I/O还要慢,所以网络状态也可能成为系统性能的一个瓶颈;

四:异常的处理

操作系统对异常的捕获和处理是一项非常消耗资源的操作。

五:内存管理

有时候内存过小可能导致一些操作无法完成,导致系统崩溃;这时也可能为了解决内存不足问题采用分步加载资源到内存中,这有导致了磁盘I/O问题;

总结

这是第一次上孟老师和李老师的课,通过对本门课程的学习,我对Linux内核的工作机制和工作原理有了更加深入的理解,原来只是对操作系统有简单的了解,现在能够将两者融合起来。通过之前几次的实验,虽然没有那么复杂、但是对Linux系统的运行过程和内部结构有了更加深刻的了解,通过这次课程,学到了操作系统底层的知识,很多细节也在面试之中被问到,对操作系统由更深刻的理解。

这篇关于实验总结分析报告:从系统的角度分析影响程序执行性能的因素的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!