免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2995 | 回复: 14
打印 上一主题 下一主题

[内核模块] 内核是如何工作的呢? [复制链接]

论坛徽章:
6
季节之章:冬
日期:2015-01-20 17:18:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2015-12-20 06:20:00程序设计版块每日发帖之星
日期:2016-06-09 06:20:00每日论坛发贴之星
日期:2016-06-09 06:20:002016科比退役纪念章
日期:2017-01-12 14:08:57
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-09 11:45 |只看该作者 |倒序浏览
本帖最后由 liklstar 于 2014-04-09 12:13 编辑

内核是如何工作的呢?假设把“CPU管理”、“内存管理”、“文件系统管理”看成三个黑盒,它们分别是如何被“调用”?在什么条件下通过什么方式开始工作?之间又是如何协调的?工作完成后处于什么状态?它们是如何被有机地组织在一起的呢?是通过“中断向量表”吗?

另外,内核与外界的协调是不是只能通过“系统调用”和“中断”两种方式啊?

论坛徽章:
6
季节之章:冬
日期:2015-01-20 17:18:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2015-12-20 06:20:00程序设计版块每日发帖之星
日期:2016-06-09 06:20:00每日论坛发贴之星
日期:2016-06-09 06:20:002016科比退役纪念章
日期:2017-01-12 14:08:57
2 [报告]
发表于 2014-04-09 12:32 |只看该作者
为什么一个应用软件,有了需求规格说明书后,可以很自然地导出软件设计,而一个系统软件却不能?

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
3 [报告]
发表于 2014-04-09 12:36 |只看该作者
你这个问题太大,不好回答
简单说,内核自身就是一个死循环(idle),定期有时钟中断上来,处理周期性事务(比如调度),如果有突发的任务需要处理,则通过中断或异常方式触发。事务处理以进程为单位,当进程需要分配内存或需要访问文件系统时,跟内存管理和文件系统交互。
内核与外界(应该是用户态)协调(通信?)方式很多,比如netlink、共享内存等。内核与用户态程序运行在CPU不同的特权级别(Ring)上,从用户态切换到内核态只能通过“系统调用”和“中断/异常”方式。

论坛徽章:
6
季节之章:冬
日期:2015-01-20 17:18:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2015-12-20 06:20:00程序设计版块每日发帖之星
日期:2016-06-09 06:20:00每日论坛发贴之星
日期:2016-06-09 06:20:002016科比退役纪念章
日期:2017-01-12 14:08:57
4 [报告]
发表于 2014-04-09 12:48 |只看该作者
humjb_1983 发表于 2014-04-09 12:36
你这个问题太大,不好回答
简单说,内核自身就是一个死循环(idle),定期有时钟中断上来,处理周期性事务(比 ...


谢谢!
假设一个内核模块有十个功能,那么这十个功能的代码是如何组织在一起的?根据什么组织在一起?它们又是怎么提供给用户态进程调用的?是像驱动程序那样有一个结构指明函数指针吗?又是如何在内核模块间调用的?

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
5 [报告]
发表于 2014-04-09 14:03 |只看该作者
内核模块功能如何组织都没关系吧,看具体实现。
如果需要提供功能,则需要提供相关接口,并将接口符号export。
如果需要使用其他模块或内核的功能,则直接调用相关接口即可。

论坛徽章:
6
季节之章:冬
日期:2015-01-20 17:18:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2015-12-20 06:20:00程序设计版块每日发帖之星
日期:2016-06-09 06:20:00每日论坛发贴之星
日期:2016-06-09 06:20:002016科比退役纪念章
日期:2017-01-12 14:08:57
6 [报告]
发表于 2014-04-09 14:49 |只看该作者
humjb_1983 发表于 2014-04-09 14:03
内核模块功能如何组织都没关系吧,看具体实现。
如果需要提供功能,则需要提供相关接口,并将接口符号expo ...


谢谢!
我理解你的意思是不是这样:内核模块可以用“功能分解”的方式实现,模块中的功能代码可以无序地排列在模块文件中?如果要提供系统调用,则需要提供相关接口?

再问:这个接口如何实现呢?能否不通过重新编译内核的方式?能否这样理解:一个接口由一个或几个功能实现。若干个接口组成一个“结构”来有序管理各个功能?

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
7 [报告]
发表于 2014-04-09 15:33 |只看该作者
呵呵,大概差不多~~
提供的接口不是系统调用,概念需要清楚~
后面的问题真没看懂~

论坛徽章:
6
季节之章:冬
日期:2015-01-20 17:18:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2015-12-20 06:20:00程序设计版块每日发帖之星
日期:2016-06-09 06:20:00每日论坛发贴之星
日期:2016-06-09 06:20:002016科比退役纪念章
日期:2017-01-12 14:08:57
8 [报告]
发表于 2014-04-09 15:45 |只看该作者
本帖最后由 liklstar 于 2014-04-09 15:46 编辑
humjb_1983 发表于 2014-04-09 15:33
呵呵,大概差不多~~
提供的接口不是系统调用,概念需要清楚~
后面的问题真没看懂~


谢谢!
我在百度上搜了一下:
1、...在/usr/src/linux/kernel/sys.c文件中添加源代码;...
2、定义系统调用号,/usr/src/linux/include/asm-i386/unistd.h...
3、在系统调用向量表里添加自定义的系统调用函数入口位置,/usr/src/linux/arch/i386/kernel/syscall_table.S,以前老版本是entry.s...
4、编译内核;
请问:你说的接口是指“2”和“3”吗?我记得你说过可以不用重新编译内核而添加系统调用的方法啊?另外,我如何才能在我自己的文件中写源代码啊?

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
9 [报告]
发表于 2014-04-09 16:33 |只看该作者
这个是添加“系统调用”的方法,跟内核模块的编写没有关系~
不确定你到底是想要干什么?是增加系统调用?还是写内核模块。

论坛徽章:
6
季节之章:冬
日期:2015-01-20 17:18:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2015-12-20 06:20:00程序设计版块每日发帖之星
日期:2016-06-09 06:20:00每日论坛发贴之星
日期:2016-06-09 06:20:002016科比退役纪念章
日期:2017-01-12 14:08:57
10 [报告]
发表于 2014-04-09 16:43 |只看该作者
humjb_1983 发表于 2014-04-09 16:33
这个是添加“系统调用”的方法,跟内核模块的编写没有关系~
不确定你到底是想要干什么?是增加系统调用?还 ...


我要写一个内核模块,其中有一部分内容提供系统调用功能。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP