linux进程的基本概念

简介: 学习操作系统已经有两年了,惭愧的是至今没有好好复习一下课本上关于进程这一章节的内容,以至于到现在很多概念性的东西,很多深层次的东西理解起来总是不通顺,所以我决定花自己一个下午的时间,好好把这一章节整理出来,给自己总结一下,也供自己以后回顾,也希望各位童鞋能给我些指导,让我有更深层次的理解。

学习操作系统已经有两年了,惭愧的是至今没有好好复习一下课本上关于进程这一章节的内容,以至于到现在很多概念性的东西,很多深层次的东西理解起来总是不通顺,所以我决定花自己一个下午的时间,好好把这一章节整理出来,给自己总结一下,也供自己以后回顾,也希望各位童鞋能给我些指导,让我有更深层次的理解。

1、进程的特征与状态

首先明确第一个问题, 进程与程序的区别:
1 进程是一个动态的概念,进程的实质是程序的一次执行过程,动态性是进程的基本特征,同时进程是有一定的生命期的; 而程序只是一组有序指令的集合,本身并无运动的含义,是静态的。
2 并发性, 并发性是进程的重要特征,引入进程的目的正是为了使其程序和其它程序并发执行;而程序(没有建立进程)是不能并发执行的。
3 独立性,是 指进程一个能独立运行、独立分配资源和独立调度的基本单位;凡未建立进程的程序,都不能作为一个独立的单位参加运行。
不同的进程可以包含同一个程序,同一个程序在执行中也可以产生多个进程。

进程的几个特性:

动态性(由创建而产生,由调度而执行,由撤销而消亡)

并发性(往上看5行)

独立性(往上看5行)

异步性(进程按照各自独立的、不可预知的速度向前推进,或说进程实体按异步方式运行)


进程的静态描述:进程实体由三部分组成:
   PCB、有关程序段  和  该程序段对其进行操作的数据结构集。
各部分的作用:
1 进程控制块: 用于描述进程情况及控制进程运行所需的全部信息,一会我们重点要研究他。                                                   
2 程序段: 是进程中能被进程调度程序在CPU上执行的程序代码段。
3 数据段: 一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行后产生的中间或最终数据。

进程的三种基本状态:

1.就绪状态(Ready)
      当进程已经分配到除CPU以外的所有必要的资源后,只要能再获得处理机,就可以立即执行。这时的进程的状态称为就绪状态。
2.执行状态(Running)(运行状态)
         指进程已获得处理机,其程序正在执行。在单处理机系统中,只能有一个进程处于执行状态。(在多处理机中,可能有多个进程处于执行状态)
3.阻塞状态(Block)(等待状态)
进程因为发生某个事件而暂停执行时的状态(如:请求I/O、申请缓冲空间等),进程受到阻塞,称这种暂停状态为阻塞状态,有时也称“等待”状态或“睡眠”状态。

进程三种状态间的转化:
①就绪→执行:调度
②执行→等待:等待某个事件发生而睡眠
③等待→就绪:因等待的时间发生而唤醒
④执行→就绪:时间片用完


2、进程控制块

为了描述和控制进程的运行,系统为每个进程定义了一个数据结构——进程控制块(PCB),他是进程实体的一个部分,是操作系统中最重要的记录型数据结构。PCB中记录了操作系统所需要的,用于描述进程的当前情况以及控制进程运行的全部信息。进程控制块的作用是使一个在多道程序环境下不能独立运行的程序(含数据),称为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。或者说,os是根据PCB来对并发执行的进程进行控制和管理的。例如,当操作系统要调度某进程执行时,要从该进程的pcb中查询出其现行状态和优先级,在调度到某些进程后,要根据其pcb中的程序和数据的内存初始地址,找到其程序和数据;进程在执行过程中,当需要和与之合作的进程实现同步,通信或访问文件时,也都需要访问PCB;当进程由于某种原因而暂停执行时,又须将其断点的处理机环境保存在PCB中。可见,在进程整个生命中,系统总是通过PCB对进程进行控制的,也就是说,系统是根据进程的PCB而不是任何别的什么而感知到进程的存在的。所以说,PCB是进程存在的唯一标识

