Linux系统课程期末分析报告
一.linux操作系统精简内核模型分析
Linux是一个类Unix的操作系统,操作系统是一个控制程序,是计算机系统的控制和管理中心,从资源角度观察,它具有处理器,存储器管理,设备管理和文件管理等四项功能。借用本节课我们可以总结出计算机有“三大法宝”,操作系统有“两把宝剑”。所谓的“三大法宝”也就是指存储程序计算机、函数调用堆栈和中断;“两把宝剑”也就是中断上下文和进程上下文。

由上图可以看出,linux中的内核控制着计算机系统的硬件和软件,屏蔽了底层硬件的差异,向上提供对应的服务。其中进程管理,文件系统管理,内存管理和网络协议栈构成了内核的主要功能。
二.进程相关
1.进程概念
进程是具有独立功能的程序在一个数据集合上的运行的过程,它是系统进行资源分配和调度的一个独立单位。linux是一个多任务多用户的操作系统,每个进程都具有一定的功能和权限,他们都运行在各自的独立空间之中。Linux为每个进程分配一个8KB大小的内存区域,用于存 放该进程两个不同的数据结构:

我们知道其中的一个地址便可以获取另外两个地址。
进程的状态我们可以使用牛头模型来进行描述,如下所示:

2.进程的调度
进程的调度算法主要有fifo,短进程优先以及优先级调度算法。在linux系统主要采用了优先级调度算法,其主要的步骤如下:
-
首先我们需要依据调度算法计算出进程的优先级
-
根据进程的优先级,我们选择优先级较大的进程放入cpu的可运行队列中,每个cpu都有自己的可运行队列
-
可运行队列里存储着过期的进程队列和活动进程队列
-
可运行队列是由进程链表组成的有优先级的一种数据结构
-
-
进程按照优先级进行调度(这里涉及到了优先级位图)
进程调度的时机可能发生在具体的时间片用完,以及系统调用从内核态返回用户态空间之前,发生中断从内核空间返回用户空间之前。
三.文件系统相关
在linux里面的文件系统主要采用了VFS这种模式,也就是所谓的虚拟文件系统,主要作用的屏蔽不同的具体的文件系统的差异,主要分为三个层次:文件系统接口调用层(比如open、read等系统调用);VFS接口层,这层又包含了与用户的接口和与具体文件系统的接口;具体的文件系统层,包括网络文件系统。VFS包括了超级块,inode,file对象和dentry结构。

注意在linux系统里万物皆可文件,比如设备,socket端口也都看成一种文件。每个文件都有对应的唯一的inode,inode里面保存了它所指向的文件的相关信息。
四.中断相关
中断是“三大法宝”和“两大宝剑”之一,分为外部中断(硬件中断)和内部中断(软件中断)。软件中断又分为故障、陷阱和终止。其中系统调用是一种特殊的软件中断方式。
中断的执行步骤如下所示:
-
首先在每条指令结束之前会检查是否有中断产生。比如当外部设备需要提出io中断,那么就会传入IRQ线,然后cpu检查INTR来判断是否有中断
-
确定与中断或者异常相关的向量i
-
读idtr寄存器指向的idt表的第i项
-
从gdtr寄存器获取gdt基址,并在gdt中查找以读取idt表项中段选择符所标识的段描述符
-
确定中断是由授权的中断源产生的
-
检查是否发生了特权级变化,也就是是否由用户态进入了内核态,这样就需要切换堆栈
-
读tr寄存器,获取其中的tss断
-
用于新特权级相关的堆栈装在ss和esp寄存器,这些值可以在进程的tss段中找到
-
在新的栈中保存之前的ss和esp的值
-
-
若发生的是故障,用引起异常的指令的地址修改cs和eip寄存器的值,以便这条指令在结束后可以接着被执行
-
在栈中保存eflags,cs和eip的值
-
如果硬件产生了硬件出错吗,将其保存到栈中
-
装载cs和eip值,其值可以在idt中找到
-
然后进行中断返回,也就是弹出对应的cs,eip和eflags寄存器
五.模型举例验证
这里我们使用一个open系统调用的过程来进行验证。当我们当用了c语言库函数open之后,然后此时开始系统调用的过程:执行指令INT 0x80,让系统跳转到一个预设的内核空间地址,它指向系统调用处理程序也就是system_call函数,该函数会根据系统调用号来找到对应的系统调用服务例程,此时会执行sys_open函数,里面调用do_sys_open函数,该函数首先找到一个未分配的文件描述符也就是fd;分配一个全新的struct file结构体并根据传入的name找到对应的dentry,将对应的file加入对应的系统文件打开表,并将对应的fd加入对应的进程文件打开表,最后返回对应的fd,根据这个fd可以找到对应的文件。
六.Linux系统中程序运行性能影响因素分析
我们在对一个程序性能进行分析时,首先要分析程序本身,这里我们可以将程序分为io密集型和cpu密集型,io密集型涉及到大量的磁盘读写操作,磁盘读写会很耗时,这就是一个值得优化的地方;对于cpu密集型程序,多是涉及到一些计算,这时可能会涉及一些程序的并发执行来提高程序的性能。
1.四大影响因素
经过分析之后我们可以发现因素也就是cpu、存储、磁盘io能力和网络有关。
cpu的速度和性能很大程度上影响了整个系统的运行能力,因此某种程度上cpu数量越多、主频越高,服务器性能也就越好;
内存的大小也是影响 Linux 性能的一个重要的因素。内存太小,系统进程将被阻塞,应用也将变得缓慢,甚至失去响应;内存太大,会导致资源浪费,Linux 系统采用了物理内存和虚拟内存的概念,虚拟内存虽然可以缓解物理内存的不足,但是占用过多的虚拟内存,应用程序的性能将明显下降。要保证应用程序的高性能运行,物理内存一定要足够大,但不应过大,否则会造成内存资源的浪费;
磁盘的io能力会直接影响程序运行能力,因为在进行磁盘io时很多程序将会暂时停滞;
网络影响程序是显而易见的,不稳定,低速的网络将会导致程序的阻塞。
2.因素影响分析工具
top命令是很强大的机器分析命令,类似于windows的任务管理器,但整个命令可以观察更多的程序性能指标。这里我们一分析一个数据库程序运行进行分析
-
首先我们使用top命令列出具体的进程的cpu占用率,发现是不是mysqld进程占用了cpu的大部分性能,
-
然后我们执行命令show processlist里面查看sql语句,分析session情况,里面是不是sql语句执行存在问题,是否是index缺失,或者是不是数据量占用太大造成的
-
查看慢查询和explain分析对应的语句和是否走索引等等
-
浙公网安备 33010602011771号