Linux系统课程期末分析报告

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分析对应的语句和是否走索引等等

  •  

posted @ 2021-05-17 18:59  哈哈哈哈哈哈scp  阅读(314)  评论(1)    收藏  举报