《Linux内核设计与实现》课程学习重点问题总结
(问题均是同学提出或是老师上课重点讲解的部分内容,根据自身理解和笔记总结出自己的答案。如有不对,还请指教。)
week2
【Q1】命令qemu -kernel 内核可执行文件 -initrd rootfs.img
在内核代码目录下有init,这是一个可执行文件,内含有C语言文件。
【Q2】编译内核的目的是什么?
为了生成符号表(即名称与地址的映射表)。
make config--->make bzImage
make module--->make module--->install--->make install
make all
week3
【课堂笔记】
1.MUU页式转换(虚拟地址--->物理地址)。
2.0号中断是除0错误。
3.硬中断:CPU出错,被动中断;软中断:异常,陷入,trap。
4.所有的驱动操作均在内核态。
5.操作系统的边界即是系统调用。
6.快速系统调用机制:sysenter/sysexit。
7.int指令流程:无运行级别切换;有运行级别切换
8.TSS:任务堆栈段。
9.Intel设计用来存放硬件上下文,实现任务切换。
10.系统调用过程:执行路径的切换、运行级别的切换
【Q1】所谓的打开中程序与关闭中断程序过程中的两种不同情况是指什么?
打开中断与关闭中断过程中涉及两种不同情况。即笔记中第7条提及的不同。什么是运行级别的切换呢?我认为就是在视频讲解中简单带过的“中断发生后的第一件事就是保存现场,结束前最后一件事就是恢复现场”、“发生进程调度”这部分内容。
老师上课提到的打开中断和关闭中断的两种情况应该是指硬中断与软中断的区别。视频中讲解总结如下:
SAVE_ALL
-...//内核代码,完成中断服务,进程调度
RESTORE_ALL
iret_pop cs:eip/ss:eip/eflags from kernel stack
如果并未发生进程调度,则直接往下执行restore_all;
如果发生了进程调度,则当前的这些状态都会暂时保存在系统内,在下次发生进程调度再切回到该进程时则往下执行restore_all。
结合上面知识来思考应该是这样的:
硬中断是CPU出错,因此相当于“停等”。如果执行过程中发生了硬中断,那么整个执行就“硬生生停下”,然后什么事也不干,此时就是“无运行级别切换”(老师所说),即“未发生进程调度”(视频所说),中断结束后,回过神来继续往下走刚才没做完的工作。
软中断相对应的,就是“发生了进程调度”,中断发生后,保存现场,然后处理进程,然后下次进程调度到自身时,恢复现场,继续往下执行。
【Q2】中断过程init前后分析
当init触发中断时,系统会根据init中断的中断号去查询中断向量表,获取产生的中断种类,然后找到处理该中断的中断处理程序,例如课程中我们所得的中断号是128(即十六进制数80处理系统调用中断),寻到中断处理程序中进行地址换算获得中断所对应的程序地址,根据先前在eax中存放的系统调用号查询系统调用表,然后找到该号系统调用对应的C代码程序执行实现该系统调用功能。
【Q3】虚拟地址、页式存储、物理地址三者关系
我们可以联想到操作系统中所说的“设备无关性”。这里也可以根据无关性来理解。
用户在操作计算机系统的时候其实只需要对虚拟地址,或说逻辑地址进行操作。而无需去对真正存放程序代码的地址、资源地址进行操作。而真正存放这些指令、数据的是物理地址,即绝对地址。在操作系统中运用页式存储数据。在用户进行操作时,操作系统中会自动完成地址映射、转换,通过页式存储、段式存储将虚拟地址转换为物理地址从而实现寻址。
【week4】
【Q1】如果经常为路径报错、文件报错而烦恼。怎么办?比如:遇到hello报错。即找不到怎么办?
应该在环境变量下加入运行文件的路径,即可在所有的路径下执行hello。
命令是:export $PATH=你要加入的文件的所在路径。
【Q2】如何给汇编代码设断点?
break 地址
【week5】
【Q1】若找不到文件,则是在哪里找不到文件呢?
若给出了全路径,则在全路径下找,若没有,则在当前目录下找。
【Q2】注意:
p->thread.ip的值会在调度时被压入新进程堆栈栈顶(esp寄存器),在执行完后再根据这个esp的值返回iret,返回到执行前的地方。
【week6】
【Q1】预处理后依旧是文本文件,文字替换的作用,将头文件递归加入。
汇编后的文件是文本文件,是ASCII码。
持续更新中....
《Linux内核设计与实现》课程学习重点问题总结的更多相关文章
- 《Linux内核设计与实现》学习记录一
chapter1 Linux内核简介 前言:Unix是一个具有相似应用程序编程接口(API)并且基于相似设计理念的操作系统家族. 1.1 Unix的历史 1.Unix演化版实现了任务管理.换页机制.T ...
- Linux内核设计第七周学习总结 Linux内核如何装载和启动一个可执行程序
陈巧然原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 实验目的 使用gdb跟踪s ...
- Linux内核设计第八周学习总结 理解进程调度时机跟踪分析进程调度与进程切换的过程
陈巧然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.视频内容 Linux ...
- Linux内核设计第六周学习总结 分析Linux内核创建一个新进程的过程
陈巧然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验过程 登陆实验楼 ...
- Linux内核设计第三周学习总结 跟踪分析Linux内核的启动过程
陈巧然 原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验步骤 登陆实验楼虚 ...
- Linux内核设计第五周学习总结 分析system_call中断处理过程
陈巧然原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 使用gdb跟踪分析一 ...
- 《Linux内核设计与实现》学习笔记之“Linux进程管理机制”
一.进程(或者称为“任务”)简介 进程是OS最基本的抽象之一,通常进程包括“可执行程序代码”,“其他资源”(如:打开的文件,挂起的信号,内核内部数据,处理器状态,地址空间,一个或多个执行线程等) 二. ...
- 《Linux内核设计与实现》学习总结 Chap4
第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有通过调度程序的合理调度,系统资源才能最大限 ...
- 《Linux内核设计与实现》学习总结 Chap1~2
第一章 Linux内核简介 一.历史 由于Unix系统设计简洁并且在发布时提供源代码,所以许多其他组织和团体都对它进了进一步的开发. Unⅸ虽然已经使用了40年,但计算机科学家仍然认为它是现存操作系统 ...
- 《Linux内核设计的艺术》学习笔记(一)从开机加电到加载三个汇编源码
实验内核版本:0.11 ◆ 从开机到main函数的三步: ① 启动BIOS,准备实模式下的中断向量表和中断服务程序: ② 从启动盘加载OS程序到内存中,加载OS程序的工作就是利用第一步中的中断服务 ...
随机推荐
- Hive安装与配置(靠谱亲测)
Hive是hadoop生态环境的组成之一.通过Hive,可以使得直接用SQL操作HDFS.最大的好处就是让熟悉SQL,但是不了解JAVA的数据分析师使用.其机制就是一个将SQL语言转化为MapRed ...
- Effective Java 41 Use overloading judiciously
The choice of which overloading to invoke is made at compile time. // Broken! - What does this progr ...
- 如何延长windows评估版的方法
在软件的开发测试,通常使用的是windows评估版本.但是有时候它的使用期限不满足你的需求.所以你可以用一下方法来延长评估版的时间. 延長使用期限 跟 Windows Server 2008 延長使用 ...
- oracle中replace、length、lengthb、substr、substrb函数
1.replacereplace(x,y,z)返回值为将字符串X中的Y串用Z串替换后的结果字符串. replace(x,y)返回值将字符串X中为Y串的地方删除例:epacel('aaabbb','bb ...
- MyCat 学习笔记 第六篇.数据分片 之 按月数据分片
1 应用场景 Mycat 有很多数据分库规则,接下来几篇就相关觉得常用的规则进行试用与总结. 一般来说,按自然月份来进行数据分片的规则比较适用于商城订单查询,类似最近1周.2周.3个月内的数据.或是报 ...
- 第1章 Java中常用字符串方法总结
1.1 charAt方法——提取指定字符 1.2 codePointAt方法——提取索引字符代码点 1.3 codePointBefore方法——获取索引前一个字符的代码点 1.4 codePoint ...
- 烂泥:LVM学习之KVM利用LVM快照备份与恢复虚拟机
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 最近一段时间一直在学习有关LVM逻辑卷方面的知识,前几篇文章介绍了有关LVM的逻辑卷的基本相关知识,包括逻辑卷及卷组的扩容与缩小.今天我们再来介绍LVM ...
- javascript特效实现(4)——当前时间和倒计时效果
这个效果的实现关键是对Date对象和setTimeout的使用. 一共有三个例子,HTML结构如下,就不添加CSS样式了. <body> 当前时间:<p id="p1&qu ...
- jenkins maven svn 部署web项目到本地Tomcat
查了N多网页,折腾了几个小时,终于部署成功,部署的过程比较坎坷,遇到各种问题,记录一下,不管大家是否会遇到的同样的问题,希望有所帮助: 常规操作: 1.下载jenkins,必须要做的一步,http:/ ...
- LINUX 用户’nobody’
1>Windows系统在安装后会自动建立一些用户帐户,在Linux系统中同样有一些用户帐户是在系统安装后就有的,就像Windows系统中的内置帐户一样. 2>它们是用来完成特定任务的,比如 ...