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

从系统的角度分析影响程序执行性能的因素

时间:2021-05-24 10:37:03      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:opera   很多   编写   bsp   复制   info   交换   使用权   方便   

  评价 Linux 系统性能的好坏,大致可以从 Linux 完成任务的有效性、稳定性以及响应速度等方面进行考量。作为 Linux 系统管理员,可能经常会遇到系统不稳定、响应速度慢等问题。  例如,在 Linux 系统搭建了一个 Web 服务,就可能出现网页无法打开、打开速度慢等现象,而遇到这些问题时,有人可能会抱怨 Linux 系统不好,其实这些不过是表面现象。要知道,操作系统在完成某个任务时,与系统自身设置、网络拓扑结构、路由设备、接入设备、物理线路等多个方面都密切相关,任何一个环节出现问题,都会影响整个系统的性能。对于 Linux 系统来说,当运行应用程序出现问题时,要从应用程序本身、操作系统、服务器硬件和网络环境等方面综合排查,深度剖析问题出现在哪个部分,才能有针对性地解决。那么,影响 Linux 系统性能的因素主要有哪些呢? 

1. 精简的Linux系统概念模型

  现代计算机基本都是建立在冯·诺依曼体系结构上,由运算器、控制器、存储器、输入设备和输出设备共同组成。程序进入CPU执行后,成为一个个进程,操作系统使用分时机制,并发执行多个进程,同时也需要处理进程的输入输出需求。这些功能的实现依赖于操作系统的进程调度中断Linux文件系统。

                                                             技术图片

1.1进程管理

  进程实际是某特定应用程序的一个运行实体。在 Linux 系统中,能够同时运行多个进程,Linux 通过在短的时间间隔内轮流运行这些进程而实现“多任务”。这一短的时间间隔称为“时间片”,让进程轮流运行的方法称为“进程调度” ,完成调度的程序称为调度程序。

  进程调度控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。

  通过多任务机制,每个进程可认为只有自己独占计算机,从而简化程序的编写。每个进程有自己单独的地址空间,并且只能由这一进程访问,这样,操作系统避免了进程之间的互相干扰以及“坏”程序对系统可能造成的危害。 为了完成某特定任务,有时需要综合两个程序的功能,例如一个程序输出文本,而另一个程序对文本进行排序。为此,操作系统还提供进程间的通讯机制来帮助完成这样的任务。Linux 中常见的进程间通讯机制有信号、管道、共享内存、信号量和套接字等。

  内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface [POSⅨ] 函数),停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSⅨ 机制)。

1.2内存管理

  Linux把进程地址空间分成内核区和用户区两部分。 当在内核态申请内存时直接给分配,而进程在用户态申请内存时,只是给了一个新的线性地址空间的一个使用权,真的要用的时候会产生缺页异常,然后再真的分配。 请求调页是一种动态内存分配技术,它把页框的分配推迟到不能再推迟为止。 与之相关的分配页框的方式为写时复制:父子进程是共享页框的,当读的时候,不分配新的页框。当写的时候,谁写就给谁分配,两者各自过运行一段时间都就都有了自己的空间。

1.3文件管理

  和 DOS 等操作系统不同,Linux 操作系统中单独的文件系统并不是由驱动器号或驱动器名称(如 A: 或 C: 等)来标识的。相反,和 UNIX 操作系统一样,Linux 操作系统将独立的文件系统组合成了一个层次化的树形结构,并且由一个单独的实体代表这一文件系统。Linux 将新的文件系统通过一个称为“挂装”或“挂上”的操作将其挂装到某个目录上,从而让不同的文件系统结合成为一个整体。Linux 操作系统的一个重要特点是它支持许多不同类型的文件系统。Linux 中最普遍使用的文件系统是 Ext2,它也是 Linux 土生土长的文件系统。但 Linux 也能够支持 FAT、VFAT、FAT32、MINIX 等不同类型的文件系统,从而可以方便地和其它操作系统交换数据。由于 Linux 支持许多不同的文件系统,并且将它们组织成了一个统一的虚拟文件系统.

  虚拟文件系统(VirtualFileSystem,VFS):隐藏了各种硬件的具体细节,把文件系统操作和不同文件系统的具体实现细节分离了开来,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。

  虚拟文件系统(VFS)是 Linux 内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。VFS 在 SCI 和内核所支持的文件系统之间提供了一个交换层。即VFS在用户和文件系统之间提供了一个交换层。

                                                                             技术图片

1.4中断管理

  Linux有用户态和内核态,那肯定也少不了用户态和内核态的切换,我们可以把这种情况称为中断。

  一般在以下三种情况会发生中断:

  1)即上面说的用户态到内核态的切换的三种方式:库函数、系统调用或者shell命令。

  2)异常事件: 当CPU正在执行运行在用户态的程序时,突然发生某些预先不可知的异常事件,这个时候就会触发从当前用户态执行的进程转向内核态执行相关的异常事件,典型的如缺页异常。

  3)外围设备的中断:当外围设备完成用户的请求操作后,会像CPU发出中断信号,此时,CPU就会暂停执行下一条即将要执行的指令,转而去执行中断信号对应的处理程序,如果先前执行的指令是在用户态下,则自然就发生从用户态到内核态的转换。

2. 从应用程序角度进行分析

我们分析哪些因素可能会造成应用程序执行时间过长:

1.大量的磁盘请求

2.网卡大量的吞吐

3.以及内存耗尽等

4.CPU算力有限

总的来说就是CPU、内存、磁盘读写(I/O)能力、网络带宽

我们来关注一个程序编写上的问题,在数组的保存中,通常会按行顺序一行一行保存到硬盘中,我们每次从硬盘中取出一页,如果我们遍历数组的时候是按照行顺序一行一行遍历的,那么磁盘I/O的次数会比较少,但如果我们是一列一列进行遍历的,那么一页中可能保存不了很多我们需要的数据,这样会造成磁盘I/O的次数上升,从而使得程序的执行时间过长。

3. 课程总结

  在孟老师和李老师的课上,我们学习了很多深入源码的分析,但是仅仅课堂上时间还不能完全学会,所以只能有如上浅显的理解。总体来说,老师辛苦备课和讲解,通过课堂学习了操作系统的基本架构思想,也对源码实现有了更深入认识,收获颇丰。

              

从系统的角度分析影响程序执行性能的因素

标签:opera   很多   编写   bsp   复制   info   交换   使用权   方便   

原文地址:https://www.cnblogs.com/zzb946/p/14750446.html

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