问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

02 操作系统进阶之进程

发布网友 发布时间:2023-08-07 16:48

我来回答

1个回答

热心网友 时间:2023-09-14 22:58

计算机的物理资源有限。
多个程序在计算机上同时运行,它们不可能连续地在处理器上运行或占用全部内存,因此需要进程的抽象在用户的一侧隐藏上下文切换等细节。
进程作为运行的程序的抽象,包含了一个程序的运行状态和这个程序所用的抽象内存及其中存储的数据。我们将后一部分,即一个进程可以使用的全部内存的地址和它们存储的数据,称为这个进程的地址空间(address space)。我们可以将进程笼统地看做是一个或多个线程与一个地址空间的结合。

上面提到的都是进程在用户一侧的抽象,但我们还没有考虑过在系统一侧我们需要什么数据结构来实现这一抽象。这一节中我们就将会探索进程在系统中的实现。

为了实现上述的第一个目的,即在进程中存储其运行状态,我们将在进程中存储处理器状态寄存器、指令计数器、栈指针、通用寄存器等代表了进程目前的运行状态的值。由于现代计算机中往往有多个核或多个处理器,我们的程序可以达到并行(parallelism,即在物理时间上同时运行,区别于多个进程在处理器上的并发(concurrency)),,因此同一个进程可能同时包含有多个不同的运行状态。为了更好地区分进程在一个处理器上的运行状态和进程本身的运行状态,我们在此引入线程概念。每个线程拥有一个线程控制块(thread control block, TCB),,用来存储我们上述提到的处理器状态寄存器、指令计数器、栈指针、通用寄存器等数值,但同一个进程中的所有线程都共享同一个地址空间。

一个用户进程所看到的内存空间是抽象的,区别于实际的物理内存,因此为了支持进程从抽象内存获取物理内存中存储的信息,我们需要在进程中包含从抽象内存向物理内存的映射,即该系统所用的地址转换方法所需要的信息。地址转换有很多种不同方法,包括分页存储、分段存储等,它们都需要不同的信息来实现地址转换;

以最为简单的 Base and Bound 为例。

在 Base and Bound 方法中,系统将一段连续的物理内存分配给一个进程,Base 代表基地址,即系统分配给一个进程的可用内存的起始地址,Bound 代表这个进程可用的内存的最高地址。为了读写物理内存,我们将基地址与抽象内存地址相加,获得实际地址;只要实际地址不大于 Bound,内核就会允许进程进行该操作。因此在这个方法中,为了实现进程地址空间的抽象,进程在系统一侧的数据结构中必须包括这段可用的内存的基地址、可用长度。

为了能在一个进程开始运行的时候方便地载入上面提到的两方面的数据,我们需要一个数据结构来包含这些数据。这个数据结构就是 进程控制块(Process Control Block, PCB),。对于内核来说,它是进程存在的唯一标识。进程控制块中存储的信息除了上面提到的实现地址转换的信息和表示运行状态的线程信息以外,还包括了很多系统在调度进程时需要的信息,比如进程号、进程所处状态(我们将在下一节中更多地解释进程可能所处的状态与不同状态间的切换)、进程的优先级等等。需要注意的是,我们不会将整个地址空间中包含的地址及其数据都存储在进程控制块里;我们只需要可以帮助我们从抽象内存地址获得实际物理地址的方法,而实际数据仍然存储在内存的对应位置中。

由于进程控制块中的信息包含了优先级、基地址、可用地址范围等用户进程不应该有权限修改的信息,用户进程不应该有权限修改进程控制块。因此我们将进程控制块存储在内核空间中。

在上一节中我们提到,进程控制块中包含了进程的状态;那么,什么是进程的状态呢?我们已经提到过,一个进程可能在运行一段时间后被切换出去,一段时间后继续运行。显然,进程至少需要两个状态——运行态(running)就绪态(ready)

进程在运行态中运行一段时间后被切换出去,排入就绪队列,等待继续运行。在三态模型中,进程还有一个状态,即 等待态(wait),。在这个状态中,进程在等待某一事件完成,不会被排入就绪队列,直到该事件发生后,进程才会被排入就绪队列,可能被选为下一个运行的进程。这一等待事件可能包括等待系统调用完成,等待获得某一个锁或收到某一信号量的信号等等,

