Linux实验总结分析报告

前言

感谢中科大孟老师和李老师的精心讲授,在本门课中,我受益匪浅。通过阅读孟老师的著作——《庖丁解牛Linux》,更使我加深了对本门课的理解。 

再次感谢两位老师。

一、精简的Linux系统的概念模型

冯·诺依曼体系结构如图所示,其中运算器、存储器、控制器、输入设备和输出设备5大基本类型部件组成了计算机硬件;
核心是CPU,与内存和输入输出(I/O)设备进行交互,是整个计算机的灵魂、大脑。内存则是存放了指令和数据,二者
皆以二进制形式存放。输入输出设备则包括鼠标、键盘、显示器与磁盘等等设备,是计算机与外界进行交互的工具。

Linux实验总结分析报告

进程管理

进程管理的重点是进程的执行。在内核中,这些进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和 CPU寄存器)。在用户空间,通常使用进程 这个术语,不过 Linux 实现并没有区分这两个概念(进程和线程)。内核通过 SCI 提供了一个应用程序编程(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface [POSⅨ] 函数),停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSⅨ 机制)。
进程管理还包括处理活动进程之间共享 CPU 的需求。内核实现了一种新型的调度算法,不管有多少个线程在竞争 CPU,这种算法都可以在固定时间内进行操作。这种算法就称为 O⑴ 调度程序,这个名字就表示它调度多个线程所使用的时间和调度一个线程所使用的时间是相同的。O⑴ 调度程序也可以支持多处理器(称为对称多处理器或 SMP)。您可以在 ./linux/kernel 中找到进程管理的源代码,在 ./linux/arch 中可以找到依赖于体系结构的源代码。

内存管理

内核所管理的另外一个重要资源是内存。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。不过内存管理,要管理的可不止 4KB缓冲区。Linux 提供了对 4KB缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用 4KB缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。
Linux实验总结分析报告

 

 

为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。由于这个原因,页面可以移出内存并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。内存管理的源代码可以在 ./linux/mm 中找到。

文件系统

  大量信息的存储与处理是计算机应当解决的一个重要问题,信息的组织、存取和保管便成为了文件系统产生的源头。管理文件通常会设置一个数据结构,即文件控制块FCB,在Linux中为inode(包含文件处理的所有信息)。文件控制块的有序集合构成文件目录,每个目录项即是一个文件控制块。给定一个文件名,通过查找文件目录便可找到该文件对应的目录项(即FCB)。为了实现文件目录的管理,通常将文件目录以文件的形式保存在外存空间,这个文件就被称为目录文件,Linux中主要分为以下几类:

Linux实验总结分析报告

  要实现操作系统对其它各种不同文件系统的支持,就要将对各种不同文件系统的操作和管理纳入到一个统一的框架中。对用户程序隐去各种不同文件系统的实现细节,为用户程序提供一个统一的、抽象的、虚拟的文件系统界面,这就是所谓的虚拟文件系统VFS。例如,在Linux操作系统中,可以将DOS格式的磁盘或分区,即文件系统,“安装”到系统中,然后用户程序就可以按完全相同的方式访问这些文件,就好像它们也是Ext2格式的文件一样,一般分为三个层次:

Linux实验总结分析报告

  VFS的基本思想:引入一个通用文件模型,这个模型能够表示所有支持的文件系统。通用文件模型有下列对象类型组成:

  • 超级块对象( superblock object):存放文件系统相关信息:例如文件系统控制块。

  • 索引节点对象( inode object):存放具体文件的一般信息:文件控制块/inode〉。

  • 文件对象( file object):存放已打开的文件和进程之间交互的信息。

  • 目录项对象( dentry object):存放目录项与文件的链接信息。

  大部分操作只需要与通用文件模型 中的一些对象打交道,而不需要真正操 作具体的文件系统和文件,因此可以把 VFS看成是一个“通用”的文件系统,在必要时依赖某种具体的文件系统。

中断管理 

  中断过程

 

Linux实验总结分析报告

  CPU对于中断和异常的具体处理机制本质上是完全一致的,当CPU收到中断或者异常的信号时,它会暂停执行当前的程序或任务,通过一定的机制跳转到负责处理这个信号的相关处理程序中,在完成对这个信号的处理后再跳回到刚才被打断的程序或任务中。

  1)CPU检查是否有中断/异常信号

  2)根据中断向量到IDT表中取得处理这个向量的中断程序的段选择符

  3)根据取得的段选择符到GDT中找相应的段描述符

  4)CPU根据特权级的判断设定即将运行的中断服务程序要使用的栈的地址

  5)保护当前程序的现场

  6)跳转到中断服务程序的第一条指令开始执行

  7)中断服务程序处理完毕,恢复执行先前中断的程序

读取文件举例

  文件的读/写主要是通过系统调用read ( )和write ( )完成的,对于读/写文件的进程,目标文件是由一个打开文件描述符代表的。read ( )和write ( )的服务例程分别是sys_read ( )和sys_write ( )函数。它们都需要三个参数:一个文件描述符fd;
一个包含要传送数据的内存缓冲区地址buf;一个指定应该传送多少字节数的count。read ( )把数据从文件传送到缓冲区,而write ( )执行相反的操作
  Linux实验总结分析报告

 

读取文件的步骤就是用户通过系统提供的read()和write()函数与系统的文件系统经行交流,然后文件系统在进行一系列操作与系统的硬件系统打交道,如:磁盘。通过以上的步骤用户就完成了从磁盘上读取文件或向磁盘上写入文件的操作。

 

 

二、影响应用程序性能表现的因素

  

影响性能的因素

  1)CPU(cpu的速度与性能很大一部分决定了系统整体的性能,是否使用SMP)

  2)内存(物理内存不够时会使用交换内存,使用swap会带来磁盘I0和cpu的开销)

  3)硬盘(存储系统)

  a、Raid技术使用(RAID0,RAID1,RAID5,RAID0+1)

  b、小文件读写瓶颈是磁盘的寻址(tps),大文件读写的性能瓶颈是带宽

  c、Linux可以利用空闲内存作文件系统访问的cache,因此系统内存越大存储系统的性能也越好

  4)网络带宽。

 

perf top 可实时显示占用 CPU 时钟最多的函数或指令,因此可用来查找热点函数进行优化。

Linux实验总结分析报告
$ perf top
Samples: 833  of event ‘cpu-clock‘, Event count (approx.): 97742399
Overhead  Shared Object       Symbol
   7.28%  perf                [.] 0x00000000001f78a4
   4.72%  [kernel]            [k] vsnprintf
   4.32%  [kernel]            [k] module_get_kallsym
   3.65%  [kernel]            [k] _raw_spin_unlock_irqrestore
...
Linux实验总结分析报告

查看内存:

$ free
                 total             used         free               shared  buff/cache   available
Mem:        4039436      570832     2195068       11972     1273536     3108340
Swap:       1533948           0          1533948

总之,对于具体的应用程序,我们可以从CPU ,内存, I/O以及网络等几个方面去分析影响性能的因素,利用性能测试工具去定位和解决问题。

 

Linux实验总结分析报告

上一篇:Linux 命令(command) history


下一篇:Vmware提示“该虚拟机似乎正在使用中”