阅读:2549回复:14
请大家讨论一个问题!如何自己创建进程!
大家好!我一直在想怎样才能自己创建一个多进程的程序,也就是说不用系统提供的多进程函数,自己如何创建!系统多进程中的创建进程函数如何实现!希望和大家一起讨论!!希望各位大吓不辞指教!!
|
|
沙发#
发布于:2005-03-14 13:01
大家好!我一直在想怎样才能自己创建一个多进程的程序,也就是说不用系统提供的多进程函数,自己如何创建!系统多进程中的创建进程函数如何实现!希望和大家一起讨论!!希望各位大吓不辞指教!! 不使用CreateProcess,ShellExeculate,WinExe等函数? 想自己实现这些函数?不过要实现这些函数可不是简单的事,还有ring0的相应函数也要实现 |
|
|
板凳#
发布于:2005-03-14 15:26
太难,自己创建一大堆的内核数据结构,很多还是未知的。嘘。。。
|
|
|
地板#
发布于:2005-03-14 19:38
只要能够实现简单的并行功能就可以啊!当初Linus怎么实现呢?值得商榷!!
|
|
地下室#
发布于:2005-03-15 09:09
你是要在什么系统下实现呢??还是直接自己写多任务系统???搞不明白你的用意………… :o
|
|
5楼#
发布于:2005-03-15 09:44
网上有很多OS的代码,你可以参考他们的实现方法...
|
|
|
6楼#
发布于:2005-03-15 11:03
只要能够实现简单的并行功能就可以啊!当初Linus怎么实现呢?值得商榷!! linus,他写的是Linux。linux开放源码,所以没有Windows那么讨厌。在用户程序下,跟UNIX一样,调用fork可以产生新进程 |
|
|
7楼#
发布于:2005-03-16 08:32
不知道你到底要干什么,如果你要写操作系统,或者你要某个单任务操作系统上实现多任务(修改DOS系统),建议你看看UCOSii的源码和其中文解释,相信会有收获!
|
|
8楼#
发布于:2005-03-17 10:53
哦!再声明一下啊!我的任务是要自己写一段能够并发执行的两个程序段就可以了,而这实现不要系统提够的建立进程的函数啊!要自己这个功能!就是这个意思啊!
|
|
9楼#
发布于:2005-03-17 11:10
你还没说清楚你的程序是在什么环境下运行的呢??? :(
|
|
10楼#
发布于:2005-03-17 15:31
哦!再声明一下啊!我的任务是要自己写一段能够并发执行的两个程序段就可以了,而这实现不要系统提够的建立进程的函数啊!要自己这个功能!就是这个意思啊! a=0; if (a) {并发程序1 a=1; } else { 并发程序2 a=0; } |
|
|
11楼#
发布于:2005-03-17 16:18
您这是不是指多线程啊???
|
|
|
12楼#
发布于:2005-03-18 07:23
下面这段代码:
a=0; if (a) {并发程序1 a=1; } else { 并发程序2 a=0; } 并发程序1不可能执行到的啊!每次都是执行并发程序2 啊!! 如果并发程序1,2是一段函数,如何使它们执行一段之后退出, 下次进入时在继续执行啊?? |
|
13楼#
发布于:2005-03-18 07:25
是自己想开发个自己的操作系统啊!但现在讨论的是如何实现多进程的问题!只要最简单的多进程,就可以了,关键是领悟它的设计思想啊!!
|
|
14楼#
发布于:2005-03-18 09:46
是自己想开发个自己的操作系统啊!但现在讨论的是如何实现多进程的问题!只要最简单的多进程,就可以了,关键是领悟它的设计思想啊!! 进程的切换关键在于时钟中断,我这里说的是我读linux的源码体会的 系统中存在各种队列,进程调度只涉及就绪队列,每次时钟中断来的时候,计算就绪队列中的各进程的优先数,一旦发现有进程的优先级高于现在的进程,先保护现在的进程的上下文,最重要的就是寄存器值和即将执行的下一条指令的地址,保存于PCB中,将新进程设置成当前进程,切换CR3寄存器指向新进程的页目录,这样新进程便有了地址空间,也成为当前的地址空间,从新进程的PCB中取出上次保存的寄存器值及下一条指令的地址eip的值。当然切换进程没有给eip赋值的指令,需要切换堆栈,再用ret指令实现。。。由于这个问题具体实现很复杂,这里说的也难免有错误,请各位指正。。。 |
|
|