免费注册 查看新帖 |

Chinaunix

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

如果全局变量是由寄存器指向的,那么CPU怎么会有那么多寄存器呢? [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
21 [报告]
发表于 2007-08-14 11:06 |只看该作者
原帖由 coldwarm 于 2007-8-14 10:54 发表

这段是上下文切换的代码。它保存的只是对任务的当前状态的描述。从操作系统的角度来看,在这个层次上,它所认知的单位仅仅是页面,至于页面上到底存放的是什么,它根本就不知道,那只能由应用程序来解释。

对。你说的没错。

论坛徽章:
0
22 [报告]
发表于 2007-08-14 11:19 |只看该作者
原帖由 escapedog 于 2007-8-14 09:27 发表
我一直以为全局变量是被禁止优化的,可是忽然听到有全局变量参与线程现场切换的说法。迷惑ing......

如果说全局变量是由寄存器指向的,那么如果全局变量的数目超过 CPU 的寄存器数目怎么办呢?

高手能解答 ...

据我所知,在一些risc上面可以用一个寄存器来对全局变量寻址,不知道这是不是所谓寄存器指向。
另外,全局变量不是volatile的,也是有存取优化的。只是相比局部变量,优化的要少。

论坛徽章:
0
23 [报告]
发表于 2007-08-14 11:31 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
24 [报告]
发表于 2007-08-14 12:08 |只看该作者
原帖由 flw 于 2007-8-14 09:39 发表
全局变量是在内存中的,
而在段页式管理的 OS 中,
段描述符和页表基地址都是储存在寄存器中的,
任务切换的时候,
寄存器是现场的一部分,
也要切换(事前保护和事后恢复),
因此全局变量自然也是现场的 ...


正确来说:应该是描述符表。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
25 [报告]
发表于 2007-08-14 12:19 |只看该作者
原帖由 mik 于 2007-8-14 12:08 发表

正确来说:应该是描述符表。

对。应该是描述符表。

另外还有段选择子。

论坛徽章:
0
26 [报告]
发表于 2007-08-14 12:28 |只看该作者
分页是建立在段式之上的。
所有的变量都须参考到段描述符,只有 GDT 和 IDT 是全局可用的,不需切换!
就连保存执行环境的 TSS 块也需要进行切换

论坛徽章:
0
27 [报告]
发表于 2007-08-14 15:10 |只看该作者
原帖由 flw 于 2007-8-14 10:35 发表
to coldwarm:
你的观点也是错的。


我也倾向于coldwarm的观点 全局变量 与 进程切换没有必然联系
一直没等到下文
版主老大能不能指出错处 举一两个具体例子说明一下
学习了 谢谢

论坛徽章:
0
28 [报告]
发表于 2007-08-14 15:28 |只看该作者
原帖由 coldwarm 于 2007-8-14 10:33 发表


我是针对linux来说的,有的书里将进程定义为资源申请的基本单位,线程定义为任务切换的基本单位,但对linux而言,它的线程就是通过task_struct这个进程描述符结构来实现的。


linux好像也是这样的呀,调度是基于task_struct,而这个结构说白了也就是个线程,是调度的单位。线程之间共享文件,地址空间等资源。

论坛徽章:
0
29 [报告]
发表于 2007-08-14 22:46 |只看该作者
这个全局变量不分kernel和应用层?还有说的kernel的线程调度还是线程库自己的线程调度?

论坛徽章:
0
30 [报告]
发表于 2007-08-14 22:49 |只看该作者
一般来说进程就是资源的container,调度是以线程为单位,包括linux,只是linux的线程的描述结构和进程的描述结构一样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP