蓉杠学习网

linux内核代码学习教程交流,linux内核代码分析***详解

大家好,今天小编关注到一个比较意思的话题,就是关于linux内核代码学习教程交流的问题,于是小编就整理了3个相关介绍Linux内核代码学习教程交流的解答,让我们一起看看吧。

  1. Linux内核是如何创建线程的,它与windows有哪些不同?
  2. 关于linux内核原理的入门书籍有哪些值得推荐的?
  3. Linux是如何记录进程资源的?你能从C语言源代码层面分析下吗?

Linux内核是如何创建线程的,它与windows哪些不同

首先关于内核心进程创建,涉及到底层的东西,个人认为没必要太深入,了解他是怎么实现的就可了,如果确实要深入理解,那就得去看源码了。

1.Linux 进程创建:Linux继承了UNIX的进程创建方式,用的是fork API函数什么是fork呢,就是先clone然后分支,父子进程各干各的。

linux内核代码学习教程交流,linux内核代码分析视频详解div>
图片来源网络,侵删)

2.Windows

进程创建:windows没有fork,但是有CreateProcess这个API函数,用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件

关于linux内核原理入门书籍有哪些值得推荐的?

没必要看linux,除非你做linux开发,学习的话操作系统那本经典的用minix做范本的书才是精华,不过单看会觉得有点枯燥。***找本自己从头写一个操作系统之类的书,动动手会比较容易理解。基础打好后,再看linux内核的书,什么都可以,都不会感觉太难。操作系统基础在大学里面一般都会学,那么多年没什么太大变化,那个才是精华,一个学期是不够的,多看几遍,每年都能上升到一个新高度

谢小编邀。

linux内核代码学习教程交流,linux内核代码分析视频详解
(图片来源网络,侵删)

@云瑄软件回答的已经很全面了,他推荐的几本书都是内核入门经典中的经典。

我再推荐几本接触过好书:

《linux设备驱动程序》 Jonathan Corbet著,讲内核设备驱动开发,对内核抽象层次,设备原理讲的很细,还介绍了不少内核开发调试的技巧。

linux内核代码学习教程交流,linux内核代码分析视频详解
(图片来源网络,侵删)

《linux内核设计的艺术》中科院新设计团队著,这本书褒贬不一,但是书中对于一些内核的算法数据结构讲的很详细,对内核bootloader也讲了很多,对我帮助不少。

另外强烈推荐先过一遍《深入理解计算机系统》,这本书深入浅出,可以说是基本功中的基本功了。

最后的最后,如果想自己开发内核,推荐一个网站:osdev.org,这个网站几乎可以找到所有内核开发的资料。

共勉。

Linux是如何记录进程***的?你能从C语言源代码层面分析下吗?

谢邀。

其实简单来说,进程无非就是处于运行期的程序及其相关***的总和。这里读者应该注意“相关***”一词,Linux 在内核中是如何记录进程的***的呢?

首先应该明白,Linux 内核大都是***用C语言编写的,因此要弄清楚内核如何记录进程***,只需要查看相关的C语言代码就可以了。事实上,Linux 内核是使用 task_struct 结构体描述进程的***的,它的C语言部分代码如下,请看:

task_struct 结构体很长,在我手中的 Linux 内核C语言源代码中,它占用了280行。当然了,这其中包含很多条件编译部分,在 32 位机器上,task_struct 大约要占用 1.7 KB 的内存空间,不过考虑到它可以管理完整的进程,1.7kB 其实并不算大了。

鉴于 task_struct 结构体过长,这里不可能将其成员一一介绍清楚。如果读者和我一样好奇,粗略的浏览 task_struct 结构体,应该能够发现一些比较令人熟悉的成员,例如

[_a***_]C语言注释以及成员的变量名,能够看到 task_struct 结构体包含了文件系统,线程结构体,以及进程的文件等信息,这就与上一节文章的内容对应上了。其他成员在我之后的文章中会涉及到,这里暂不赘述。

在创建进程时,Linux 通过 slab 分配器分配 task_struct 结构,这样可以避免动态分配和释放带来的开销,提高内存的使用效率。

根据我手上的内核C语言源代码,Linux 中还有一个结构体 thread_info,它的其中一个成员 task 指针正好适合用于索引 task_struct 结构体,在X86_64平台上,thread_info 的相关C语言代码如下,请看:Linux 通常会在内核栈底或者栈顶保留 thread_info 结构,而内核栈通常大小都是可知的,因此每个进程都能方便的从自己的栈中找到 thread_info 结构,进而找到 task_struct 结构。

查找当前进程的 thread_info 结构,可以调用 current_thread_info() 函数,它的C语言代码如下,请看:

可见,current_thread_info() 函数其实就是通过进程栈计算的,因此它的实现与平台架构有关,上述C语言代码其实只是 arm 平台的实现方法,其他平台的实现方法,读者可自行查阅。

到此,以上就是小编对于linux内核代码学习教程交流的问题就介绍到这了,希望介绍关于linux内核代码学习教程交流的3点解答对大家有用。

[免责声明]本文来源于网络,不代表本站立场,如转载内容涉及版权等问题,请联系邮箱:83115484@qq.com,我们会予以删除相关文章,保证您的权利。 转载请注明出处:http://www.rongung.com/post/37056.html

分享:
扫描分享到社交APP