请选择 进入手机版 | 继续访问电脑版

操作系统:进程

[复制链接]
唐少琼 发表于 2021-1-3 12:07:08 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
目次



一、历程概念

1.历程

历程:历程是运动的实体,是执行中的步伐。当一个可执行文件被加载到内存时,这个步伐就成为历程。
步伐是被动的实体,如存储在磁盘上的包罗一系列指令的文件内容,历程是运动的实体。
作业是任务的一个实例。
历程在内存中的体现形式:

一个历程一般由以下内容,即历程在内存中的布局形式。

  • 代码段(code section)又称文本段(text section)
    通过步伐计数器和处理惩罚器寄存器的内容来表现当前运动(current activity)
  • 栈(stack):
    包罗暂时数据,如函数参数,返回所在,局部变量
  • 数据段(data section)
    包罗全局变量
  • 堆(heap)
    在历程运行期间动态分配的内存
2.历程状态


历程在执行是会改变状态。
每个历程大概处于以下状态:

  • 新的(new): 历程正在被创建
  • 运行(running): 指令正在被执行
  • 期待(阻塞)waiting(blocking): 历程期待某个事件的发生
  • 停当(ready): 历程期待分配处理惩罚器
  • 终止(terminated): 历程完成执行
3.历程控制块

操纵系统是通过“控制表”对系统中的每个资源举行管理。比方,历程表、内存表、I/O 设备表,文件表等
每个历程在操纵系统内用历程控制块(Process Control Block:PCB)来表现,又称任务控制块(Task Control Block:TCB)即,历程在操纵系统中体现的数据布局。它包罗许多与一个特定历程相关的信息。

  • 历程ID:PID。大部分操纵系统是通过唯一的历程标识符来识别系统的历程
  • 历程状态: 新的、停当、运行、期待、停止等
  • 历程计数器: 表现历程要执行的下一个指令的所在
  • CPU 寄存器: 包罗累加器、索引寄存器、堆栈指针、通用寄存器和其他条件码信息寄存器
  • CPU 调治信息:历程的优先级、调治队列的指针和其他调治参数
  • 内存管理信息:包罗基所在和界限所在、页表或段表等
  • 记账信息:CPU 使用时间, 时间界限等
  • I/O 状态信息:I/O 设备历程分配状态, 打开文件表等
二、历程调治

多道步伐(multiprogramming)的目的是无论何时都有历程在运行,从而使CPU的使用率到达最大。为此,CPU需要在多个可用历程之间举行快速切换,调治步伐从多个可用历程中选择一个历程运行。
1.调治队列

操纵系统持有停当队列和一组设备队列,历程可以在多个调治队列之间移动。

  • 停当队列
    驻留在内存中的停当的、期待运行的历程(如历程创建时,被放到该队列),即期待分配CPU的历程,一般用链表来实现
  • 设备队列
    期待特定I/O设备的历程队列

历程调治通常用队列图来表现。

当历程分配到CPU并执行时(运行状态),也就是历程运行过程中,大概发生下面事件中的一种并进入到停当状态:

  • 历程大概发出一个I/O 请求,并被放到I/O 队列
  • 历程大概创建一个新的子历程,并期待该子历程竣事
  • 历程大概会由于中断而强制释放CPU,并被放回到停当队列
  • 用完时间片(time slice / time quantum),并被放到停当队列
2.调治步伐

历程在整个生命周期中,会在各种调治队列之间迁移,操纵系统必须按一定调治算法从这些队列中选择历程。
历程的选择通过适当的调治步伐来执行。
根据使用频率分类为:

  • 恒久调治步伐(作业调治步伐) :
    历程会被生存在大容量存储设备的缓冲池中。从存储设备的缓冲池中选择历程,并装入停当队列中期待执行(如:I/O调治)
  • 中期调治步伐: 分时系统中期调治步伐的焦点思想是能将历程从内存中移出(从CPU竞争中移出),从而低落多道步伐设计的水平(Swap In and SwapOut)。历程可被重新调入内存,并从中断处继承执行,成为互换。通过中期调治步伐,历程可以换出,并在厥后换入。
  • 短期调治步伐(CPU调治步伐)
    从准备执行队列中选择一个历程,并为之分配CPU(CPU调治)

3.上下文切换

当CPU从当前历程切换到另一个历程时,系统必须生存当前历程的相关信息,以备被切换的历程规复运行。
将CPU切换到另一个历程需要生存当前历程的状态,并规复另一个历程状态,这一任务称为上下文切换
上下文的切换依赖于硬件支持,如内存速度、寄存器数量、指令运行时间、载入/生存时间等。

