openEuler操作系统(第2版)
作者简介
"张尧学 中国工程院院士,清华大学计算机系教授,教育部软件工程专业教指委主任委员,国务院学位委员会计算机学科评议组召集人。长期从事操作系统、新型网络计算模式、计算机网络等领域的研究。以第一完成人获得国家自然科学奖一等奖1项(2014年),国家技术发明奖二等奖1项(2004年),国家科技进步奖二等奖2项(2001年和1998年),省部级奖励5项,何梁何利基金科学与技术进步奖(2005年)。曾任中南大学校长(2011—2017年)。现担任《电子学报》(英文版)主编。 任炬 清华大学计算机系副教授,博士生导师,国家优秀青年基金获得者,湖南省杰出青年基金获得者。研究方向包括物联网、操作系统、边缘计算等。在国际著名期刊及会议上发表论文100余篇。曾获IEEE通信学会亚太区最佳青年学者奖、IEEE可拓展计算专委会早期职业成就奖等荣誉。担任《电子学报》(中文版和英文版)、IEEE Transactions on Vehicular Technology等多个国内外重要期刊编委,曾任多个国际会议主席、程序委员会主席、领域主席等职务。"
内容简介
第3章 进程与线程
在早期的单道批处理系统中,计算机一次只能执行
一个程序。该程序完全控制机器,并访问所有的系统资
源。这种控制方式存在资源浪费、系统运行效率低等问
题。为了提高资源利用率和系统的吞吐量,现代计算机
系统采用多道程序技术,允许多个程序并发执行,共享
系统资源。在多道程序环境下,由于CPU需要在各程序
之间来回切换,程序的执行具有间断性。此外,由于并
发执行的程序共享系统中的资源,任一程序对这些资源
状态的改变都会影响其他程序的运行环境,即程序之间
存在制约关系。然而,程序只是对计算任务和数据的静
态描述,无法刻画并发执行过程带来的这些新特征。因
此,计算机系统使用进程作为描述程序执行过程且能用
来共享资源的基本单位。另外,由于进程的创建和切换
开销较大,为了进一步提高执行效率,操作系统引入了
“线程”的概念。本章先通过程序的并发执行过程引出
进程这一抽象,并介绍系统对进程的描述和控制; 随
后介绍进程是如何通过系统调用在CPU上来回切换,从
而实现并发执行的; 最后对线程进行了详细阐述。
3.1进程的概念
为了让程序源代码从人类易于理解的高级语言转换
成计算机能够执行的机器语言,所有程序都将经过编译
、链接、加载和执行4个阶段。一段时间内,机器通常
并不只执行一个程序,而是并发地执行多个程序。为了
对并发执行的程序加以描述和控制,操作系统引入了“
进程”这一抽象。
3.1.1程序: 从源代码到执行
图31展示了一份C语言源代码(符合C99标准),
它的功能是判断一个年份是否是闰年。下面以该程序为
例,介绍一个程序从编写源代码到执行的过程。其中,
链接用于将多个可重定位目标文件(由程序编译而成或
是来自静态库)合并成一个可执行文件。由于链接过程
与本章相关性不强,此处省略,感兴趣的读者可查阅编
译原理相关书籍进行了解。
1. 编译阶段
编译的目的是将基于高级语言编写的源代码转换成
计算机硬件能够执行的机器语言。假设图31的C程序
保存在文件example.c中,那么可以使用图32中的交
叉编译命令将example.c编译成ARMv8架构下可执行的二
进制文件。
1.#include