自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 资源 (2)
  • 收藏
  • 关注

原创 9.10 内核同步方法_顺序和屏障

    rmb()方法提供了一个“读”内存屏障,它确保跨越rmb()的载入动作不会发生重排序。也就是说,在rmb()之前的载入操作不会被重新排在该调用之后,同理,在rmb()之后的载入操作不会被重新排在该调用之前。    wmb()方法提供了一个“写”内存屏障,这个函数的功能和rmb()类似,区别仅仅是它是针对存储而非载入--它确保跨越屏障的存储不发生重排序。    mb()方法既提供了读屏障也提供了些屏障。

2010-10-19 00:35:00 647

原创 9.9 内核同步方法_禁止抢占

    内核抢占代码使用自旋锁作为非抢占区域的标记。如果一个自旋锁被持有,内核便不能进行抢占。    可以通过preempt_disable()禁止内核抢占。这是一个可以嵌套调用的函数,可以调用任意次。每次调用都必须有一个相应的preempt_enable()调用。当最后一次preempt_enable()被调用,内核抢占才重新启用。

2010-10-19 00:30:00 657

原创 9.7 内核同步方法_完成变量

<br />    如果在内核中一个任务需要发出信号通知另一个任务发生了某个特定事件,利用完成变量是使两个任务得以同步的简单方法。

2010-10-19 00:26:00 472

原创 9.6 内核同步方法_自旋锁和信号量

<br />    因为在中断上下文中只能使用自旋锁,而在任务睡眠时只能使用信号量。

2010-10-19 00:24:00 466

原创 9.5 内核同步方法_读-写信号量

<br />    所有的读-写信号量都是互斥信号量(也就是说,它们的引用计数等于1)。所有读-写锁的睡眠都不会被信号打断,所以它只有一个版本的down()操作。<br />    读-写信号量相比读-写自旋锁多一种特有的操作:downgrade_writer()。这个函数可以动态地将获取的写锁转换为读锁。

2010-10-19 00:23:00 462

原创 9.4 内核同步方法_信号量

<br />    Linux的信号量是一种睡眠锁。如果有一个任务试图获得一个已经被占用的信号量时,信号量会将其推进一个等待队列;,然后让其睡眠。当持有信号量的进程将信号量释放后,处于等待队列中的那个任务将被唤醒,并获得该信号量。由于执行线程在锁被争用时会睡眠,所以只能在进程上下文中才能获取信号量锁,因为在中断上下文是不能进行调度的。在占用信号量的同时不能占用自旋锁。因为在等待信号量时可能会睡眠,而在持有自旋锁时是不允许睡眠的。<br />    信号量不同于自旋锁,他不会禁止内核抢占,所以持有信号量的代码

2010-10-19 00:15:00 433

原创 9.3 内核同步方法_读-写自旋锁

<br />    一个或多个读任务可以并发的持有读者锁;相反,用于写的锁最多只能被一个写任务持有,而且此时不能有并发的读操作。有时把读/写锁叫做共享/排斥锁,或者并发/排斥锁,因为这种锁以共享(对读者而言)和排斥(对写者而言)的形式获得使用。<br />    注意不能把一个读锁“升级”为写锁。这种代码:read_lock(&mr_rwlock);write_lock(&mr_rwlock);<br />    将会带来死锁,因为写锁会不断自旋,等待所有的读者释放锁,其中也包括它自己。所以当确实需要写操作

2010-10-19 00:06:00 397

原创 9.2 内核同步方法_自旋锁

<br />    Linux内核中最常见的锁是自旋锁。自旋锁最多只能被一个可执行线程持有。<br />    自旋锁不应该被长时间持有。持有自旋锁的时间最好小于完成两次上下文切换的耗时。<br /> 警告:自旋锁是不可递归的!<br />    自旋锁可以使用在中断处理程序中(此外不能使用信号量,因为它们会导致睡眠)。在中断处理程序中使用自旋锁时,一定要在获取锁之前,首先禁止本地中断(当前处理器上的中断请求),否则,中断处理程序就会打断正持有锁的内核代码,有可能试图去争用这个已经被持有的自旋锁。注意,需要

2010-10-18 23:57:00 376

原创 9.1 内核同步方法_原子操作

<br />    内核提供了两组原子操作接口--一组对整数进行操作,另一组对单独的位进行操作。<br /> 9.1.1 原子整数操作<br />    针对整数的原子操作只能对atomic_t类型的数进行处理。在这里之所以引入了一个特殊数据类型,而没有直接使用C语言的int类型,主要是出于两个原因:首先,让原子函数只接受atomic_t类型的操作数,可以确保原子操作只与这种特殊类型数据一起使用。其次,使用atomic_t类型确保编译器不对相应的值进行访问优化--这点使得原子操作最终接收到正确的内存地址,而

2010-10-18 23:37:00 388

原创 8 内核同步介绍

8.1 临界区和竞争条件<br />    所谓临界区就是访问和操作共享数据的代码段。如果两个执行线程有可能处于同一个临界区中,就称它是竞争条件。避免并发和防止竞争条件被称为同步。<br /> 8.2 加锁<br />    各种锁机制之间的区别主要在于当锁被争用时(已经被使用)的行为表现--一些锁会简单地执行忙等待,而有些锁会使当前任务睡眠直到锁可用为止。<br /> 8.2.1 到底是什么造成了并发执行<br />    用户空间之所以需要同步,是因为用户程序会被调度程序抢占和重新调度。<br />  

2010-10-09 00:39:00 446

嵌入式资料整合第二辑

对当前的嵌入式技术的资料进行整合,对于想了解嵌入式技术和想知道怎样学嵌入式的朋友非常有帮助!

2010-05-10

嵌入式资料整合第一辑

对当前的嵌入式技术的资料进行整合,对于想了解嵌入式技术和想知道怎样学嵌入式的朋友非常有帮助!

2010-05-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除