Linux操作系统分析—课程总结分析报告

一、Linux模型

Linux内核作为操作系统内核,向下承接最底层的硬件驱动,向上提供应用层的接口实现,适用于各类软硬件结合系统。

Linux内核主要分为以下五大模块:进程管理、内存管理、文件系统、设备驱动以及网络模块。

Linux操作系统分析—课程总结分析报告

 

 

 二、进程管理

在Linux中,父进程通过fork自己的地址空间创建一个新的子进程结构。操作系统会为每个子进程分配一个unique的进程ID,即PID。任何进程都可以创建子进程,子进程继承了父进程的安全性身份、进程描述符以及端口和资源等。在子进程执行自己的程序时,父进程一般处于睡眠状态,子进程完成时会发出exit信号请求,在退出时子进程会关闭资源,剩余部分僵停。父进程收到信号而被唤醒,清理子进程剩余的结构,然后继续执行其自己的程序代码。

Linux操作系统分析—课程总结分析报告

下图描述了linux进程状态的转换,显然包含五种状态:可运行态、运行态、暂停态、等待态、僵死态。

可运行态:进程已分配到除CPU外所需要的其它资源,等待系统把CPU分配给它之后即可投入运行;运行态:进程正在使用CPU运行的状态;等待态:又称睡眠态,它是进程正在等待某个事件或某个资源时所处的状态。等待态进一步分为可中断的等待态和不可中断的等待态。处于可中断等待态的进程可以由signal解除其等待态。处于不可中断等待态的进程,一般是直接或间接等待硬件条件,它只能用特定方式来解除;暂停态:进程需要接受某种特殊处理而暂时停止运行所处的状态。 通常进程在接受到外部进程的某个信号进入暂停态;僵死态:进程的运行已经结束,但它的任务结构体仍在系统中。

Linux操作系统分析—课程总结分析报告

 三、中断和异常

  异常又叫同步中断,是当指令执行时由cpu控制单元产生的,之所以称之为异常,是因为只有在一条指令结束之后才发出中断(程序执行异常或者系统调用)。

  中断又叫异步中断,是由其他硬件设备依照cpu时钟信号随机产生的。

  中断和异常的硬件处理过程如下:

  1. 确定与中断或异常关联的向量i(0~255);
  2. 读取idtr寄存器指向的IDT表中的第i项;
  3. 读gdtr寄存器获取GDT的基地址,并在GDT中查找,以读取IDT表项中的段选择符所标识的段描述符;
  4. 确定中断是由授权的发生源发出的;
  5. 检查是否发生了特权级的变化,一般指是否由用户态陷入了内核态;若是,控制单元必须开始使用与新的特权级相关的堆栈a,即内核态栈;
  6. 若发生的是故障,用引起异常的指令地址修改cs和eip寄存器的值,以使得这条指令在异常处理结束后能被再次执行;
  7. 在栈中保存eflags、cs和eip的内容;
  8. 如果异常产生一个硬件出错码,则将它保存在栈中;
  9. 装载cs和eip寄存器,其值分别是IDT表中第i项门描述符的 段选择符和偏移量字段。这对寄存器值给出中断或者异常处理程序的第一条指定的逻辑地址。

  此时的进程内核态堆栈如下所示:

  Linux操作系统分析—课程总结分析报告

 

 四、文件系统

  Linux以文件的形式对计算机中的数据和硬件资源进行管理,也就是彻底的一切皆文件,反映在Linux的文件类型上就是:普通文件、目录文件(也就是文件夹)、设备文件、链接文件、管道文件、套接字文件(数据通信的接口)等等。而这些种类繁多的文件被Linux使用目录树进行管理, 所谓的目录树就是以根目录(/)为主,向下呈现分支状的一种文件结构。

  对Linux系统和用户来说,所有可操作的计算机资源都存在于目录树这个逻辑结构中,对计算机资源的访问都可以认为是目录树的访问。就硬盘来说,所有对硬盘的访问都变成了对目录树中某个节点也就是文件夹的访问,访问时不需要知道它是硬盘还是硬盘中的文件夹。目录树的逻辑结构也非常简单,就是从根目录(/)开始,不断向下展开各级子目录。

  Linux操作系统分析—课程总结分析报告

 

   Linux操作系统对各种文件系统的支持是通过名为VFS的组件实现的,也就是虚拟文件系统(Virtual File System)。如上图所示,VFS作为一个抽象层,为用户提供统一的接口,屏蔽了其它具体文件系统(例如Ext4和Btrfs等)的实现。VFS为用户提供了open、close、read和write等接口。

五、举例验证

  这里以读文件进行举例,Linux在读文件的过程中,首先会通过进程调用函数库向内核发起读文件请求,内核通过检查进程的文件描述符定位到虚拟文件系统的已打开文件列表表项调用该文件可用的系统调用函数read(),read()函数通过文件表项链接到目录项模块,根据传入的文件路径,在目录项模块中检索,找到该文件的inode。在inode中,通过文件内容偏移量计算出要读取的页。通过inode,找到文件对应的address_space,在address_space中访问该文件的页缓存树,查找对应的页缓存结点。如果页缓存命中,那么直接返回文件内容;否则,如果页缓存缺失,那么返回一个页缺失异常,创建一个缓存页,同时通过inode找到文件中该页的磁盘地址,读取相应的页填充该缓存页,然后重新查找页缓存。

六、Linux中影响程序性能的因素

  (1)CPU

    CPU 是操作系统稳定运行的根本,CPU 的速度与性能很大一部分决定了系统整体的性能,因此 CPU 数量越多、主频越高,服务器性能也就相对越好。

  (2)内存

    内存的大小也是影响 Linux 性能的一个重要的因素。内存太小,系统进程将被阻塞,应用也将变得缓慢,甚至失去响应;内存太大,会导致资源浪费。Linux 系统采用了物理内存和虚拟内存的概念,虚拟内存虽然可以缓解物理内存的不足,但是占用过多的虚拟内存,应用程序的性能将明显下降。要保证应用程序的高性能运行,物理内存一定要足够大,但不应过大,否则会造成内存资源的浪费。

  (3)磁盘读写(I/O)能力

    磁盘的 I/O 能力会直接影响应用程序的性能。比如说,在一个需要频繁读写的应用中,如果磁盘 I/O 性能得不到满足,就会导致应用的停滞。

  (4)网络带宽

    Linux 下的各种应用,一般都是基于网络的,因此网络带宽也是影响性能的一个重要因素,低速的、不稳定的网络将导致网络应用程序的访问阻塞;而稳定、高速的带宽,可 以保证应用程序在网络上畅通无阻地运行。

Linux操作系统分析—课程总结分析报告

上一篇:[Linux] 网络抓包工具tshark


下一篇:linux中安装erlang时使用make命令报错问题