操作系统模拟实验(进程的撤销与创建)
一个很简陋的Python实现 : )
# -*- coding: utf-8 -*-
class Pcb(object):
def __init__(self):
self.pid = None
self.ppid = None # id of parent
self.arrive_time = 0
self.need_time = 0
self.pprio = 0 #priority
def set_pid(self, pid):
self.pid = pid
def set_parent(self, parent):
self.ppid = parent
def set_arrive_time(self, arrive_time):
self.arrive_time = arrive_time
def set_need_time(self, need_time):
self.need_time = need_time
class Pnode(object):
def __init__(self):
self.node = Pcb()
self.child = []
def set_node_pid(self, pid):
self.node.set_pid(pid)
def set_node_parent(self, ppid):
self.node.set_parent(ppid)
def set_node_arrtime(self, arrtime):
self.node.set_arrive_time(arrtime)
def set_node_needtime(self, needtime):
self.node.set_need_time(needtime)
def get_node_pid(self):
return self.node.pid
def get_node_parent(self):
return self.node.ppid
def get_node_arrtime(self):
return self.node.arrive_time
def get_node_needtime(self):
return self.node.need_time
class Pnodes(object):
def __init__(self):
self.root = Pnode()
self.root.set_node_pid(0)
self.nodes = {self.root.get_node_pid():self.root}
def createpc(self,pid,ppid):
if len(self.nodes) == 0:
return 0
p = self.nodes
if pid in p:
print "process already exists"
elif not ppid in p:
print "parent process does not exist"
else:
p[pid] = Pnode()
p[pid].set_node_pid(pid)
p[pid].set_node_parent(ppid)
p[ppid].child.append(pid)
def deletepc(self, pid):
if pid == 0:
print "pid 0 can't be deleted"
return 0
if not(pid in self.nodes):
print "process not exists"
return 0
if len(self.nodes[pid].child) == 0:
ppid = self.nodes[pid].get_node_parent()
self.nodes[ppid].child.remove(pid)
self.nodes.pop(pid)
else:
for cpid in self.nodes[pid].child:
self.deletepc(cpid)
self.deletepc(pid)
def show(self):
for pcb in self.nodes:
print pcb," : ", self.nodes[pcb].child
def main():
pnodes = Pnodes()
while(1):
cmd = raw_input("cmd:")
if cmd == "exit":
break
if cmd == "show":
pnodes.show()
else:
if "createpc" in cmd:
cmd = cmd[9:-1]
pcno,ppcno = map(int, cmd.split(","))
pnodes.createpc(pcno, ppcno)
elif "deletepc" in cmd:
cmd = cmd[9:-1]
pcno = int(cmd)
print "deleting process no:",pcno
pnodes.deletepc(pcno)
else:
print "error command!"
break
if __name__ == "__main__":
main()