操作系统学习总结 进程管理篇之进程

news/2024/11/24 12:28:23/

目录

进程的概念

进程

中断

并发与并行

进程和程序的关系

进程的状态

状态延申

进程的控制结构

进程描述信息:

进程控制和管理信息:

资源分配清单:

CPU相关信息:

PCB如何组织

进程的控制

创建进程

终止进程

阻塞进程

唤醒进程

进程的上下文切换

发生进程上下文切换的场景


进程的概念

进程

我们写的代码经过编译后可执行文件,运行这个可执行文件,它就被加载到了内存中,这个在运行中的程序就是进程。

中断

假设某个进程要读取磁盘,因为读取磁盘的时候,磁盘读写速度慢,如果CPU一直等待磁盘读取完,这样CPU利用率很低。于是CPU不会阻塞等待数据返回,而是执行别的进程,当硬盘数据返回的时候,CPU收到中断,CPU再运行这个程序。

并发与并行

CPU管理多个进程,一个单核CPU只能运行一个进程,在一段时间内可以运行多个进程,他们是交替执行的,这就是并发。当多个CPU处理器核,每个处理器核各自运行自己的进程,这就是并行。

对于单CPU,因为进程切换速度快,所以多个程序看起来是同时运行像并行一下,实际上微观上是并发。

进程和程序的关系

程序好比是菜谱,做菜的材料是数据,做菜是进程。假设我们是CPU,我们可以一边做菜一边熬汤,这体现CPU可以从一个进程切换到另一个进程,切换前记录一下当前进程运行的状态信息,以便下次切换回来可以恢复执行,所以,进程有运行-暂停-运行的活动规律。

进程的状态

创建状态:进程正被创建时的状态

运行状态:进程正在CPU运行的状态

就绪状态:进程可以运行了,因为CPU在运行其他进程而暂时停止运行

阻塞状态:进程正在等待某一事件完成(比如IO操作完成)而暂停运行,这时即使有CPU控制权,进程也无法运行

挂起状态:当系统内存紧张,进程占用的物理内存空间被换出到磁盘中,等在需要运行的时候,再从磁盘换入到物理内存中,这个描述进程没有占用实际物理内存空间的情况就是挂起状态。

结束状态:进程正在从系统中消失的状态

状态延申

就绪挂起状态:进程在外存,只有进入内存就进入就绪状态,等待被调度

阻塞挂起状态:进程在外存,等待某个事件出现。

进程挂起的其他情况:

sleep让进程间歇性挂起,原理是设置定时器,到时唤醒

使用ctrl+z挂起进程

进程的控制结构

操作系统用进程控制块PCB(process control block)数据结构来描述进程。

PCB是进程存在的唯一标识,进程消失了,PCB也会消失。

PCB包含的具体信息:

进程描述信息:

进程标识符:标识各个进程,每个进程都有一个唯一的标识符

用户标识符:进程归属的用户,用户标识符主要为共享和保护服务

进程控制和管理信息:

进程的当前状态:如new、ready、running、waiting、blocked等

进程优先级:进程抢占CPU时的优先级

资源分配清单:

有关内存地址空间或虚拟地址空间的信息,所打开文件的列表和所使用的IO设备信息

CPU相关信息:

CPU中各个寄存器的值,当进程被切换的时候,CPU的状态信息都会被保存在相应的PCB中,以便进程重新执行时,能从断点处继续执行

PCB如何组织

PCB通常通过链表的方式进行组织,把具有相同状态的进程链在一起,组成各种队列。比如:

将所有就绪状态的进程链在一起,称为就绪队列。

把所有处于阻塞状态的进程链在一起,称为阻塞队列。

单核CPU只有一个运行指针,因为单核CPU在某个时刻只能运行一个程序

除了链接方式还有索引方式,它的工作原理:将同一个状态的进程组织在一个索引表中,索引项指向相应的PCB。一般选择链表,因为面临进程创建销毁等调度将导致进程状态变化,使用链表更加灵活插入和删除。

进程的控制

创建进程

操作系统允许一个进程创建另一个进程,而且允许子进程继承父进程所拥有的资源

创建进程的过程如下:

1.申请一个空白的PCB,并向PCB中填写一些控制和管理进程的信息,比如进程的唯一标识等;

2.为该进程分配运行时所需的资源,比如内存资源;

3.将PCB插入到就绪队列,等待被调度运行

终止进程

三种方式:正常结束,异常结束,外界干预(信号kill)

子进程被终止时,其在父进程继承的资源应当还给父进程。而父进程被终止时,该父进程的子进程就变为孤儿进程,被一号进程收养,并由一号进程对他们完成状态收集工作。

过程如下:

查找需要终止的进程PCB;

如果处于执行状态,则立即终止该进程的执行,然后将CPU资源分配给其他进程

如果还有子进程,则应将该进程的子进程交给1号进程接管

将该进程所拥有的全部资源都归还给操作系统

将其从PCB所在队列中删除

阻塞进程

当进程需要等待某一个事件完成时,调用阻塞语句把自己阻塞等待。一旦被阻塞等待,它只能由另一个进程唤醒。

