操作系统之进程调度

目录

一、操作系统

二、操作系统之进程管理

2.1、什么是进程?

2.2、管理进程的方式

2.2.1、描述

2.2.2、组织

2.3、PCB中的属性

2.3.1、PID

2.3.2、内存指针

2.3.3、文件描述表

三、进程调度

3.1.为什么要进行进程调度?

3.2、什么是进程调度?

3.2.1、并行执行

3.2.2、并发执行

3.3进程调度需要考虑的因素

3.3.1、状态

3.3.2、优先级

3.3.3、上下文

3.3.4、记账信息

3.4、进程资源的内存分配


一、操作系统

操作系统的本质其实是一个软件,其作用为 管理软件

功能 有两点:

1、对下管理各种硬件设备。

2、对上给软件提供稳定的运行环境。

系统调用:操作系统提供API,应用程序通过调用其提供的API完成运行。

操作系统内核:实现了操作系统最核心的功能,内存管理,硬盘管理,进程管理,设备管理,文件管理.......

驱动:指的是驱动应用软件的程序,其中包含有关硬件设备的信息。此信息能够使计算机与相应的设备进行通信。eg:游戏鼠标的某些按键,计算机无法在没有安装驱动程序的情况下运行这个特殊键的功能。

二、操作系统之进程管理

2.1、什么是进程?

进程也称“任务”,一个起来的程序,就称之为进程——操作系统分配资源的最基本的单位。

🍉🍉前言:我们也观察到,同一时刻,系统中的进程有很多,那么操作系统是如何将其安排好呢?(如下)

2.2、管理进程的方式

2.2.1、描述

详细的表示清楚,一个进程有哪些属性/信息(而这些详细信息就存放在 PCB 中,其本质为结构体)。

2.2.2、组织

通过一定的数据结构(通常为双向链表),把若干个用来描述的实体(PCB),给放在一起,并且进行增删查改。

🎈🎈小结:

创建一个进程,本质上就是创建PCB,并且加入到链表上,

销毁一个进程,本质就是从链表上删除对应的PCB节点。

而上述所展示的 查看任务管理器 的操作,本质就是遍历这个链表。

一个进程可能对应一个PCB,也可能对应多个,同样,系统管理的PCB链表也不一定为一个。

2.3、PCB中的属性

2.3.1、PID

PID:进程的身份标识。 

一个主机,同一时刻,这些进程的PID是唯一的,通过PID来区分一个进程。

2.3.2、内存指针

🚩🚩一个可执行的文件,运行时,操作系统会把文件中的核心数据(要执行的指令以及指令依赖的数据)加载到内存中去。也就是说,创建一个进程,务必是需要给其分配内存空间,有的是存放指令,有的是放数据,还有的是用来维护运行状态的。

内存指针 :就是指明哪一块内存是干什么用的。

🎈🎈总结:内存指针描述的是 进程持有的 内存资源。

2.3.3、文件描述表

每个进程,都可以打开一些文件(文件是存储在硬盘上的数据),

文件描述符表的功能则是:记录了当前进程都打开了哪些文件(打开了之后就可以后续针对这些文件进行读写操作)。

🎈🎈总结:文件描述表描述的是 进程持有的 文件资源。

三、进程调度

🍉🍉前言:PCB的其他属性:进程状态,进程优先级,进程上下文以及进程进账信息,我们将同进程调度一起理解。

3.1.为什么要进行进程调度?

我们知道 进程其实是一个正在运行的程序,而调度发生的原因其实是因为当前资源(CPU资源)有限,需要进行合理的安排。

3.2、什么是进程调度?

🚩🚩 所谓进程调度其实就是通过 "并发"  "并行" 的方式让计算机可以同时执行多个进程(任务), 这就是我们平常为什么说操作系统是 多任务 的原因。

3.2.1、并行执行

多个 CPU 核心,在同时独立的运行多个进程。(每一个CPU都运行一个独立的进程)

3.2.2、并发执行

一个 CPU 核心,先运行一下进程1,再运行进程2,再运行进程3........ 

只要微观上切换的足够快,宏观上看起来就好像是3个进程同时运行一样。

3.3进程调度需要考虑的因素

3.3.1、状态

事例:老张家有三只哈士奇,每天当他一回家时,三只哈士奇都会用充满睿智的眼神看向老张,但是如果某一天,一只哈士奇病了,那么在老张回家的时候,这只哈士奇可能就没有精力来看向自己主人了。

🍉🍉分析:当老张回到家中时,没有生病的哈士奇(进程处于就绪状态),就会用睿智的眼神看向老张(进程在CPU上运行),生了病的哈士奇(进程处于阻塞状态),就无法看向老张。

🎈🎈总结:进程处于阻塞状态时,就无法被调度到CPU上执行,

进程处于就绪状态时,才能上CPU来运行。

3.3.2、优先级

事例:老张在三只哈士奇中,最偏爱那只傻里傻气的哈士奇,愿意花最长的时候陪它。而其他两只就相对较少。

🍉🍉分析:傻里傻气的哈士奇(进程优先级最高),其他两只哈士奇(优先级相对较低)。

🎈🎈总结:凡事都有个度,同样的,进程也有优先级,系统在调度的时候,就会根据优先级来给进程安排时间。当然创建进程的时候,可以通过一些系统调用来干预优先级。(相对而言)

3.3.3、上下文

事例:老张应出差的缘故,不得已将三只哈士奇寄养在隔壁老郑家,等老张出差回来之后,再去领回三只哈士奇一起玩耍。

🍉🍉分析:老张去出差相当于切换到别的进程,将哈士奇放在老郑家是 存档,而取回哈士奇是 读档。

🎈🎈总结:进程在 CPU 上执行了一会之后,要切换到别的进程,就需要保存当前运行的中间结果(存档),下次再轮到他执行的时候,就恢复之前的中间结果(读档),继续往下执行。

对于进程来说,上下文就是CPU中的寄存器的值(寄存器的值就包含了运行的中间结果,需要把这些结果保存到PCB的上下文信息中(内存))。

3.3.4、记账信息

事例:前文说到,老张养了三只哈士奇,最喜欢其中一只傻傻的,但是作为狗的主人,并不能全都把时间花在这只哈士奇上,也需要花时间在其他两只上面。

🍉🍉分析:花时间在其他两只哈士奇上。(时间分配更加均衡,避免CPU”忘记“这个进程)

🎈🎈总结:记账信息本质是:统计信息。记录的是:每个进程在CPU上执行的时间(这里的时间不是通过秒来进行衡量,而是通过执行指令的条数衡量的)。

3.4、进程资源的内存分配

前言:因为我们需要 避免内存访问越界(下图中进程1的指针访问到了进程2) 的情况:

我们引入了一个“虚拟地址空间”的概念(不是真实的物理内存地址)。

每当进程划分内存空间时,通过专门的 设备 MMU 来完成虚拟地址到物理地址之间的映射。

🍉🍉分析:MMU就可以针对这里的地址进行 校验,如果某个内存指针想要访问的是非法地址就通知进程(比如将其杀死),从而及时止损,避免干扰其他进程运行。

使用 虚拟地址空间,就认为进程之间存在“隔离性”(一个进程是不能直接访问另一个进程的内存数据的)。

隔离性到底是啥?

:在当前这个示例中,隔离性主要体现在,如果出现了越界访问的情况(因为在虚拟地址空间),是不会出现进程之间的冲突的。

 🎈🎈总结:这种防止干扰的操作,提高了系统的稳定性,但是如果在某些特别场景(需要进程间相互配合),就很难进行交互。于是系统又引入了另一个机制:进程间通信(基于文件,socket(网卡))。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
操作系统进程调度是计算机操作系统中的一个重要部分,它负责协调和管理系统中的各个进程,以实现资源的有效利用和任务的高效执行。在C语言中进行操作系统进程调度实验,可以通过模拟不同的调度算法来理解和掌握进程调度的原理和实现过程。 首先,可以使用C语言编写一个简单的程序,模拟进程的创建、就绪、运行和结束等状态。通过定义进程控制块(PCB)、进程队列等数据结构,以及编写相应的进程管理函数,来实现对进程的管理和调度。例如,可以编写函数来创建新进程、将进程加入就绪队列、根据调度算法选择下一个要执行的进程等。 其次,可以选择不同的调度算法来实验,如先来先服务(FCFS)、最短作业优先(SJF)、时间片轮转(RR)等。针对不同的调度算法,通过C语言实现相应的调度函数,并在模拟程序中进行调用,观察不同算法对进程执行顺序和响应时间的影响。 最后,可以通过对进程调度实验的结果进行分析和比较,来深入理解各种调度算法的优缺点,以及在不同场景下的适用性。同时,也可以通过进一步的实验和优化,来改进模拟程序,增加更多的实际场景和特性,以更好地理解和应用操作系统进程调度的相关知识。 通过C语言进行操作系统进程调度实验,可以帮助我们更深入地理解和掌握操作系统的核心概念和原理,为今后的系统设计和开发打下坚实的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值