第九周的实验依旧和往常的一样,主要包括两部分。一是1.阅读学习教材「Linux内核设计与实现 (Linux Kernel Development)」第教材第13,14章。二是学习MOOC「Linux内核分析」第七讲「Linux内核的实质和Linux系统的一般执行过程」,并完成实验楼上配套实验。

然后我们开始这周的实验,首先通过本科的一些学习操作系统中的进程调度算法,但这些算法只是在选择的过程中用了不同的策略而已,对于理解操作系统的工作机制,反而是进程的调度时机与进程的切换机制更为关键。而我们接下来就去了解进程的调度机制和切换机制。

进程调度的时机


•中断处理过程(包括时钟中断、I/O中断、系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule()
•内核线程可以直接调用schedule()进行进程切换,也可以在中断处理过程中进行调度,也就是说内核线程作为一类的特殊的进程可以主动调度,也可以被动调度
•用户态进程无法实现主动调度,仅能通过陷入内核态后的某个时机点进行调度,即在中断处理过程中进行调度。

进程的切换


•为了控制进程的执行,内核必须有能力挂起正在CPU上执行的进程,并恢复以前挂起的某个进程的执行,这叫做进程切换、任务切换、上下文切换; •挂起正在CPU上执行的进程,与中断时保存现场是不同的,中断前后是在同一个进程上下文中,只是由用户态转向内核态执行; •进程上下文包含了进程执行需要的所有信息 •用户地址空间:包括程序代码,数据,用户堆栈等 •控制信息:进程描述符,内核堆栈等 •硬件上下文(注意中断也要保存硬件上下文只是保存的方法不同) •schedule()函数选择一个新的进程来运行,并调用context_switch进行上下文的切换,这个宏调用switch_to来进行关键上下文切换 •next = pick_next_task(rq, prev);//进程调度算法都封装这个函数内部 •context_switch(rq, prev, next);//进程上下文切换 •switch_to利用了prev和next两个参数:prev指向当前进程,next指向被调度的进程.

不同类型的进程又不同的调度需求。

第一种分类:

-I/O-bound

1.频繁的进行I/O

2.通常会花费很多时间等待I/O操作的完成

-CPU-bound

1.计算密集型

2.需要大量的CPU时间进行运算

第二种分类

-批处理进程

1.不必与用户交互,通常在后台运行

2.不必快速响应

3.典型的批处理程序:编译程序,科学计算

-实时进程

1.有实时需求,不应被低优先级的进程阻塞

2.响应时间要短,要稳定

3.典型的实时进程:视频/音频,机械控制等

-交互式进程

1.需要经常与用户交互,因此要花很多时间等待用户输入操作

2.响应时间要快,平均延迟要低于10~150ms

3.典型的交互式程序:shell,文本编辑程序,图形应用程序等

schedule()函数负责调度程序.

这里分析其中最简单也是最复杂的命令---ls


1.在控制台下输入ls命令->为什么我们敲击键盘就会在终端上显示?
这里涉及到I/o终端,我们敲击后会形成一个I/o中断,系统会把当前运行的程序给中断了,然后需要在控制台上打印我们需要的信息。
2.shell程序分析输入参数,确定这是什么命令->什么是shell->终端解释程序
3.调用系统调用fork生成一个shell本身的拷贝->什么是系统调用?
内存保护,内核态用户态的相关问题。系统调用时怎么实现的?软中断,异常的概念。陷阱门,系统门。
fork是什么?为什么要调用fork?进程的描述,进程的创建。cow技术(写时复制技术)。
4.调用exec系统调用将ls的可执行文件装入内存。->内存管理模块,进程的地址空间,分页机制,文件系统,可执行文件格式如ELF。
5.系统调用返回->返回的位置,如何做到正确的返回,修改了exec的系统调用。
堆栈的维护,寄存器的保存与恢复。
6.shell和ls都得以执行->进程的调度,运行队列等待队列的维护。

第二部分是关于课本知识的掌握。第十三章的虚拟文件系统,Unix使用了四种和文件系统相关的传统抽象概念:文件,目录项,索引节点和安装点。

VFS中有四个主要的对象类型,他们分别是:


1.超级块对象,它代表一个具体的已安装文件系统。
2.索引节点对象,它代表一个具体文件。
3.目录项文件,他代表一个目录项,是路径的一个组成部分。
4.文件对象,他代表由进程打开的文件。

目录项对象有三种状态:被使用,未被使用和服状态。

目录项缓存包含三个主要部分:

1.“被使用的”目录项链表。该链表通过索引节点对象中的I_dentry项连接相关的索引节点,因为一个给定的索引节点可能有多个链接,所以就可能有多个目录项对象,因此用一个链表来链接他们。

2.“最近被使用的”双向链表。该链表含有未被使用的和负状态的目录项对象。

3.散列表和相应的散列函数用来快速地将给定路径解析为相应目录项对象。

第十三章主要讨论了各种数据结构,包括最重要的索引节点,目录项以及超级块对象。第十四章学习了块设备的相关知识,i/o层所用的数据结构:bio,表示活动的I/O擦皮做;buffer——head,表示块到页的映射:还有请求结构,表示具体的I/o请求。

心得体会:

学了这么长时间的Linux,对linux的操作,应用以及内部应用的运行过程有了一个清晰的认识,在以后的学习中,要利用学习Linux时的方法,有些东西光看了不行,还需要动手去做,在实践中发现问题并解决问题。这样才能有长足的进步。

20169207《Linux内核原理与分析》第九周作业的更多相关文章

  1. 2019-2020-1 20199303<Linux内核原理与分析>第二周作业

    2019-2020-1 20199303第二周作业 1.汇编与寄存器的学习 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中 ...

  2. 20169219 linux内核原理与分析第二周作业

    "linux内核分析"的第一讲主要讲了计算机的体系结构,和各寄存器之间对数据的处理过程. 通用寄存器 AX:累加器 BX:基地址寄存器 CX:计数寄存器 DX:数据寄存器 BP:堆 ...

  3. 2019-2020-1 20199314 <Linux内核原理与分析>第二周作业

    1.基础学习内容 1.1 冯诺依曼体系结构 计算机由控制器.运算器.存储器.输入设备.输出设备五部分组成. 1.1.1 冯诺依曼计算机特点 (1)采用存储程序方式,指令和数据不加区别混合存储在同一个存 ...

  4. Linux内核原理与分析-第一周作业

    本科期间,学校开设过linux相关的课程,当时的学习方式主要以课堂听授为主.虽然老师也提供了相关的学习教材跟参考材料,但是整体学下来感觉收获并不是太大,现在回想起来,主要还是由于自己课下没有及时动手实 ...

  5. 2019-2020-1 20199314 <Linux内核原理与分析>第一周作业

    前言 本周对实验楼的Linux基础入门进行了学习,目前学习到实验九完成到挑战二. 学习和实验内容 快速学习了Linux系统的发展历程及其简介,学习了下的变量.用户权限管理.文件打包及压缩.常用命令的和 ...

  6. Linux内核原理与分析-第二周作业

    写之前回看了一遍秒速五厘米:如果

  7. 2020-2021-1 20209307 《Linux内核原理与分析》第九周作业

    这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)> 这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第九周作业> 这个作业的目标 & ...

  8. 2018-2019-1 20189221《Linux内核原理与分析》第一周作业

    Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...

  9. 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...

  10. 20169207《Linux内核原理及分析》第十三周作业

    第一周作业::对Linux的基本知识进行了了解,并对基本操作进行熟悉和应用. 第二周作业::了解了冯诺依曼体系结构.各种寄存器的功能和汇编指令的作用和功能. 第三周作业::这周主要了解了Linux系统 ...

