免费注册 查看新帖 |

Chinaunix

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

如果在内核模块中定义一个静态局部变量,该局部变量是保存在内核栈中吗? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-03-17 21:36 |只看该作者
原帖由 zx_wing 于 2008-3-17 12:30 发表

个人认为module以callback方式执行,当那个进程引发了某个moudle执行,就使用哪个进程的内核栈。
没有研究过,欢迎讨论



基本正确。Solaris的一个进程可以对应多个线程, Linux就简单点。

这里就体现了kernel debugger在学习上的好处,至少可以很容观察到内核中的进程和线程的数据结构,以及栈的内容。

论坛徽章:
0
12 [报告]
发表于 2008-03-17 21:48 |只看该作者
原帖由 Solaris12 于 2008-3-17 21:36 发表



基本正确。Solaris的一个进程可以对应多个线程, Linux就简单点。

这里就体现了kernel debugger在学习上的好处,至少可以很容观察到内核中的进程和线程的数据结构,以及栈的内容。


可是初学者边都摸不着呢,呵呵

论坛徽章:
0
13 [报告]
发表于 2008-03-17 21:52 |只看该作者
原帖由 Solaris12 于 2008-3-17 21:36 发表



基本正确。Solaris的一个进程可以对应多个线程, Linux就简单点。

这里就体现了kernel debugger在学习上的好处,至少可以很容观察到内核中的进程和线程的数据结构,以及栈的内容。

solaris的进程和线程是什么关系?
调度以什么为单位?如果是以线程为单位,那每个线程是否单独具有内核栈,如果是,那和linux应该是一样的。
此外,solaris能配置成进程所属线程都共享一个栈吗?
solaris不懂,学习一下。

论坛徽章:
0
14 [报告]
发表于 2008-03-18 10:06 |只看该作者
原帖由 zx_wing 于 2008-3-17 21:52 发表

solaris的进程和线程是什么关系?
调度以什么为单位?如果是以线程为单位,那每个线程是否单独具有内核栈,如果是,那和linux应该是一样的。
此外,solaris能配置成进程所属线程都共享一个栈吗?
solaris不 ...

solaris8,9,10在这里不一样。Solaris10是一个进程对应多个线程,用户级线程-->LWP(light weight process)-->kernel thread,调度以kernel thread 为单位。在solaris9以前用户级线程有可能共用lwp,结果会导致一个进程的中用户线程有可能不能同时进入kernel,所以10里面改成了一一对应。每个kernel thread都有自己的内核栈。

论坛徽章:
0
15 [报告]
发表于 2008-03-18 13:07 |只看该作者
原帖由 圆点坐标 于 2008-3-18 10:06 发表

solaris8,9,10在这里不一样。Solaris10是一个进程对应多个线程,用户级线程-->LWP(light weight process)-->kernel thread,调度以kernel thread 为单位。在solaris9以前用户级线程有可能共用lwp,结果会导致一 ...

我问题有点多,不好意思。想知道但人又懒不想看书。

1. 进程和线程是否共享地址空间?

2.每个线程有一个内核线程对应是什么一个样子?用户线程进入内核态后,就由对应内核线程执行,内核线程只使用内核态的地址空间。这和用户线程进入内核态执行有什么不同吗?这样的好处是什么?

以前听朋友讲过solaris上的文件系统,才超绚的,所以觉得solaris很多设计一定有过人之处,乘有人讲解,大概了解一下。

还有一个问题,solaris中那种中断分发给中断线程完成,和linux中的后半部操作有什么区别吗?

论坛徽章:
0
16 [报告]
发表于 2008-03-18 16:52 |只看该作者
我问题有点多,不好意思。想知道但人又懒不想看书。

1. 进程和线程是否共享地址空间?

2.每个线程有一个内核线程对应是什么一个样子?用户线程进入内核态后,就由对应内核线程执行,内核线程只使用内核态的地址空间。这和用户线程进入内核态执行有什么不同吗?这样的好处是什么?

以前听朋友讲过solaris上的文件系统,才超绚的,所以觉得solaris很多设计一定有过人之处,乘有人讲解,大概了解一下。

还有一个问题,solaris中那种中断分发给中断线程完成,和linux中的后半部操作有什么区别吗?


1. 进程内的所有线程共享该进程的地址空间。

2. 不好说,个人觉得没有本质区别。根源还是两者的线程进程模型不同。

3. 不大一样。Solaris的硬件中断线程优先级可以非产高,至少比软中断高,感觉Linux的下半部就是软中断。
Solaris的驱动的ISR在线程内执行,所以在时钟中断和以下优先级的中断,可以用引起阻塞睡眠的锁,而Linux在ISR不能这样。

论坛徽章:
0
17 [报告]
发表于 2008-03-18 17:28 |只看该作者
暂时没什么对solaris12的补充

论坛徽章:
0
18 [报告]
发表于 2008-03-18 17:50 |只看该作者

回复 #16 Solaris12 圆点坐标 的帖子

多谢两位,对于第三个问题仍然有疑问。

我曾经和朋友讨论过solaris上的这种中断模型,有个关键问题没弄懂。

对于intel的CPU架构来说,当一个中断来时,硬件跳转到IDT表或IVT表执行,通常中断处理的前半部分(通常就是汇编那部分)是做保存一些关键上下文等动作,这个时候没有进程或线程的上下文,称为中断上下文。那么对于solaris来说,有没有这么一个处于中断上下文的阶段?如果有,那solaris的ISR模型我就理解了。

如果没有?那我想知道solaris如何在中断发生时直接跳转到一个线程上下文执行的,也就是说怎么使中断处理的第一行代码就位于一个线程中。因为对于intel的架构来说,只有x86的taskgate可以做到这点,但实际上这个技术几乎没有OS用。

莫非是原来sparic硬件上有特殊的技术?

说了这么多,不知道问题描述清楚没有。

论坛徽章:
0
19 [报告]
发表于 2008-03-19 12:27 |只看该作者
原帖由 zx_wing 于 2008-3-18 17:50 发表
多谢两位,对于第三个问题仍然有疑问。

我曾经和朋友讨论过solaris上的这种中断模型,有个关键问题没弄懂。

对于intel的CPU架构来说,当一个中断来时,硬件跳转到IDT表或IVT表执行,通常中断处理的前半部 ...

这个问题请solaris12同学来回答,我对device driver不是很懂。

论坛徽章:
0
20 [报告]
发表于 2008-03-19 12:42 |只看该作者
原帖由 zx_wing 于 2008-3-18 17:50 发表


多谢两位,对于第三个问题仍然有疑问。

我曾经和朋友讨论过solaris上的这种中断模型,有个关键问题没弄懂。

对于intel的CPU架构来说,当一个中断来时,硬件跳转到IDT表或IVT表执行,通常中断处理的前半部分(通常就是汇编那部分)是做保存一些关键上下文等动作,这个时候没有进程或线程的上下文,称为中断上下文。那么对于solaris来说,有没有这么一个处于中断上下文的阶段?如果有,那solaris的ISR模型我就理解了。


你的猜测是正确的,在中断线程被调度之前,有这么一个阶段。

如果没有?那我想知道solaris如何在中断发生时直接跳转到一个线程上下文执行的,也就是说怎么使中断处理的第一行代码就位于一个线程中。因为对于intel的架构来说,只有x86的taskgate可以做到这点,但实际上这个技术几乎没有OS用。

莫非是原来sparic硬件上有特殊的技术?

说了这么多,不知道问题描述清楚没有。


Solaris也没有用taskgate,在保护模式这块,和Linux是一样的,很多硬件的特性都跳过了,因为性能的原因和设计的简化。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP