0
点赞
收藏
分享

微信扫一扫

【哈工大李治军】操作系统课程笔记4:CPU和多进程

是归人不是过客 2022-04-21 阅读 52

操作系统在管理CPU的时候引出了多进程图像,通过多进程图像操作系统管理明白了CPU,CPU管理明白了别的硬件自然而然的就跟着带动起来了,所以多进程图像是操作系统的核心图像。

因为多进程的引入是为了管理好CPU,所以我们就先介绍CPU的管理方法。

1、CPU的工作原理

在这里插入图片描述
如图中所示,当PC=50时,CPU就会发出取址指令,把50放在地址总线上,当内存接收到信号后,就会将把位于地址50里的指令通过总线再传送给CPU。CPU得到该指令后,就会根据指令中的内容执行。

总结: 自动地取址、执行(PC自动累加)
在这里插入图片描述
CPU的管理方法就是把PC的初值设置为一段程序的开始地址,之后PC就会自动地累加工作,进行取值执行。
在这里插入图片描述
上图中的程序中,有I/O指令执行一条语句再比上没有I/O指令执行一条语句大约的比值是 1 0 6 10^6 106

I/O指令会涉及磁盘的存取,因此I/O指令相对于其他计算指令来说执行起来会非常慢。如果CPU一直在等待I/O完成后,才去继续工作就会造成CPU的利用率非常的低。所以,为了提高CPU的利用率,可以在电脑进行I/O操作时,让CPU先去执行其他任务,当I/O操作完成后,再回来执行对应的后续操作。

在这里插入图片描述
当多个程序在内存中,通过切换程序,来减少CPU的空闲时间,提高CPU的利用率。
在这里插入图片描述
多道程序交替执行就会让CPU忙碌起来。
某一设备的利用率=某一设备使用时间 / 全部程序的执行时间
在这里插入图片描述
多道程序交替执行就成为了管理CPU的核心。一个CPU上交替的执行多个程序,就引入了并发的概念。实现的方式就是在适当的时候让PC进行切换
在这里插入图片描述
在切换前,要记录好之前所执行程序的相关信息(程序执行到哪里、执行的样子等等),即程序在当前时刻下执行时的样子。此时运行的程序和静态程序不一样了。

在这里插入图片描述
因为静态程序和运行的程序情况不一样了,我们就单独把运行的程序拿出来当作一个事物,而这个事物用传统的观念不能很方便的去描述解决,就引入“进程”(这个概念去刻画这个新事物。

进程是进行(执行)中的程序。 这些与静态程序不一样的地方都存放在了一个新的数据结构PCB当中。

当CPU开始跑多个进程,而不是按顺序执行静态程序时,就大大提高了CPU的利用率。多个进程向前跑的样子,就是管理CPU的核心样子。

2、多进程图像

在这里插入图片描述
在这里插入图片描述
操作系统从刚开机时就形成了多进程图像,直到关机为止。

if(!fork()) { init(); }使用fork()创建了一个进程,该进程执行了init(),启动了一个shell。

其中shell的核心代码就是while(1)循环中,当用户再输入一句命令后,又会创建一个新的子进程并根据输入的命令进行执行。(用户执行任务也是创建一个进程,用于完成用户指定的任务)

实际上,用户启用计算机就是启用一堆进程,用户管理计算机就是管理一堆进程。

(1)如何组织多进程

在这里插入图片描述
PCB帮助操作系统感知和形成进程。使用PCB来形成一些队列,来组织多进程。多个进程所对应的PCB分别放置在不同的地方,通过队列连接起来。操作系统拥有它们的存储位置信息,可到对应位置进行获取。
在这里插入图片描述
将进程根据状态来区分开来,便于操作系统的管理。

区分阻塞态和就绪态:
(1)阻塞态:进程停止,缺必要的资源,给CPU调度机会也不能运行。

  • 事件:
    • 等待资源(临界资源、临界区)
    • 信息交换(I/O输入输出、读写内存)
    • 进程同步(停下来等待其他进程)

(2)就绪态:进程停止,资源都不缺,只缺CPU调度,给CPU调度就能运行

  • 事件:
    • 阻塞的进程获得等待的资源或信号 (阻塞态 —> 就绪态)
    • 时间片轮转的情况下,进程的时间片用完了 (运行态 —> 就绪态)
    • CPU调度给优先级更高的进程 (运行态 —> 就绪态)

(2)如何切换多进程

1)队列操作

在这里插入图片描述
保存现场状态,将进程放到阻塞队列或就绪队列中,再根据调度规则从就绪队列中调度一个进程来执行。

3)调度

在这里插入图片描述

3)切换

在这里插入图片描述
假设正在执行进程为p1,对应PCB1,要切换到的进程为p2,对应PCB2。

当要进行进程切换时,先通过赋值的方式,将当前CPU里的信息保存到PCB1之中。然后再将PCB2中的信息,赋值给CPU,从而完成了从p1进程到p2进程的切换。

(3)如何解决多进程交替时的相互影响?

在这里插入图片描述
当多个进程同时存在于内存时,可能会出现访问统一资源并对该资源进行改写的问题。这时,就需要限制对该资源对应的地址的读写操作

在这里插入图片描述
通过映射表来实现地址空间的分离

映射表是内存管理的核心!
在这里插入图片描述
进程1访问100地址时,经过映射表后得到的物理内存地址是782,进程2访问100地址时,得到的物理内存地址时1260,实现了多个进程各自只能访问各自的内存空间而互不影响,从而实现了多进程共存。而只有共存的进程,才可以进程交替执行,也就相当于进程共存为进程的交替执行提供了条件。

(4)如何让多进程合作?

在这里插入图片描述
进程1和进程2合作执行时,可能会出现同时修改7地址这个位置。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
想要完成多进程的合作,核心在于进程同步(合理的推进顺序),在使用临界资源时将其上锁。

(5)总结

在这里插入图片描述
总结
进程的四个任务
(1)PCB是OS中最重要的结构,贯穿始终,解决了如何组织多进程。
(2)写调度程序,解决了如何调度多进程(调度规则)。
(3)操作寄存器完成切换,解决如何切换多进程(PCB与CPU信息)。
(4)进程同步与合作,要有地址映射,解决了如何解决多进程相互的影响与合作。(映射表、同步与互斥

举报

相关推荐

0 条评论