| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Linux操作系统——进程管理 -> 正文阅读 |
|
[系统运维]Linux操作系统——进程管理 |
一、进程1.1程序的顺序执行与并发执行程序的顺序执行:程序的各操作步骤之间依序执行,程序与程序之间串行执行,称为顺序执行。顺序执行时单道程序系统中的程序的运行方式。 特点: (1)顺序性:一个操作结束,下一个操作才能开始执行。多个程序要运行时,仅当一个程序全部执行结束,另一个程序才能开始。 (2)封闭性:程序在封闭环境中运行,即程序运行时独占所有资源,程序的执行过程不受外界影响,结果只取决于程序自身。 (3)可再现性:程序执行的结果与运行的时间和速度无关,结果都是可再现的,重复执行该程序结果相同。 总的来说,顺序执行的方式简单,便于调试,但系统资源利用率很低。 程序的并发执行:若干个程序或程序段同时运行。它们在执行时间上是重叠的,即同一程序或不同程序的程序段可以交叉执行。 特点: (1)间断性:并发程序之间因竞争资源而相互制约,导致程序运行过程的间断。例如,在只有一个CPU的系统中,多个程序需要轮流占用CPU运行,未获得CPU使用权限的程序必须等待。 (2)失去封闭性:当多个程序共享系统资源时,一个程序的运行收到其他程序的影响,其运行过程和结果不完全由自身决定。例如,一个程序计划在某一时间段执行一个操作,但很可能在那个时刻到来时它没有获得CPU的使用权限,因而也五大完成该操作。 (3)不可再现性:由于没有了封闭性,并发程序执行结果与执行的时机及执行的速度有关,结果往往不可再现。 并发执行程序虽然可以提高系统资源的利用率和吞吐量,但程序的行为变得复杂和不确定,使程序难以调试,若处理不当还会带来许多潜在问题。 1.2进程的概念:进程(process)是一个可并发执行的程序在某数据集上的一次运行。 程序是进程的一个组成部分,是进程的执行文本,而进程是程序的执行过程。 1.3进程的特性:(1)动态性:进程由“创建”而产生,由“撤销”而消亡,因“调度”而运行,因“等待”而停顿。进程由创建到消失的过程称为进程的生命周期。 (2)并发性:在同一时间段内有多个进程在系统内活动。在宏观上是并发运行,而在微观上是在交替运行。 (3)独立性:进程是可独立运行的基本单位,是操作系统分配资源和调度资源管理的基本对象。因此,每个进程都是独立地拥有各种必要的资源,独立地占有CPU并独立的运行。 (4)异步性:每个进程都独立地执行,各自按照不可预知的速度向前推进。进程之间的协调运行由操作系统负责。 1.4进程的基本状态在多道系统中,进程的个数总是多于CPU的个数,因此它们需要轮流占用CPU。宏观上看,所有进程同时都在向前推进,而在微观上,这些进程是在走走停停之间完成整个运行的过程。 进程有3个基本的状态: (1)就绪态:进程已经分配到了除CPU之外的所有资源,这时的进程状态称为就绪态。处于就绪态的进程一旦获得了CPU便可立即执行,系统中常会有多个进程处于就绪态,他们拍成一个就绪队列。 (2)运行态:进程已经获得CPU,正在运行,这时的进程状态称为运行态。在CPU系统中,任何时刻只能有一个进程处于运行态。 (3)等待态:进程因某种资源不能满足,或希望的某事件尚未发生而暂停执行时,称为等待态。系统中常常会有多个进程处于等待态,它们按等待事件分类,排成多个等待队列。 1.5进程状态的转换进程诞生之初是处于就绪状态,在其后的生存期间内不断地从一个状态转换到另一个状态,最后在运行状态结束。 ?运行态→等待态:正在执行的进程因为等待某事件而无法执行下去,比如,进程申请某种资源,而该资源恰好被其他进程占用,则该进程将交出CPU,进入等待状态。 等待态→就绪态:处于等待状态的进程,当所申请的资源得到满足,则系统将资源分配给它,并将其状态变为就绪态。 运行态→就绪态:正在执行的进程的时间片用完了,或者有更高优先级的进程到来,系统会暂停该进程的运行,使其进入就绪态,然后调度其他进程运行。 就绪态→运行态:处于就绪状态的进程,当被进程调度程序选中后,即进入CPU运行。此时该进程的状态变为运行态。 二、进程控制块进程由程序、数据和进程控制块三部分组成,其中程序是进程执行的可执行代码,数据是进程所处理的对象,进程控制块记录进程的所有信息。它们存在于内存,其内容会随着执行过程的进展不断变化,在某个时刻的进程内容被称为进程映像。 2.1进程控制块Process Control Block,PCB 是系统管理进程设置的一个数据结构,用于记录进程的相关信息。PCB是系统感知和控制进程的一个数据实体。当创建一个进程时,系统为他生成PCB;进程完成后,撤销它的PCB。PCB是进程的代表,PCB存在进程存在,PCB消失进程结束。进程的生存周期中,系统通过PCB来了解进程的活动情况,对进程实施控制和调度,因此PCB是操作系统中的最重要数据结构之一。 2.2进程控制块的内容PCB记录了有关进程的系统所关心的所有信息,主要包括以下4方面: (1)进程描述信息 进程描述信息用于记录一个进程的特征和基本情况,通过这些信息可以识别该进程,了解该进程的归属信息,确定这个进程和其他进程之间的关系。 系统为每个进程分配了一个唯一的整数作为进程标识号PID,通过这个PID来标识这个进程。操作系统、用户及其他进程都是通过PID来识别进程的。此外,还要描述进的家族关系,即父进程和子进程的信息。 (2)进程控制和调度信息 进程是系统运行调度的基本单位,进程控制块记录进程的当前状态、调度信息、计时信息等。系统根据这些信息确定进程的状态,实施进程调度和控制。 (3)资源信息 系统以进程为单位分配资源,并将资源信息记录在进程的PCB文件中。资源包括改进程使用的存储空间,打开的文件及设备等。通过这些信息,进程可以的到运行需要的相关程序段、数据段、使用文件、设备等资源。 (4)现场信息 现场信息一般包括CPU的内部寄存器和系统堆栈等,它们的值刻画了进程的运行状态。退出CPU的进程必须保存好这些现场状态,以便在下一次被调度时继续运行。当一个进程被重新调度运行时,要用PCB中的现场信息来恢复CPU的运行现场。现场一旦切换,下一个指令周期CPU将精准地接着上一次运行的断点处继续执行下去。 三、进程的组织管理进程就是管理进程的PCB。一个系统中通常有数百上千个进程,为了有效管理,系统需要采用适当的方式将他们组织在一起。所有的PCB都存放在内存中,通常采用的组织机构有数组、索引和链表3种方式。 数组方式是将所有PCB顺序存放在一个一维数组中,这种方式比较简单,但操作起来效率低。 索引方式是通过在PCB数组上设置索引表或散列表,以加快访问速度。 链表方式是将PCB链接起来,构成链式队列或链表。例如,所有就绪的PCB链成一个就绪队列;所有等待的PCB按等待事件链成多个等待队列。这样,在进程调度时只要扫描就绪队列即可,等待的事件发生时只要扫描相应的等待队列即可。当进程状态发生转换时,链式结构允许方便的向队列插入和删除一个PCB。 四、Linux系统中的进程在Linux系统中进程也被称为任务(task),两者的概念是一致的。 4.1Linux进程的状态Linux的进程共有5种基本状态,包括:运行、就绪、睡眠(分为可中断与不可中断)、暂停和僵死。 Linux将这些基本状态归结为4种并加以命名和定义: (1)?可执行态:包括运行和就绪两种状态。处于可执行态的进程均已具备运行条件。 (2)睡眠态:即等待态。进程在等待某个事件或资源。可细分为可中断的(interruptible)和不可中断的(uninterruptible)。 不可中断:睡眠过程中进程会忽略信号 可中断:如果收到信号会被唤醒而进入可执行状态,待处理完信号后再次进入睡眠状态。 (3)暂停态:处于暂停态的进程一般是由运行态转换而来的,等待某种特殊处理。比如,调试跟踪的程序每执行到一个断点,就转入暂停态,等待新的输入信号。 (4)僵死态:进程运行结束或因某些原因被终止时,它释放除PCB以外的所有资源,这种占有着PCB但已经无法运行的进程就处于僵死态。 4.2 Linux进程的状态转换过程Linux进程的状态转换过程是:新创建的进程处于可执行的就绪态,等待调度执行。 处于可执行态的进程在就绪态和运行态之间轮回。就绪态的进程一旦被调度程序选中,就进入运行态。等待时间片耗尽之后,退出CPU,转入就绪态等待下一次的调度。处于此轮回的进程在运行与就绪之间不断告诉切换。 运行态、睡眠态和就绪态形成一个回路。处于运行态的进程,有时需要等待某个事件或某种资源的发生,这是已经无法占有CPU继续工作,于是退出CPU,转入睡眠态。当等待的事件发生后,进程被唤醒,进入就绪态。 运行态、暂停态和就绪态也构成一个回路。当处于运行态的进程接受到暂停执行信号时,它放弃CPU,进入暂停态,当暂停的进程获得恢复执行信号时,就转入就绪态。 处于运行态的进程调用退出函数exit后,进入僵死态。父进程对该进程进行处理后,撤销其PCB。此时,这个进程就完成了它的使命,从僵死态走向消失。 4.3 Linux的进程控制块Linux系统的PCB用一个称为task_struct的结构体来描述。系统中每创建一个新的进程,就给他分配一个task_struct的结构体,并填入进程的控制信息,task_struct主要包括以下内容: (1)进程标识号(PID):PID是标识该进程的一个整数,系统通过这个标识号来唯一表示一个进程。 (2)用户标识(UID)和组标识(GID):描述进程的归属关系,即进程的属主和属组的标识号。系统通过这两个标识号判断进程对文件和设备的访问权限。 (3)链表信息:用指针的方式记录进程的父进程、兄弟进程、子进程的位置(即PCB的地址)。系统通过链接信息确定进程的家族关系以及其在整个进程链中的位置。 (4)状态:进程当前的状态。 (5)调度信息:与系统调度相关的信息,包括优先级、时间片、调度策略。 (6)记时信息:包括时间和定时器。时间记录进程建立的时间以及进程占用CPU的时间统计,时进程调度、统计和监控的依据。定时器用于设定一个时间。时间到时,系统会发定时信号通知进程。 (7)通信信息:记录有关进程间信号量通信及信号通信的信息。 (8)退出码:记录进程运行结束后的退出状态,供父进程查询用。 (9)文件系统信息:包括目录,当前目录,打开文件以及文件创建掩码等信息。 (10)内存信息:记录进程的代码映像和堆栈地址,长度等信息。 (11)进程现场信息:保存进程放弃CPU时所有CPU寄存器及堆栈的当前值。 4.4 查看进程的信息Linux系统中,查看进程的信息可以使用ps(process status),可查看记录在进程PCB中的几乎所有进程信息。 ps命令 【功能】查看进程的信息 【格式】ps[选项] 【选项】-e 显示所有进程 -f 已全格式显示 -r 只显示正在运行的进程 -o 以用户定义的格式显示 a 显示所有终端上的所有进程 u 以面向用户的格式显示 x 显示所有不控制终端的进程 【说明】 (1)默认时只显示在文本终端上运行的进程,除非指定了-e、a、x等选项 没有指定显示格式时,采用以下省略格式分PID
(2)指定-f选项时,以全格式,分8列显示
(3)指定u选项时,以用户格式,分11列显示:
STAT:用字母表示 R——执行态; S——睡眠态; D——不可中断睡眠态; T——暂停态; Z——僵尸态 4.5 Linux进程的组织Linux系统采用了多种方式来组织PCB,主要用一下几种: (1)进程链表 系统将所有的PCB链成一个双向循环列表,进程通过PCB中的list_head字段链入进程链表。遍历列表即可顺序的找到每个进程。 (2)进程数链表 Linux系统中,进程之间存在着父子关系。除init进程外,每个进程都有一个父进程,即创建了此进程的进程。一个进程可以创建多个进程,称为他的子进程。具有相同的父进程的进程称为兄弟进程。系统中所有的进程形成了一棵进程树,每个进程都是树种的一个节点,树的根是init进程。 在PCB中设置有父进程指针parent、子进程指针childr和兄弟进程指针sibling,它们构成了进程树的结构。进程可以通过这些指针直接找到他们的家族成员。 (3)可执行队列 为了方便进程的调度,系统把所有处于可执行状态的PCB组成一个可执行队列,处于可执行状态的进程通过PCB中的run_list字段链入队列。可执行队列中设置了一个curr指针,它指向正在使用CPU的进程,用来区别就绪态和运行态的进程,在切换进程时,进程调度程序从可执行队列中选择一个让其运行,并将curr指针指向它。 (4)等待队列 进程因不同的原因睡眠,系统将睡眠的进程分类管理,每类对应一个特定的事件,用一个等待队列链接。等待队列是一个双向循环链表,链表的节点中包含了指向进程PCB的指针。当某一事件发生时,内核会唤醒相应的队列中满足等待条件的队列,将唤醒的进程从队列中删除,加入到可执行队列。 五、进程的运行模式5.1 操作系统的内核 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 20:58:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |