- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在阅读 Remzi 和 Andrea 的《操作系统——三篇简单的文章》,在关于上下文切换的部分,它指出在中断期间,正在运行的进程的寄存器被保存到它的内核堆栈中,然后下一个进程的寄存器是从它的 PCB 加载的,但后来它说它是从它的内核堆栈加载的
我的问题是,为什么稍后从内核堆栈加载寄存器时从 PCB 加载寄存器,当您将所有信息保存在内核堆栈上时,PCB 的意义何在?
最佳答案
我创建了一个图表来帮助更好地理解流程。我组织它类似于问题中的数字。
During a context switch, does the OS use PCB or kernel stack to restore registers?
它同时使用了这两者。
why load the registers from the PCB when you later load them from the kernel stack
因为你只从PCB加载了Kernel Stack的esp,其余寄存器都从Kernel Stack加载。
what even is the point of a PCB when you save all the info on the kernel stack
因为您没有将所有信息保存在内核堆栈中,所以您将大部分信息保存在内核堆栈中。内核堆栈(又名其 esp)的位置存储在 PCB 中。
注意:请注意该图仅用于说明目的(即具体且仅回答 OP 关于分别保存用户空间寄存器和内核空间的意义所在的问题分别注册到内核堆栈和 PCB)。从某种意义上说,根据操作系统及其体系结构,还有许多其他寄存器可以保存和恢复,这并不完全准确。尽管如此,它还是准确地说明了 OP 问题的答案。
关于operating-system - 在上下文切换期间,操作系统是否使用 PCB 或内核堆栈来恢复寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67955845/
最近在学习内核,发现一个问题,谁控制进程控制 block (PCB)? 内核还是进程本身?它在不同的平台上是否不同( windows/Linux )? 到目前为止,我知道PCB由硬件控制,但我无法得到
我正在开发 Mega 2560 开发板。我计划使用裸 ATmega2560 微 Controller (与 Arduino 上的相同)将我的项目移动到自定义 PCB。根据我的研究,我的问题没有明确的答
我试图在加载时生成一个增量值,用于“序列化”具有唯一代码值的 PCB。不是 ld 或预处理器命令方面的专家,因此寻求帮助。 该值将用于加载代码的每个板的唯一 ID,也将用作现场板的计数器。 对于如何完
在这里,我尝试使用摄像头实时检测 PCB 上的基准点,同时我正在使用 C#.net 4 win-form 应用程序。 在谷歌搜索了两天并阅读了许多帖子和博客之后。我发现我必须做一些叫做translat
我是操作系统概念的新手。我读到 PCB 包含有关寄存器的信息。这是否意味着“它包含特定时间的所有寄存器内容”或“仅包含属于特定进程的寄存器”?如果是第二种情况,请告诉我操作系统如何跟踪哪些寄存器属于哪
我是操作系统概念的新手。我读到 PCB 包含有关寄存器的信息。这是否意味着“它包含特定时间的所有寄存器内容”或“仅包含属于特定进程的寄存器”?如果是第二种情况,请告诉我操作系统如何跟踪哪些寄存器属于哪
我正在使用 NXP lpc1769 演示板开发一个小项目。我正在使用 CodeRed 的 LPCExpresso 5 对其进行编程,我想知道是否可以将应用程序 hex/bin 文件从开发板传输回 PC
我在 Linux 中工作,我有点困惑我是否可以访问进程的 PCB?如果是,那么我们可以访问它的哪些内容并将它们打印到终端上,如果不是,那为什么不呢? 感谢您的回答...... 最佳答案 如果说 PCB
我目前正在阅读 Remzi 和 Andrea 的《操作系统——三篇简单的文章》,在关于上下文切换的部分,它指出在中断期间,正在运行的进程的寄存器被保存到它的内核堆栈中,然后下一个进程的寄存器是从它的
我想写一个小 Linux 内核模块,它可以显示所有正在运行的进程的 PID。 我有以下代码: /* * procInfo.c My Kernel Module for process info
我有一个基本的固件问题。我正在寻找对 nRF51822 IC 进行编程并将其集成到我自己的 PCB 上。评估套件似乎已经焊接了 IC。这是我只能对 nRF51822 进行编程并准备好在其他地方使用的方
我正在尝试将硬件组件添加到包含对象数组的 PCB,但我无法将对象传递到数组。这是我的第一个 Java 项目,所以这里完全是新手。请帮忙! public class PCB { private
我正在用 C++ 编写线程处理代码。 Thread 的一个实例有一个指向 PCB 结构的指针,在 Thread 的构造函数中我只是调用 myPCB = new PCB(name, stackSize,
我们正在开发一种包含嵌入式 Linux 系统的产品。存储将是一个 eMMC 设备。我想尽可能地利用 eMMC 设备的一些功能,例如引导分区、可能的 RPMB 分区和多个用户分区。 但是,我们的开发板要
如果我们谈论进程的地址空间,它就是虚拟地址范围,其中包括该特定进程的静态数据、堆栈和堆内存。然后来到进程控制 block (PCB),它是由操作系统为其管理的每个进程维护的数据结构,其中 PCB 包含
据我了解,操作系统中的每个进程都包含自己独立的进程控制块。我的一个 friend 试图澄清这一点,并说实际上只有一个进程控制块包含每个进程的信息。 谁可以给我解释一下这个。每个流程都有自己的 PCB
我需要了解存储在 Windows 进程控制 block (PCB) 和 Linux PCB 中的数据。我在网上搜索,但不幸的是我找不到我要找的东西。大多数链接都没有具体说明结构内部到底是什么,它们只提
我们可以在 C++/VC++ 中访问 ODB++ 文件吗? PCB - 打印电路板制造数据库 有没有人做过这个??互联网上有任何可用于访问/阅读此 ODB++ 的库文件吗? 最佳答案 有一个用于 VC
为什么在上下文切换期间 TLB(Translation Look Side buffer)存储在 PCB 中?为进程保存页表还不够吗? 最佳答案 翻译后备缓冲区不存储在进程上下文 block 中。在某
我是linux内核开发新手。现在我正在尝试编译我自己的内核。 我的问题是我想像那样将一个新变量插入到 struct sched_entity 中 struct sched_entity { struc
我是一名优秀的程序员,十分优秀!