随机推荐

  1. c#异步等待

    1:一直等待 2方法  现实等待 3:方法    带返回值得 begin -endinvoke 4: func 带返回值

  2. Liunx Pwd

    Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ...

  3. (转)在WCF服务的ServiceReferences.ClientConfig中使用相对路径

    问题: Silverlight项目中添加服务引用后会在Silverlight项目中生成一个ServiceReferences.ClientConfig文件,这个文件中包含了引用服务的绑定(bindin ...

  4. guide dpdk

    Welcome to DPDK Guide! Contents: Setting up DPDK Important Prerequisites Setting up repositories Red ...

  5. 各种平台的表达芯片跟mRNA-seq数据比较

    各种平台的表达芯片跟mRNA-seq数据比较 RNA-Seq 表达谱 芯片数据分析 文章见:http://journals.plos.org/plosone ... ournal.pone.00786 ...

  6. UI设计初学者教程:色彩基础知识

    编辑:千锋UI设计 初学设计都会先认识三原色,通常我们说的三原色指的是颜料三原色:红.黄.蓝:其实三原色还有色光三原色:红.绿.蓝.我们通常说的红黄蓝就是减色法三原色,而红绿蓝是加色法三原色.可能这么 ...

  7. [SoapUI] 判断工程下某个文件是否存在,存在就删除

    def excelName = "AllTests-Fails" String projectPath = context.expand( '${projectDir}' ) St ...

  8. Spring 注解驱动(二)Servlet 3.0 注解驱动在 Spring MVC 中的应用

    Spring 注解驱动(二)Servlet 3.0 注解驱动在 Spring MVC 中的应用 Spring 系列目录(https://www.cnblogs.com/binarylei/p/1019 ...

  9. Sketch 和 PS中的设计图如何实现“自动切图”?

    切图是很多UI设计师的一项日常工作.平时做完设计图,要将设计稿切成便于制作成页面的图片,并标注好尺寸和间距,交付给前端来完成html+css布局的静态页面,有利于交互,形成良好的视觉感. 但有的认为前 ...

  10. sqlserver sql 循环

    通过临时表进行sql循环 -----------创建临时表-------------- SELECT * INTO #tempfensitocity FROM( SELECT * FROM dbo.S ...