Linux课程实验总结

1. Linux架构模型

Linux是目前世界上最知名的开源操作系统,其体系架构如下图所示:

 Linux课程实验总结

 

 

(1)内核

Linux内核实现了操作系统的三大核心功能——进程管理、内存管理和文件系统。

进程管理

进程描述:Linux用struct task_struct这一数据结构来描述进程,称为进程描述符,其结构如下图所示:

 Linux课程实验总结

 

 

 

进程创建:Linux的进程的每个进程都产生于其父进程。而系统的第一个进程为init,由内核启动,其他所有进程都直接或间接起源于该进程,通过do_fork复制父进程的方式初始化。

 

进程状态

1、R (TASK_RUNNING),可执行状态

2、S (TASK_INTERRUPTIBLE),可中断的睡眠状态

3、D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态

4、T/t (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态

5、Z (TASK_DEAD - EXIT_ZOMBIE),退出状态,进程成为僵尸进程

6、X (TASK_DEAD - EXIT_DEAD),退出状态,进程即将被销毁

 

各进程之间状态转换如下图所示:

 Linux课程实验总结

 

 

 

进程调度:

进程根据优先级分为实时进程和普通进程,在Linux中进程优先级分为0~139,数值与优先级成反比。实时进程优先级取值为0~99,普通进程只有nice值,对应优先级为100~139。

   进程调度策略根据实时进程和普通进程而有所区别,对于实时进程,采用FIFO(先进先出)或Round Robin(时间片轮转)调度。对于普通进程,采用CFS(Completely Fair Scheduler)调度。

 

 

内存管理

进程内存空间:Linux采用虚拟地址,在 32 位 Linux 系统上每个进程有4GB 的进程地址空间,在用户态下,只能访问 0x00000000~0xbfffffff 的地址空间,而内核态下可以访问全部空间。

 Linux课程实验总结

每个进程的地址空间细分为:

 Linux课程实验总结

 

 

 

文件系统

文件组织结构:Linux用树结构来组织文件。树顶为根目录(/),节点为目录,叶节点为数据文件。一个文件的完整路径是指从根目录出发,经过各个目录,最终到目标文件的整个路径。

 

Inode介绍:在Linux系统中,一个文件除了自身数据外,还有附属信息,即元数据(metadata),而inode(每个inode对应唯一整数编号)就是用来存放元数据的,它记录了文件的许多信息,如大小,拥有者,所属组,修改日期等。inode储存了一些指针,这些指针指向数据块,对应文件的内容就储存在这些数据块中。当Linux想要打开一个文件时,只需找到该文件对应的inode,然后将inode中存储的指针所指向的数据块合起来,即可获得文件数据。

 

(2)系统调用

系统调用,是用户程序和硬件设备之间的桥梁。用户程序通过系统调用来使用硬件,而无需关心具体的硬件设备,简化了用户程序的开发,也使得系统能更加安全稳定。系统调用是利用陷阱(trap)这种软件中断方式主动从用户态进入内核态的。

(3)公用函数库

公用函数库就是公开的函数的库,在任意处可以导入使用。

(4)Shell

Linux中的shell,是用户与内核进行交互操作的一种接口,本质上也是一个进程,表现为一个可以由用户输入和获得反馈信息的界面。

(5)应用程序

Linux的应用程序,指为完成某项或多项特定工作的计算机程序,它运行在用户模式,可以和用户进行交互,具有可视的用户界面。

 

2. Linux读写文件流程

读文件

进程请求读文件,内核检查文件描述符,查看虚拟文件系统的已打开文件列表,调用系统调用函数read(),根据文件路径一层层找到文件对应的inode节点,通过inode找到该文件的页缓存情况,如果缓存命中,那么直接读取文件内容,如果缺失,则产生缺页异常,从磁盘中将该页读入缓存,而后重新查找缓存,读取文件。

 

写文件

进程请求写文件,内核检查文件描述符,查看虚拟文件系统的已打开文件列表,调用系统调用函数,如果缓存命中,直接把文件内容修改更新在缓存的页中。如果缺失,则产生缺页异常,从磁盘中将该页读入缓存,而后重新查找缓存再更新在缓存的页中。此时修改仍旧位于缓存中,并标记为脏页,并未写回到磁盘中。当调用系统调用sync()或fsync(),或者进程pdflush定时,会把脏页写回磁盘。

 

3. 将一个应用程序放入该系统模型中系统性的梳理影响应用程序性能表现的因素,并说明原因。

 Linux课程实验总结

 

 Linux课程实验总结

stress -c 16 --timeout 600

产生16个进程,每个进程都反复不停的计算由rand ()产生随机数的平方根。

mpstat -P ALL 5

查看所有CPU的使用情况,每5秒打印一次。可以看到%usr占用极高接近100%,显然CPU运算能力是影响程序性能表现的主要因素。

 

4. 结语

   在孟老师的Linux课程学习中,我通过教学PPT和简化版内核的源码阅读,对Linux操作系统的底层有了一定的理解,受益匪浅。

上一篇:文件系统及工作原理,硬链接与软链接及其示意图,重点总结


下一篇:linux文件管理(inode、文件描述符表、文件表)