从系统的角度分析影响程序执行性能的因素
1 linux的精简系统模型
Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。
Linux是操作系统的一类,而操作系统中最重要的一个功能就是系统调用,而系统调用会涉及到内核态和用户态,Linux将内存低地址部分设置为内核空间,高地址部分设置为用户空间,具体如下。

有了用户空间和内核空间,整个linux内部结构可以分为三部分,从最底层到最上层依次是:硬件-->内核空间-->用户空间。

2 进程管理
进程的特征
创建状态:进程在创建时需要申请一个空白PCB,向其中填写控制和管理进程的信息,完成资源分配。把此时进程所处状态称为创建状态。
就绪状态:进程已经准备好,已分配到所需资源,只要得到CPU就能够运行。
执行状态:进程被调度后,进程进入执行状态。
阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用。
终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。
需要注意的是,在Linux中,进程的就绪态和运行态都用TASK_RUNNING来表示,具体区分他们的方法是看他们是否得到了CPU。
进程调度算法:主要是用来从进程就绪队列中选择一个进程来分配CPU。
1 先来先去服务 2.时间片轮转法 3.最短进程优先 4.最高响应比优先 5 多级反馈队列算法。
在Linux中,对于实时进程和普通进程采用的算法一般不一样,对于前者常常采用先来先服务和时间片轮转算法;对于后者一般采用基于权重的优先级调度算法,且一般优先级为(100- 139 越高优先级越低)。
3 内存管理
连续内存分配, 意思就是分配给程序的内存在物理上是连续的。
连续内存分配算法有首次适配,最佳适配,最差适配。
非连续内存分配, 分配给程序的内存在物理上可以不是连续的。
非连续内存分配主要是通过分段和分页来完成的。
虚拟内存
把程序中的一部分放入到内存中,对程序员透明。可以根据内存的使用情况,动态的对程序部分内容在内存与外存中进行交换。
主要的原理是基于局部性原理,大致思想是1现在被访问的地址将来一段时间内还有可能再次被访问到 2 现在执行的指令将来一段时间还有可能再次执行。以上两点分别对应空间局部性和时间局部性。
为了可以使用虚拟内存,需要进行内存和外存的交换,存在一些页面置换算法。
最优页面置换算法(OPT) 先进先出算法(FIFO) 最近最久未使用(LRU) 时钟页面置换算法(Clock) 最不常用算法(LFU)
4 中断
中断是计算机很重要的一个概念,有了中断极大的提高了系统的吞吐量和资源的利用率。
中断主要分为外中断和内中断,外中断是发生在CPU外部的中断(比如I/O请求), 内部中断主要是CPU内部的中断(比如缺页中断), 同时内中断也叫做异常。
内中断的例子
有时候应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令——陷入指令,该指令会引发一个内部中断信号。
执行“陷入指令”,意味着应用程序主动地将CPU控制权还给操作系统内核。“系统调用”就是通过陷入指令完成的。
在linux中,比较重要的一条指令是陷入指令 通过int $0x80或者syscall来调用,达到从用户态向内核态的转变。
5 文件管理
Linux中一切都是文件,包括硬件设备,可以通过管理文件来对计算机的各种资源进行管理。
虚拟文件系统(Virtual File System,简称VFS)是Linux内核的子系统之一,它为用户程序提供文件和文件系统操作的统一接口,屏蔽不同文件系统的差异和操作细节。借助VFS可以直接使用open()、read()、write()这样的系统调用操作文件,而无须考虑具体的文件系统和实际的存储介质。
举个例子,Linux用户程序可以通过read() 来读取ext3、NFS、XFS等文件系统的文件,也可以读取存储在SSD、HDD等不同存储介质的文件,无须考虑不同文件系统或者不同存储介质的差异。
6 影响应用程序表现性能的因素分析
从以上几个操作系统的功能,我们可以得出影响应用程序表现性能的因素有以下几个。
1 内存
因为程序都是在内存中运行的,所以如果内存越大的话,能够运行的程序越多,发生内存交换的概率就越小,自然的程序的运行效率就越高。
2 cpu
CPU的个数也起到了很关键的作用,如果CPU的个数很少,那么在很多进的情况下,某些进程的等待时间就会变的很长。多核情况下可以减少进程的等待时间。
3 磁盘I/O
当发生了缺页中断需要进行外存和内存的交换的时候,磁盘I/O也会影响应用程序的表现性能。或者该应用程序需要进行很多的读写磁盘操作,磁盘I/O影响因素很大。
4 网络带宽
现在都是web应用,如果网络带宽不好,导致延迟较高,那么应用程序的性能也会变差。
5 各种算法
对于不同的应用程序来说,如果选择了不合适的算法,比如页面置换算法,进程调度算法等等,也会影响应用程序的性能。
7 总结
感谢李老师和孟老师对这门课程的付出,让我学到了很多,比如系统调用,以前仅仅是了解到系统调用这个层面上,现在知道了更加底层的原理,会执行syscall函数来进入内核态。Linux这门课程让我对操作系统有了更加清晰的理解,我以后会在编写代码的时候多思考,多考虑底层,编写出高质量的代码! 再次感谢老师们的付出!
浙公网安备 33010602011771号