Linux 系统管理

概述: 为了提高CPU的使用率,使其尽可能的处于工作状态,这是操作系统管理功能的主要目的之一。
在linux系统中,提高CPU的使用率,一般采用的技术措施主要为多道和分时,CPU在进程之间切换,按照一定的规则轮流执行每个进程。如果是一个CPU的系统,这些进程在宏观上看起来好像是并行,而微观上来看仍然是串行的,这种处理方式被称为并发执行 。操作系统通过并发控制机制,对CPU进行合理分配、调度,确保每个进程都能得到公平合理的执行,使系统中的各种资源得到充分的利用。
作业: 作业是用户向计算机系统提交一项工作的基本单位,是用户在一次事务处理货计算过程中要求计算机所工作的总和。它容易和程序进行混淆,但作业和程序并不是同一个概念,它和程序是两个相互联系而又不同的概念。如果一次业务处理可以由某一个程序完成,就是说这个业务处理只要提交这一个程序就够了,这种情况下,这个程序就是一个作业。通常,完成一次业务需要由多个程序协同来完成的,这是多个程序、这些程序需要的数据以及必要的作业说明一起构成了一个作业。系统可以通过作业说明书或作业控制语句(JCL)控制程序和相应的数据执行,完成整个业务处理。
按照对作业的处理方式,可以将作业分为联机、批处理等作业。在Linux中的shell提供了操作系统和用户之间的联机命令接口。Linux的shell同时提供了程序接口。用户通过提交一个命令或一个命令序列以批处理方式执行特定的操作。在Linux分时批处理系统中,也可以对作业执行时的响应特征分为前台作业和后台作业。
在多用户系统中,多个用户、不同类型的作业可能同时请求执行,控制和管理这些作业,协调它们之间的关系,就是作业的调度,作业调度是CPU调度的一部分。

