标签:思考 字段 睡眠状态 系统调用 设备驱动 堆栈 trap 分配 崩溃
一:报告要求
1.请您根据本课程所学内容总结梳理出一个精简的Linux系统概念模型,最大程度统摄整顿本课程及相关的知识信息,模型应该是逻辑上可以运转的、自洽的,并举例某一两个具体例子(比如读写文件、分配内存、使用I/O驱动某个硬件等)纳入模型中验证模型;
2.谈谈您对课程的心得体会,改进建议等;
3.产出要求是发表一篇博客文章,长度不限,只谈自己的思考,严禁引用任何资料造成文章虚长.
二:报告内容
1. Linux内核
Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。
内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。而内核又由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统等。
2. 进程管理
在Linux中, 进程是系统资源分配的基本单位,也是使用CPU运行的基本调度单位,它实现了对进程的控制和调度。进程管理的核心功能大致分为四类:控制,同步,通信,调度。
进程控制包括:进程的创建、进程的终止、进程的阻塞与唤醒;
进程调度包括:先到先服务算法、最短作业优先调度、优先级调度、 轮转法调度、多级队列调度、多级队列反馈调度等。
一个进程的上下文(context)包括进程的状态、有关变量和数据结构的值、机器寄存器的值和PCB以及有关程序、数据等。
Linux的进程总共有6种状态:
(1)new(初始状态,刚创建的一个进程,需要等待被调度)
(2)Runnable(就绪状态)
(3)RUNNING(可执行状态)
(4)Sleeping(睡眠状态)
(5)STOPPED(暂停状态)
(6)ZOMBIE(退出状态,进程成为僵尸进程)
当正在执行的进程由于某种原因要让出处理机时,系统要做进程上下文切换,以使另一个进程得以执行。
当进行上下文切换时系统要首先检查是否允许做上下文切换(在有些情况下,上下文切换是不允许的,例如系统正在执行某个不允许中断的原语时)。然后,系统要保留有关被切换进程的足够信息,以便以后切换回该进程时,顺利恢复该进程的执行。在系统保留了CPU现场之后,调度程序选择一个新的处于就绪状态的进程、并装配该进程的上下文,使CPU的控制权掌握在被选中进程手中。
3. 中断管理
中断分外部中断(硬件中断)和内部中断(软件中断)。内部中断?称为异常(Exception),异常?分为故障(fault)和陷阱(trap)。中断(广义)会改变处理器执行指令的顺序,通常与CPU芯片内部或外部硬件电路产生的电信号相对应。中断是异步的:由硬件随机产生,在程序执行的任何时候可能出现;异常是同步的:在(特殊的或出错的)指令执行时由CPU控制单元产生。
系统调用作为一种特殊的中断,就是利?陷阱(trap)这种软件中断?式主动从?户态进?内核态的。
中断的处理过程:
(1)确定中断向量;
(2)利用中断向量在IDT中找到对应中断门,在中断门中得到段选择符从而可以从GDT中找到中断服务例程的段基址;
(3)确定中断发生的特权级合法(linux只有内核态和用户态两种特权级,此步用来检查中断程序的特权是否低于引起中断的程序的特权,低优先级程序不能引起高优先级程序);
(4)检查是否发生特权级变化(用户态陷入内核态,这时候需要设置内核的堆栈),如果发生读取当前程序的tss段(通过tr寄存器读取)来选择新特权级的ss和esp指针,然后保存旧的ss和esp指针;
(5)若发生的是故障,用引起异常的指令地址修改cs和eip寄存器的值,以使得这条指令在异常处理结束后能被再次执行;
(6)在栈中保存eflags、cs和eip的内容;
(7)如果异常产生一个硬件出错码,则将它保存在栈中;
(8)装载cs和eip寄存器,其值分别是IDT表中第i项门描述符的段选择符和偏移量字段。这对寄存器值给出中断或者异常处理程序的第一条指定的逻辑地址。
4. 时钟管理
时钟一般分为两个部分:实时时钟和计时器/定时器。
实时时钟: 一般靠电池供电,即使系统断电,也可以维持日期和时间。 实时时钟独立于操作系统,所以也被称为硬件时钟,为整个系统提供一个计时标准。
定时器/计数器: 实时内核需要一个定时器作为系统时钟(或称 OS 时钟),并由实时内核控制系统时钟工作。 一 般情况下,系统时钟的最小粒度是由应用和操作系统的特点决定的。
实时时钟是系统时钟的时间基准,实时内核通过读取实时时钟来初始化系统时钟,此后二者保持同步运行,共同维系系统时间。
5. 文件系统
在Linux中,一切都是文件,通过对文件的定义和操作来控制设备的执行和数据的存储。并且使用VFS虚拟文件系统,实现对多种文件系统的兼容。
要实现操作系统对其它各种不同文件系统的支持,就要将对各种不同文件系统的操作和管理纳入到一个统一的框架中。 对用户程序隐去各种不同文件系统的实现细节,为用户程序提供一个统一的、抽象的、虚拟的文件系统界面,这就是所谓的虚拟文件系统(VFS)。
Linux支持多种文件系统,包括ext2、ext3、 vfat、 ntfs、 iso9660、 jffs、 romfs和nfs等,为了对各类文件系统进行统一管理, Linux引入了虚拟文件系统VFS。
虚拟文件系统 VFS:
(1)是一个软件层,用来处理与Unix标准文件系统相关的所有系统调用。
(2)是用户应用程序与文件系统实现之间的抽象层能为各种文件系统提供一个通用的、统一的接口。
文件打开流程:
(1)打开文件即使用 open 函数,它首先通过按名查找,看在高速缓存中有没有查找的 inode,如果有那么对其进行引用并加 1。如果没有将创建新的 vfs的 inode 对象和目录项对象等;
(2)Open 函数调用的系统服务例程是 sys_open 函数,其接受的参数为文件目录和访问的模式。如果文件存在则返回一个文件描述符fd,如果不存在则返回-1.;
(3)Read 和write 函数分调用的服务例程是 sys_read 和 sys_write,接受三个参数。分别是一个文件描述符 fd,一个对数据缓存的地方buf,和需要传输的数据的多少 count。Read 对将文件读入缓存区。Write 则相反。
文件关闭流程:
(1)用户程序通过close ( )系统调用关闭打开的文件,该函数接收的参数为要关闭文件的文件描述符;
(2)内核调用sys_close ( )函数。
6. 设备驱动程序
设备驱动程序是 Linux 内核的主要部分。和操作系统的其它部分类似,设备驱动程序运行在高特权级的处理器环境中,从而可以直接对硬件进行操作,但正因为如此,任何一个设备驱动程序的错误都可能导致操作系统的崩溃。设备驱动程序实际控制操作系统和硬件设备之间的交互。
设备驱动程序提供一组操作系统可理解的抽象接口完成和操作系统之间的交互,而与硬件相关的具体操作细节由设备驱动程序完成。一般而言,设备驱动程序和设备的控制芯片有关,例如,如果计算机硬盘是 SCSI 硬盘,则需要使用 SCSI 驱动程序,而不是 IDE 驱动程序。
7. 心得体会
Linux操作系统本身是一件很有意思的东西,正如Linux之父Linus Torvalds在自传中所说:Just For Fun.但于我来说,学习它的过程并不轻松,特别是涉及到底层汇编的部分,因为此前并没有接触过关于汇编的知识。学习这门课之前对Linux更多的是安装与使用,对其内部结构构造以及运行原理等只是略有了解,感谢孟、李两位老师对这门课的详细热情的讲解,使我现在对这些部分也有了更深的认识。
标签:思考 字段 睡眠状态 系统调用 设备驱动 堆栈 trap 分配 崩溃
原文地址:https://www.cnblogs.com/shanhev/p/13268512.html