本文目录一览

1,汇编语言以及intel的汇编指令cmpxchg设计并实现一个spinlock

c语言在编译连接生成可运行文件后就已经成了二进制代码。所以,你要它再次翻译成汇编语言的话就需要反汇编。你用debug加载你需要查看的程序,再用u命令就可以看到他的反汇编代码了。 请参考

汇编语言以及intel的汇编指令cmpxchg设计并实现一个spinlock

2,如何使用spinlock要哪个头文件

在kernel2.4.20下面: include <linux/spinlock.h> spinlock_t mysiglock = SPIN_LOCK_UNLOCKED; unsigned int flags; 再加上这个#include <asm/system.h>

如何使用spinlock要哪个头文件

3,进程进入等待阻塞状态有哪几种方式

进程进入等待状态有哪几种方式?(D)//等待是不是就绪状态? A CPU调度给优先级更高的线程 B 阻塞的线程获得资源或者信号 C 在时间片轮转的情况下,如果时间片到了 D 获得spinlock未果 我觉a是由运行态进入就绪态 b是有阻塞太进入就绪态 c是由就绪态进入运行态 d一直就绪态

进程进入等待阻塞状态有哪几种方式

4,关于旋转锁spin lock的解释

spin lock一般翻译为自旋锁,简单的理解是这样的,它和信号量差不多。 信号量:线程在无信号时会阻塞,阻塞时会释放CPU,让其它线程用。 自旋锁:自旋锁在得不到锁的状态下也会阻塞,但阻塞时不释放CPU,一直占用CPU,相当于在死循环。 如果想看比较专业的解释,可以参考: http://baike.baidu.com/view/1250961.html?wtp=tt

5,spinlock自旋锁是如何实现的

在 x86 平台上,spinlock 主要通过处理器的 lock 指令前缀实现当某个线程的一条指令访问某个内存的时候,其他的线程的指令无法访问该内存的功能。因此在 spinlock 初始化阶段,将锁变量中的值某个值 k 赋为1。在加锁的时候,使用 lock decl (%eax) 指令互斥地将该变量变成0,并且将结果是否问0 赋值给 EFLAGS寄存器 的对应位。只有加上锁的线程才会结果才是0,其他线程的结果不是0。接着通过判断该对应位判断是否加上锁。如果没有加上,则循环执行 lock decl (%eax),直到加上为止。其中 %eax 是这个变量的地址。这里用的是gcc 的AT&T语法的汇编。
说实话 真不不太清楚 可以去网上看看啊

6,列举几种进程的同步机制并比较其优缺点

按照java的思想来说有原子变量、互斥(管程monitor)、锁、条件变量、信号量。linux里还会有spinlock。
一个信号量只能置一次初值,以后只能对之进行p操作或v操作。由此也可以看到,信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点。信号量机制功能强大,但使用时对信号量的操作分散, 而且难以控制,读写和维护都很困难。加重了程序员的编码负担;核心操作p-v分散在各用户程序的代码中,不易控制和管理;一旦错误,后果严重,且不易发现和纠正。(b)自旋锁: 旋锁是为了保护共享资源提出的一种锁机制。调用者申请的资源如果被占用,即自旋锁被已经被别的执行单元保持,则调用者一直循环在那里看是否该自旋锁的保持着已经释放了锁。自旋锁是一种比较低级的保护数据结构和代码片段的原始方式,可能会引起以下两个问题; 1、死锁 2、过多地占用cpu资源 传统自旋锁由于无序竞争会导致“公平性”问题(c)管程: 信号量机制功能强大,但使用时对信号量的操作分散,而且难以控制,读写和维护都很困难。因此后来又提出了一种集中式同步进程——管程。其基本思想是将共享变量和对它们的操作集中在一个模块中,操作系统或并发程序就由这样的模块构成。这样模块之间联系清晰,便于维护和修改,易于保证正确性。(d)会合: 进程直接进行相互作用(e)分布式系统: 由于在分布式操作系统中没有公共内存,因此参数全为值参,而且不可为指针。(f)原语 是不可中断的过程。

文章TAG:汇编  汇编语言  语言  以及  spinlock  
下一篇