码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2021-05-24 14:51:30      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:方式   cpu   根据   height   性能   请求   设计   频繁   程序   

(一)Linux系统模型

  Linux系统是基于用户空间和内核空间设计的。应用程序运行在用户空间,而内核功能模块运行在内核空间。内核模块管理底层的所有硬件设备;同时也向用户提供系统调用接口来使用某些特权操作。

 

技术图片

(二)Linux内核

  内核是硬件与软件之间的一个中间层。作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。

  Linux是基于宏内核实现的,内核的所有代码,包括子系统(如内存管理、文件管理、设备驱动程序)都打包到一个文件中。内核中的每一个函数都可以访问到内核中所有其他部分。

  Linux内核主要由以下5个子系统组成:进程调度、内存管理、虚拟文件系统、进程间通信以及设备驱动。

  1.进程管理

  (1)概念:进程是处于执行期的程序以及相关资源的总称。线程在linux上称为轻量级进程,没有独立的地址空间,一个进程下的所有线程共享地址空间、文件系统资源、文件描述符、信号处理程序等。

  (2)内核实现:内核负责创建和销毁进程,而且由调度程序采取合适的调度策略,实现进程间的合理且实时的处理器资源的共享。从而内核的进程管理活动实现了多个进程在一个或多个处理器上的抽象。内核还负责实现不同进程间、进程和其他部件之间的通信。

  2.中断管理

  (1)概念:中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

  (2)内核实现:Linux有两种中断类型:硬中断和软中断。硬中断是由请求响应的设备发出的(磁盘I/O中断、网络适配器中断、键盘中断、鼠标中断);软中断被用于处理可以延迟的任务(TCP/IP操作,SCSI协议操作等等)。

  3. 系统调用接口

  (1)概念:linux内核中设置了一组用于实现系统功能的子程序,称为系统调用。系统调用和普通库函数调用非常相似,只是系统调用由操作系统核心提供,运行于内核态,而普通的函数调用由函数库或用户自己提供,运行于用户态。

  (2)内核实现:为了和用户空间上运行的进程进行交互,内核提供了一组接口。通过该接口,应用程序可以访问硬件设备和其他操作系统资源。这组接口在应用程序和内核之间扮演了使者的角色,应用程序发送各种请求,而内核负责满足这些请求。

  (3)作用:它为用户空间提供了一种统一的硬件的抽象接口。系统调用保证了系统的稳定和安全。系统调用是用户空间访问内核的惟一手段;除异常和中断外,它们是内核惟一的合法入口。

  4.内存管理

    内存是计算机系统中主要的资源。内核使得多个进程安全而合理地共享内存资源,为每个进程在有限的物理资源上建立一个虚拟地址空间。内存管理部分代码可分为硬件无关部分和硬件有关部分:硬件无关部分实现进程和内存之间的地址映射等功能;硬件有关部分实现不同体系结构上的内存管理相关功能并为内存管理提供与硬件无关的虚拟接口。

  5.文件系统

    Linux下“一切皆文件”。所以所有的“文件”都可以用统一的接口(open,close,read,write)实现。在Linux系统中的任何一个概念几乎都可以看做一个文件。内核在非结构化的硬件上建立了一个结构化的虚拟文件系统,隐藏了各种硬件的具体细节,从而在整个系统的几乎所有机制中使用文件的抽象。Linux在不同物理介质或虚拟结构上支持数十种文件系统。例如,Linux支持磁盘的标准文件系统ext3和虚拟的特殊文件系统。

  6.硬件驱动程序

  (1)概念:任何设备控制操作都由特定于要寻址的设备相关的代码来进行。这些代码称为设备驱动。

  (2)内核实现:Linux 内核中有大量代码都在设备驱动程序中,它们能够运转特定的硬件设备。Linux 源码树提供了一个驱动程序子目录,这个目录又进一步划分为各种支持设备,例如 Bluetooth、I2C、serial 等。设备驱动程序的代码可以在 ./linux/drivers 中找到。

(三)举例验证

  读写文件

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

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

(四)影响应用程序的因素

  (1)CPU:CPU 的速度与性能很大一部分决定了系统整体的性能,CPU的调度策略和代码优化策略也会对程序执行产生影响。因此 CPU 数量越多、主频越高,服务器性能也就相对越好。

  (2)内存:内存的大小也是影响 Linux 性能的一个重要的因素。内存太小,系统进程将被阻塞,应用也将变得缓慢,甚至失去响应;内存太大,会导致资源浪费。Linux 系统采用了物理内存和虚拟内存的概念,虚拟内存虽然可以缓解物理内存的不足,但是占用过多的虚拟内存,应用程序的性能将明显下降。要保证应用程序的高性能运行,物理内存一定要足够大。

  (3)磁盘读写(I/O)能力:磁盘的 I/O 能力会直接影响应用程序的性能。比如说,在一个需要频繁读写的应用中,如果磁盘 I/O 性能得不到满足,就会导致应用的停滞。I/O密集型进程是否把大量I/O操作放在主线程执行,是的话会导致CPU大量空余

  (4)网络带宽:Linux 下的各种应用,一般都是基于网络的,因此网络带宽也是影响性能的一个重要因素,低速的、不稳定的网络将导致网络应用程序的访问阻塞;而稳定、高速的带宽,可 以保证应用程序在网络上畅通无阻地运行。

 

 

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

标签:方式   cpu   根据   height   性能   请求   设计   频繁   程序   

原文地址:https://www.cnblogs.com/peiriyu/p/14780955.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!