可以看出,上下文切换时间是额外的开销,因为上下文切换时系统不能做什么有用的工作。
三、历程运行

1.历程创建

操纵系统是根据一个唯一的历程标识符(PID)来识别系统中的历程。
一个历程可以创建另一个新历程,那么,创建的历程称为父历程,被创建的新历程称为子历程(child process)
系统中的历程布局是树形布局,历程和历程之间存在着父子关系,即父历程与子历程。

历程创建的选项:

  • 资源共享选项
    ① 父历程和子历程共享所有资源
    ② 子历程共享父历程的部分资源
    ③ 父历程和子历程不共享资源
  • 执行选项
    ① 父历程和子历程同时执行
    ② 父历程期待子历程竣事再执行
  • 所在空间选项
    ① 子历程完全复制父历程内容
    ② 子历程覆盖父历程内存空间
以UNIX 系统为例,提供fork( )创建历程系统调用,用fork( ) 系统调用创建历程之后,一般是用exec( ) 系统调用覆盖历程内存空间。

创建流程:

  • 在系统内部创建历程控制块
  • 分配内存
  • 载入可执行文件(通过调用exec()系统调用)
  • 初始化步伐
在系统调用fork()后,新历程使用系统调用exec(),以新步伐来取代历程的内存空间。系统调用exec()加载二进制文件到内存(粉碎了包罗系统调用exec()的原来步伐的内存内容),并开始执行

2.历程终止

历程完成最后语句并使用exit( ) 系统调用,请求操纵系统删除自身,并终止运行,这时,历程可以返回状态值给父历程(通过系统调用wait( )获取 )。
父历程可以通过系统调用wait(),期待子历程的竣事。
父历程可以用abort( ) 系统调用终止子历程的执行, 父历程终止子历程的原因大概如下:


  • 子历程使用了凌驾它所分配到的资源
  • 分配给子历程的任务不在需要
  • 父历程终止导致子历程终止,即父历程终止,操纵系统不允许子历程继承运行
如果一个历程终止,它的所有子历程也将终止,这种终止被称为级联终止(Cascading Termination)。
当一个历程终止,操纵系统会释放其资源,但,它位于历程表中的条目还存在,直到它的父历程调用wait();这是因为历程表包罗了历程的退出状态。
当一个历程竣事,但是他的父历程没有期待他(调用wait/waitpid),那么他将成为一个僵尸历程。
四、历程间通信

系统内并发运行的历程可以是相互独立或协作工作,
历程协作的来由有信息共享、提高运算速度、模块化、方便。

  • 如果一个历程不影响其他历程或不被其他历程所影响,那么该历程是独立的,即历程之间没有共享数据
  • 如果一个历程影响其他历程或被其他历程所影响,那么该历程是协作的,即历程之间有数据共享
协作历程需要一种历程间的通信机制
历程间通信有两种根本模子:

  • 消息通报
    • 适合通报较少数量的数据
    • 需要内核的干涉
    • 易于实现
  • 共享内存
    • 允许以最快的速度举行方便的通信
    • 不需要内核的干涉
    • 比消息通报速度快

1.共享内存系统

我们认识的系统情况一般如下:

  • 每个历程都有自己受掩护的内存所在空间
  • 通常操纵系统试图阻止一个历程访问另一个历程的内存所在空间
所以,为了实现共享内存、便于两个或多个历程可以访问内存,共享区域应取消这个限制,而且,必须保障不能有两个以上的历程同时向共享区域写入数据,即需要一个同步机制
共享内存典范范例为生产者历程产生信息以供消费者历程消费的问题,即生产者和消费者问题
为了允许生产者历程和消费者历程能并发运行,必须要有缓冲区被生产者和消费者所使用,此缓冲区为共享内存区域,该区域的实现可以采取以下两种方式:

  • 无限缓冲(unbounded buffer): 对缓冲巨细无限制。如果缓冲为空,消费者必须期待,而生产者总是可以产生新的信息。
  • 有限缓冲(bounded buffer): 缓冲巨细固定。如果缓冲为空,消费者必须期待,如果缓冲为满,生产者不能产生新的信息。
2.消息通报系统

另一种方式:操纵系统提供机制,以便协作历程通过消息通报功能举行通信。
消息通报功能提供了两种操纵:发送消息和吸收消息。历程发送的消息可以是定长的或变长的
如果历程P和Q需要通信,它们之间必须相互发送消息和吸收消息:它们之间要有通信链路
该链路实现有多种方法。这里只关心链路的逻辑实现。用于逻辑实现链路和操纵send()/receive()的几种方法:

  • 直接或间接通信(direct or indirect)
  • 同步或异步通信(blocking or non-blocking)
  • 自动或显式缓冲(通信缓冲)
直接通信(包罗对称寻址和非对称寻址):
对于直接通信,需要通信的每个历程必须明白地定名通信的继承者和发送者。
(1).对称寻址(一对一,即发送和继承历程必须指定对方)


  • send(P, message) : 向历程P 发送消息
  • receive(Q, message) : 吸收历程Q 发来的消息
通信线路的属性:


  • 线路是自动创建的
  • 一个线路只与两个历程相关
  • 两个历程之间只有一个线路
(2).非对称寻址(多对一,即只要发送者指定吸收者)


  • send(P, message)
  • receive(id, message):吸收任何历程发送的消息
间接通信:
通过端口(port)或邮箱(email)来发送或继承消息。每个邮箱都有一个唯一的标识符,历程之间可以通过共享端口来举行通信
通信线路具有以下属性:

  • 两个历程共享一个邮箱(端口)才可以创建通信线路
  • 一个链路(端口)可以与多个历程相关联
  • 两个通信历程之间可有多个通信链路,每个线路对应一个邮箱(端口)

同步和异步:
消息通报可以是同步或异步,又称为阻塞(blocking)或非阻塞(non-blocking)
发送者:

  • 阻塞(同步)发送:发送历程阻塞,直到消息被对方历程吸收
  • 非阻塞(异步)发送:发送历程发送消息并继承操纵
继承者:

  • 阻塞(同步)吸收:吸收者阻塞,直到有消息可用
  • 非阻塞(异步)吸收:吸收者收到一个有效消息或空消息
缓存
不管通信是直接或间接的,通信历程所互换的消息都驻留在暂时的队列中,即缓冲区里
消息队列的实现方式有以下三种:

  • 零容量(zero capacity)
    队列的最大长度为0。因此,链路中没有期待的消息。发送方只能阻塞直到吸收方继承
  • 有限容量(bounded capacity)
    队列长度为有限的。如果线路为满,发送者必须期待,直到队列中的空间可用为止
  • 无限容量(unbounded capacity)
    队列长度为无限。不管多少消息在期待,从不阻塞发送者,即发送者不必期待
五、客户机/服务器通信

1.Socket套接字

套接字被界说为通信的端点。套接字由IP所在和端标语毗连组成。
分为面向毗连套接字和无毗连套接字。
2.远程过程调用(RPC)

远程过程调用(Remote Procedure Call:RPC)抽象化了通过网络毗连的历程之间过程调用。
Stubs(存根):远程过程的署理,隐藏了通信发生的细节。每个独立的远程过程都有一个存根
客户机调用位于远程主机上的过程时,

  • 客户端存根编组参数,并向服务器相应存根发送参数
  • 服务器存根吸收参数,解组参数,并调用相应过程

3.远程方法调用

Remote Method Invocation:RMI类似于远程过程调用,是RPC的JAVA特性
与RPC的差别


  • RPC调用远程子步伐或函数,RMI调用远程对象的方法
  • RPC参数通报方式是平凡数据布局,RMI参数通报方式可以是对象

4.管道

历程之间举行通信的另一种方式,管道通信方式的中间介质是文件,通常称这种文件为管道文件。
如两个历程使用管道文件举行通信时,一个历程为写历程,另一个历程为读历程。
提供历程同步(synchronization)运行
管道分为匿名管道和定名管道

  • 匿名管道: Ordinary pipes (unnamed/anonymous pipes)
    (1)暂时的,完成通信后便不存在了;
    (2)管道是半双工的,数据只能单向通信;
    (3)双方通信时,需要创建起两个管道;
    (4)只能用于父子历程大概兄弟历程之间(具有亲缘关系的历程)
  • 定名管道:named pipe
    (1)恒久的;
    (2)可以是双向的;
    (3)父子关系不是必须的;
    (4)可在同一台盘算机的差别历程之间或在凌驾一个网络的差别盘算机的差别历程之间,支持可靠的、单向或双向的数据通信

来源:https://blog.csdn.net/weixin_44759105/article/details/111241106
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )