现在位置: 首页 > rushweiphew发表的所有文章
  • 05月
  • 05日
综合 ⁄ 共 1945字 评论关闭
【转载】XEN添加和调用Hypercall 在linux系统中添加新的系统调用,一般需要三个步骤: 1. 注册新的系统调用号 2. 更新系统调用表 3. 添加新函数 在xen中添加一个 hypercall,类似于在linux中添加一个系统调. 基本上也是上面几个步骤。 现在举个具体的例子: 比如我们要在xen中添加一个打印消息的hypercall,参数有一个,类型为char*, 代表我们要打印的消息. 函数原型为: do_print_string(char* message) 1. 首先注册一个hypercall调用号。 xen/include/public/xen.h #define __HYPERVISOR_kexec_op 37//原有超级调......
阅读全文
  • 10月
  • 17日
综合 ⁄ 共 144字 评论关闭
1、 make 时钟错误 make: Warning: File `Makefile' has modification time 4.6e+07 s in the future make: 警告:检测到时钟错误。您的创建可能是不完整的。 解决方法:运行下列命令再makefind . -type f -exec touch {} \;
阅读全文
  • 05月
  • 12日
综合 ⁄ 共 2188字 评论关闭
5月21日 线程同步--线程间通信 一、线程同步  线程的同步方法跟其他系统下类似,我们可以用原子操作,可以用 mutex,lock 等。  iOS 的原子操作函数是以 OSAtomic 开头的,比如:OSAtomicAdd32, OSAtomicOr32 等等。这些函数可以直接使用,因为它 们是原子操作。  iOS 中的 mutex 对应的是 NSLock,它遵循 NSLooking 协议,我们可以使用 lock, tryLock, lockBeforeData:来加锁,用 unLock 来解锁。使用示例:  BOOL moreToDo = YES;  NSLock *theLock = [[NSLock alloc] init];  ...  while (moreToDo) {  /* Do another increment of calcul......
阅读全文
  • 05月
  • 03日
综合 ⁄ 共 2027字 评论关闭
instanceof是Java的一个二元操作符,Java的保留关键字;作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。可以用在继承中的子类的实例是否为父类的实现。instanceof 一般情况下 用在对象类型的强制转换。 按优先级从高到低排列如下:[ ] ( ) ++ -- ! ~ instanceof * / % + - << >> >>> <> < = > \ == != &^& & || ? := op= 。 Java 的表达式就是用运算符连接起来的符合Java 规则的式子.运算符的优先级决定了表达式中运算执行的先后顺序。没有必要去记忆运算......
阅读全文
  • 04月
  • 29日
综合 ⁄ 共 663字 评论关闭
Problem Description 求n个数的最小公倍数。   Input 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。   Output 为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。   Sample Input 2 4 6 3 2 5 7   Sample Output 12 70   Author lcy     WA了一次,没有注意乘法溢出,只要认真的处理就好,仔细想想比什么都好! 注意模板的积累,lcm和gcd,以后凡是涉及最大公约数和最小公倍数的题,就用这两个模板了QAQ! 如果是求多个数的最小......
阅读全文
  • 04月
  • 17日

内存屏障 Memery Barrier . 讨论完了给一个总结,有些话是别人说的,有的还是clf的网友的,为了不使文档显得杂乱,都不具名了。 欢迎批评指正! 内核中定义的内存屏障原语有: #define barrier() __asm__ __volatile__(“”: : :”memory”) #define mb() alternative(“lock; addl $0,0(%%esp)”, “mfence”, X86_FEATURE_XMM2) #define rmb() alternative(“lock; addl $0,0(%%esp)”, “lfence”, X86_FEATURE_XMM2) #ifdef CONFIG_SMP #define smp_mb() mb() #define smp_rmb() rmb() #define smp_wmb() wmb() #define smp_read_barrier_depends() read_barrier_depends() #define set_mb(var, value) do { (void) xchg(&var, value); } while (0) #else #define smp_mb() barrier() #define smp_rmb() barrier() #define smp_wmb() barrier() #define smp_read_barrier_depends() do { } while(0) #define set_mb(var, value) do { var = value; barrier(); } while (0) #endif 1). smp_xxx()和xxx()的区别 为了给其它CPU也提供相关的barrier宏。 例如x86的rmb()是用了lfence指令,但其它CPU不能用这个指令。 2). 关于barrier()宏,jkl大师是这么说的: CPU越过内存屏障后,将刷新自己对存储器的缓冲状态。这条语句实际上不生成任何代码,但可使gcc在 barrier()之后刷新寄存器对变量的分配。 也就是说,barrier()宏只约束gcc编译器,不约束运行时的CPU行为。 举例: 1 int a = 5, b = 6; 2 barrier(); 3 a = b; 在line 3,GCC不会用存放b的寄存器给a赋值,而是invalidate b的Cache line,重新读内存中的b值,赋值给a。 3). mb() vs. rmb() vs. wmb() rmb()不允许读操作穿过内存屏障;wmb()不允许写操作穿过屏障;而mb()二者都不允许。 看IA32上wmb()的定义: #ifdef CONFIG_X86_OOSTORE #define wmb() alternative(“lock;addl $0,0(%%esp)”, “sfence”, X86_FEATURE_XMM); #else #define wmb() __asm__ __volatile__ (“”: : :”memory”); #endif Intel和AMD都没有在IA32 CPU中实现乱序写(Out-Of-Order Store),所以wmb()定义为空操作,不约束CPU行为;但 有些IA32 CPU厂商实现了OOO Store,所以就有了使用sfence的那个wmb()实现。 4). 内存屏障的体系结构语义 4.1) 只有一个主体(CPU或DMA控制器)访问内存时,无论如何也不需要barrier;但如果有两个或更多主体访问内存,且 其中有一个在观测另一个,就需要barrier了。 4.2) IA32 CPU调用有lock前缀的指令,或者如xchg这样的指令,会导致其它的CPU也触发一定的动作来同步自己的Cache。 CPU的#lock引脚链接到北桥芯片(North Bridge)的#lock引脚,当带lock前缀的执行执行时,北桥芯片会拉起#lock 电平,从而锁住总线,直到该指令执行完毕再放开。 而总线加锁会自动invalidate所有CPU对 _该指令涉及的内存_ 的Cache,因此barrier就能保证所有CPU的Cache一致性。 4.3) 接着解释。 lock前缀(或cpuid、xchg等指令)使得本CPU的Cache写入了内存,该写入动作也会引起别的CPU invalidate其Cache。 IA32在每个CPU内部实现了Snoopying(BUS-Watching)技术,监视着总线上是否发生了写内存操作(由某个CPU或DMA控 制器发出的),只要发生了,就invalidate相关的Cache line。 因此,只要lock前缀导致本CPU写内存,就必将导致 所有CPU去invalidate其相关的Cache line。 两个地方可能除外: -> 如果采用write-through策略,则根本不存在缓存一致性问题(Linux对全部内存采用write-back策略); -> TLB也是Cache,但它的一致性(至少在IA32上)不能通过Snoopying技术解决,而是要发送 INVALIDATE_TLB_VECTOR这个IPI给其它的CPU。 4.4) 进一步解释,MESI协议 包括IA32的许多体系结构的CPU,为了保证缓存一致性,实现了MESI协议。 M: Modified,已修改 E: Exclusive,排他 S: Shared,共享 I: Invalid,无效 IA32 的CPU实现了MESI协议来保证Cache coherence。 CPU的总线监测单元,始终监视着总线上所有的内存写操作, 以便随时调整自己的Cache状态。 -> Modified。 本CPU写,则直接写到Cache,不产生总线事物;其它CPU写,则不涉及本CPU的Cache,其它CPU 读,则本CPU需要把Cache line中的数据提供给它,而不是让它去读内存。 -> Exclusive。只有本CPU有该内存的Cache,而且和内存一致。 本CPU的写操作会导致转到Modified状态。 -> Shared。 多个CPU都对该内存有Cache,而且内容一致。任何一个CPU写自己的这个Cache都必须通知其它 的CPU。 -> Invalid。 一旦Cache line进入这个状态,CPU读数据就必须发出总线事物,从内存读。 5) 考虑到DMA 5.1). Wirte through策略。 这种情形比较简单。 -> 本CPU写内存,是write through的,因此无论什么时候DMA读内存,读到的都是正确数据。 -> DMA写内存,如果DMA要写的内存被本CPU缓存了,那么必须Invalidate这个Cache line。下次CPU读它,就 直接从内存读。 5.2). Write back策略。 这种情形相当复杂。 -> DMA读内存。被本CPU总线监视单元发现,而且本地Cache中有Modified数据,本CPU就截获DMA的内存读操作, 把自己Cache Line中的数据返回给它。 -> DMA写内存。而且所写的位置在本CPU的Cache中,这又分两种情况: a@ Cache Line状态未被CPU修改过(即cache和内存一致),那么invalidate该cache line。 b@ Cache Line状态已经被修改过,又分2种情况: <1> DMA写操作会替换CPU Cache line所对应的整行内存数据,那么DMA写,CPU则invalidate 自己的Cache Line。 <2> DMA写操作只替换Cache Line对应的内存数据的一部分,那么CPU必须捕获DMA写操作的新

综合 ⁄ 共 4618字 评论关闭
来自于在CU的一个讨论:http://linux.chinaunix.net/bbs/thread-713279-1-1.html 讨论完了给一个总结,有些话是别人说的,有的还是clf的网友的,为了不使文档显得杂乱,都不具名了。 欢迎批评指正! 内核中定义的内存屏障原语有: #define barrier() __asm__ __volatile__("": : :"memory") #define mb() alternative("lock; addl $0,0(%%esp)", "mfence", X86_FEATURE_XMM2) #define rmb() alternative("lock; addl $0,0(%%esp)", "lfence", X86_FEATURE_XMM2) #ifdef CONFIG_SMP #define smp_mb() mb() #define smp_rmb() rmb(......
阅读全文
  • 04月
  • 07日
综合 ⁄ 共 3045字 评论关闭
转自:http://www.aslibra.com/blog/post/lost_found_fsck_find.php   linux的每个分区默认都有一个 lost+found 目录,是用来存放fsck过程中部分修复的文件的。 近日一块硬盘发生错误: 引用 EXT3-fs error (device sdb1) in start_transaction: Journal has abortedEXT3-fs error (device sdb1) in start_transaction: Journal has abortedEXT3-fs error (device sdb1) in start_transaction: Journal has abortedEXT3-fs error (device sdb1) in start_transaction: Journal has aborted 会提示硬盘有问题,估计硬盘快不行了咯......
阅读全文
  • 04月
  • 05日
综合 ⁄ 共 2507字 评论关闭
下面的代码示例演示 MessageWindow。此示例让窗体将有关当前鼠标位置的 x-y 坐标的基于 Windows 的消息发送到消息窗口,消息窗口调用窗体上的回调方法在标题栏中显示相应的坐标。 窗体包含一个从 MessageWindow 派生的自定义类 MsgWindow。MsgWindow 类检查重写的 WndProc 方法中的消息,查找带有 WM_CUSTOMMSG 标识符的消息。当 MsgWindow 类找到这些消息后,将调用窗体中定义的 RespondToMessage 回调方法。 窗体创建 MsgWindow 的一个新实例。MsgWindow 构造函数采用一个窗体作为参数,在此示例中将采用它所在的窗体作为参数......
阅读全文
  • 04月
  • 05日
综合 ⁄ 共 1046字 评论关闭
#include<iostream> #include<cstring> #include<cstdio> using namespace std; const int Max = 9; int ca,s,cnt,ri; int flag[Max + 1]; int bak[Max + 1]; int check(int l){ //标记已有的位,检查数字是否符合规则 int length = 0; while(l){ if(flag[l%10])return 0; flag[l%10] = 1; l /= 10; length ++; } s = Max - length; return 1; } int checks(int n){ int length = 0; memcpy(bak,flag,sizeof(bak)); while(n){ if(bak[n%10......
阅读全文
http://www.2cto.com/kf/201208/151168.html   让Webview加载的页面居中显示有我知道的俩种方法 第一种: [java]  WebSettings settings = webView.getSettings();  settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);  LayoutAlgorithm是一个枚举用来控制页面的布局,有三个类型: 1.NARROW_COLUMNS:可能的话使所有列的宽度不超过屏幕宽度 2.NORMAL:正常显示不做任何渲染 3.SINGLE_COLUMN:把所有内容放大webview等宽的一列中 用SINGLE_COLUMN类型可以设置页面居中显示,页面可以放大缩小,但这种方法不怎么......
阅读全文
  • 02月
  • 18日
综合 ⁄ 共 1435字 评论关闭
文章目录 1.第一范式常见提法 2.我的理解 3.再深入一些 话说小k现在要用数据库做一个实际的项目了,所以就准备先复习一下数据库的基础知识。小k搜集了一些资料,包括书籍和网络资料。 1.第一范式常见提法 小k发现各种资料中对第一范式常见的解释可以归结为:“第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。” 小k似有一些明白,又有一些不明就里。什么是“同一列不能有多个值”......
阅读全文
  • 02月
  • 15日
综合 ⁄ 共 674字 评论关闭
新浪ip查询接口 <script language="javascript" type="text/javascript" src="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js"></script>  <script type="text/javascript">document.write("欢迎来自:"+remote_ip_info.country+remote_ip_info.province+remote_ip_info.city+"的朋友!");  </script> js获取页面属性 <script type="text/javascript"> document.write("上级url:"+document.referrer+"<br>");//上级url document.write("当前url:"+document.URL+"<br>"......
阅读全文