Linux概念模型:
1.基础
首先我们学习了在Linux的一些基础知识,包括冯诺依曼体系结构的计算机的概念和它的组成,明白了什么是存储程序。
然后学习了Linux的常用的命令,如ls命令,cd命令,pwd命令,find命令等
还学习了汇编语言的基础,包括CPU寄存器,汇编语法,还分析了完整的汇编程序,如函数调用返回,进程的切换。
2.进程
在进程学习中,学习了进程的数据结构PCB,进程的创建,进程调度的时机,还有进程调度的机制。
对于linux进程的调度分析:
Linux基于优先级调度,并在优先级调度基础上使用时间片轮转和先进先出调度。Linux使用动态优先级,调度程序周期性调整它们的优先级,避免进程饥饿(动态优先级,根据进程本次切入与上次切出的时间戳,求得等待时间,时间太长会适当增加优先级)。Linux的进程分为实时进程和普通进程,实时进程的优级高于普通进程。
每个CPU有一个可运行队列,在可运行队列中,同一优先级的进程链接到同一个链装,用各链表按优先级序号排列,各链表头指向位图。位图中每位代表对应链表是否为空。可运行队列分为活期队列与过期队列,进程只会在活动队列中运行。进程调度时,系统查看位图。找出活动队引中优先级最高的链表,取链表头的进程运行。若进程为实时进程,且基于时间片轮转调度,当时间片用完后,此进程放入活动队列对应链表的尾部;若进程为实时进程且基于先进先出调度,则一直运行这个进程,直到进程主动放弃cpu或有更高优先级的进程打断。而对于普通进程,若是交互进程,则与基于时间片的实时进程一样,时间片用完后放入活动队列对应链表的尾部;若是批处理进程,时间片用完后放入过期队列对应链表的尾部。
那么过期队列中的进程什么时候会有运行的机会呢?
(1)当活动队列中的进程都运行完,活动队列空,会将过期队列拷贝到活动队列中
(2)或者当过期队列中最古老的进程已经很久未运行,也会发生迁移。
(3)当过期队引中优先级最高的进程的优发级高于当前进程,也会发生迁移。
3.中断
在中断学习中,我学习了中断的类型,分为外部中断和内中断,内中断又称为异常,包括故障和陷阱。
发生外部中断后,Linux的处理过程分为四步:
(1)保存现场
(2)给外部中断控制器应答
(3)根据中断号找到对应的中断处理程序执行
(4)中断退出程序退出
还学习了每一个步骤中Linux调用了那些函数,执行哪些指令,寄存器的值如何变化。
当发生故障和陷阱,Linux又是如何处理,还有Linux是如何初始化中断描述符表的等知识
4.文件
在文件学习中,我学习了根文件系统的挂载流程,还有对文件的操作,文件打开,文件读写。
open函数执行打开文件的完整过程:(从软中断,到系统调用,到open函数具体实现)
首先会产生一个软中断,跳到软中断处理函数。软中断处理函数保存现场,解析int指令得到参数,以参数为索引,得到系统调用对应项。
执行系统调用对应的sys_open函数,创建一个新的系统文件打开表,即file对象,再在进程打开文件表中找到一个空的位置,赋指针值,使其指向file对象,并返回索引号fd。
之后用户可以通过fd找到file对象,调用file->file_operation中对应的函数,进行write,read操作。
总结
这学期,老师由浅入深,由基础到高级,结合内核代码,生动的讲解了Linux操作系统的各个部分,在学习过程中,因为对汇编语言不熟悉,所以遇到了很多困难,但是都一一克服了。
老师的讲解十分细致,不厌其烦的解释代码,反复确认生怕我们没有听懂,我觉得十分感动。
Linux博大精深,要精通需要花费很多精力,但这都是值得的,努力学习才能有所收获,才能有所成长。