- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我说的是:
struct {
struct spinlock lock;
struct proc proc[NPROC];
} ptable;
驻留在 proc.c 文件中。
有人可以解释一下它是在哪里初始化的吗?因为,在 proc.c 中,我从未见过向其中添加任何东西(进程)。
更准确地说,假设我正在查看调度程序代码:
void
scheduler(void)
{
struct proc *p;
for(;;){
// Enable interrupts on this processor.
sti();
// Loop over process table looking for process to run.
acquire(&ptable.lock);
for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){
if(p−>state != RUNNABLE)
continue;
// Switch to chosen process. It is the process’s job
// to release ptable.lock and then reacquire it
// before jumping back to us.
proc = p;
switchuvm(p);
p−>state = RUNNING;
swtch(&cpu−>scheduler, proc−>context);
switchkvm();
// Process is done running for now.
// It should have changed its p−>state before coming back.
proc = 0;
}
release(&ptable.lock);
}
}
在:
for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){
你可以看到我们正在循环遍历 ptable 中的每个进程。我的问题是,他们是如何到达那里的?谢谢!
最佳答案
您不会在 xv6 的代码中找到初始化。原因如下。
C 将 proc 的 int 和 enum 变量初始化为 0。当 ptable
被实现时,struct proc proc[NPROC];
创建一个包含 64 个进程的数组,其字段被初始化为0 语言。 0 恰好是 UNUSED 枚举的值。
allocproc 循环遍历 ptable.proc 寻找 state=UNUSED,然后将它找到的第一个初始化为所有需要的值。因此无需显式初始化数组中的结构。
关于c - XV6: ptable 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29448195/
我已经在我的目标板上安装了 gstreamer-1.0。当我运行以下命令时: gst-launch-1.0 filesrc location="/home/test.mp4" ! decodebin
我的java项目中的资源文件夹下有资源。当我使用以下方法 [2] 加载资源时,它正在工作。但是当我在 Wildfly 9.x 中部署 war 时,它说找不到 file.avsc 文件。它给出的类路径为
我正在使用 PIL,但 im.show() 不工作。我想是因为我没有安装 xv 实用程序。所以我尝试安装它,我在谷歌上搜索我有很多解决方案,但它们似乎对我不起作用。我正在粘贴其中一个。 sudo ba
我是一名优秀的程序员,十分优秀!