linux内核多线程 同步,Linux系统内核 同步 与 多线程 之我见

1、Linux系统内核同步机制研究

在以前的版本中使用的内核机制是这样的。当正在运行的进程处于内核态时,其它进程,不论优先级是高是低还是由于其他的一些什么情况。都不能通过抢占的方式获得CPU,除非该进程由于某种原因自动放弃CPU.这一特性隐含着处理非阻塞系统调用的内核控制路径间是自动互斥的,只要不是由中断或异常处理程序更新的内核数据结构都可以很安全地被访问。但是在实际的应用中我们经常会遇到很多这样的问题。例如处理器的异常、外部设备的中断等等,这些特殊的操作都有可能在任务或者进程处于内核状态发生。甚至有时一些可以引起进程切换的阻塞的任务也会在进程处于内核的状态时候发生。这时便会引发代发的重叠交织,有时严重时甚至会引起系统的崩溃【9】。

从内核版本2.0被引入以来,支持对称多处理器系统,多个CPU可以并行运行内核代码.这样内核数据被多个内核控制路径共享存取,就会产生资源竞争.此时我们便需要一种机制用于协调内核之间对于资源的访问享用。在以前的版本中其内核态都是不可抢占的。然而随着技术的提高,内核的可靠性可扩展性的提高。是的内核任务从原本的不可抢占的逐渐发生了变化。内核版本从2.5开始,Linux内核变成完全可抢占的,即当前进程无论运行在用户态还是内核态均可被高优先级进程抢占.

2、Linux系统多线程的同步机制研究

在系统中,我们把进程看作是系统分配软硬件资源的最小单位。同时进程还是程序执行的动态过程。线程与进程之间相当于一个整体与局部的关系。而线程是进程产生的分支,是更小的执行实体。但二者还是有很大的差别。在资源的分配上,进程可以拥有资源,但线程却无法拥有资源。系统在给进程分配资源的同时,可以为相应的线程提供一种访问机制。也就是说线程不能拥有资源,但他可以依赖于相应的进程,获得使用所需资源的权限。同一进程内的所有线程共享同一内存地址空间,因而线程间的切换将不再需要资源信息的保存和进行地址空间的变换,减少了系统开销,提高了系统效率和程序的并发性【10】。

在Linux系统中也引入了线程的概念与多线程机制。尽管引入了线程的概念,尽管线程和同进程一样都可以访问共享资源,然而其内核仍然是进程模型。其内核为创建线程提供了一种轻量级的进程模型框架,而线程的真正实现是在用户空间中。线程按照其重要的类别可以分为用户级线程和核心级线程。核心级线程由系统内核进行管理;用户级线程的管理,它提供了在用户空间执行的线程库。之所以要同步最主要的原因是因为他们在使用的时候往往存在某种必要的联系。前一个线程和现在即将要运行的线程在执行顺序上、因果关系上往往存在某种必然的联系。线程间的同步就是线程等待某一个事件的发生,当等待的事件发生时,被等待的线程和事件一起继续执行。如果等待的事件未到达则挂起。在linux操作系统中是通过条件变量来实现同步的。

另外在具体编程过程中还要十分清晰和明确线程间的关系,还要考虑共享资源的保护情况,以保证程序的稳定可靠有效的运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值