用php模拟操作系统内核实现调度算法难题,求前辈指导。

请叫我赵小宝 发布于 2015/05/26 18:45
阅读 394
收藏 0
PHP

先说一下现在的情况,进程创建删除直接对数据库中的一张表进行增删改查,现在已经实现手工模拟运行,但是自动运行怎么解决,一个进程运行结束,根据啥判断其他程序运行,老师用java实现的,但是我觉得php也可以。用队列吗?无从下手,求前辈指点。

关键代码php

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
	public function index(){
		$os=M('os');
		$pid=$os->select();
		// var_dump($pid);
    	$interval=5;
    	// do{
    	// 	echo '测试'.time().'<br/>'; 
    	// 	 sleep($interval);// 等待5s 
    	// 	}while(true);

		$this->assign('pid',$pid);
		$this->display();
	}

	public function add(){
		$data = array(
			'name' =>I('post.name'), 
			'status' =>'就绪', 
			'time' =>I('post.time'),
			'changetime' =>date('Y-m-d HⓂs')
			);
		$pid=M('os');
		$list=$pid->add($data);
		$this->redirect('Index/index');

	}

	public function delete(){
		$pid=M('os');
		$pid=$pid->where('1')->delete();
		$this->redirect('Index/index');

	}

	public function deleteId(){
		$pid=M('os');
		$where['id']  = I('post.id');
		$pid=$pid->where($where)->delete();
		$this->redirect('Index/index');

	}



	public function ready(){
		$pid=M('os');
		$where['id']  = I('post.id');
		$data['status'] = I('post.status');
		$list=$pid->where($where)->save($data);
		$this->redirect('Index/index');

	}


	//动态更改数据库time
	public function ajax(){
		$pid=M('os');
		$where['id']  = I('post.id');
		$data['status'] =  '运行';
		$data['time'] = I('post.time');
		$list=$pid->where($where)->save($data);
		$this->ajaxReturn($data);

	}


	public function ajax_del(){
		$pid=M('os');
		$where['id']  = I('post.id');
		$list=$pid->where($where)->delete();
		$this->ajaxReturn($where);

	}


}

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
  <title>内核模拟运行程序</title>

  <!-- Bootstrap -->
  <link href="__PUBLIC__/dist/css/bootstrap.min.css" rel="stylesheet">

    </head>
    <body>
      <div class="container">

       <div class="row">
         <div class="col-sm-4">
           <ul class="list-group">
             <li class="list-group-item list-group-item-success " data-toggle="modal" data-target="#myModal">创建进程</li>
             <li class="list-group-item list-group-item-info stop-all"><a href="{:U('Index/delete')}">结束进程</a></li>
             <li class="list-group-item list-group-item-warning">

             <form action="{:U('Index/deleteId')}" method="post">
                          <label for="">进程号</label> 
                          <input type="text"  name="id">
            <button type="submit" >删除 </button>




             </form>


               



             </li>
             <li class="list-group-item list-group-item-danger">
               


                          <label for="">进程号</label> 
                          <input type="text"  name="id" id="jch">
            <button type="btn" id="yx">运行</button>




               





             </li>
           </ul>


         </div>
         <div class="col-sm-8">
           <div class="panel panel-primary">
            <!-- Default panel contents -->
            <div class="panel-heading">内核模拟运行程序</div>
            <div class="panel-body">
              <!-- <p>...</p> -->
              <table class="table table-add">
                <!-- On cells (`td` or `th`) -->

                <tr class="t-h">
                  <td class="active">进程号</td>
                  <td class="success">名称</td>
                  <td class="warning">状态</td>
                  <td class="danger">剩余时间(秒)</td>
                </tr>      

                <volist name="pid" id="data">
                 <tr class="t-h" id="{$data.id}">
                  <td class="active">{$data.id}</td>
                  <td class="success">{$data.name}</td>
                  <td class="warning">{$data.status}</td>
                  <td class="danger">{$data.time}</td>
                </tr>

              </volist>

            </table>
          </div>

          <!-- Table -->

        </div>         


      </div>
    </div>



  </div>
  <form action="{:U('Index/add')}" method="post">
    <!-- 创建进程 -->
    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            <h4 class="modal-title" id="myModalLabel">进程创建</h4>
          </div>
          <div class="modal-body">

            <div class="input-group">
              <label>进程名称</label>

              <input type="text" class="form-control jx-name" name="name">
            </div>
            <div class="input-group">
              <label>运行时间</label>
              <input type="text" class="form-control jx-time" value="60" name="time">


            </div>
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
            <button type="submit" class="btn btn-primary  add-btn">确认创建</button>
          </div>
        </div>
      </div>
    </div>
  </form>
  <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
  <script src="__PUBLIC__/dist/js/jquery.min.js"></script>
  <!-- Include all compiled plugins (below), or include individual files as needed -->
  <script src="__PUBLIC__/dist/js/bootstrap.min.js"></script>
  <script src="__PUBLIC__/dist/js/os.js"></script>
  <script type="text/javascript">
  url="{:U('Index/ajax')}";
  host="{:U('Index/index')}";
  url_del="{:U('Index/ajax_del')}";


  </script>


</body>
</html>



加载中
0
张亦俊
张亦俊
你们城里人真会玩
请叫我赵小宝
请叫我赵小宝
js应该也能实现,哥我真心是来问问题的,俺是乡下人,我们哈。
0
梦想岛
梦想岛
然而,这并没有什么卵用。
请叫我赵小宝
请叫我赵小宝
这就是大学啊,各种坑,我也无语,不想做了。
0
be-quiet
be-quiet
大学毕业的时候我什么都不会呢,  = =!
be-quiet
be-quiet
回复 @请叫我赵小宝 : 很遗憾, 还是没有会多少 - -!
请叫我赵小宝
请叫我赵小宝
好吧 前辈悟性高,学的快。
0
红星xx
红星xx
其实可以更高级 ,我自己实现了一个多进程的 php 后台 ,。用来发数据 ,主要用了 pcntl_fork ,自己 注册信号处理 。没有 用浏览器来访问 ,主要是 workerman 项目带给我的启发 。
请叫我赵小宝
请叫我赵小宝
回复 @红星xx : 知道这个拓展也帮了大忙,谢谢,顿悟。
红星xx
红星xx
回复 @请叫我赵小宝 : windows 不能用 pcntl_fork ,必须要 linux ,windows 下 用线程安全的 php 安装 pthreads 扩展 实现多线程 ,但我对windows 的 后台 不了解 ,弄不了。
请叫我赵小宝
请叫我赵小宝
安装pcntl_fork拓展,在window下可以吗?前辈代码片段能否分享一下,php启动多线程还有其他方法吗? 谢谢
0
旁边白
旁边白
用C语言直接来写多好呀,何必模拟
请叫我赵小宝
请叫我赵小宝
和伟大的C无缘,真心不喜欢C........
0
南湖船老大
南湖船老大
用PHP来模拟这个,你也是脑洞大开,你还用TP框架来写,也是难得一见
0
钛元素
钛元素
我也不会
0
Karblue
Karblue
宇宙第一语言还有写不出来的东西?
0
梅开源
梅开源

用共享的内存/数据库判断

比如弄个memcache啥的里面放段数据标记进程状态

返回顶部
顶部