1.精简的Linux系统概念模型
linux操作系统是一个基于POSIX的多用户、多任务、支持多线程的复杂系统。
(1)进程管理:主要负载CPU的访问控制,对CPU进行调度管理;
(2)内存管理:主要提供对内存资源的访问控制;
(3)文件系统:将硬盘的扇区组织成文件系统,实现文件读写等操作;
(4)设备驱动程序:用于控制所有的外部设备及控制器;
(5)网络服务:主要负责管理各种网络设备,并实现各种网络协议栈,最终实现通过网络连接其它系统的功能;
每个部分分别处理一项明确的功能,又向其它各个部分提供自己所完成的功能,相互协调,共同完成操作系统的任务。
进程的基本状态
创建状态:
进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态
就绪状态:
进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行
执行状态:
进程处于就绪状态被调度后,进程进入执行状态
阻塞状态:
正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用
终止状态:
进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行
2.2中断管理
中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续运行被暂时中断的程序。同步中断由CPU本身产生,又称为内部中断。这里同步是指中断请求信号与代码指令之间的同步执行,在一条指令执行完毕后,CPU才能进行中断,不能在执行期间。所以也称为异常(exception)。
异步中断是由外部硬件设备产生,又称为外部中断,与同步中断相反,异步中断可在任何时间产生,包括指令执行期间,所以也被称为中断(interrupt)。
异常又可分为可屏蔽中断(Maskable interrupt)和非屏蔽中断(Nomaskable interrupt)。而中断可分为故障(fault)、陷阱(trap)、终止(abort)三类。
广义上讲,中断又可分为四类:中断、故障、陷阱、终止。
Linux中断机制由三部分组成:
Linux中一切都是文件,包括硬件设备,这样用户可以采用读写文件的方式实现访问硬件。
文件是具有符号名的、在逻辑上具有完整意义的一组相关信息项的有序序列。文件系统,就是操作系统中实现文件统一管理的一组软件、被管理的文件以及为实施文件管理所需要的一些数据结构的总称。要实现操作系统对其他各种不同文件系统的支持,就要将对各种不同文件系统的操作和管理纳入到一个统一的框架中。对用户程序隐去各种不同文件系统的实现细节,为用户程序提供一个统一的、抽象的、虚拟的文件系统界面,这就是所谓的虚拟文件系统VFS。为各类文件系统提供了一个统一的操作界面和应用编程接口。
原理也很简单,用户态下有几个系统调用函数,包括read()、write()、open()、close()等,作用类似于字面意义,就是读写打开关闭文件。 然后调用内核中sys_open()、sys_read()等函数,对包括FAT、设备文件等在内的文件系统操作。可以说VFS是一个软件层,用来处理与Unix标准文件系统相关的所有系统调用。
通常,虚拟文件系统分为三个层次:
第一层为文件系统接口层,如open/write/close等系统调用接口。
第二层为VFS接口层。该层有两个接口:一个是与用户的接口;一个是与特定文件系统的接口。VFS与用户的接口将所有对文件的操作定向到相应的特定文件系统函数上。VFS与特定文件系统的接口主要是通过VFS-operations实现。
第三层是具体文件系统层,提供具体文件系统的结构和实现,包括网络文件系统,如NFS。
这里以打开文件说明。打开文件即使用 open 函数,它首先通过按名查找,看在高速缓存中有没有查找的 inode,如果有那么对其进行引用并加 1。如果没有将创建新的 vfs的 inode 对象和目录项对象等。 Open 函数调用的系统服务例程是 sys_open 函数,其接受的参数为文件目录和访问的模式。如果文件存在则返回一个文件描述符fd,如果不存在则返回-1. Read 函数调用的服务例程是 sys_read ,接受三个参数。分别是一个文件描述符 fd,一个对数据缓存的地方buf,和需要传输的数据的多少 count。Read 对将文件读入缓存区。
影响性能的因素: 1.硬件的速度2.缓存的命中 3.网络性能4.内存限制5.文件系统性能
2.4设备驱动程序
驱动是应用程序操作硬件的中间层
设备驱动程序相关的数据结构
3.心得
首先,万分感谢孟宁老师和李春杰老师这一学期的辛勤教学。经过这段时间的学习实验,我对Linux内核的工作机制和工作原理有了更加深入的理解,原来只是简单学习了os,对一般操作系统中进程、中断、文件系统等概念有所了解,现在针对Linux有了更深入的了解。任何计算机相关工作者都该好好学习Linux这门课,会让你对计算机有更完整的全新认识。