linux课程总结
Linux内核实现了操作系统的三大核心功能,即进程管理、内存管理和文件系统,对应操作系统原理课程中最重要的 3 个抽象概念是进程、虚拟地址和文件。
一,linux系统概念模型

二,进程管理
进程管理主要完成三个任务:
进程初始化,进程描述符和进程切换
其中,进程切换涉及到的知识有进程调度策略,进程调度时机以及进程相关数据结构
进程的初始化
内核通过硬件静态创造出了一个特殊的进程0号进程init_task进程,而0号通过fork又创建出了1号进程第一个用户态进程,没有父进程,由Linux内核直接启动,是所有用户进程的父进程和2号进程一个kthreadd内核线程,实际上就是内核进程,用来管理系统的资源。
进程的状态
- 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系统中存在一个总的调度器类,可以容许不同的调度算法共存。从调度策略的角度来讲,可以区分为完全公平调度和实时调度。
完全公平调度会维护每一个进程的运行时间,并以此为依据计算vruntime值,每次再选择这个值最小的进程进行执行,其中的组织方法是红黑树。
实时调度主要使用SCHED_FIFO和SCHED_RR两种调度方法进行先来先服务的调度和时间片轮转调度。
对不同类型的进程,进程调度策略不同:
对实时进程一般使用FIFO,时间片轮转调度策略
对普通进程一般使用时间片轮转调度策略
进程调度中的优先级:
实时进程>交互进程>普通进程
进程调度的时机
1.什么时候需要进程调度?
主动放弃:(1)进程正常终止 (2)运行过程中发送异常而终止(3)主动阻塞(如 等待I/O)
被动放弃:(1)分给进程的时间片用完 (2)有更紧急的事情需要处理(如I、O中断)(3)有更高级的进程进入就绪队列
2.什么时候不能进行进程调度?
在处理中断的过程中
进程在操作系统内核程序临界区
原子操作过程中(原语)
三,中断
Linux工作在intel指令特权级Ring0和Ring3上,它们分别代表Linux的内核态和用户态
中断处理的过程:

在内核态堆栈中保存IRQ的值和寄存器的内容
为正在给IRQ线服务的PIC发送一个应答,这将允许PIC进一步发出中断
执行共享这个IRQ的所有设备的中断服务例程ISR
跳到ret_from_intr()的地址后终止
四,文件系统
文件系统的数据结构
超级块对象(superblock object)
存放文件系统相关信息:例如文件系统控制块
索引节点对象(inode object)
存放具体文件的一般信息:文件控制块/inode
Inode对象内包含了内核在操作文件或目录时需要的全部信息,文件名可以更改,但inode对文件是唯一的,且随文件的存在而存在。
文件对象(file object)
存放已打开的文件和进程之间交互的信息 ,
目录项对象(dentry object)
每一个文件除了有一个inode数据结构外,还有一个dentry数据结构与之关联
dentry数据结构可以加快对文件的快速定位,改进文 件系统的效率
虚拟文件系统
要实现操作系统对其它各种不同文件系统的支持,就要将对各种 不同文件系统的操作和管理纳入到一个统一的框架中。对用户程 序隐去各种不同文件系统的实现细节,为用户程序提供一个统一 的、抽象的、虚拟的文件系统界面,这就是所谓的虚拟文件系统 (Virtual File System Switch,VFS)