你只需要知道,处于就绪态的进程不会因为遇到任何事件而无法进入等待态;处于等待状态的进程在事件发生后考虑到优先级等问题,必须先回到就绪状态而不能直接运行。

五态模型也是一种常见的进程状态转换模型。相比三态模型,五态模型多引入了新建态(new)和终止态(exit)。

定义这两种状态可以帮助我们避免一些我们不想看到的情况。

比如,如果我们允许一个进程在获得全部资源以前就进入就绪队列,那么一个新进程可能在未获得全部资源前就开始运行,而产生错误。(这是因为我们是在另一个进程里通过系统调用创造了这个新的进程)

同样的,如果一个进程 A 创建了另一个进程 B ,想要等待进程 B 运行完毕后从中获得一些信息,那么终止态的缺失可能导致进程 B 率先运行完毕后被系统撤销,使得进程 A 无法从进程 B 处获得任何信息。

UNIX 系统中,如果发生一个进程创建另一个进程的情况,那么在老进程从新进程获取信息前,新进程会一直停留在终止态;如果新进程终止后,仍在运行的老进程没有从新进程获取信息,那么新进程就会成为我们所说的“僵尸进程”,停留在系统内存中,导致系统变慢。

除去图片中虚线的两个状态,剩下的三个状态就是我们之前提到的三态模型。注意各个状态之间转换的条件。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 贝贝帮找家教老师,有人用过吗,老师能力强么? 显示给对方疑是被盗号,谨防诈骗怎么办 被盗了怎么办,有什么办法找回来? 冲动注册了一家公司不想干了怎么办 11月21日0时至15时北京新增本土感染者情况及健康提示 取消关注微信游戏的好友怎样在加上 我的浦发信用卡,刚激活,问了客服说了我的卡没问题,但是绑定不了支付宝京东唯品会所有的快捷支付 苹果macpro没有pci接口,我的声卡内置和外置的连接不上,请问有什么可以让苹果电脑拥有外置的p 苹果微信哪个版本直接搜索拉黑 我打算10月1号带我女朋友出去,不知道宁波这里有什么地方好玩的? 码力任务平台app苹果 大妈把茄子扔锅里乱炖 这个做法遭到邻居的嘲笑 最后却全卖光了 志愿者证领了以后怎么关联 该义工证号已绑定其他小程序号怎么搞 安卓手机如何打开.qmcflac文件 告别会发言稿 偶然性在事物发展中的作用( ) 公路桥涵设计采用的偶然作用包括有( )。 偶然性对事物发展的作用是( ) 汤怎么做好吃,酸菜汤的家常做法 梦见流月经是什么意思 碧玉如何养殖(碧玉养殖方法及注意事项) huo什么意思 我一头huo,网络啥意思 我买的移动手机卡7月29号买的开通了还没用,什么时候扣月租,是下个月一号吗?还是这个月也扣? 移动的18元飞享套餐青春版是怎么一回事?是不是我一办理后以后每月只扣我18元 第一次买学生票,买了之后去窗口办理学生票效验后,可以直接刷身份证进站,还是要取票进站? 美术198文化347能上什么大学? 浙江商业职业学院风气怎么样 九江银行卡已绑定了网商银行,为什么不能转账到浙江网商银行 衣服搭配。黄棕色的条绒裤配红色的外套 红色很正 好看吗 脊柱拍片可以报销吗 急,急,急,变电站值班人员晚上是否允许睡觉?哪有规定? 蔚来换电站值班能睡觉吗 为什么摩尔庄园记者任务我都做了图标还没点亮啊 当你被陌生人尾随时,应该怎么办? 当被陌生人尾随时怎么办? 21年奥铃冷藏车拉水果可以么 泰国冰镇水果车适合国内吗? 英超球队.意甲球队.西甲球队.德甲球队,哪个联赛的欧冠次数最多?怎么个情况