进程和线程

       谈到操作系统,最基本的就是关于进程和线程的问题,下面就对这方面的问题作个简单的总结:

1. 进程与线程的区别

       (1) 线程是一种轻量级进程,在Linux中,两者几乎没有差别,只是线程不产生新的地址空间和资源描述符表,而是复用父进程的。

       (2) Linux中,所有的线程都是当作进程来实现的,仅是一个与其他进程共享资源的进程。其创建过程也类似,只不过需要指定各线程间共享的资源。

2. 进程的几种状态

       如果不将创建和退出看作是进程的状态,那么进程的状态主要有三种:就绪、阻塞和运行。就绪和阻塞的不同在于等待的资源类型不同。

       (1) 就绪:进程已获得除CPU资源以外的其他资源时所处的状态,被调度后获得CPU,即可进入运行态,时间片用完或者被抢占后回到就绪态。

       (2) 运行:正在运行的进程。

       (3) 阻塞:进程等待除CPU资源外的其他资源,如信号量、I/O请求等,即进入阻塞态。

3. 进程间通信的方式

       (1)管道(Pipe)及命名管道(named pipe)
           管道可用于具有亲缘关系进程间的通信,命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
           命名管道是一种特殊类型的文件,所以需要用open()打开,用write(发送消息),用read()接收消息,但行为和匿名管道类似。
           缺点:只能承载无格式字节流。

       (2) 信号:
           用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身。
           缺点:承载信息量少。

       (3) 消息(Message)队列:
           消息的链接表。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。

       (4) 共享内存:
           多个进程可以访问同一块内存空间,是最快的形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
           优点:进程间的数据不用传送,而是直接访问内存,也加快了程序的效率。
           缺点:共享内存没有提供同步的机制,在使用共享内存进行进程间通信时,要借助其他的手段来进行进程间的同步。

       (5) 信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。

       (6) 套接字(socket): 更为一般的进程间通信机制,可用于不同机器之间的进程间通信。

4. 内核(线程)同步机制

       内核同步主要是为了解决并发的问题,对共享资源的保护

       (1) 原子操作

       (2) 自旋锁:
           1)线程对该锁请求失败时循环等待,所以自旋锁不应该被长时间持有。
           2)使用初衷:在短期内进行轻量级加锁。
          3)若持有时间较长,则应该使等待线程睡眠,但睡眠会产生上下文切换。因此,持有自旋锁的时间应该小于完成两次上下文切换的时间。
           4)自旋锁可以用于中断上下文中

       (3) 信号量:允许固定数目的线程同时访问资源,并可以进入睡眠。

       (4) 互斥体(mutex):可以看作计数为1的信号量,但是其接口更简单,实现也更加高效,可以进入睡眠。

       (5) 完成变量(事件):用于一个任务需要发出信号通知另一任务发生了某个特定事件。与信号量的思想相同,但提供了一个更简洁的方法。

5. 线程之间共享的资源:

       所有以进程为单位的资源,包括:代码段、进程的公共数据段、进程描述符、进程打开的文件描述符、进程的当前目录、进程的用户ID以及进程组ID。

references:
1. http://www.ibm.com/developerworks/cn/linux/l-synch/part1/
2. http://blog.csdn.net/column/details/linuxprimer.html?page=1

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值