操作系统学习笔记 第二章 进程管理(2)

进程的实现

进程的实现,相对于线程来说是比较确定的。操作系统内核维护一个进程表,也称为进程控制块(PCB)。进程表项为一个进程启动的必要信息,包括进程管理(寄存器,PC,PSW,调度信息,打开文件的状态等)、存储管理(代码段、数据段、堆栈段指针等)、文件管理(目录、PID等)信息。

当进程从运行态进入其他状态时,PCB保存着启动它的所有信息,当该进程再次被调度程序选中时,就要恢复这些信息。保存的步骤,包括:硬件压入PC等,把中断向量装入新的PC,然后通过汇编语言保存寄存器并设置新的堆栈,运行中断服务程序(通常为C),再通过调度程序选中一个进程,把它的运行信息载入寄存器以及PC等。

二、线程的模型

线程的使用,是因为进程创建、撤销、切换的代价很大,并且需要共享内存空间和数据,以及提高运行速度。一个例子是Web服务器,它如果采用进程的方式,那么一个页面请求被响应时,进程就进入了阻塞态,从而无法提供其他服务。而采用线程,可以使用一个线程接受请求,然后把请求分派给工作线程,实现同时响应,并且共享内存。

线程模型基于两个概念:资源分组处理与执行。线程的目的,是共享资源,并共同完成一个任务。

线程与进程非常类似,不过比进程轻量,原因在于:进程拥有独立的虚拟地址空间,而同一个进程中的线程,共享内存空间与资源。因此,线程只需要保存PC、寄存器、堆栈等,无需保存大量的文件、进程管理信息。线程之间也是没有保护并且平等的,因为它们共享了同样的资源,包括打开的文件、子进程等。

POSIX(portable operating system interface of UNIX)规定了UNIX系统的通用线程包pthread。

线程的实现

线程的实现,总的来说有两种:在用户空间中实现线程,以及在内核中实现线程

用户空间中实现线程

这种情况下,内核是不知道线程存在的,调度单位是进程。因此,为了体现多线程的作用,就必须考虑阻塞的问题。

因为用户管理线程,所以每个进程都要有线程表,与进程表类似,不过记录的内容比较少。

用户级线程的优点有很多:

(1)可以在不支持线程的系统上运行。

(2)速度非常快,因为它不需要陷入内核,不需要上下文切换,也不需要cache刷新。

(3)可以允许每个进程定制自己的线程调度算法。

当然,因为内核不知道线程的存在,需要解决阻塞的问题,可以通过非阻塞系统调用,或者检查调用是否会阻塞(如select,包装器)。

另外,因为内核不知道线程的存在,进程内部没有时钟中断,所以线程必须主动让出CPU,不然其他线程无法抢占。

内核中实现线程

内核中实现线程,即在内核中维护一个线程表,而进程不维护。与用户空间中实现相比,优缺点基本是相反的。

内核中的实现,自然不需要非阻塞I/O,但是代价就是,线程的操作花销很大。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值