虚拟文件系统的作用
VFS是一个软件层,用来处理与Unix标准文 件系统相关的所有系统调用。
是用户应用程序与文件系统实现之间的抽象层
能为各种文件系统提供一个通用的、统一的 接口
五,影响Linux性能的因素和优化
因素:
1.CPU
CPU是操作系统稳定运行的根本,CPU的速度与性能在很大程度上决定了系统整体的性能,因此,CPU数量越多、主频越高,服务器性能也就相对越好。但事实并非完全如此。 目前大部分CPU在同一时间内只能运行一个线程,超线程的处理器可以在同一时间运行多个线程,因此,可以利用处理器的超线程特性提高系统性能。在Linux系统下,只有运行SMP内核才能支持超线程,但是,安装的CPU数量越多,从超线程获得的性能方面的提高就越少。另外,Linux内核会把多核的处理器当作多个单独的CPU来识别,例如两个4核的CPU,在Lnux系统下会被当作8个单核CPU。但是从性能角度来讲,两个4核的CPU和8个单核的CPU并不完全等价,根据权威部门得出的测试结论,前者的整体性能要比后者低25%~30%。 可能出现CPU瓶颈的应用有邮件服务器、动态Web服务器等,对于这类应用,要把CPU的配置和性能放在主要位置。
2.内存
内存的大小也是影响Linux性能的一个重要的因素,内存太小,系统进程将被阻塞,应用也将变得缓慢,甚至失去响应;内存太大,导致资源浪费。Linux系统采用了物理内存和虚拟内存两种方式,虚拟内存虽然可以缓解物理内存的不足,但是占用过多的虚拟内存,应用程序的性能将明显下降,要保证应用程序的高性能运行,物理内存一定要足够大;但是过大的物理内存,会造成内存资源浪费,例如,在一个32位处理器的Linux操作系统上,超过8GB的物理内存都将被浪费。因此,要使用更大的内存,建议安装64位的操作系统,同时开启Linux的大内存内核支持。 由于处理器寻址范围的限制,在32位Linux操作系统上,应用程序单个进程最大只能使用2GB的内存,这样以来,即使系统有更大的内存,应用程序也无法“享”用,解决的办法就是使用64位处理器,安装64位操作系统。在64位操作系统下,可以满足所有应用程序对内存的使用需求,几乎没有限制。 可能出现内存性能瓶颈的应用有打印服务器、数据库服务器、静态Web服务器等,对于这类应用要把内存大小放在主要位置。
3.磁盘I/O性能 磁盘的I/O性能直接影响应用程序的性能,在一个有频繁读写的应用中,如果磁盘I/O性能得不到满足,就会导致应用停滞。好在现今的磁盘都采用了很多方法来提高I/O性能,比如常见的磁盘RAID技术。
RAID的英文全称为:RedundantArrayofIndependentDisk,即独立磁盘冗余阵列,简称磁盘阵列。RAID通过将多块独立的磁盘(物理硬盘)按不同方式组合起来形成一个磁盘组(逻辑硬盘),从而提供比单个硬盘更高的I/O性能和数据冗余。 通过RAID技术组成的磁盘组,就相当于一个大硬盘,用户可以对它进行分区格式化、建立文件系统等操作,跟单个物理硬盘一模一样,唯一不同的是RAID磁盘组的I/O性能比单个硬盘要高很多,同时在数据的安全性也有很大提升。
根据磁盘组合方式的不同,RAID可以分为RAID0,RAID1、RAID2、RAID3、RAID4、RAID5、RAID6、RAID7、RAID0+1、RAID10等级别,常用的RAID级别有RAID0、RAID1、RAID5、RAID0+1,这里进行简单介绍。
RAID0:通过把多块硬盘粘合成一个容量更大的硬盘组,提高了磁盘的性能和吞吐量。这种方式成本低,要求至少两个磁盘,但是没有容错和数据修复功能,因而只能用在对数据安全性要求不高的环境中。
RAID1:也就是磁盘镜像,通过把一个磁盘的数据镜像到另一个磁盘上,最大限度地保证磁盘数据的可靠性和可修复性,具有很高的数据冗余能力,但磁盘利用率只有50%,因而,成本最高,多用在保存重要数据的场合。
RAID5:采用了磁盘分段加奇偶校验技术,从而提高了系统可靠性,RAID5读出效率很高,写入效率一般,至少需要3块盘。允许一块磁盘故障,而不影响数据的可用性。
RAID0+1:把RAID0和RAID1技术结合起来就成了RAID0+1,至少需要4个硬盘。此种方式的数据除分布在多个盘上外,每个盘都有其镜像盘,提供全冗余能力,同时允许一个磁盘故障,而不影响数据可用性,并具有快速读/写能力。 通过了解各个RAID级别的性能,可以根据应用的不同特性,选择适合自身的RAID级别,从而保证应用程序在磁盘方面达到最优性能。
4.网络宽带
Linux下的各种应用,一般都是基于网络的,因此网络带宽也是影响性能的一个重要因素,低速的、不稳定的网络将导致网络应用程序的访问阻塞,而稳定、高速的网络带宽,可以保证应用程序在网络上畅通无阻地运行。幸运的是,现在的网络一般都是千兆带宽或光纤网络,带宽问题对应用程序性能造成的影响也在逐步降低。
优化:
1.系统安装优化
系统优化可以从安装操作系统开始,当安装Linux系统时,磁盘的划分,SWAP内存的分配都直接影响以后系统的运行性能,例如,磁盘分配可以遵循应用的需求:对于对写操作频繁而对数据安全性要求不高的应用,可以把磁盘做成RAID0;而对于对数据安全性较高,对读写没有特别要求的应用,可以把磁盘做成RAID1;对于对读操作要求较高,而对写操作无特殊要求,并要保证数据安全性的应用,可以选择RAID5;对于对读写要求都很高,并且对数据安全性要求也很高的应用,可以选择RAID01。这样通过不同的应用需求设置不同的RAID级别,在磁盘底层对系统进行优化操作。
随着内存价格的降低和内存容量的日益增大,对虚拟内存SWAP的设定,现在已经没有了所谓虚拟内存是物理内存两倍的要求,但是SWAP的设定还是不能忽略,根据经验,如果内存较小(物理内存小于4GB),一般设置SWAP交换分区大小为内存的2倍;如果物理内存大于4GB小于16GB,可以设置SWAP大小等于或略小于物理内存即可;如果内存大小在16GB以上,原则上可以设置SWAP为0,但并不建议这么做,因为设置一定大小的SWAP还是有一定作用的。
2.内核参数优化
系统安装完成后,优化工作并没有结束,接下来还可以对系统内核参数进行优化,不过内核参数的优化要和系统中部署的应用结合起来整体考虑。例如,如果系统部署的是Oracle数据库应用,那么就需要对系统共享内存段(kernel.shmmax、kernel.shmmni、kernel.shmall)、系统信号量(kernel.sem)、文件句柄(fs.file-max)等参数进行优化设置;如果部署的是Web应用,那么就需要根据Web应用特性进行网络参数的优化,例如修改net.ipv4.ip_local_port_range、net.ipv4.tcp_tw_reuse、net.core.somaxconn等网络内核参数。
3.文件系统优化
文件系统的优化也是系统资源优化的一个重点,在Linux下可选的文件系统有ext2、ext3、xfs、ReiserFS,根据不同的应用,选择不同的文件系统。
Linux标准文件系统是从VFS开始的,然后是ext,接着就是ext2,应该说,ext2是Linux上标准的文件系统,ext3是在ext2基础上增加日志形成的,从VFS到ext3,其设计思想没有太大变化,都是早期UNIX家族基于超级块和inode的设计理念。
六,总结
感谢孟老师和李老师的教学与付出, 让我对linux操作系统的设计与实现理论有了初步的了解。通过学习《Linux操作系统分析》理论课及多次实验,我对linux的兴趣更深入了一步,受益匪浅。

浙公网安备 33010602011771号