由于PCB经常被系统访问,尤其是被 运行频率很高的进程及分派程序访问,故PCB应该常驻内存。。。系统将所有的PCB组织成若干链表(或队列),存放在操作系统中专门开辟的PCB区内,例如linux系统中用task_struct 数据结构来描述每个进程的程序控制块,在windows操作系统中则使用一个执行体进程块(eprocess)来表示进程对象的基本属性。

进程控制块内的信息介绍:

1.进程标识符: 进程标识符用于唯一的标识一个进程。
     内部标识符:在所有的OS中,都为每一个进程赋予一个唯一的整数,作为内部标识符,主要方便系统使用。
     外部标识符。由创建者提供,通常是由字母、数字组成,往往是用户(进程)访问该进程使用。如:计算进程、打印进程、发送进程、接收进程等。

2.处理机状态:处理机状态信息主要是由处理机各种寄存器中的内容所组成。处理机在运行时很多信息都放在寄存器中, 当处理机被中断时,所有这些信息都必须保存在pcb中。
     通用寄存器。又称为用户可视寄存器,可被用户程序访问,用于暂存信息。
     指令寄存器。存放要访问的下一条指令。程序状态字PSW。其中含有状态信息。(条件码、执行方式、中断屏蔽标志等)
     用户栈指针。每个用户进程有一个或若干个与之相关 的系统栈,用于存放过程和系统调用参数及调用地址。栈指针指向该栈的栈顶。 

3.进程调度: 在PCB中还存放了一些与进程调度和进程对换有关的信息。
   (1)进程状态。指明进程当前的状态,作为进程调度和对换时的依据。
   (2)进程优先级。用于描述进程使用处理机的优先级别的一个整数,优先级高的进程优先获得处理机。
   (3)进程调度所需要的其他信息。(进程已等待CPU的时间总和、进程已执行的时间总和)
   (4)事件。进程由执行状态转变为阻塞状态所等待发生的事件。(阻塞原因)

4. 进程控制信息
(1)程序和数据的地址。指进程的程序和数据所在的内存或外存(首)地址,以便再调度到该进程执行时,能从PCB中找到其程序和数据;
(2)进程同步和通信机制。指实现进程同步和进程通信时必须的的机制,如,消息队列指针,信号量等。它们可能全部或部分地存放在PCB中;
(3)资源清单。即一张列出了除CPU以外的、进程所需的全部资源及已经分配到该进程的资源的清单;
(4)链接指针。它给出了本进程(PCB)所在队列中的下一个进程的PCB的首地址。

进程控制块的组织方式:

PCB表:
  系统把所有PCB组织在一起,并把它们放在内存的固定区域,就构成了PCB表。  PCB表的大小决定了系统中最多可同时存在的进程个数,称为系统的并发度。
常用的组织方式有两种: 链接方式、索引方式。
1.链接方式:
 具有相同状态的PCB,用其中的链接字,链接成一个队列。可以形成就绪队列、若干个阻塞队列和空白队列等。其中,就绪队列常按照进程优先权的大小排列,优先权高的进程的PCB排在队列前面

2.索引方式
系统根据所有进程的状态,建立几张索引表。如:就绪索引表、阻塞索引表。把各索引表在内存的首地址记录在内存中的一些专用单元中。每个索引表的表目中,记录具有相同状态的某个PCB在PCB表中的地址。

3、进程控制

父进程与子进程的关系:

子进程可以继承父进程所有的资源,例如,继承父进程打开的文件,继承父进程所分配的缓冲区等。当子进程被撤销时,应将其从父进程哪里获得的资源还给父进程。此外,在撤销父进程时,也必须同时撤销其所有的子进程。为了标识进程之间的家族关系,在pcb中都设置了家族关系表项,以标明自己的父进程及所有的子进程。

进程创建:

在多道程序环境中,只有(作为)进程(时)才能在系统中 运行。因此为使进程能运行,就必须为它创建进程,导致一个进程去创建另一个进程的典型事件,可以有以下四类:

 用户登录: 在分时系统中,用户在终端键入登录命令后,若是合法用户,系统建立一个进程,并插入就绪队列。
 作业调度: 批处理系统中,作业调度程序调度到某个作业以后,就把这个作业装入内存,并分配必要的资源,创建进程,插入就绪队列。
 提供服务: 运行中的用户向系统提出请求后,系统专门建立一个进程为用户服务。(打印请求)由操作系统核心(系统程序模块)创建
 应用请求: 根据应用进程的需要,由它自己创建一个新进程,使新进程以并发运行方式完成特定任务。 由父进程创建

一旦操作系统发现了要求创建新进程的事件后,便调用进程创建原语(create()) ,按照如下步骤创建进程:

1、申请空白的PCB,为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB。

2、为新进程分配资源,为新进程的程序和数据以及用户栈分配必要的内存空间。显然,此时操作系统必须知道新进程所需的内存大小。

3、初始化进程控制块。PCB的初始化包括:a初始化标识信息,将系统分配的标识符和和父进程标识符填入新PCB中;b初始化处理机状态信息,使程序计数器指向程序入口的地址,使栈指针指向栈顶;c初始化处理机控制信息,将进程的状态设置为就绪状态或静止状态,对于优先级,通常是将它设置为最低优先级,除非用户以显示方式提出高优先级要求。

4、将新进程插入就绪队列,如果进程就绪队列能接纳新进程,便将新进程插入就绪队列。



2 进程的终止(撤消进程):

引起进程终止的事件
正常结束:计算机系统中,都有一个表示进程已经运行完成的指示。(批处理,Halt。分时系统中,Logs Off)
异常结束: 越界错误、保护错、特权指令错、非法指令错、运行超时、等待超时、算术运算错、 I/O故障
外界干预:
   操作员或操作系统干预
   父进程请求
   父进程终止

进程终止的过程:

1、根据被终止的进程标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态。

2、若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应该重新进行调度。

3、若该进程还有子孙进程,还应该将其所有子孙进程予以终止,以防他们成为不可控的进程。

4、将被终止的进程的全部资源或者归还给其父进程,或者归还给操作系统。

5、将被终止进程(PCB) 从所在队列(或链表)中移出。等待其他程序来搜集信息。











相关文章
|
2天前
|
算法 Linux 调度
深入理解Linux内核的进程调度机制
【4月更文挑战第17天】在多任务操作系统中,进程调度是核心功能之一,它决定了处理机资源的分配。本文旨在剖析Linux操作系统内核的进程调度机制,详细讨论其调度策略、调度算法及实现原理,并探讨了其对系统性能的影响。通过分析CFS(完全公平调度器)和实时调度策略,揭示了Linux如何在保证响应速度与公平性之间取得平衡。文章还将评估最新的调度技术趋势,如容器化和云计算环境下的调度优化。
|
4天前
|
监控 Linux
linux监控指定进程
请注意,以上步骤提供了一种基本的方式来监控指定进程。根据你的需求,你可以选择使用不同的工具和参数来获取更详细的进程信息。
10 0
|
5天前
|
消息中间件 监控 Linux
Linux进程和计划任务管理
通过这些命令和工具,你可以有效地管理Linux系统中的进程和计划任务,监控系统的运行状态并保持系统的稳定和可靠性。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
98 2
|
8天前
|
算法 Linux 调度
深度解析:Linux内核的进程调度机制
【4月更文挑战第12天】 在多任务操作系统如Linux中,进程调度机制是系统的核心组成部分之一,它决定了处理器资源如何分配给多个竞争的进程。本文深入探讨了Linux内核中的进程调度策略和相关算法,包括其设计哲学、实现原理及对系统性能的影响。通过分析进程调度器的工作原理,我们能够理解操作系统如何平衡效率、公平性和响应性,进而优化系统表现和用户体验。
18 3
|
12天前
|
监控 Java Linux
linux下监控java进程 实现自动重启服务
linux下监控java进程 实现自动重启服务
|
12天前
|
监控 Linux Shell
初识Linux下进程2
初识Linux下进程2
|
12天前
|
Linux 编译器 Windows
【Linux】10. 进程地址空间
【Linux】10. 进程地址空间
19 4
|
17天前
|
算法 Linux Shell
linux系统的进程管理
linux系统的进程管理
19 2
|
17天前
|
Web App开发 人工智能 Ubuntu
【Linux】Linux启动/查看/结束进程命令(详细讲解)
【Linux】Linux启动/查看/结束进程命令(详细讲解)
|
22天前
|
Linux Shell 调度
【Linux】进程排队的理解&&进程状态的表述&&僵尸进程和孤儿进程的理解
【Linux】进程排队的理解&&进程状态的表述&&僵尸进程和孤儿进程的理解