免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1151 | 回复: 4
打印 上一主题 下一主题

新手 初学计算机操作系统 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-16 00:09 |只看该作者 |倒序浏览
刚学操作系统,理论上还可以看的明白,可一看到程序,有糊涂了。
下面的代码是父进程,子进程的。
while ((pid=fork()) == -1);
if (pid == 0)
        printf("this is a child process!\n";
else
{
        wait(0);
        printf("this is parent process!\n";
}
我有些疑问就是:
程序不是顺序执行的吗,如果pid>;0,他会执行else,怎么回再打印出
this is a child process!呢,是我也知道是子进程的原因,可问什么
if那里面的就是子进程了呢,计算机是如何确定的?
进程是在程序编译的时候就确定的了的吗?函数lockf(...)是对临界区的
P,V操作吗?还有就是flashget里的多少多少线程和操作系统里的线程是
一样的吗?
谢谢,还望多帮助。

论坛徽章:
0
2 [报告]
发表于 2004-12-16 09:24 |只看该作者

新手 初学计算机操作系统

要好好理解进程的概念,一个进程就是某个程序的一次运行。(当然得是单进程程序)
当父进程fork出一个子进程,父进程的task_struct结构(就是所谓PCB)、系统空间堆栈全部复制给子进程;父进程用户空间复制给子进程。
然后,父子进程分道扬镳,各走各的路。

虽然看C代码时感觉好像是父子进程都看得到对方代码,总担心万一if语句为真会不会执行之类的问题,但事实上fork之后各走各的,没有分支问题。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-12-16 09:37 |只看该作者

新手 初学计算机操作系统

父子进程其实更像兄弟的关系。
原来是一个进程,碰到了fork,就复制了一份,就是两个进程了。
两个进程从同一个位置(不同进程的同一个位置,可以理解成offset)向下执行。
两个进程的“上半身”(已经执行过的部分)是一样的,而两个进程的“下半身”(未执行的部分)是不一样的。
两个进程靠fork的反回值来判断“下半身”是什么样子的。

flashget的线程是和OS的一样的。但是要注意进程和线程的区别。

论坛徽章:
0
4 [报告]
发表于 2004-12-16 10:09 |只看该作者

新手 初学计算机操作系统

注意fork调用一次,返回两次,所以看起来只有一段程序代码,在fork成功之后已经有两个进程存在了。
应用进程要做的就是根据fork的返回值,判断现在运行的是子进程还是父进程,从而实现相应的功能。注意一定要把程序的逻辑同进程结合起来,即“现在是哪个进程在执行哪段程序”。
如果想深入下去,就看看linux相应部分的源码。

论坛徽章:
0
5 [报告]
发表于 2004-12-16 10:57 |只看该作者

新手 初学计算机操作系统

我记得以前有篇帖子讨论了好多关于fork的。
建议楼主查查以前的帖子。很详细的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP