night_gale
驱动牛犊
驱动牛犊
  • 注册日期2005-03-13
  • 最后登录2005-04-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2549回复:14

请大家讨论一个问题!如何自己创建进程!

楼主#
更多 发布于:2005-03-13 20:20
大家好!我一直在想怎样才能自己创建一个多进程的程序,也就是说不用系统提供的多进程函数,自己如何创建!系统多进程中的创建进程函数如何实现!希望和大家一起讨论!!希望各位大吓不辞指教!!
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-14 13:01
大家好!我一直在想怎样才能自己创建一个多进程的程序,也就是说不用系统提供的多进程函数,自己如何创建!系统多进程中的创建进程函数如何实现!希望和大家一起讨论!!希望各位大吓不辞指教!!

不使用CreateProcess,ShellExeculate,WinExe等函数?
想自己实现这些函数?不过要实现这些函数可不是简单的事,还有ring0的相应函数也要实现
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-14 15:26
太难,自己创建一大堆的内核数据结构,很多还是未知的。嘘。。。
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
night_gale
驱动牛犊
驱动牛犊
  • 注册日期2005-03-13
  • 最后登录2005-04-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-14 19:38
只要能够实现简单的并行功能就可以啊!当初Linus怎么实现呢?值得商榷!!
lbcat
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2007-09-27
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-03-15 09:09
  你是要在什么系统下实现呢??还是直接自己写多任务系统???搞不明白你的用意………… :o
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2005-03-15 09:44
网上有很多OS的代码,你可以参考他们的实现方法...
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-03-15 11:03
只要能够实现简单的并行功能就可以啊!当初Linus怎么实现呢?值得商榷!!

linus,他写的是Linux。linux开放源码,所以没有Windows那么讨厌。在用户程序下,跟UNIX一样,调用fork可以产生新进程
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
tsfyx@126.com
驱动牛犊
驱动牛犊
  • 注册日期2004-08-17
  • 最后登录2008-05-27
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-03-16 08:32
不知道你到底要干什么,如果你要写操作系统,或者你要某个单任务操作系统上实现多任务(修改DOS系统),建议你看看UCOSii的源码和其中文解释,相信会有收获!
night_gale
驱动牛犊
驱动牛犊
  • 注册日期2005-03-13
  • 最后登录2005-04-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-03-17 10:53
哦!再声明一下啊!我的任务是要自己写一段能够并发执行的两个程序段就可以了,而这实现不要系统提够的建立进程的函数啊!要自己这个功能!就是这个意思啊!
lbcat
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2007-09-27
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-03-17 11:10
 你还没说清楚你的程序是在什么环境下运行的呢??? :(
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-03-17 15:31
哦!再声明一下啊!我的任务是要自己写一段能够并发执行的两个程序段就可以了,而这实现不要系统提够的建立进程的函数啊!要自己这个功能!就是这个意思啊!

a=0;
if (a)
{并发程序1
a=1;
}
else
{
并发程序2
a=0;
}
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-03-17 16:18
您这是不是指多线程啊???
A strong man can save himself. A great man can save another.
night_gale
驱动牛犊
驱动牛犊
  • 注册日期2005-03-13
  • 最后登录2005-04-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-03-18 07:23
下面这段代码:
a=0;
if (a)
{并发程序1
a=1;
}
else
{
并发程序2
a=0;
}
并发程序1不可能执行到的啊!每次都是执行并发程序2 啊!!
如果并发程序1,2是一段函数,如何使它们执行一段之后退出,
下次进入时在继续执行啊??
night_gale
驱动牛犊
驱动牛犊
  • 注册日期2005-03-13
  • 最后登录2005-04-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-03-18 07:25
是自己想开发个自己的操作系统啊!但现在讨论的是如何实现多进程的问题!只要最简单的多进程,就可以了,关键是领悟它的设计思想啊!!
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-03-18 09:46
是自己想开发个自己的操作系统啊!但现在讨论的是如何实现多进程的问题!只要最简单的多进程,就可以了,关键是领悟它的设计思想啊!!

进程的切换关键在于时钟中断,我这里说的是我读linux的源码体会的
系统中存在各种队列,进程调度只涉及就绪队列,每次时钟中断来的时候,计算就绪队列中的各进程的优先数,一旦发现有进程的优先级高于现在的进程,先保护现在的进程的上下文,最重要的就是寄存器值和即将执行的下一条指令的地址,保存于PCB中,将新进程设置成当前进程,切换CR3寄存器指向新进程的页目录,这样新进程便有了地址空间,也成为当前的地址空间,从新进程的PCB中取出上次保存的寄存器值及下一条指令的地址eip的值。当然切换进程没有给eip赋值的指令,需要切换堆栈,再用ret指令实现。。。由于这个问题具体实现很复杂,这里说的也难免有错误,请各位指正。。。
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
游客

返回顶部