蓉杠学习网

linux源码怎么学习,linux源码讲解

大家好,今天小编关注到一个比较意思的话题,就是关于linux源码怎么学习的问题,于是小编就整理了4个相关介绍Linux源码怎么学习的解答,让我们一起看看吧。

  1. linux系统入门基础知识?
  2. 如何更深入地学习Linux?
  3. 看linux内核源码对初期学习C语言有多大帮助?推荐一个版本的内核源码?
  4. Linux是如何记录进程资源的?你能从C语言源代码层面分析下吗?

linux系统入门基础知识

Linux 是一种自由、开放源代码的 Unix 操作系统,它具有稳定性、安全性和灵活性等优点,成为了许多服务器系统和开发工作站的首选系统。

入门基础主要包括命令界面文件系统、用户权限管理软件管理、网络配置等。

首先要学习基本的命令行操作,如查看目录创建文件、移动文件等。

其次要掌握文件系统,包括文件系统的类型、目录结构等;并能够正确的管理用户和权限。

最后要学习软件管理,包括包管理工具使用安装软件的方法等。

如何更深入地学习Linux?

第一步 你可以尝试编译自己的linux系统。有一个发行版叫做 LFS,linux from scratch. 就是一个一步一步从源码最终编译成自己的linux的项目。编译过程中你可以按照你的喜好自己任意修改

LFS官方网站上的手册教程,可以学到很多linux知识,不过是全英文的。

第二 书店里有各种linux内核的教程,可以买来一读。

第三 没有任何方法比学习linux源码更好的方法了。 上kernel.org 或者用git clone linux内核源码,慢慢啃去吧。

看linux内核源码对初期学习C语言有多大帮助?推荐一个版本的内核源码?

老实说对于初期学习c语言还是别看linux内核源码了,因为内核非常庞大,涉及到相当多c语言以外的知识,比如汇编音频视频计算机系统,数据结构等等。c语言初学者看源码会觉得很艰难,因为基础还很薄弱,对于c语言提升的帮助十分有限。如果你以后有志于参与内核开发或者对内核感兴趣,推荐你看一看《linux内核设计实现》,这本书介绍了内核基本设计思想,又不涉及过多的源码分析,看完能够大概的了解linux内核。内核版本的话还是推荐2.6,内核更新非常快,但资料更新跟不上,现在市面上大部分内核分析的书都是基于2.6的。不过内核最重要的是理解设计思想,弄明白2.6就能很快的熟悉4.x的内核了。

一般还是工作中需要才会才会分析相关的内核源代码,因为看起来真的是枯燥:)

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

谢邀。

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

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

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

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

通过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源码怎么学习的4点解答对大家有用。

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

分享:
扫描分享到社交APP