进程与线程
进程的概念: 对用户来说**,是从应用角度出发 : 进程对用户而言,就是一个打开的应用程序,比如说,一个打开的Word,PPT等等.**
**而对于操作系统来说,**是从管理的角度出发,一个程序要在操作系统上面运行,必须接受操作系统的管理,怎么管理呢,一个核心思想就是,先描述,再组织 ,首先你要在我这边登记一下,你要来运行,我就给你一个pcb ,这个pcb上面存储关于你的所有必要信息,我根据pcb来实现对进程的管理.在分配资源的时候,操作系统就以进程作为分配资源的基本单位,比如分配进程地址空间,分配内存,分配其他硬件等环境资源.
举个栗子: 我们去酒店开房,首先要把我们的信息登记一下,然后会给我们一个房卡(房卡相当于一个pcb,以后酒店就以房卡作为一个基本的管理单位). 酒店会给我们分配一间房(就相当于操作系统给进程分配了进程地址空间),这间房子里提供了其他的一些生活必须品(这就像操作系统为进程分配了进程运行所需要的各种环境资源.
栗子中的酒店房卡描述了存储记录了顾客的信息,就相当于PCB里面描述记录了一个进程运行的所有信息,酒店可以通过房卡来作为管理的单位,给顾客分配生活所需要的生活物品,就相当于操作系统以pcb为管理的基本单位,为进程提供它运行所需要的各种环境资源.
线程的概念: 按照官方给的定义: 线程就是一个执行流. 简单来说,线程就是一段运行代码,或者说一个函数,这段代码用来做一件具体的事情.,比如说我们打开一个Word,我们在编辑文字,一个线程在从键盘上获取我们从键盘上输入的文字,还有别的线程在为我们在屏幕上显示菜单,这些线程都是一些小功能,
说到线程必须又必须要说一下进程,操作系统用pcb来描述一个程序的运行,已经运行在操作系统上的程序被称作进程. 而在Linux中,是用pcb来模拟实现线程,因此在Linux中可以把线程理解为一个轻量级线程(light weight process).
在多线程出现之前,进程中只有一个线程,这就是单进程单线程
随着多线程的出现,出现了单进程多线程,多线程是指操作系统支持多个并发执行路径,就是可以同时执行多个执行流,线程的出现是操作系统的一种进步.
以下图说明
进程与线程的关系
首先必须清楚,在多线程没有出现以前,一个进程中只有一个线程,此时这个线程独占了进程中的所有资源
此时的pcb描述、存储、记录的是这个进程中这个唯一线程的运行信息,此时CPU以这个进程中唯一的线程为调度单位,从而为这个线程分配时间片
操作系统支持多线程以后,由多个线程来共享这个进程中的资源,在Linux中,用pcb来模拟实现线程,此时的pcb描述、存储、记录的是一个具体的执行流的相关信息(记录线程的上下文,程序计数器,执行状态). CPU以这个执行流(线程)为基本单位,从而为这个线程分配时间片。
结论 : 进程是资源分配的基本单位,线程是CPU轮询调度的基本单位