多核cpu运行程序如何交错?
How can the multi-core cpu run the program interleaved?
程序的输出显然不是代码中 printf()
的内容。相反,它看起来像是不规则顺序的字符。我知道原因是因为父进程和子进程是运行ning
同时,但在这个程序中我只看到 pid=fork()
,我认为这意味着 pid 只是子进程的 ID。
那么为什么父进程可以打印呢?
两个进程如何运行在一起?
// fork.c: create a new process
#include "kernel/types.h"
#include "user/user.h"
int
main()
{
int pid;
pid = fork();
printf("fork() returned %d\n", pid);
if(pid == 0){
printf("child\n");
} else {
printf("parent\n");
}
exit(0);
}
输出:
ffoorrkk(()) rreettuurrnende d 0
1c9h
ilpda
rent
我将我的回答重点放在显示观察到的输出如何从显示的程序中产生。我认为它已经为您解决了问题。
这是你的输出。
我对其进行了编辑以很好地猜测什么是 parent (p) 和 child (c):
ffoorrkk(()) rreettuurrnende d 0\n
cpcpcpcpcpcpcpcpcpcpcpcpccpcpcppccc
1 c9h\n
pccpcpp
ilpda\n
ccpcpcc
rent
pppp
如果您只使用下面带有“c”的字符,您会得到
fork() returned 0
child
如果你只使用下面带有“p”的字符,你会得到
fork() returned 19
parent
这样拆分,它应该与您对 fork()
工作原理的了解相符。
评论已经提供了标题中三个“?”修饰的问题和您的问题 post 的 body 的实际答案。
伦丁:
It creates two processes and they are executed just as any other process, decided by the OS scheduler.
你自己:
each time fork() is called it will return twice, the parent process will return the id of child process, and child process will return 0
也许是为了在上面加一个更明显的观点:
parent 进程接收到 child ID 并在 fork()
.
之后继续执行程序
这就是为什么输出出现两次,类似地,交错,PID 值和所选 if
分支不同。
相关的还有,在给定的情况下没有行缓冲。否则就不会有 character-by-character 交错,所有内容都会更具可读性。
程序的输出显然不是代码中 printf()
的内容。相反,它看起来像是不规则顺序的字符。我知道原因是因为父进程和子进程是运行ning
同时,但在这个程序中我只看到 pid=fork()
,我认为这意味着 pid 只是子进程的 ID。
那么为什么父进程可以打印呢?
两个进程如何运行在一起?
// fork.c: create a new process
#include "kernel/types.h"
#include "user/user.h"
int
main()
{
int pid;
pid = fork();
printf("fork() returned %d\n", pid);
if(pid == 0){
printf("child\n");
} else {
printf("parent\n");
}
exit(0);
}
输出:
ffoorrkk(()) rreettuurrnende d 0
1c9h
ilpda
rent
我将我的回答重点放在显示观察到的输出如何从显示的程序中产生。我认为它已经为您解决了问题。
这是你的输出。
我对其进行了编辑以很好地猜测什么是 parent (p) 和 child (c):
ffoorrkk(()) rreettuurrnende d 0\n
cpcpcpcpcpcpcpcpcpcpcpcpccpcpcppccc
1 c9h\n
pccpcpp
ilpda\n
ccpcpcc
rent
pppp
如果您只使用下面带有“c”的字符,您会得到
fork() returned 0
child
如果你只使用下面带有“p”的字符,你会得到
fork() returned 19
parent
这样拆分,它应该与您对 fork()
工作原理的了解相符。
评论已经提供了标题中三个“?”修饰的问题和您的问题 post 的 body 的实际答案。
伦丁:
It creates two processes and they are executed just as any other process, decided by the OS scheduler.
你自己:
each time fork() is called it will return twice, the parent process will return the id of child process, and child process will return 0
也许是为了在上面加一个更明显的观点:
parent 进程接收到 child ID 并在 fork()
.
之后继续执行程序
这就是为什么输出出现两次,类似地,交错,PID 值和所选 if
分支不同。
相关的还有,在给定的情况下没有行缓冲。否则就不会有 character-by-character 交错,所有内容都会更具可读性。