百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Linux内核原理到代码详解《内核视频教程》

off999 2025-09-19 01:10 65 浏览 0 评论


Linux内核原理-进程入门


进程

进程不仅仅是一段可执行程序的代码,通常进程还包括其他资源,比如打开的文件,挂起的信号,内核内部的数据结构,处理器状态,内存地址空间,或多个执行线程,存放全局变量的数据段等。线程是进程中活动的对象,每个线程都拥有一个独立的程序计数器,进程炸,和一组进程寄存器。内核调度的对象是线程,而不是进程。传统的Unix系统中一个进程只包含一个线程。对于linux而言,线程只不过是一种特殊的进程罢了。在linux系统中通过fork()来复制现有进程的资源和创建一个新的进程。随后调用exec这组函数创建自己的地址空间最后载入要运行的程序,在linux中fork其实是clone系统调用来实现。程序执行完毕后使用exit退出执行,父进程调用wait或waitpid来等待子进程结束,并回收其资源。

进程描述符及任务结构

在linux内核中,使用了一个task_struct结构体来描述进程信息,并且通过双向循环链表将所有的进程连接起来。一个task_struct描述了进程打开文件信息,状态信息,地址空间信息,挂起的信号,进程的状态等等。

进程之间的关联如下图:


进程描述符的分配

在linux中进程描述符task_struct是通过slab分配器来进行分配的,这样可以达到对象复用和缓存着色的效果。task_struct这个结构体本身就很大,这个结构体在内核中会不断的进行分配和释放,这样很不高效,使用了salb分配器后只需要进行分配释放是没有开销的,slab释放了task_struct只是放在其对象池中,并没有真正释放。然后在2.6内核之前,task_struct的分配和释放不是通过slab分配器,而是直接放在内核栈的栈底,这样就可以通过栈顶指针很快的计算出task_struct的地址,因为在内核中task_struct是最经常要访问的数据结构,所以需要一个机制很快的获取当前进程的task_struct结构体的地址,在x86这种体系结构中,因为寄存器的缺乏没有独立的寄存器用来存放task_struct的地址,所以就通过这种方式来快速计算,在PowerPC系列的计算机中则是使用一个寄存器来存放task_struct的地址。在2.6内核后为了避免动态内存分配和释放所带来的资源消耗,采用了slab分配器来管理task_struct结构体,但是为了快速计算task_struct的地址,linux在栈低存放了一个thread_info结构 在这个结构中第一个元素就是当前的task_struct地址,这样就可以很快的计算出task_strcut的地址,并且task_struct交由slab分配器来管理,可以避免资源消耗。

获得thread_info地址的方法




下面是进程内核栈的图示:



进程的状态

在task_struct中的state字段表示的就是进程的状态



在这里使用了volatile来修饰state变量,主要是因为state需要实时从内存访问最新的值,而不是读取寄存器中的这个值默认gcc会对其进

行优化,将state的值读入寄存器,每次访问寄存器中值,但是在多线程的环境中,state的值随时可能会改变,所以加入了volatile来修

饰。从注释可以看出 state有三个值,-1 0 或者大于0,分别表示不可运行,就绪,停止,对于停止又细分出很多种,可以看下内核中对进程状态的定义:



进程状态转化如下图:



,,内核中一些操作进程状态的函数:


注:对于内存屏障可以参考这篇博文,更多关于内存屏障的知识可以谷歌

进程的上下文

所谓的进程上下文其实就是进程的当前状态,一组状态数据而已,在进程切换的时候,保存当前进程的数据,载入要切换进程的数据,这样就可以实现进程的切换。状态数据通常包含CPU所有寄存器的值,进程的状态,堆栈中的内容等等。



