操作系统 - 线程

为什么要使用线程

在《现代操作系统》中已经说明了使用线程的种种优势,很容易就能看明白。其实根据上文,也能猜到答案。这里就不用说明了。

线程实现的方式

线程可以在内核中实现,也可以在用户空间实现。我自己的理解是这样的:在内核中实现就是操作系统提供线程支持;在用户空间中实现就是用户自己实现。本来以为JVM的线程就是在用户空间上实现的,但是搜了一下,貌似Linux平台下是调用Pthred库实现的。这里还是深入学习一下这两种线程的实现方式,为以后的工作和学习打下基础,说不定什么时候就用上了。看了几遍《现代操作系统》中的相关章节,可是自己还是云里雾里的,不是很清楚,这一次就好好的搞明白(不一定搞的明白,目前还没有接触过用户空间实现的线程,也许是我孤陋寡闻)。

用户空间实现线程

在这种情况下,内核不知道线程的存在。当一个进程中的线程执行完毕,不需要进行系统调用(Trap),不需要进行上下文交换,所以线程的切换非常快。

但是在发生I/O中断的时候,必须要内核去处理了。那么问题来了,内核会锁住当前线程所在的进程,因为内核不知道线程的存在,只知道进程。解决这个办法有点麻烦。《现代操作系统》中提出了一个解法,在某些UNIX版本中有一个select系统调用,它可以判断I/O操作是否会阻塞。如果阻塞就不执行I/O操作。这样run-time system(用的英文版教材,很多术语不会翻译或者乱翻译,囧)就知道是执行I/O,还是执行该进程的其它进程。

内核实现线程

内核实现线程和进程区别不大。但是在线程被销毁时,内核并不会销毁线程的数据结构,只是会标记该线程是不可执行的。这样,当新线程被创建时,覆盖不可执行的线程的数据,效率大大的提高了。

还有一个问题,当一个多线程的进程执行fork时,子进程是否需要复制父进程的所有线程还是个别线程,如何操作。这个,因为很少接触Linux下的C编程,所以暂时放在这里吧。

进程和线程的区别

面试的时候,这个问题可能是问的最多的,可以考察归纳能力和是否理解进程和线程。这里给出自己的理解。

首先,进程是操作系统资源分配和调度的基本单元,它包含了程序能够执行的必要资源。而线程也叫做轻权进程,只拥有CPU执行所需的必要资源。没有进程,线程无法单独执行。

其次,进程的执行一般是线程的,一条道走到黑。线程只是进程执行的不同路径,并发的执行。

就写这么多吧。

欢迎大家一起交流和学习啊。

-end-

 

0
1
(请您对文章做出评价)
« 上一篇: 数据结构与算法分析 - 快速排序
posted @  2014-10-07 08:28  mr_zys 阅读( 208) 评论( 3编辑  收藏

  
#1楼   2014-10-07 08:57  349516385   
线程是调度的基本单位吧?
  
#2楼 [ 楼主2014-10-07 10:03  mr_zys   
@349516385
就是进程啊,书上就是这样的写的。线程只用栈指针,寄存器等资源,它的执行必须要依赖于进程。只调度线程显然是不可能的。我是这样的理解哈。感谢留言,:-D
  
#3楼   2014-10-07 11:46  349516385   
那操作系统只能调度到进程级别吗? 进程只是资源共享,线程才是调度的实体吧 

http://bbs.csdn.net/topics/50236201

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值