进程: 在计算机的内存中,可以同时存放多个相互独立的已经开始运行的程序实体,各个程序按照某种规则轮流使用CPU,这是现代多道操作系统实现的资源共享,提高系统资源利用率的主要方式。描述这些程序实体的概念就是进程。在多道的情况下,每个进程都独立拥有各自的资源,占有CPU,独立的运行。但在多核系统中,同时存在多个进程,所以当某个进程等待状态是,操作系统将把CPU控制权拿过来并将其交给某些可以运行的进程。进程之间在获取CPU使用权的过程中,进程之间是存在着相互制约、相互依赖的约束关系。
一种最糟糕的情况是所有进程拥有部分资源,同时在等待其它进程拥有资源,这样,所有进程都无法运行,从而进入永久等待的状态,这种情况下被称之为死锁,死锁是对操作系统资源极大的浪费,必须设法避免。
进程也称为任务。简单的来说,进程就是正在运行的程序,更为严谨的表达就是一个具有独立功能的程序关于某个数据集合的一次运行活动是进程
进程性质: 进程是操作系统分配资源和进行调度的独立单位,因此,进程具有独立性。同时,进程也具有动态性。在操作系统中同时存在多个进程,这些进程拥有各自的资源,各自独立地执行,对于单核系统,进程在宏观上是同时运行而微观上是依次执行的,这个情况下称之为并发执行
进程与程序: 进程和程序是一对相互联系的概念,程序是指令的集合,是 静态 的,描述完成某个功能的一个具体操作过程,而进程是针对某一组数据的一次执行过程,更强调动态 特征。一个完整的进程,包括程序、执行所需要的数据、记录进程状态的数据资料等。在操作系统中,进程是按照时间片轮流获得CPU的使用权,完成进程间切换。对于单核CPU的系统来说,每个时刻只能执行一个进程,当分配给该进程的时间片用完之后,不管该进程运行到什么程度,都必须立即停止,然后让出CPU资源,下一个进程进入执行状态。在让出CPU的进程中必须记录好正在运行的状态。包括寄存器、堆栈等各种信息,保证这些信息在下次进程获得CPU使用权后还可以正确的从上次执行到的位置继续往下执行。一个程序在处理相同或不同操作数据是可以同时对应于多个进程。一个程序也可以包含多个程序,某个程序在运行过程中,可能同时会调用到多个其它程序,这些具有调用关系的多个程序共同构成一次运行活动,即一个完整进程。
对于批处理系统,一般情况下,作业在外存中专门的作业队列中等待进入内存执行,要经过一次宏观调度,由外存进入内存,以进程的形式运行。而对于Linux这样的分时系统,没有宏观调度,作业不经过调度,直接进入内存,以进程的形式开始运行。任何一个进程,都存在于内存中,并且是已经开始运行的动态实体。
进程描述: 我们都知道,进程是一个动态的概念,描述程序的一次运动活动。它存在系统内存中,是操作系统可感知、可控制的动态实体,是系统分配各种资源、进行调度的基本单位。
进程控制块: 在操作系统中,CPU在多个进程之间来回切换,每个进程都会在暂停、运行这两种状态之间来回转换。当一个进程在CPU切换过了重新进入运行状态时,它必须严格精确的接着上次运行的位置继续运行,进程的静态描述可以保持切换现场,确保准确衔接,保证进程调度的实现,顺利完成程序所规定任务。进程切换的现场成为进程上下文,包含一个进程所具有的全部信息:进程控制块(PCB)、有关程序段和相应的数据集,具体如下图所示:
在这里插入图片描述
如上图所看,PCB记录进程各种状态的数据体,PCB是操作系统管理的感知、控制进程的数据实体,可以通过它来找到进程的程序段和数据集等,操作系统正是通过PCB来控制进程的,一般来说,PCB记录着进程的所有信息,是全部或者部分常驻内存的,PCB记录着程序段和数据集的地址指针,通过这些指针,就可以得到具体的指令和数据,如上图,PCB根据功能划分为:进程描述信息、进程控制信息、进程资源信息、CPU现场保护等模块,其中资源信息部分包括:程序段和数据集。在linux系统中,进程控制块PCB用一个task-struct的结构体来描述。下面分别说一下四个组成部分:
**1. 进程描述信息 ** 通过进程描述信息,Linux 系统可以唯一确定某一个进程的基本情况,可以了解该进程所属用户以及用户组等信息,同时还能够确定这个进程和所有进程之间的关系。描述信息一般包括:进程号、用户和组标识以及描述进程家族关系的链接信息。
(1)进程号:在操作系统中,当一个程序运行起来的时候,系统会自动分配一个标识号,可以通过这个标识号识别、控制、调度这个进程,其他进程也可以通过这个标识号与之通信,用户使用操作命令或系统调用标识号进而控制该进程,这个标识号就是进程号。
(2)用户和组标识:在Linux系统中有四类不同的用户和组标识,主要用来控制进程对系统文件的访问权限,实现系统资源的安全访问。Linux使用组将文件和目录的访问特权授予一组用户,一个进程可以同时属于多个组,这些组都被放在进程的task-struct中的group数组中。
(3)连接信息:操作系统中进程之间的关系一般都是树状的家族关系,连接信息记录着某个进程的父进程、兄弟进程已及子进程等进程信息,描述一个进程在整个家族系统中的位置。

** 2. 进程控制块信息 ** 进程的控制信息记录了进程的状态、调度信息、时间和进程间通信信息等,是系统确定进程的状态、进程间 关系、进程调度等主要依据。在进程的生命周期中,进程总是不停的在各种状态之间转换,如运行、就绪、暂停、等待。系统的调度程序利用调度信息决定哪一个进程应该运行,包括优先级、实时优先级、计数器和调度策略等。其中时间和定时器,给出进程暂有何利用CPU等情况,是调度的依据,也是进行统计、分析以及计费的依据。如果多个进程之间进行通信,这些通信的信息也会保存在PCB中,Linux 支持电信的UNIX进程间通信机制:信号、管道,同时也支持System V 通信机制:共享内存、信号量、消息队列等。在Linux 的PCB中包含大量的系统资源信息,这些信息记录了该进程有关存储器的各种地址和资源、文件系统以及打开文件的先进性等等。可以通过这些资源得到进程运行需要的相关程序段以及必要数据。进程的静态描述必须保证一个进程在获得CPU 并重新进入运行状态是,能够精确的接着上次运行的位置继续运行,相关程序段和数据集以及现场都需要保存起来。一般情况下,现场包括寄存器、堆栈等基本数据。task-struct是Linux系统的进程控制块(PCB),通过对PCB的操作,系统为进程分配资源进行调度,最终完成进程的创建和撤销。系统利用PCB中的描述信息来标识一个进程,根据PCB中的调度信息决定是否运行。如果这个进程进入运行,首先根据其中的CPU现场信息来决定恢复运行现场,然后根据资源信息获取对应的程序段和数据集,接着上次的位置开始执行,同时通过PCB中的通信信息和其他进程协同工作。