内核页表和进程页表,每个进程都有自己的页表,放在task_struct.pgd中,内核页表放在init_mm.pgd在保护模式下,从硬件角度看,其运行的基本对象为”进程”(或线程,而寻址则依赖于”进程页表”,在进程调度而进行上下文切换时,会进行页表的切换:即将新进程的pgd(页目录)加载到CR3寄存器中。内核页表中的内容为所有进程共享,每个进程都有自己的”进程页表”,”进程页表”中映射的线性地址包括两部分:用户态,内核态.其中内核态地址对应的相关页表项,对于所有进程来说都是相同的(因为内核空间对所有进程来说都是共享的),而这部分页表内容其实就来源于”内核页表”,即每个进程的”进程页表”中内核态地址相关的页表项都是“内核页表”的一个拷贝。

Linux内核代码详解,。早期的Linux内核引导代码只有bootsect.s、setup.s、head.s这3个文件,这三个文件都是Linus在1991年左右亲手写的。后来的代码虽然进行了加固,但是原型还是这几个。

Linux内核源代码

1. 首先要查看内核版本号:

【root@localhost ~】# uname -r // 查看内核版本号或者uname –a

如果是RHEL5的话内核应该是 2.6.18-8.el5xen

2. 已经知道自己的内核是“2.6.18-8.el5xen”,可以去此网站


http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.8.tar.gz 下载到符合自己系统的内核源码。

3. 用【root@localhost ~】#tar zxvf linux-2.6.16.8.tar.gz -C /usr/src

将文件解压到指定目录/usr/src。

4. 进入/usr/src目录下,用【root@localhost ~】#mv linux-2.6.18.8 linux将解压好的文件夹名“linux-2.6.18.8”改变成“linux”。

5. 进入/usr/src/linux目录下。分别运行:

make mrproper

make oldconfig

make

执行第二个命令时碰到提示一路回车就行,第三个命令如果要完全执行完的话,可能会需要几个小时,最好让它编译完毕之后,再装虚拟机工具。如果在make刚开始执行时,即使生成了version.h和utsrelease.h,若按Ctrl+C强行退出编译。在安装完VM-ware Tools后,很可能导致系统无法正常启动。

6. 编译完毕后,进入
/usr/src/linux/include/linux,用【root@localhost ~】#vi utsrelease.h (按i是插入,修改完后按Esc,然后按Shift+:,输入wq!按回车,修改完毕可以用#more utsrelease.h查看是否修改成功)将里面的版本号改成2.6.18-8.el5xen。

同上再修改version.h,在原来的基础上增加一行#define UTS_RELEASE "2.6.18-8.el5xen",保存退出。

7. 重新启动系统,如果不重启,在安装VM-ware Tools后可能会碰到一些问题

8. 重启后就可以正常安装VM-ware Tools了。

9. 假如要改变分辨率,运行
/usr/bin/vmware-config-tools.pl即可修改。


总结;关注+后台私信:资料”可免费领取 资料内容包括:C/C++,Linux,golang,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,WebRTC,ffmpeg 嵌入式 等

相关推荐

浏览器最好用的(浏览器最好用的插件)

一、谷歌浏览器谷歌浏览器是公认最好用的,这个可以从市场占有率看出端倪,超过三分之二的用户使用谷歌浏览器。Chrome浏览器以简洁快速著称,不管是普通用户还是开发人员,chrome浏览器都是首选。Chr...

fast路由器6位初始密码(fast路由器的密码)

答:fast路由器初始密码是admin;新款的迅捷无线路由器,管理界面没有初始密码。查看迅捷无线路由器底部标签,标签上标注了admin,说明初始密码就是admin;如果没有,说明该路由器没有初始密码。...

硬盘恢复软件哪个好(硬盘 恢复软件)

迷你兔数据恢复工具:支持恢复硬盘丢失的数据Pc3000数据恢复软件是一款非常专业的硬盘修复工具,能够对电脑硬盘资料数据进行修复,通过使用这个软件可以解决硬盘数据丢失故障,是一个用户进行硬盘资料修复好帮...

十大品牌监控摄像头排名(十大品牌监控摄像头排名第一)

答:1、华为/HUAWEI9.92、小米/MI9.63、罗技/Logitech9.64、海康威视/HIKVISION9.25、乔安/Jooan9.26、普联/TP-LINK9.27、乐橙8.98、萤石...

360手机助手老旧版本大全(360手机助手 老版本)

在设置里面找到历史记录就可能查看360手机助手·换机神器是安卓系统的换机软件,因为苹果的换机软件是爱思。1、打开360手机卫士,登陆账号,点击账号。2、进入个人中心,点击账户安全,在密保工具中,点击解...

系统应用工程师(系统工程的应用)

信息软件系统工程师有前途,毕业以后可以从事软件开发,软件系统的维护,运营等等,和计算机有关的工作内容,因为计算机专业可以说是一个非常热门的专业,很多的大型企业公司基本上都是以计算机研发为主的,薪资福利...

qq恢复系统常见问题(qq恢复系统常见问题及答案)

QQ好友恢复系统一直显示服务器频繁有可能是系统的问题,你的qq重新更新一下,或者你卸载了重新下载一下就有可能好了。您好,很高兴为您解答:您可以试试清空下IE内存,然后关掉不必要的程序,尽量在电脑运...

win10自带的office不见了(win10自带的office在哪个文件夹)

win10系统的office在电脑硬盘office的安装目录里,具体打开安装目录的操作如下:1、首先我们右键点击word,打开方式,选择默认程序打开。2、在默认框打钩,点击【浏览】。3、打开你安装of...

华为官网序列号查询入口(华为官网序列号查询入口手写笔)
  • 华为官网序列号查询入口(华为官网序列号查询入口手写笔)
  • 华为官网序列号查询入口(华为官网序列号查询入口手写笔)
  • 华为官网序列号查询入口(华为官网序列号查询入口手写笔)
  • 华为官网序列号查询入口(华为官网序列号查询入口手写笔)
手机主题美化包(手机主题美化包下载)
  • 手机主题美化包(手机主题美化包下载)
  • 手机主题美化包(手机主题美化包下载)
  • 手机主题美化包(手机主题美化包下载)
  • 手机主题美化包(手机主题美化包下载)
w10系统我的电脑在哪里(windows10 我的电脑在哪)

首先,打开Windows10系统,可以看到当前桌面上没有“我的电脑”。二、然后,在桌面上鼠标右键都加空白处,在右键菜单中选择“个性化”,点击打开。三、然后,在窗口中左侧选择“更改桌面图标”,点击打开。...

2500电脑组装最强配置(2500左右组装电脑主机配置清单)

两千五百元组装电脑,但配置只能是一般。台式机分为主机和显示器两个主体,按这个价格,显示器只能配置一般的,大约两百多元价格,其余都用来组装主机,主机包含机箱,电源,排风扇,电脑主板及内存,电脑处理器,声...

小米手机定时关机怎么设置(如何让小米手机定时关机)
小米手机定时关机怎么设置(如何让小米手机定时关机)

1、从设置菜单中找到电池与性能选项。      2、选择电池版块,点击定时开关机。      3、将定时开机右边的按钮开...

2025-12-28 02:51 off999

磁盘删除的文件怎么恢复(磁盘误删怎么恢复)

可以恢复,因为删除文件时,其实只是把表头删除了,后面的数据并没有删除,直到下一次进行写磁盘操作需要占用节点所在位置时,才会把相应的数据覆盖掉。所以,就算你误删了文件之后又进行了其他写磁盘操作,只要没有...

qq自动回复内容古风(qq自动回复古文)
qq自动回复内容古风(qq自动回复古文)

1、抽剑相助,搭救无辜,却引来杀身之祸。那女子故作柔弱,假装爱慕,只为那本剑谱。2、只缘感君一回顾,使我思君朝与暮。3、相知相惜若可谓缘,不负韶华年。4、看那天地日月,恒静无言;青山长河,世代绵延;就像在我心中,你从未离去,也从未改变。5、...

2025-12-28 01:51 off999

取消回复欢迎 发表评论: