系统调用fork()在powerpc上的源码分析
总结一句话:系统调用的本质,通过sc指令触发异常,完成用户态到内核的转换。
展开一些:应用程序调用fork(),fork()是一个glibc函数,该函数的最底层调用sc指令,触发cpu异常,从而完成从用户态到内核态的切换,
内核:在异常处理中完成fork()的内核态处理,然后通过rfi指令返回到用户态。
一、用户态代码分析(glibc代码库)
1、fork()定义:
文件:fork.c (sysdeps\nptl)

可见,fork 是一个别名,其函数原本是__libc_fork(),看这个函数的定义,
2、__libc_fork()定义:
文件:同上

。。。。。。 (函数较长)
经过分析,不同cpu进入内核态的软中断指令是不一样的,所以,一定会有和cpu有关的定义。果然,如下,
从源码上可以看出,如果没定义ARCH_FORK宏,系统会报错的。

3、powerpc的ARCH_FORK()宏定义
文件:arch-fork.h (sysdeps\unix\sysv\linux\powerpc)
此文件中就只有一行代码。竟然是包含x86的源码文件。

x86的源码如下:
文件:arch-fork.h (sysdeps\unix\sysv\linux\i386)

4、INLINE_SYSCALL的定义:
文件:sysdep.h (sysdeps\unix\sysv\linux\powerpc\powerpc32)

5、INTERNAL_SYSCALL的定义:
文件:同上

__NR_##name 是一种编程技巧,两个#表示把前后粘贴在一起,其实这个宏就是 __NR_clone
6、__NR_clone宏定义
文件:clone.S (sysdeps\unix\sysv\linux\i386)

7、INTERNAL_SYSCALL_NCS 宏定义
文件:sysdep.h (sysdeps\unix\sysv\linux\powerpc\powerpc32)

8、准备参数 LOADARGS_5
文件:sysdep.h (sysdeps\unix\sysv\linux\powerpc\powerpc32)

从这个代码看,核心思想是,将120这个数字填入r0,这个是系统调用号,后面的r3,r4,r5,r6,r7就是参数
9、软中断汇编指令sc,触发系统异常
芯片资料上的描述如下:

二、内核处理:(Linux 2.6.32源码)
1、ppc_clone()异常处理入口:
文件:entry_32.S (arch\powerpc\kernel)
内容:

2、sys_clone的定义:
文件:process.c (arch\powerpc\kernel)
内容:

3、do_fork()函数实现:
文件:fork.c (kernel)
内容:

。。。。。。(内容较长)
4、从异常处理中返回 RFI
文件:ppc_asm.h (arch\powerpc\include\asm)
内容:

系统调用fork()在powerpc上的源码分析的更多相关文章
- Spring5.x源码分析 | 从踩坑到放弃之环境搭建
Spring5.x源码分析--从踩坑到放弃之环境搭建 前言 自从Spring发行4.x后,很久没去好好看过Spring源码了,加上最近半年工作都是偏管理和参与设计为主,在技术细节上或多或少有点疏忽,最 ...
- java使用websocket,并且获取HttpSession,源码分析
转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...
- Android源码分析—深入认识AsyncTask内部机制
本文转载http://blog.csdn.net/singwhatiwanna/article/details/17596225该博主博文,谢谢该博主提供的好文章! 前言 什么是AsyncTask,相 ...
- 死磕 java集合之SynchronousQueue源码分析
问题 (1)SynchronousQueue的实现方式? (2)SynchronousQueue真的是无缓冲的吗? (3)SynchronousQueue在高并发情景下会有什么问题? 简介 Synch ...
- ranch 源码分析(完)
接上 ranch 源码分析(三) 在上一次,根据ranch源码把大概流程理了一遍,下面我们将一些细节解释一下. ranch只是一个服务的框架,它提供了传输层协议代码(ranch_tcp 和ranch_ ...
- ranch 源码分析(三)
接上ranch 源码分析(二) 上次讲到了ranch_conns_sup和ranch_acceptors_sup这2个ranch的核心模块,我们接着分析 首先查看ranch_conns_sup.erl ...
- ranch 源码分析(二)
接上ranch 源码分析(一) 上次讲到了ranch.erl的start_listener函数,下面我们详细分析下这个函数 -module(ranch). %...... 省略若干行 -spec st ...
- 【异常及源码分析】org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping
一.异常出现的场景 1)异常出现的SQL @Select("SELECT\n" + " id,discount_type ,min_charge, ${cardFee} ...
- Spring IOC 容器源码分析 - 填充属性到 bean 原始对象
1. 简介 本篇文章,我们来一起了解一下 Spring 是如何将配置文件中的属性值填充到 bean 对象中的.我在前面几篇文章中介绍过 Spring 创建 bean 的流程,即 Spring 先通过反 ...
随机推荐
- js控制全屏及退出全屏
js控制全屏及退出全屏,网上很多代码例子,我这里需求和标准的有点出入: 1.当用户点击某按钮,触发iframe下的页面全屏. 2.不允许用户退出全屏. 解决第一点,触发全屏可以按照网上的例子,代码如下 ...
- psnr的定义和python实现
psnr是“Peak Signal to Noise Ratio”的缩写,即峰值信噪比,是一种评价图像的客观标准,它具有局限性,一般是用于最大值信号和背景噪音之间的一个工程项目. peak的中文意思是 ...
- 机器学习入门02 - 深入了解 (Descending into ML)
原文链接:https://developers.google.com/machine-learning/crash-course/descending-into-ml/ 线性回归是一种找到最适合一组点 ...
- python读取pdf文件
pdfplumber简介 Pdfplumber是一个可以处理pdf格式信息的库.可以查找关于每个文本字符.矩阵.和行的详细信息,也可以对表格进行提取并进行可视化调试. 文档参考https://gith ...
- 破解第二课 JMP法
首先,我用录屏大师自制了一个视频,给视频加上密码.任意输入,看到报错信息“密码不对,请重新输入” 第一步 反汇编窗口右键点击“中文搜索引擎”---“智能搜索”,搜索引擎界面再次搜索“不对”,结果如下: ...
- 【转载】“宇宙最强” IDE,Visual Studio 2019 正式发布
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 本文由葡萄城翻译并发布 今天凌晨Visual Studio 2019已经正式发布,现在已经可以下载了.使用V ...
- 一个前端开发者换电脑的过程(IDE篇)
一台全新的电脑,需要做出怎样的改变,才可以摇身一变成为前端开发者能用的电脑呢.首先,我们需要安装一个编辑器,这里我们选择目前最火的vscode. 先去到它的官网,把对应版本的vscode下载下来. 然 ...
- JavaEE 要懂的小事:一、图解Http协议
Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter ...
- Elasticsearch实践(四):IK分词
环境:Elasticsearch 6.2.4 + Kibana 6.2.4 + ik 6.2.4 Elasticsearch默认也能对中文进行分词. 我们先来看看自带的中文分词效果: curl -XG ...
- 后端不会写页面怎么办?推荐几个好用的前端UI模板、组件对比
前言 下面推荐并对比几个好用的前端UI模板 推荐给以下的人使用: 1.不想重复造轮子的后端 2.不想学bootstrap的后端 3.后端开发想自己写简单页面的 4.偷懒的前端 本文注重手机端,对web ...