当前位置:嗨网首页>书籍在线阅读

02-二进制程序、进程和线程

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.1 二进制程序、进程和线程

二进制程序(binaries)是指保存在存储介质上的程序,以给定操作系统和计算机体系结构可访问的格式编译生成,可以运行但尚未开始。进程(processes)是操作系统对运行的二进制程序的抽象,包括:加载的二进制程序、虚拟内存、内核资源如打开的文件、关联的用户等。线程(threads)是进程内的执行单元,具体包括:虚拟处理器、堆栈、程序状态。换句话说,进程是正在运行在二进制程序,线程是操作系统调度器可以调度的最小执行单元。

一个进程包含一个或多个线程。如果一个进程只包含一个线程,则该进程只有一个执行单元,每次只有一个操作在运行。我们称这种进程为“单线程”,它们是经典的UNIX进程。如果一个进程包含多个线程,每个会有多个操作在同时执行。我们称这种进程为“多线程”。

现代操作系统包括了两种对用户空间的基础的虚拟抽象:虚拟内存和虚拟处理器。它们使得进程“感觉”自己独占机器资源。虚拟内存为每个进程提供独立的内存地址空间,该内存地址连续映射到物理RAM或磁盘存储(通过分页实现)。实际上,系统的RAM中可能有100个不同的正在运行的进程,但是每个进程都“感觉”所有的内存都是自己独占的。虚拟处理器使得进程“感觉”只有自己正在运行,操作系统对其“隐藏”了事实:多个进程在多个处理器(可能)以多任务方式同时运行。

虚拟内存是和进程相关的,与线程无关。因此,每个进程有独立的内存空间,而进程中的所有线程共享这份空间。相反地,虚拟处理器是和线程相关的,与进程无关。每个线程都是可独立调度的实体,支持单个进程每次“处理”多个操作。很多程序员会把虚拟内存和虚拟处理器混淆在一起,但从线程角度看,它们是完全不一样的。和进程一样,线程也“感觉”自己独占一个处理器。但是,和进程不同的是,线程并没有“感觉”自己独占内存——进程中的所有线程共享全部内存地址空间。