免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: MagicBoy2010
打印 上一主题 下一主题

Linux系统下init进程的前世今生 [复制链接]

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
11 [报告]
发表于 2012-03-17 01:34 |只看该作者
你能自娱自乐太好了,我是因为工作所迫看Android代码看到现在,困死了。

论坛徽章:
0
12 [报告]
发表于 2012-03-17 16:42 |只看该作者
本帖最后由 MagicBoy2010 于 2012-03-17 16:49 编辑

俺啥也不说了,产生超级init进程,之后的现象变得异常诡异,蛋都闲得疼了的同学自己去玩吧,太吓人了(新内核加入grub之前,请记住将老内核保存,进不了系统就麻烦了)。。。。楼上的同学为工作所迫,同情一记

论坛徽章:
0
13 [报告]
发表于 2012-03-19 17:52 |只看该作者
感谢千里马同学加分鼓励

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
14 [报告]
发表于 2012-03-19 18:33 |只看该作者
MagicBoy2010 发表于 2012-03-19 17:52
感谢千里马同学加分鼓励

多谢 MagicBoy2010 的分享啊。

论坛徽章:
0
15 [报告]
发表于 2012-03-20 13:38 |只看该作者
回复 10# MagicBoy2010


出人意料的结果是啥啊。。。。

论坛徽章:
0
16 [报告]
发表于 2012-03-21 14:15 |只看该作者
提个问题:
为什么内核态启动用户程序,还要使用系统调用的方式来实现呢。

用户态执行系统调用,是为了进入内核态。但是在内核本身,已经处于内核态了,何必要再来一次系统调用呢?

论坛徽章:
0
17 [报告]
发表于 2012-03-21 15:13 |只看该作者
提个问题:
为什么内核态启动用户程序,还要使用系统调用的方式来实现呢。

用户态执行系统调用,是为了进入内核态。但是在内核本身,已经处于内核态了,何必要再来一次系统调用呢?

=====================================
我们试试踏空的方法论,系统调用的本质是什么, int n。没有任何人说系统调用就一定是要从用户空间进入内核空间。回到你的问题,内核启动用户空间程序,已经是在内核态了,为什么还要使用int n呢。其实完全可以不用int n,一个mov指令切换__KERNEL_CS和__USER_CS就可以实现这种转变。所以实现方法绝不只目前这一种,但是x86有现成的int n指令,配合iret,硬件逻辑可以帮你干不少琐碎的事情,你当然可以全部自己写代码实现那些硬件完成的东西,就如同早先内核做进程切换时不使用tss,而使用若干个mov指令一样。其二,通过int n来实现,可以和用户空间系统调用的代码逻辑统一起来。所以就成了现在这个样子。

论坛徽章:
0
18 [报告]
发表于 2012-03-21 17:01 |只看该作者
回复 17# MagicBoy2010

但是x86有现成的int n指令,配合iret,硬件逻辑可以帮你干不少琐碎的事情,你当然可以全部自己写代码实现那些硬件完成的东西,就如同早先内核做进程切换时不使用tss,而使用若干个mov指令一样。其二,通过int n来实现,可以和用户空间系统调用的代码逻辑统一起来。所以就成了现在这个样子。
=======================================================

有这样的一个问题,系统调用本身是为了用户态进入内核态,那么有一些逻辑或者操作(软件+硬件)是为了完成这个转换,比如保存用户态的函数栈等。。。。

那么对于内核本身,这些逻辑或者操作是不必要的。
至于代码逻辑统一,这个我想过。但是不是用系统调用,而直接调用系统调用的一部分代码——如真正要加载用户程序的入口以及为此的一些必要处理的地方。从而可以省略上面所说的不必要处理,这样不是更好。
这样既保证了逻辑的统一,也没有不必要的操作。

论坛徽章:
0
19 [报告]
发表于 2012-03-21 17:28 |只看该作者
有这样的一个问题,系统调用本身是为了用户态进入内核态,那么有一些逻辑或者操作(软件+硬件)是为了完成这个转换,比如保存用户态的函数栈等。。。。

那么对于内核本身,这些逻辑或者操作是不必要的。
至于代码逻辑统一,这个我想过。但是不是用系统调用,而直接调用系统调用的一部分代码——如真正要加载用户程序的入口以及为此的一些必要处理的地方。从而可以省略上面所说的不必要处理,这样不是更好。
这样既保证了逻辑的统一,也没有不必要的操作。

===========================
用户态进入内核态,切换到内核栈,是不会保存用户态的函数栈。你可以直接调用系统调用的一部分代码,前提是你自己去建立栈帧的问题(你本来想我既然在内核态,这些逻辑不必要,但是你自己还要去建立本来硬件逻辑帮你做好的东西,似近实远)。你不用int n, 建立好栈帧再去调用do_execve,唯一好处就是少了一个int n, 这条指令才几个周期?!

论坛徽章:
0
20 [报告]
发表于 2012-03-21 17:33 |只看该作者
回复 19# MagicBoy2010

用户态进入内核态,切换到内核栈,是不会保存用户态的函数栈。你可以直接调用系统调用的一部分代码,前提是你自己去建立栈帧的问题(你本来想我既然在内核态,这些逻辑不必要,但是你自己还要去建立本来硬件逻辑帮你做好的东西,似近实远)。你不用int n, 建立好栈帧再去调用do_execve,唯一好处就是少了一个int n, 这条指令才几个周期?!
==============================
那是我记错了。不需要保存用户态的函数栈。

能说一下那些工作是由硬件直接完成的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP