【操作系统】进程控制与进程通信


在这里插入图片描述

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaEE
操作系统
Redis

石可破也,而不可夺坚;丹可磨也,而不可夺赤。


一、进程控制

1.1 什么是进程控制

  • 进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销己有进程、实现进程状态转换等功能。
  • 简化理解:反正进程控制就是要实现进程状态转换

在这里插入图片描述


1.2 如何实现进程控制(“原语”实现)

  • 原语是一种特殊的程序它的执行具有原子性,也就是说,这段程序的运行必须一气呵成,不可中断。
  • 如果不能“一气呵成”,就有可能导致操作系统中的某些关键数据结构信息不统一的情况,这会影响操作系统进行别的管理工作。
  • 假设PCB中的变量state表示进程当前所处状态,1表示就绪态,2表示阻塞态.
  • 假设此时进程2等待的事件发生,则操作系统中,负责进程控制的内核程序至少需要做这样两件事:
    • ①将PCB2的state设为1
    • ②将PCB2从阻塞队列放到就绪队列

在这里插入图片描述


1.2.1 如何实现原语的“原子性”

  • 原语的执行具有原子性,即执行过程只能一气呵成,期间不允许被中断。
  • 可以用“关中断指令”和“开中断指令”这两个特权指令实现原子性
  • 正常情况:CPU每执行完一条指令都会例行检查是否有中断信号需要处理,如果有,则暂停运行当前这段程序,转而执行相应的中断处理程序。
  • CPU执行了关中断指令之后,就不再例行检查中断信号,直到执行开中断指令之后才会恢复检查。
  • 这样,关中断、开中断之间的这些指令序列就是不可被中断的,这就实现了“原子性”。

1.3 进程的创建

  • 创建原语
    • 申请空白PCB
    • 为新进程分配所需资源
    • 初始化PCB
    • 将PCB插入就绪队列(创建态–>就绪态)
  • 引起进程创建的事件:
    • 用户登录
      • 分时系统中,用户登录成功,系统会建立为其建立一个新的进程
    • 作业调度
      • 多道批处理系统中,有新的作业放入内存时,会为其建立一个新的进程
    • 提供服务
      • 用户向操作系统提出某些请求时,会新建一个进程处理该请求
    • 应用请求
      • 由用户进程主动请求创建一个子进程

1.4 进程的终止

  • 撤销原语(就绪态/阻塞态/运行态 --> 终止态 --> 无):
    • 从PCB集合中找到终止进程的PCB
    • 若进程正在运行,立即剥夺CPU,将CPU分配给其他进程
    • 终止其所有子进程(进程间的关系是树形结构)
    • 将该进程拥有的所有资源归还给父进程或操作系统
    • 删除PCB
  • 引起进程终止的事件:
    • 正常结束
    • 异常结束(整数除以0、非法使用特权指令,然后被操作系统强行杀掉)
    • 外界干扰(Ctrl+Alt+delete,用户选择杀掉进程)

1.5 进程的阻塞

  • 阻塞原语(运行态 – > 阻塞态):
    • 找到要阻塞的进程对应的PCB
    • 保护进程运行现场,将PCB状态信息设置为“阻塞态”,暂时停止进程运行
    • 将PCB插入相应事件的等待队列
  • 引起进程阻塞的事件:
    • 需要等待系统分配某种资源
    • 需要等待相互合作的其他进程完成工作

1.6 进程的唤醒

  • 唤醒原语(阻塞态 – > 就绪态):
    • 在事件等待队列中找到PCB
    • 将PCB从等待队列移除,设置进程为就绪态
    • 将PCB插入就绪队列,等待被调度
  • 引起进程唤醒的事件
    • 等待的事件发生(因何事阻塞,就应由何事唤醒)

1.7 进程的切换

  • 切换原语(运行态 --> 就绪态、就绪态 --> 运行态):
    • 将运行环境信息存入PCB
    • PCB移入相应队列
    • 选择另一个进程执行,并更新其PCB
    • 根据PCB恢复新进程所需的运行环境
  • 引起进程切换的事件:
    • 当前进程时间片到
    • 有更高优先级的进程到达
    • 当前进程主动阻塞
    • 当前进程终止

二、进程通信

2.1 什么是进程通信

  • 进程间通信(Inter-Process Communication,IPC)是指两个进程之间产生数据交互。
  • 进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。
  • 为了保证安全,一个进程不能直接访问另一个进程的地址空间。

2.2 共享存储

  • 基于存储区的共享:操作系统在内存中划出一块共享存储区,数据的形式、存放位置都由通信进程控制,而不是操作系统。这种共享方式速度很快,是一种高级通信方式。
  • 基于数据结构的共享:比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢、限制多,是一种低级通信方式

2.3 消息传递

  • 进程间的数据交换以格式化的消息(Message)为单位。进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。
  • 直接通信方式
    • 消息发送进程要指明接收进程的ID
  • 间接通信方式
    • 通过“信箱”间接的通信,因此又称“信箱通信方式”

2.4 管道通信


在这里插入图片描述


  • “管道”是一个特殊的共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的内存缓冲区。
  • 管道只能采用半双卫通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。
  • 各进程要互斥地访问管道(由操作系统实现)
  • 当管道写满时,写进程将阻塞,直到读进程将管道中的数据取走,即可唤醒写进程。
  • 当管道读空时,读进程将阻塞,直到写进程往管道中写入数据,即可唤醒读进程。
  • 管道中的数据一旦被读出,就彻底消失。因此,当多个进程读同一个管道时,可能会错乱。对此,通常有两种解决方案:
    • ①一个管道允许多个写进程,一个读进程(2014年408真题高教社官方答案);
    • ②允许有多个写进程,多个读进程,但系统会让各个读进程轮流从管道中读数据(Liux的方案)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您提供一些相关的知识和思路。 操作系统中,进程是指正在执行的程序实例,而内存管理就是操作系统对内存资源的分配和管理。在进程的执行过程中,需要使用内存资源来存储程序的指令、数据和运行时栈等信息。因此,进程和内存管理是操作系统中非常重要的部分。 进程管理包括进程的创建、撤销、调度和同步等操作。在创建进程时,操作系统需要为其分配一定的内存空间,并为其分配标识符等资源。在撤销进程时,操作系统需要回收其占用的内存和资源。而进程调度则是指操作系统决定哪个进程可以获得CPU的使用权。同步是指操作系统进程提供同步机制来避免竞争条件和死锁等问题。 内存管理包括内存分配和内存回收两个方面。在内存分配时,操作系统需要根据进程的需求为其分配一定的内存空间。在内存回收时,操作系统需要回收已经被释放的内存空间以供其他进程使用。操作系统还需要为每个进程分配虚拟地址空间,以实现进程间的隔离和保护。 在实现模拟os进程与内存管理的过程中,需要考虑以下几个方面: 1. 进程的创建、撤销、调度和同步。需要实现进程控制块(PCB)来存储进程的各项信息,并实现进程调度算法来决定哪个进程可以获得CPU的使用权。需要实现同步机制,如互斥锁、信号量等,来避免进程间的竞争条件和死锁。 2. 内存的分配和回收。需要实现内存管理单元(MMU)来管理内存的页表和虚拟地址空间,并实现分页、分段等内存管理算法来提高内存的利用率。需要实现内存分配算法来为进程分配内存空间,并实现内存回收算法来回收已经被释放的内存空间。 3. 进程和内存的交互。需要实现进程和内存之间的交互机制,如进程的请求内存空间、内存的分配和回收等操作。需要实现进程和MMU之间的通信机制,如进程的请求页表、页表的更新等操作。 以上是模拟os进程与内存管理的一些基本思路和方向,具体实现可根据需求和具体情况进行设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶落闲庭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值