XV6 进程线程-发布
一、什么是进程,什么是线程?操作系统的资源分配单位和调度单位分别是
什么?XV6 中的进程和线程分别是什么,都实现了吗?
1. 1) 进程(Process),是操作系统中最核心的概念。在进程模型中,计算机上所
有可运行的软件,通常也包括操作系统,被组织成若干顺序进程,简称进程。
进程,是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源
分配和调度的独立单位。又称任务(Task or Job)。
进程,本质是一个正在运行的程序,包括程序计数器、寄存器和当前变量的值。在
某一时刻,CPU 上只能运行一个进程。所以,只有一个 CPU 的操作系统的并发能力,
实际上是(伪)并发,是将一个 CPU 变换成多个虚拟的 CPU,每个进程拥有其自己的
虚拟 CPU,真正的 CPU 在多个进程之间来回切换。这种快速的切换称为多道程序设计。
每个进程都有一个相同格局的、独立的虚拟地址空间。该地址空间中存放有可执行
程序、程序的数据以及程序的堆栈。进程基本上是容纳运行一个程序所需要所有信息
的容器。
在许多操作系统中,与一个进程相关的所有信息,除了该进程自身地址空间的内容
以外,均存放在操作系统中的一张表中,称为进程表,进程表是数组(或链表)结构,
当前存在的每个进程都要占用其中的一项。所以,一个(挂起的)进程包括:进程的
地址空间,以及对应的进程表项(其中包括寄存器以及稍后重启动该进程所需要的许
多其他信息)。
一个进程是某种类型的一个活动,它有程序、输入、输出以及状态。单个处理器可
以被若干进程共享,它使用某种调度算法决定何时停止一个进程的工作,并转而为另
一个进程服务。
进程有 3 个基本状态,运行状态、就绪状态和等待状态(或称阻塞状态)。
在传统操作系统中,每个进程有一个地址空间和一个控制线程。
2) 线程(Thread),可称为轻量级的进程,是操作系统可以运行调度的最小单位。
多线程是共享同一个进程的地址空间和所有可用数据的准并行实体。多线程使得顺
序进程的思想得以保留下来,这种顺序进程阻塞了系统调用(如磁盘 I/O),但是仍旧
实现了并行性。对系统调用进行阻塞使程序设计变的较为简单,并且并行性改善了性
能。
进程模型基于两个独立的概念:资源分组处理与执行。即:1)用某种方法把相关的
资源集中在一起,进程中有存放程序正文和数据以及其他资源的地址空间,这些资源
包括打开的文件、子进程、即将发生的定时器、信号处理程序、账号信息等。2)进程
拥有一个执行的线程,在线程中有一个程序计数器,用来记录接着要执行哪一条指令;
线程拥有寄存器,用来保存线程当前的工作变量;线程还拥有一个堆栈,用来记录执
行历史,其中每一帧保存了一个已调用的但是还没返回的过程。尽管线程必须在某个
进程中执行,但是线程和它的进程是不同的概念,并且可以分别处理。进程用于把资
源集中到一起,而线程则是在 CPU 上被调度执行的实体。
线程给进程模型增加了一项内容,即在同一个进程环境中,允许彼此之间有较大独
立性的多个线程执行。在同一个进程中并行运行多个线程,是对在同一台计算机上并
行运行多个进程的模拟。前者,多个线程共享同一个地址空间和其他资源。而后者,
多个进程共享物理内存、磁盘、打印机和其他资源。
多道程序设计是,通过在多个进程之间的来回切换,系统制造了不同的顺序进程并
行运行的假象;通过 CPU 在线程之间的快速切换,制造了线程并行运行的假象,好似
它们在一个比实际 CPU 慢一些的 CPU 上运行。
线程可以在用户空间实现,也可以在内核中实现,还可以混合实现。