线程及其实现

一、线程的定义

在操作系统中引入进程的目的是为了使多道程序并发执行,以改善资源利用率及提高系统吞吐量

而引入线程,是为了减少程序并发执行时所付出的时空开销,使操作系统有更好的并发性。

---- 线程是进程内的一个执行单元,是比进程更小的执行单位。

---- 一个进程可以包含多个线程。

---- 线程是进程内的一个可调度实体

---- 线程是进程内一个相对独立的、可调度的执行单元。

线程的组成部分如下:

---- 线程的唯一标识符及线程状态信息。

---- 未运行时所保存的线程上下文,可以把线程看成进程中一个独立的程序计数器。

---- 内核栈,在内核态工作时保存参数,在函数调用时保存返回地址等。

---- 用于存放线程局部变量用户栈的私有存储区。

在一个进程中可以包含多个可以并发执行的线程,系统按进程分配所有除CPU以外的系统资源(主存、外部设备、文件等)。

进程只作为除CPU以外系统资源的分配单位,线程则作为处理器的分配单位,甚至不同进程中的线程也能并发执行。

一个线程与属于同一个进程的其他线程共享代码段、数据段,以及其他的操作系统资源。即在同一进程中的线程可以共享该进程所拥有的资源。

二、线程状态

与进程类似,线程也有生命周期,因而也存在各种状态。

线程的状态有运行就绪等待,线程的状态转换也与进程类似。

进程创建时,同时也为该进程建立第一个线程,用于运行程序(一个进程至少包含一个线程)。以后在适当的时候,可以通过系统的“线程创建”

系统调用或者其他方法建立后续线程,这些线程共享了进程的程序段和数据段,但是它们有各自的运行栈区stack(寄存器组register set)

可以被独立地调用,占用CPU并发执行。当某个线程被剥夺处理器时,只需把其运行现场保存到该线程的对应栈区,下次该线程被调度时,就又

可以从上一次的剥夺点恢复现场继续执行。当进程内所有的线程结束时,意味着进程结束,从而释放进程所占用的所有资源

----- 在同一进程中,线程的切换不会引起进程的切换,但从一个进程的线程切换到另一个进程的线程时,会引起进程的切换。

----- 通常,线程没有挂起状态,因为这个状态是进程级概念。

三、线程和进程的比较

1)拥有的资源方面

每个进程都有一个独立的地址空间,它拥有若干代码段和数据段,此外还拥有若干打开文件,主存以及至少一个线程。

这些资源随着进程的生成而产生,当进程终止时,它们也同时被系统收回。

创建进程时,系统同时为进程创建第一个线程,进程中只要还有一个线程在执行,这个进程就不会终止,直到它的所有线程终止后,它才终止。

线程拥有较少的资源,创建一个进程比创建一个线程开销大

2)调度方面

进程调度时,进程上下文的切换需要较大的系统开销;而采用线程调度时,由于同一进程内的线程共享进程的资源,只需把线程仅有的一小部分

资源交换即可,从而提高了系统的效率。

也就是说,线程切换比进程切换快得多。但一个进程的线程向另一个进程的线程切换时,将引起进程上下文的切换。

3)并发性方面

引入线程后,不仅进程之间可以并发执行,同一进程内的多个线程也可以并发执行,从而提高了资源的利用率和系统的吞吐量。

4)安全性方面

同一进程的多线程共享进程的所有资源。一个错误的线程可以任意改变另一个线程使用的数据而导致错误的发生。而采用多进程实现不会产生这一

问题,因为系统不允许一个进程有意无意的破坏另一个进程。从保护角度看,使用多进程比多线程可能更好些

===========================================================================================================

1、一个进程进入等待(阻塞)状态时,其断点存放在何处?它被唤醒后从何处继续原来的执行?

答:一个进程进入等待状态是指该进程由于缺乏资源不能占用CPU,而进入等待队列

一个进程由程序段数据段进程控制块(PCB)组成。PCB是进程存在的唯一标志

PCB中包括如下内容:进程标识号进程状态(就绪/执行/等待),进程优先级、程序地址、现场保护区(通常被保护的信息有程序计数器

程序状态字各个工作寄存器等)、通信结构、其他信息等。

----  处于等待状态的进程,它的断点在它的PCB中的现场保护区中保护起来。保存程序运行的CPU现场,以便在将来的某一时刻恢复并继续原来的运行。

它被唤醒后,把它从等待进程队列中摘下,将进程状态改为就绪,然后将它插入到就绪队列中;

等它占用CPU进入执行状态时,从断点处继续执行。

2、为什么说中断是进程切换的必要条件,但不是充分条件?

答:假如在时刻T1与时刻T2之间发生了进程切换,则在此期间一定执行了CPU调度程序,而CPU调度程序是操作系统低层中的一个模块,

运行于内核态,说明在T1与T2时刻之间CPU状态曾从用户态转换到内核态。由于中断是系统由用户态转换为内核态的必要条件

所以中断是进程切换的必要条件,但中断处理完成后可能返回原调用进程,未发生进程切换;也可能选择一个新的进程,导致进程切换。

所以中断是进程切换的必要条件,但不是充分条件。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值