过程如下:

找到要被阻塞进程标识号对应的PCB

如果该进程为运行状态,则保护其现场,将其状态转为阻塞状态,停止运行

将该PCB插入到阻塞队列中去

唤醒进程

处于阻塞状态的进程不能叫醒自己,如果进程在等待I/O事件,需要别的进程发消息给它,则只有当该进程所期待的事件出现的时候,才由发现者进程用唤醒语句叫醒它。

过程如下:

在该事件的阻塞队列找到对应进程的PCB

将其从阻塞队列中移出,并置其状态为就绪状态

把该PCB插入到就绪队列中,等待调度程序调度

进程的上下文切换

一个进程切换到另一个进程称为进程的上下文切换。

CPU寄存器中有进程运行中的数据,程序计数器存储CPU正在执行的指令或即将执行的下一条指令位置。这两者是CPU上下文。

CPU上下文切换就是把前一个任务的CPU的上下文保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。

根据任务不同CPU上下文切换分为:进程上下文切换线程上下文切换中断上下文切换

进程由内核管理和调度,进程的切换只能发生在内核态。进程上下文切换不仅包含虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的资源。

通常把交换的信息保存在进程的PCB,当要运行另外一个进程的时候,需要从这个进程的PCB取出上下文,然后恢复到CPU中,这使得这个进程可以继续执行。

进程的上下文切换的开销越小,则进程花更多时间在执行程序上,自然越小越好。

发生进程上下文切换的场景

1.进程的时间片耗尽,进程运行状态变成就绪状态,系统从就绪队列选择另一个进程运行

2.进程在系统资源不足时(比如内存不足),需要等待资源满足后才可以运行,进程被挂起,并由系统调度其他进程运行。

3.进程通过睡眠函数sleep这样的方法将自己主动挂起

4.有更高优先级的进程需要运行,当前进程会被挂起

5.发生硬件中断,CPU上的进程会被中断挂起,转而执行内核中的中断服务程序


http://www.ppmy.cn/news/825730.html

相关文章

某数字安全卫士的软件管家提取版

不少朋友有定期重装系统的需求,每次装机过后安装软件的过程都会变得如此漫长和痛苦,下个管家或者卫士吧,倒是有专门的软件管理功能,可以轻松下载到自己需要的软件,但是管家或卫士本身会在你的“允许”下安装各种各样的…

注意事项-关闭腾讯管家和360杀毒软件

注意事项-关闭腾讯管家和360杀毒软件 MP4没有声音解决办法 用格式工厂将MP4转成MP3 然后放到会声会影的音频里就可以了 转载于:https://www.cnblogs.com/zff193/p/8093338.html

360+linux浏览器下载官网下载,360极速浏览器下载

360极速浏览器是基于谷歌开源Chromium开发的浏览器,和国内众多的双核浏览器一样,360极速浏览器针对中国用户的使用习惯做了非常多的功能优化,例如鼠标手势,超级拖拽等。 360极速浏览器,1分钟了解 相关APP 小编寄语 曾经,当大部分的xp电脑ie因为慢的要死而被众多用户广泛诟…

Android:解决APP升级后AIDL无法通讯问题

项目场景: 两个APP使用AIDL跨进程IPC通讯。A为服务端APP,B为客户端APP。 问题描述 现象:A自动升级版本后,无法向客户端B通讯,会打印log“AIDL未连接客户端”,但B可以向A通讯。 实现代码: cl…

OSG三维渲染引擎编程学习之九十二:“第九章:OSG动画” 之 “9.3 动画路径导出”

目录 第九章 OSG动画 9.3 动画路径导出 第九章 OSG动画 在游戏或一些演示中,动画的渲染会非常重要,同时也应添加更多的娱乐与互动,一个非常绚丽和真实的动画会用一个引擎让人刮目相看。目前,骨骼动画是一项比较高级的动画技术,它的显示效果也非常逼真。 本章将主要介绍O…

西安历史美食休闲三日游【规划】

本来打算这个暑假去西安的玩的,后来又改变主意。这篇行程安排是写给队友谢罪的。。。各位简友有什么推荐的欢迎留言~~~ DAY 1: 陕西历史博物馆大雁塔景区 DAY 2 华清宫骊山秦始皇陵兵马俑 DAY 3 明城墙钟鼓楼回民街书院门 DAY 1: 陕西历史博物馆大雁塔景区 早餐自理…

设计模式之抽象工厂模式学习笔记

前言 在学习抽象工厂模式之前,最好先学习了解简单工厂模式和工厂方法模式。这样会对学习抽象工厂模式有帮助,因为抽象工厂模式也是基于工厂方法模式的。 解释 说白了就是工厂的工厂,以一个超级工厂为核心,围绕这个超级工厂去创…

设计模式之工厂方法模式学习笔记

定义 定义一个用于创建对象的接口,让子类去决定是实现哪个类。工厂方法使类的实例化,延迟到了子类。 结构图 角色拆解分析: 1.Product:抽象产品类 2.ConcrereProduct:具体产品类,实现Product接口 3.Fact…