进程状态转换: 在分时系统中,一个进程拥有了所需要的全部资源就可以开始执行,当分配时间片结束后,让出CPU资源,这种只要能够占有CPU就可以进入执行的状态称为就绪状态,但在多个进程之间相互制约,某个进程必须等到某个事件发生后,才能够竞争CPU资源,这就是等待状态,当等待时间发生之后,这个进程被唤醒,有等待状态进入就绪状态,直到获得CPU才开始执行,等待状态、就绪状态和执行状态是一个进程所具有的最基本的三种状态,如下图所示,三种状态之间的转换:
在这里插入图片描述
在Linux系统的2.2.16版本中,一般情况下进程有6种状态:运行、可中断等待、不可中断等待、僵死、暂停、交换等,而后来的2.4.0版本中取消了交换状态加入独占状态。如下图所示,Linux系统进程状态表:
在这里插入图片描述
运行状态:在Linux系统中的运行状态实际包含了上述基本状态中的执行和就绪两种状态,进程到底是正在运行还是处于就绪状态准备运行,要靠当前是否占有CPU资源来区分。
等待状态:等待状态可以划分为可中断和不可中断两种等待状态。处于这种状态的进程都在等待某个事件或某个资源,可中断等待状态的进程可以被信号唤醒而进入就绪状态等待调度,而不可中断等待状态的进程是因为硬件资源无法满足,不能被信号唤醒,必须等到所有等待的资源得到之后由特定的方式唤醒。
僵死状态:由于某些原因进程被终止,这个进程所拥有的内存、文件等资源全部释放了之后,还保存着PCB信息,这种占有PCB但无法运行的进程就处于僵死状态。
暂停状态:一般运行状态转换成暂停状态,等待某种特殊处理,比如:调试跟踪的程序,每执行到一断点,就进入暂停状态,等待新的输入信号。
交换状态:处于交换状态的进程正在执行内存、外存的交换工作。在2.4.X版本中删除该状态。
独占状态: 它应该是等待状态的一种,处于独占状态的进程位于等待队列中,当等待的 事件发生时,只有处于这种状态的进程被唤醒,其他处于可中断和不可中断等待 状态的进程则继续等待。Linux 2.4引入独占状态后,如果事件发生,只唤醒处于 独占状态的那一个进程,这就可以大大提高Apache这类Web应用的效率,使 Linux更适合网络服务器的角色。Linux系统进程的状态转换情况。采取一定的简化措施:按照进程是否 占有处理机为依据,把进程的运行状态分为执行和就绪两种状态;等待状态统一 考虑,不再区分是否可中断,独占状态也作为一种等待状态处理;不涉及交换状 态。如下图,Linux系统进程状态转换示意图:
在这里插入图片描述
所有的进程必须在就绪之后,才有资格竞争CPU,进入运行状态。这样,进 程的整个生命周期中,大致的转换路径总是沿着三个闭合回路进行。
就绪状态和执行状态形成第一个回路。进程进入就绪态,放入可执行队列等 待,一旦被调度函数选中,就切换现场,进入运行状态,等自己的时间片耗尽之 后,马上保护现场,让出CPU,转入就绪状态,等待新的调度。
执行状态、等待状态和就绪状态形成第二个回路。处于执行状态的进程,有 时需要等待某个事件或某种资源的发生,这时,继续占有CPU也无法开展工作, 就转入等待状态,CPU由下一个被调度的进程占有。当等待进程所等待的事件发 生后,等待进程被唤醒,进入就绪状态。
执行状态、暂停状态和就绪状态构成第三个回路。当接收到某种特殊的信号, 比如SIGSTOP(Linux的停止信号)时,处于执行状态的进程放弃CPU,保护现 场之后,进入暂停状态,直到获得另外一个特殊的信号才进入就绪状态。
一个处于执行状态的进程调用退出函数exit之后,进程就会进入僵死状态, 这种状态下,进程释放了PCB之外的所有系统资源。也就是说,它在系统中只留 下这个进程的一个PCB。
僵死进程的父进程通过PCB了解到该进程所处的状态后,采取相应的处理措 施,回收PCB,这个进程就完成了它的使命,从僵死走向彻底消亡,上图右上方 的虚箭头表示了这种结局。
进程控制: 进程控制,是指对系统中的全部进程实施有效的管理,使得进程能够及时创 建、撤销,正确地完成进程各状态之间的转换,使得多个进程高效率并发执行, 达到系统资源高度共享的目的。
进程状态之间的转换转换通常由三种不同的方式控制:进程控制原语、系统 核心函数(比如调度)、和外部事件发生(比如中断)。
这里说的所谓原语, 指系统状态下执行的一些具有特定功能的程序段, 这 些程序段具有“原子性” ,是执行过程中不可分割的最小单位。用于进程控制 的原语有:创建原语、撤销原语、阻塞原语、唤醒原语等。
(1) 创建原语 进程创建原语用于建立一个新的进程,这个新进程可以由内核调用进程创建 原语建立,也可以由父进程执行进程创建原语生成一个子进程,子进程还可以生 成子进程,以形成树形进程家族结构。进程创建原语的主要任务是形成进程的 PCB, 因此,调用者必须提供有关的参数,例如进程名、进程优先级、进程正 文段起始地址、资源清单等。
(2) 撤销原语 当一个进程完成了指定的任务或由于某种错误导致异常终止时,要撤销这个 进程以便释放进程占用的资源。进程撤销原语根据调用者提供的信息,找到指定 的进程,回收其占用的资源和PCB。
进程约束: 现代操作系统中,程序并发执行,多个进程各自独立地运行,同时竞争和共 享系统中有限的资源,这种竞争与合作构成了系统进程之间的约束关系。每个进 程独立地申请和释放系统资源,把申请某一类资源的进程称为该类资源的消费者, 把释放同类资源的进程称为该类资源的生产者,就得到描述进程约束关系的一般 模型:生产者-消费者问题,也称为有界缓冲区问题。
比较简单的情况,两进程共享一个长度为N(N>0)的有界缓冲区,一个进 程Pp往缓冲区中送数据,是生产者,另一个进程Pc从缓冲区中读取数据,是消 费者。如下图表示生产者和消费者。
在这里插入图片描述
首先,生产者进程Pp和消费者进程Pc共享同一个有界缓冲区,对这个缓冲 区的操作必须是独占的。这种不允许多个并发进程交叉执行的资源称为临界资源, 临界的程序段资源称为临界部分或临界区。临界资源是由于不同并发进程共享某 个资源造成的,不可能通过增加资源的方法解决。这种因为共享某一公有资源而 引起的在临界资源内不允许并发进程交叉执行的现象,称为进程间的间接约束
由于对临界资源的共享,而产生了临界区问题。对于有着临界区问题的并行 进程之间必须互斥,以保证不会同时进入临界区。
其次,对生产者进程Pp和消费者进程Pc访问共享有界缓冲区的顺序有严 格的要求。具体来讲,这种限制为: (1) 消费者进程Pc要接收数据时,有界缓冲区必须至少有一个单元是满的; (2) 生产者进程Pp要发送数据时,有界缓冲区必须至少有一个单元是空的。
这样存在一组相互独立的并发进程,各自的执行结果互为对方的执行条件, 从而限制各进程执行速度的过程,称为进程间的直接制约。存在直接制约关系, 相互发送消息进行互相合作、互相等待,各自按照一定的速度向前推进的过程称 为同步。
消费者进程和生产者进程之间因为共享缓冲区,相互竞争而间接制约,具有 互斥关系,同时相互以对方的运行结果为条件而直接制约,也具有同步的关系, 是一对同时具有竞争和合作的进程。
在并发系统中,进程之间相互制约,具有同步和互斥是相当普遍的现象。这 种进程之间的相互关系,依靠单个进程自身的力量是无法解决的,必须以进程间 的相互通信为基础,互相发送信息,才能协调解决。具体的同步、互斥实现方案 有很多种,分别基于不同的通信方式。
进程通信: 进程间通信是协调解决多个进程之间的约束关系,实现进程共同进展的关键 技术,是操作系统中控制进程并发执行必不可少的机制。进程间的通信有两种方 式:一是互相发送少量的控制信息,一般只传递一个或者几个字节的数据,进程 利用这些简单的信息,实现互斥和同步,控制运行速度,这种简单的通信方式被 称为进程间的低级通信;另外一种方式称为进程间的高级通信,基本不涉及进程 执行速度控制,用来在进程之间传递大量的信息,由于这种通信方式主要用于交 换信息, 因此,在开发本地进程间通信的同时,也为远程进程间的通信,和计 算机网络的开发及控制奠定了基础。
进程通信类型: 按照通信进程双方的地位,可以把进程通信分为:主从式、会话式、消息或 邮箱机制以及共享存储区四种类型。
(1)主从式:主进程一方在整个通信过程中处于绝对的控制地位,它可以直接控制从进程的动作,自由地使用从进程的资源和数据。

(2) 会话式 一方进程提供服务,另外一方进程在得到服务方的许可之后,可以使用其提供的 服务。在通信过程中,双方的连接关系固定,客户进程提出服务请求,服务进程 根据情况控制服务的状态和内容
(3) 消息或邮箱机制 通信双方具有平等的地位,和现实生活中的邮件类似。通信双方通过缓冲区或邮 箱存放被传送的数据, 不需要建立双方直接的连接关系。申请通信的发起方进 程不管接收方进程的状态,把信息直接送入双方共享的缓冲区(或者邮箱)中, 接收进程在合适的时机去读取缓冲区(或者邮箱)以接收信息。
(4) 共享存储区 共享存储区通信方式中,通信双方进程共享内存中的一段存储空间,共同操作这 个存储区,达到数据共享的目的。通信过程中,数据一直存放在共享存储区中, 不需要移动,因此特别适用于大量数据的传递。

Linux系统的进程通信: Linux系统提供了多种通信机制,利用这些机制,可以方便地进行进程之间 的相互协调,实现进程的互斥和同步。 (1) 信号(signal) 信号属于Linux系统的低级通信,主要用于在进程之间传递控制信号。 信号可以发给一个或多个进程,可以是由某个进程发出,也可以由键盘中断 产生,还可以是由shell程序向其子进程发送任务控制命令时产生。进程在某些系 统错误环境下也会有信号产生。
除了两个信号外,进程可以忽略这些信号中的绝大部分,这两个信号是引起 进程终止执行的SIGSTOP信号和引起进程退出的SIGKILL信号。至于其他信号, 进程可以选择处理它们的具体方式。信号没有固有的相对优先级。
并不是系统中每个进程都可以向所有其他进程发送信号,只有核心和超级用 户具有此权限。普通进程只能向具有相同uid和gid的进程或者在同一进程组中的 进程发送信号。信号是通过设置task-struct结构中signal域里的某一位来产生的。 如果进程没有阻塞信号并且处于可中断的等待状态,则可以将其状态改成 running,若确认进程还处在运行队列中,就可以通过信号唤醒它。
(2) 管道(pipe) 管道是UNIX操作系统传统的进程通信技术。Linux管道通信包括无名管道和 有名管道两种,通过文件系统来实现。管道也是一种特殊的文件类型,实际上是 通过文件系统的高速缓冲实现的。
两个进程通过管道进行通信时,两个进程分别进行读和写操作,都指向缓冲 区中同样的物理单元,一个进程写入数据,另一个进程从缓冲区中读取数据,从 而实现信息传递。管道方式只能按照先进先出方式单向传递信息。管道方式可以 用来进行大规模的数据传递。
(3) SYSTEM Ⅴ进程间通信 信号量、消息队列和共享内存是UNIX/Linux系统常用的通信方式。 消息队列用来在进程之间传递分类的格式化数据,共享内存方式可以使不同进程 共同访问一块虚拟存储空间,通过对该存储区的共同操作来实现数据传递,信号 量主要用于进程之间的同步控制,通常和共享内存共同使用。 这三种方式在系统中是作为一个整体实现的。
共享内存是这三种方式中通信效率最高的,它在进程的虚拟空间中进行, 而且不需要数据的移动也可以实现大规模的数据传递。
(4)套接字 (socket) 套接字是用来通过网络实现运行于不同计算机上的进程之间通信的机制。它 可以实现数据的双向规模传递,是整个网络通信的基础。具体的原理和实现与网 络协议等有关
死锁: 是指所有并发进程都拥有部分资源,同时都在等待其他进程拥有的资 源,而且在得到对方资源之前不会释放自己占有的资源,所有进程都进入永久等 待状态而无法运行的情况。死锁是并发进程约束关系处理不当造成的最严重的后 果,是对系统资源极大的浪费,必须设法避免。
死锁出现的根本原因是系统资源的有限性。并发进程竞争资源,调度不当, 就可能出现死锁的情况,因此必须采取适当的措施来消除死锁。
**产生死锁的必要条件有四个: **

