Linux.ChinaUnix.net
ChinaUnix
|
Linux首页
|
新闻
|
博客
|
文章
|
专栏
|
新手
|
方案
|
图书
|
下载
|
人才
|
手册
|
wiki
|
搜索
会员:
密码:
免费注册
|
忘记密码
|
会员登录
|
搜索
|
帮助
修改指针值的操作是一个原子操作?
1
2
3
4
››
首页
»
CU论坛
»
Linux
»
汇总贴列表
»
内核源码
»
请选择您要去的论坛 ←
>新手园地
>系统管理
>网络问题
>硬件支持
>内核问题
>系统互操作专区
>中文支持
>桌面与办公
>影音娱乐
>网络工具
>编程问题
>内核源码
>CPU与编译器
>嵌入式开发
>驱动开发
>数据库应用
>服务器应用
>安全防护
>集群和虚拟机
>开源业界与评论
>贴图娱乐
>红茶馆
>文档专区
>下载共享
>Linux书友会
>Linux站务交流
===============
→ 操作系统技术交流区 ←
>BSD
>Solaris
>SCO UNIX
>HP-UX
>AIX
>IBM AS400应用论坛
>Tru64 UNIX
>IRIX
>Mac OS X
→ 行业解决方案交流区 ←
> 金融行业
> 电信行业
> 互联网行业
> 医卫行业
> 制造行业
> 信息安全
> 教育行业
> 媒体娱乐行业
> 电子政务
> 交通行业
→ 程序设计交流区 ←
>C/C++
>Shell
>Java
>Php
>Perl
>Python
>Web开发
>软件工程
>中间件技术
>GUI编程
>软件配置管理
>VOIP开发技术
→ 网管技术交流区 ←
>网络安全
>网络技术
>Cisco技术
>存储备份之家
>服务器及硬件技术
→ 数据库技术交流区 ←
>MySQL
>PostgreSQL
>Oracle
>Informix
>Sybase
>DB2
→ 应用技术专题交流区 ←
>Web服务器
>Mail服务器
>FTP服务器
>DNS服务器
>Proxy服务器
>LDAP
>VPN
>Lotus
>Samba
→ IT综合交流区 ←
>IT业界新闻与评论
>IT职业生涯
>IT培训与认证
>IT二手大厅
>IT图书与评论
→ IT人的休闲生活交流区 ←
>清茶斋
>运动地带
>快乐数码摄影
>影音文字
>English Forum
>游戏玩家
>旅游天下
>贴图娱乐
>红茶馆
>IT爱车族
→ 站务及频道交流区 ←
>站务交流
>版主会议室
>Linux站务交流
>Linux版主会议室
>博客站务交流区
>下载频道交流区
>CU活动专区
最近访问的论坛 ...
时代域名主机托管全面特惠
|
CU积分兑换详情
|
参加调查赠100积分+《Ubuntu官方指南》
|
100积分:谈谈您对校园网建设的体会
|
‹‹ 上一主题
|
下一主题 ››
[
打印
] [
订阅
] [
收藏
] [
推荐给朋友
] [
本帖文本页
]
iterator
骑士
UID:595425
注册:2007-8-2
最后登录: 2008-06-03
帖子:
75
精华:0
可用积分:75
信誉积分:
100
专家积分:
0
(本版)
状态:
...离线...
[
资料
] [
站内短信
] [
Blog
]
1楼
发表于 2008-5-18 14:54
ULK上在讲rcu的时候,提到写者会修改指针,然后说"修改指针值的操作是一个原子操作".
为什么是原子操作呢??怎么保证的?
您对本贴的看法:
鲜花[0]
臭蛋[0]
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
zx_wing
(骑着猪的青蛙)
大天使
学徒
UID:499746
注册:2006-12-4
最后登录: 2008-07-09
帖子:
1707
精华:
3
可用积分:2368
信誉积分:
100
专家积分:
1
(本版)
来自:成都
状态:...保密...
[
资料
] [
站内短信
] [
Blog
]
2楼
发表于 2008-5-18 15:22
QUOTE:
原帖由
iterator
于 2008-5-18 14:54 发表
ULK上在讲rcu的时候,提到写者会修改指针,然后说"修改指针值的操作是一个原子操作".
为什么是原子操作呢??怎么保证的?
在x86上单一的写是原子的。每个写操作之前会发起cache同步,所以一个CPU在写的时候,其它CPU无法发起cache同步,必须等该CPU写完(具体机制我也不清楚,原理应该是这样的)。
如果修改指针仅仅是给指针赋值,那就是一个单一的写操作,是原子的。
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
C调 ---- C语言
都是最喜欢的
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
crspo
精灵
UID:167638
注册:2004-6-28
最后登录: 2008-07-05
帖子:
183
精华:
1
可用积分:208
信誉积分:
100
专家积分:
0
(本版)
状态:
...离线...
[
资料
] [
站内短信
] [
Blog
]
3楼
发表于 2008-5-18 20:01
QUOTE:
原帖由
iterator
于 2008-5-18 14:54 发表
ULK上在讲rcu的时候,提到写者会修改指针,然后说"修改指针值的操作是一个原子操作".
为什么是原子操作呢??怎么保证的?
7.1.1 Guaranteed Atomic Operations
The Intel486 processor (and newer processors since) guarantees that the following
basic memory operations will always be carried out atomically:
• Reading or writing a byte
• Reading or writing a word aligned on a 16-bit boundary
• Reading or writing a doubleword aligned on a 32-bit boundary
The Pentium processor (and newer processors since) guarantees that the following
additional memory operations will always be carried out atomically:
• Reading or writing a quadword aligned on a 64-bit boundary
• 16-bit accesses to uncached memory locations that fit within a 32-bit data bus
The P6 family processors (and newer processors since) guarantee that the following
additional memory operation will always be carried out atomically:
• Unaligned 16-, 32-, and 64-bit accesses to cached memory that fit within a cache
line
Accesses to cacheable memory that are split across bus widths, cache lines, and
page boundaries are not guaranteed to be atomic by the Intel Core 2 Duo, Intel Core
Duo, Pentium M, Pentium 4, Intel Xeon, P6 family, Pentium, and Intel486 processors.
The Intel Core 2 Duo, Intel Core Duo, Pentium M, Pentium 4, Intel Xeon, and P6
family processors provide bus control signals that permit external memory
subsystems to make split accesses atomic; however, nonaligned data accesses will
seriously impact the performance of the processor and should be avoided.
您对本贴的看法:
鲜花[0]
臭蛋[0]
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
iterator
骑士
UID:595425
注册:2007-8-2
最后登录: 2008-06-03
帖子:
75
精华:0
可用积分:75
信誉积分:
100
专家积分:
0
(本版)
状态:
...离线...
[
资料
] [
站内短信
] [
Blog
]
4楼
发表于 2008-5-19 10:48
多谢.可3楼上怎么又说必须是32位对齐的呢?
另外,请教cacheable memory和externel memory subsystems都是什么意思?
您对本贴的看法:
鲜花[0]
臭蛋[0]
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
zx_wing
(骑着猪的青蛙)
大天使
学徒
UID:499746
注册:2006-12-4
最后登录: 2008-07-09
帖子:
1707
精华:
3
可用积分:2368
信誉积分:
100
专家积分:
1
(本版)
来自:成都
状态:...保密...
[
资料
] [
站内短信
] [
Blog
]
5楼
发表于 2008-5-19 11:40
QUOTE:
原帖由
iterator
于 2008-5-19 10:48 发表
多谢.可3楼上怎么又说必须是32位对齐的呢?
另外,请教cacheable memory和externel memory subsystems都是什么意思?
有不对齐的指针吗?
crpso贴的是IA32 spec关于原子操作的规定,里面内容有些是晦涩和不清楚的,例如“16-bit accesses to uncached memory locations that fit within a 32-bit data bus”
通常我们把它归纳成:对于单一的读写操作,对齐的访问是原子的,cacheline内的访问是原子的。
cacheable memory,大部分内存都是cacheable的,这里的cache指用CPU的cache。
externel memory subsystems,应该是指除了本地内存控制器直接访问的内存外,还有通过其它总线间接访问的内存。我觉得NUMA应该属于这种情况。
[
本帖最后由 zx_wing 于 2008-5-19 11:42 编辑
]
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
C调 ---- C语言
都是最喜欢的
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
iterator
骑士
UID:595425
注册:2007-8-2
最后登录: 2008-06-03
帖子:
75
精华:0
可用积分:75
信誉积分:
100
专家积分:
0
(本版)
状态:
...离线...
[
资料
] [
站内短信
] [
Blog
]
6楼
发表于 2008-5-19 12:31
还是不太懂.要是一个结构体用attribute packed声明了,它内部的指针成员不就有可能不对齐了吗?
您对本贴的看法:
鲜花[0]
臭蛋[0]
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
albcamus
(百無一用書生)
版主-大法师
[ 願天速殞可憐生 ]
UID:140189
注册:2004-3-7
最后登录: 2008-07-09
帖子:
10951
精华:
20
可用积分:7436
信誉积分:
105
专家积分:
15
(本版)
来自:嫏嬛閣
状态:...保密...
[
资料
] [
站内短信
] [
Blog
]
7楼
发表于 2008-5-19 12:35
QUOTE:
原帖由
iterator
于 2008-5-19 12:31 发表
还是不太懂.要是一个结构体用attribute packed声明了,它内部的指针成员不就有可能不对齐了吗?
是有这个可能。
这样的32位写操作不见得是原子的。
但只要32位对齐(除非你告诉编译器不要这样做,否则都是对齐的),就是原子的。
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
平生自有千秋在,不向群兒問毀譽!
爱国主义是群氓的道德安全套。
有些爱国青年想必是为人做了太多blowjob,不然为何张口便吐生殖器?
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
zx_wing
(骑着猪的青蛙)
大天使
学徒
UID:499746
注册:2006-12-4
最后登录: 2008-07-09
帖子:
1707
精华:
3
可用积分:2368
信誉积分:
100
专家积分:
1
(本版)
来自:成都
状态:...保密...
[
资料
] [
站内短信
] [
Blog
]
8楼
发表于 2008-5-19 12:41
QUOTE:
原帖由
iterator
于 2008-5-19 12:31 发表
还是不太懂.要是一个结构体用attribute packed声明了,它内部的指针成员不就有可能不对齐了吗?
不行的,__attribute__ ((packed))不是万能的,它无法构造一个不对齐的指针。
例如
QUOTE:
struct
{
char a;
char *str;
char b;
} __attribute__ ((packed)) x;
仍然会对齐
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
C调 ---- C语言
都是最喜欢的
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
zx_wing
(骑着猪的青蛙)
大天使
学徒
UID:499746
注册:2006-12-4
最后登录: 2008-07-09
帖子:
1707
精华:
3
可用积分:2368
信誉积分:
100
专家积分:
1
(本版)
来自:成都
状态:...保密...
[
资料
] [
站内短信
] [
Blog
]
9楼
发表于 2008-5-19 12:46
QUOTE:
`packed'
The `packed' attribute specifies that a variable or structure field
should have the smallest possible alignment--one byte for a
variable,
and one bit for a field, unless you specify a larger
value with the `aligned' attribute.
packed带来的紧凑模式是以最小单位对齐,并不是不对齐。
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
C调 ---- C语言
都是最喜欢的
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
iterator
骑士
UID:595425
注册:2007-8-2
最后登录: 2008-06-03
帖子:
75
精华:0
可用积分:75
信誉积分:
100
专家积分:
0
(本版)
状态:
...离线...
[
资料
] [
站内短信
] [
Blog
]
10楼
发表于 2008-5-19 12:48
QUOTE:
原帖由
zx_wing
于 2008-5-19 12:41 发表
不行的,__attribute__ ((packed))不是万能的,它无法构造一个不对齐的指针。
例如
仍然会对齐
那个str应该不是32位对齐的呀
您对本贴的看法:
鲜花[0]
臭蛋[0]
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
首页
»
CU论坛
»
Linux
»
汇总贴列表
»
内核源码
»
1
2
3
4
››
请选择您要去的论坛 ←
>新手园地
>系统管理
>网络问题
>硬件支持
>内核问题
>系统互操作专区
>中文支持
>桌面与办公
>影音娱乐
>网络工具
>编程问题
>内核源码
>CPU与编译器
>嵌入式开发
>驱动开发
>数据库应用
>服务器应用
>安全防护
>集群和虚拟机
>开源业界与评论
>贴图娱乐
>红茶馆
>文档专区
>下载共享
>Linux书友会
>Linux站务交流
===============
→ 操作系统技术交流区 ←
>BSD
>Solaris
>SCO UNIX
>HP-UX
>AIX
>IBM AS400应用论坛
>Tru64 UNIX
>IRIX
>Mac OS X
→ 行业解决方案交流区 ←
> 金融行业
> 电信行业
> 互联网行业
> 医卫行业
> 制造行业
> 信息安全
> 教育行业
> 媒体娱乐行业
> 电子政务
> 交通行业
→ 程序设计交流区 ←
>C/C++
>Shell
>Java
>Php
>Perl
>Python
>Web开发
>软件工程
>中间件技术
>GUI编程
>软件配置管理
>VOIP开发技术
→ 网管技术交流区 ←
>网络安全
>网络技术
>Cisco技术
>存储备份之家
>服务器及硬件技术
→ 数据库技术交流区 ←
>MySQL
>PostgreSQL
>Oracle
>Informix
>Sybase
>DB2
→ 应用技术专题交流区 ←
>Web服务器
>Mail服务器
>FTP服务器
>DNS服务器
>Proxy服务器
>LDAP
>VPN
>Lotus
>Samba
→ IT综合交流区 ←
>IT业界新闻与评论
>IT职业生涯
>IT培训与认证
>IT二手大厅
>IT图书与评论
→ IT人的休闲生活交流区 ←
>清茶斋
>运动地带
>快乐数码摄影
>影音文字
>English Forum
>游戏玩家
>旅游天下
>贴图娱乐
>红茶馆
>IT爱车族
→ 站务及频道交流区 ←
>站务交流
>版主会议室
>Linux站务交流
>Linux版主会议室
>博客站务交流区
>下载频道交流区
>CU活动专区
Copyright © 2001-2008 ChinaUnix.net All Rights Reserved 联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处
京ICP证041476号
清除 Cookies
-
Linux时代
-
Archiver
-
WAP
-
TOP
Processed in 0.043661 second(s), 5 queries , Gzip enabled