20169212《Linux内核原理与分析》第三周作业

时间:2023-03-09 01:55:31
20169212《Linux内核原理与分析》第三周作业

最近,深入的阅读了《Linux内核设计与实现》这本书,以下是碰到的一些问题,在此和大家进行交流学习。

碰到的问题

1.为什么不要在linux内核中使用浮点数(这个问题由于书上讲的不够明白,所以导致自己不能理解,去参考别的资料才弄懂)

浮点的编码跟整数编码是不一样的,计算时需要专门的寄存器和浮点计算单元来处理,一个浮点运算指令使用的CPU周期也更长。因此对于内核来说就会想尽量回避浮点数运算,譬如说浮点数经过定点整数转换后进行运算,效率会高很多,即使CPU带有浮点数运算部件,一般内核还是要避免直接进行浮点数运算,因为这些部件有可能被用户进程占用了,内核要判断这些浮点数部件是否被占用,保护现场,然后用浮点运算部件计算结果,恢复现场,开销会很大。如果CPU不支持浮点数运算,也就只能软件实现浮点数运算,要是你设计内核的话,相比起多做额外功夫(写浮点数实现代码)并且使得内核的效率不高,大家更加情愿避免这个问题。

2.为什么内核的栈那么小,而用户栈却很大而且还可以动态增长?栈的大小规定为4KB,8KB是否是人为规定?

未解决

3.关于Ubuntu下启用root用户的问题

虽然知道Ubuntu下root账户是默认禁止的,但是一想到要在那么多命令下前面每条加入sudo就不痛快,所以想着启用root账户。 首先设置root密码,利用现有管理员帐户在终端执行命令:

sudo  passwd root

接着输入密码和root密码,重复密码。于是我们就可以通过

su - root

命令来使用root账户登录了(这里需要注意一点的是,带参数-是为了带入登录者的环境变量和工作目录,不带-也是可以的,不过我觉得应该会碰到一些莫名其妙的问题,稳妥起见,我觉得一般加上-或者-l比较好)下面这张图是有无参数的区别:

20169212《Linux内核原理与分析》第三周作业

可以明显看出不带参数-用root登录之后的工作目录仍是之前用户的工作目录。

4.因为刚刚接触内核这一块,从来没有配置过内核,所以也不知道哪些需要用到哪些不用用到,所以下载了最新版本的内核并没有自己去个性化的配置以及编译,而且书上写了Ubuntu的发布版中包含了预编译的内核,那对于我们新手来讲,是否有还需要再编译一遍内核的必要呢?书上讲了三种编译方式,看完了觉得make defconfig是新手最容易上手的创建配置命令,但是这样做了跟用发行版本身的预编译没什么差别,于是便没有再去创建自己的配置而后编译。而且,书上还讲了在内核代码树的根目录下有一个.config的文件,保存了当前的配置信息,那么我觉得随着自己的深入学习以后再来更改,不知道是否可以?进到相关目录查看了下,发现里面有一个Kconfig的文件,里面内容很少,如图

20169212《Linux内核原理与分析》第三周作业

但是好像指向了另一个目录source "arch/$SEARCH/Kconfig",在这里并没有发现$SEARCH文件夹,在arch里直接看到了Kconfig文件

20169212《Linux内核原理与分析》第三周作业

这个文件里内容比较多,应该是配置文件。这里不是很懂,需要老师指导。