• 并发进程之间是互斥关系,每个进程必须独占某个系统资源; • 进程占有的资源在未结束使用之前,不能被强行剥夺,只能由该进程自己 释放;进程需要的资源采用部分分配的方式,在等待新资源的同时,继续 占有已分配的资源;

• 各占有资源的进程形成环路,每一个进程已获得的资源同时被下一个进程 请求。

解决死锁的方案就是破坏死锁产生的必要条件。 方法分为预防、回避、检测 恢复三种。预防 指采取某种策略,控制并发进程对资源的请求,保证死锁的四个 必要条件在系统运行的任何时刻都无法满足。避免指系统采取某种算法,对资源 使用情况进行预测,使资源分配尽可能合理,避免死锁的发生。这两种方法需要 大量的系统开销,而且系统的资源也无法得到充分的利用。因此,一般系统都采 取检测恢复 的方法,这种方法是在死锁发生之后,根据系统情况,检测死锁发生 的位置和原因,使用外力,重新分配资源,破坏死锁发生的条件,系统就可以从 死锁状态恢复正常运行,这样的方法只要使用少量的系统资源,尤其是CPU时间 就可以排除死锁。

线程 系统中,进程是系统调度和资源分配的基本单位,计算机的CPU不停地在不同进程之间切换,进程切换现场称为进程上下文,每一次切换过程,系统都要对换出进程的上下文做详细记录,然后恢复换入进程的上下文。。因此,系 统的进程管理过程要耗费相当多的系统资源和CPU时间,尤其是对于需要频繁进 程切换的任务。
针对进程切换的时间和资源耗费问题,为了减少系统进程切换的时间,提高 整个系统的效率,引入了线程的概念。 线程 是在一个进程内的基本调度单位。线程可以看作是一个执行流,拥有记 录自己状态和运行现场的少量数据(栈段和上下文),但没有单独的代码段和数 据段,而是与其他线程共享。
多个线程共享一个进程内部的各种资源,分别按照不同的路径执行,同时线 程也是一个基本调度单位,可以在一个进程内部进行线程切换,现场保护工作量 小。一方面通过共享进程的基本资源而减轻系统开销,另一方面提高了现场切换 的效率,因此,线程也被称为轻权进程或轻量级进程。许多流行的多任务操作系 统基本都支持线程。
按照系统的管理策略,线程可以分为用户级线程和系统级线程(内核级线 程)两种基本类型。用户级线程指不需要内核支持,在用户程序中实现的线程都 需要用户程序自己完成。系统级线程由内核完成线程的调度并提供相应的系统调 用,用户程序可以通过这些接口函数对线程进行一定的控制和管理。
用户级线程不需要额外的内核开销,一般只要提供一个线程库即可,剩下的 工作就主要由用户自己负责了。但是由于用户级线程与系统内核无关,当一个进 程因I/O而被调度程序切换为等待状态时,属于该进程的某个执行线程可能仍然 处于执行状态。
系统级线程的调度由内核完成,不需要更多用户干预,但要占用更多的系统 开销,效率相对低一些。
线程也是系统中动态变化的实体,它描述程序的运行活动,在内存中需要记 录。线程的记录信息要保证系统能够准确地进行线程切换。
在线程的生命周期里,线程作为一个基本的执行单位而存在,不断地在执行 和停止的状态之间转换。线程的基本状态是执行、就绪和等待。
线程的同步是一个相当关键的问题。线程之间的通信相对容易,而线程间的 同步问题需要更仔细地对待,特别是用户级线程,这个问题相当突出。
进程 是操作系统资源分配和系统调度的基本单位,每一个进程都有自己独立 的地址空间和各种资源,线程也是一种系统调度的基本单位,多个线程可以共享 一个进程的资源,在存储方面,线程占用的资源更少。
进程的调度 主要由操作系统完成,而线程根据其类型的不同,可以由系统调 度(内核级线程),也可以由用户进行调度(用户级线程)。
进程调度 的过程中要进行切换,切换现场的保护与恢复要求对进程上下文做 完整的记录,要消耗一定的存储资源和处理机时间;线程共享进程的资源,可以 在进程内部切换,不涉及资源保存和内存地址变换等操作,可以节约大量的空间 和时间资源。因此,对于切换频繁的工作任务,多线程方式比多进程方式可以提 供更高的响应速度。
多个线程共享同一进程的资源,线程相互间通讯容易。而进程间通讯一般必 须要通过系统提供的进程间通讯机制。
** 进程和线程** 都是用来描述程序的运行活动,是存在于系统存储区中的动态实 体,都有自己的状态,整个生命周期都在不同的状态之间切换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值