6.操作系统多进程图像

【README】

本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐;

多进程图像定义:多个进程使用cpu的图像;

多进程图像是操作系统的核心图像


【1】概述

1) PCB:

  • 指的是  process control block, 进程控制块,是一个结构体(数据结构),用于记录进程状态,并按照顺序推进进程执行(分配资源,进行调度等);
  • pcb说的简单点,就是用于存储cpu物理寄存器的数据的结构体,当然还需要存储进程状态,内存映射表等信息;

2)多进程图像从启动开始到关机结束


【1.1】main函数中的fork()创建第1个进程

1)fork函数:启动一个进程;
2)Linux操作系统初始化函数main函数,调用fork启动了第1个进程,该进程执行init函数,init启动一个shell程序;(window操作系统创建一个进程,启动一个桌面)

3)对于linux操作系统,用户通过shell程序创建其他进程;

  • 可见,进程对于计算机的使用至关重要;因为我们每解决一个任务,计算机都会启动一个进程来执行这个任务;

4)window 打开任务管理器查看多个进程;

【补充】用户使用计算机本质

  • 用户使用计算机,就是启动了一堆进程;
  • 用户管理计算机,就是管理了一堆进程;

【2】多进程如何组织与存放

 1)操作系统感知与组织进程:

  • 全靠 PCB, process control block, 进程控制块;
  • 用PCB 形成一个链表(数组)来组织多进程;

2)    进程分类:

  • 正在执行的进程;
  • 等待执行的进程;
  • 需要等待某些事件完成后(如等待磁盘响应)再继续执行的进程;

【2.1】多进程如何组织 :PCB+状态+队列

 

1)进程状态:

  • 新建态;
  • 就绪态;
  • 运行态;
  • 阻塞态;
  • 终止态;

2)操作系统更新进程状态,利用状态对进程进行管理,有序推进进程执行进度
小结:

  • 操作系统用PCB存储进程,用进程状态推进进程执行,对进程进行管理;

【2.2】多进程交替执行

1)schedule函数,进程切换函数;

Schedule(){

  pNew = getNext(readQueue); // 获取下一个就绪进程;

  switch_to(pCur, pNew); // 从当前进程切换到就绪进程;

}

 补充: pCur, pNew 都是PCB,进程控制块;

2)getNext() ,进程调度算法;

  • 调度策略包括: FIFO-先进先出,Priority-优先级;

3)进程交替执行三个部分

  • 队列操作;
  • 调度;
  • 切换;

4)切换前,把物理cpu的信息,主要是寄存器内容,保存在PCB,PCB存储在内存;

(干货)可以这样理解,cpu物理寄存器内容,存储在pcb,pcb是所有物理寄存器内容存储的载体,即pcb是逻辑寄存器

 【补充】(汇编代码与C代码区别)

  • 汇编代码,可以指定变量存储到某个具体的内存地址;
  • 而C代码,无法做到;
  • 即汇编代码可以对程序进行精细控制;

【小结】操作系统支持多进程图像所做的工作;

  • 工作1)操作系统如何组织多个进程,用PCB,PCB形成队列
  • 工作2)如何完成进程切换?通过调度函数,选择下一个进程,得到下一个进程的PCB,最后把cpu中物理寄存器内容与下一个进程PCB内容(逻辑寄存器)进行交换,(需要注意的是PCB保存在内存中);
  • 工作3)如何处理进程间的相互影响;

5)多进程交替执行时,如何处理相互产生的影响? 即并发访问问题;
多进程的信息存储在内存中,这样cpu才能取指执行;

如进程1操作地址100的数据,地址100存储进程2的代码,这样就会产生相互影响;
如何解决?

  • 限制对地址100的读写;或 多进程的地址空间分离,即每个进程占用不同的内存地址空间;(从而可以看到,内存管理也为多进程服务的)
  • 这就进入了内存管理

【2.3】 进程管理和内存管理形成多进程图像

1) 进程的内存空间映射

  • 进程1的逻辑地址100映射到物理内存地址 780;
  • 进程2的逻辑地址100映射到物理内存地址 1260;
  • 进程1与进程2 相互不会影响;


【2.4】多进程合作

1)进程合作:

  • word进程,把word文件放入打印队列,打印进程从队列取出数据进行打印;

2)进程合作问题:

  • 进程合作问题1:因为进程1和进程2交替执行,则队列7号元素存储的数据既包括进程1,也包括进程2的数据;存在数据被错误覆盖或覆写的风险
  • 进程合作问题2:生产者-消费者实例 (多进程并发执行问题,因为counter被两个进程操作)

 

 

因为多进程的并发执行问题,导致Counter语义错误,多进程合作失败

 3)进程有序合作的核心在于进程同步
进程同步指的是: 写counter时,阻断其他进程访问counter;通过加锁来阻断其他线程来访问

 


【小结】

  • 1)    多进程图像: 包含 pid1, pid2, pid3 多个进程;
  • 2)    进程数据存储:存储在 PCB结构体,PCB存储在内存;
  • 3)    多进程交替执行:通过调度函数实现,如 fifo,优先级;
  • 4)    多进程合作: 每个进程都有一段独立的内存空间;若多个进程操作同一个变量,需要对变量上锁,操作完成后,解锁变量;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值