请您根据本课程所学内容总结梳理出一个精简的Linux系统概念模型,最大程度统摄整顿本课程及相关的知识信息,模型应该是逻辑上可以运转的、自洽的,并举例某一两个具体例子(比如读写文件、分配内存、使用I/O驱动某个硬件等)纳入模型中验证模型。谈谈您对课程的心得体会,改进建议等。出要求是发表一篇博客文章,长度不限,只谈自己的思考,严禁引用任何资料造成文章虚长。
老师很早就讲到过计算机的三大法宝:存储程序计算机,函数调用堆栈,中断。
在目前的冯·诺依曼体系结构计算机中,计算机分为五个部分:运算器、控制器、存储器、输入设备和输出设备,
函数调用堆栈:
中断分为外部中断和内中断,内中断又称为异常,包括故障和陷阱。
CPU处理中断的方式:
当执行了一条指令后,cs和eip这对寄存器包含 了下一条将要执行的指令的逻辑地址。 在执行这条指令之前,进入一个中断周期,CPU控制单元会检查在运行前一条指令时是否发生了一个中断或者异常。 如果发生了一个中断或异常,那么CPU控制单元执行下列操作
确定中断关联的向量i
读IDT表中的第i项
读取IDT表项所对应的段
中断是由授权的发生源发出的。
检查是否发生了特权级的变化,一般指是否由用户态陷入了内核态。如果是由用户态陷入了内核态,控制单元必须开 始使用与新的特权级相关的堆栈
在栈中保存eflags、cs和eip的内容
装载cs和eip寄存器
而且linux主要由四个部分:内核、shell、文件系统和应用程序
系统调用是将系统中的重要特权指令单独放到内核中,从而减少了因为应用程序员在缺乏对系统了解的情况下,造成整个系统的崩溃。
首先指令流执行到系统调用函数时,系统调用函数通过int 0x80指令进入系统调用入口程序,并且把系统调用号放入%eax中。进入系统调用入口程序(System_call)后,它首先把相关的寄存器压入内核堆栈(以备将来恢复),这个过程称为保护现场。保护现场的工作完成后,开始检查系统调用号是不是一个有效值,如果不是则退出。接下来根据系统调用号开始调用系统调用处理程序,从系统调用处理程序返回后,就会还原现场,从断点处继续执行之前的进程
这一部分主要分为进程进程状态,进程切换,进程撤销,进程创建,进程调度
进程状态
运行态,可运行态,僵死态,等待,暂停
每个线程创建了之后系统就为它创建了一结构体PCB,线程销毁,PCB也被销毁。PCB是进程存在的唯一标志,进程控制块PCB是名字为task_struct的数据结构,称为任务结构体。
linux系统为每个用户进程分配了两个栈:用户栈和内核栈。内核进程只有内核栈,没有用户栈。
进程切换
为了控制进程的执行,内核必须有能力挂起正在CPU 上执行的进程,并恢复以前挂起的某个进程的执行, 这叫做进程切换。它主要由两步完成:
- 切换页全局目录以安装一个新的地址空间
- 切换内核态堆栈和硬件上下文
被动撤销:内核有选择地强迫进程死掉。
Fork,vfork和clone系统调用创建新进程。以及exec系统调用执行一个新程序,以及
主要用于时间片的计时,进程运行时间。和操作系统的墙上时间,即显示的年月日具体。以及维持定时器
还有以下几点作用:
- 确定当前进程的执行时间,考虑是否需要抢占
- 更新资源使用统计情况
- 检查到期的软定时器
打开文件首先会产生一个中断(软中断),跳到中断处理程序。保存现场,解析int指令得到参数,以参数为索引,得到系统调用对应的项。随后执行系统调用对应的sys_open函数,创建一个新的系统文件表,即file对象,还有对应的fcb,然后将指针值放到打开文件表中,使其指向file对象,并返回fd。
系统以及可以通过fd找到file对象,调用file->file_operation中对应的函数,进行write,read操作
通过这门课,我了解了linux的大致框架,与linux的大致构成。需要完全熟悉这个庞然大物还需要在以后多下功夫,阅读源码,熟悉细节。我对这门课的建议是:老师由浅入深地为我们介绍了linux操作系统,深入底层源码,让我对操作系统的底层更加了解,如果可以的话,建议可以多些解读源码的课时,更加深入地了解linux的操作系统。
原文:https://www.cnblogs.com/yizhan-eventually/p/13276539.html