OS的一个作业, 模拟进程的分配与管理


  1. # initialize the memories and the process list(actually a dict)
  2. total_memory = 110
  3. os_memory = 10
  4. process_memory = total_memory - os_memory
  5. process = {}
  6. sep_line_counter = 0
  7. while 1:
  8. # For the neatness of the output of the program
  9. sep_line_counter += 1
  10. print('----------------------Seperation Line %d--------------------------' % sep_line_counter)
  11. # Input of choice, which is robustic here.
  12. choice = input('Assign memory or recycle memory or quit?\nPlease enter--assgnment: 1, recycle: 2, quit: q\n:')
  13. if not ( choice == 'q' or choice == '1' or choice == '2'):
  14. print('Please enter the right choice.')
  15. continue
  16. if choice == 'q':
  17. # Choose to quit
  18. break
  19. if int(choice) == 1:
  20. # Choose to add a process
  21. # Get name
  22. cur_proc_name = input('Name of the process?\n:')
  23. if cur_proc_name in process.keys():
  24. # if name of current process has existed in the process list
  25. print('The process you assigned has been created, no sharing of processes\' name.')
  26. continue
  27. # Get size
  28. cur_proc_size = int(input('OK, and what about its size?\n:'))
  29. if sum(process.values()) + int(cur_proc_size) > process_memory:
  30. # With current process entering the process list, the list would overload
  31. print('STOP ASSIGNMENT! Otherwise there\'s overload.')
  32. print( 'The remaining memory: %d KB' % ( process_memory - sum(process.values()) ) )
  33. print('The process list:', process)
  34. continue
  35. # No accidents, current process would be added into the process list
  36. process[cur_proc_name] = cur_proc_size
  37. print( 'The remaining memory: %d KB' % ( process_memory - sum(process.values()) ) )
  38. print('The process list:', process)
  39. continue
  40. if int(choice) == 2:
  41. # Choose to recycle a process
  42. cur_proc_name = input('Name of the process?\n:')
  43. if not cur_proc_name in process.keys():
  44. # If you want to recycle some process that doesn't exist
  45. print('No such process.')
  46. continue
  47. # No accidents, current process would be removed from the process list
  48. del process[cur_proc_name]
  49. print( 'The remaining memory: %d KB' % ( process_memory - sum(process.values() ) ) )
  50. print('The process list:', process)
  51. continue

本文版权归郑鹏(默盒)和博客园共有,原创文章,未经允许不得转载,否则保留追究法律责任的权利。

OS作业模拟进程分配与回收的更多相关文章

  1. OS作业模拟SJF和FCFS

    一个OS的作业, 用于模拟短作业优先 和 先来先服务两种作业调度方式. #!/usr/bin/python3.5 ## Modify the SJF and FCFS algorithm in the ...

  2. 模拟linux的内存分配与回收

    模拟linux的内存分配与回收 要求 通过深入理解内存分配管理的三种算法,定义相应的数据结构,编写具体代码. 充分模拟三种算法的实现过程,并通过对比,分析三种算法的优劣. (1)掌握内存分配FF,BF ...

  3. Erlang进程堆垃圾回收机制

    原文:Erlang进程堆垃圾回收机制 作者:http://blog.csdn.net/mycwq 每一个Erlang进程创建之后都会有自己的PCB,栈,私有堆.erlang不知道他创建的进程会用到哪种 ...

  4. 图片系列(6)不同版本上 Bitmap 内存分配与回收原理对比

    请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...

  5. Java深入 - Java 内存分配和回收机制

    Java的GC机制是自动进行的,和c语言有些区别需要程序员自己保证内存的使用和回收. Java的内存分配和回收也主要在Java的堆上进行的,Java的堆中存储了大量的对象实例,所以Java的堆也叫GC ...

  6. 每个线程分配一个stack,每个进程分配一个heap;heap没有结构,因此寻址慢(转)

    学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈". 理解这个概念,对于理解程序的运行至关重要.容易混淆的是,这个词其实有三种含义,适用于不同的场合,必须加以区分. ...

  7. 浅谈java内存分配和回收策略

    一.导论 java技术体系中所提到的内存自动化管理归根结底就是内存的分配与回收两个问题,之前已经和大家谈过java回收的相关知识,今天来和大家聊聊java对象的在内存中的分配.通俗的讲,对象的内存分配 ...

  8. Android的内存分配与回收

    想写一篇关于android的内存分配和回收文章的想法来源于追查一个魅族手机图片滑动卡顿问题,我们想了很多办法还是没有避免他不停的GC,所以就打算详细的看看内存分配和GC的原理,为什么会不断的GC,GC ...

  9. Java虚拟机垃圾回收:内存分配与回收策略 方法区垃圾回收 以及 JVM垃圾回收的调优方法

    在<Java对象在Java虚拟机中的创建过程>了解到对象创建的内存分配,在<Java内存区域 JVM运行时数据区>中了解到各数据区有些什么特点.以及相关参数的调整,在<J ...

随机推荐

  1. CentOS上安装Hadoop2.7,添加数据节点,运行wordcount

    安装hadoop的步骤比较繁琐,但是并不难. 在CentOS上安装Hadoop2.7 1. 安装 CentOS,注:图形界面并无必要 2. 在CentOS里设置静态IP,手工编辑如下4个文件 /etc ...

  2. Educational Codeforces Round 22.B 暴力

    B. The Golden Age time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  3. (转载)Sybase:bcp命令参考

    参考文档: http://blog.csdn.net/wwp1026/article/details/6900569

  4. 从零搭建DotnetCore2.0

    右键解决方案>新建项目> 选择Web>ASP.NETCoreWeb应用程序(.NET Core) 选择Web应用程序,暂时不选择启用Docker,身份验证选择个人用户账户(会自动生成 ...

  5. Jenkins设置svn授权

    1.问题引入 在job的scm部分,subversion modules/credentials出现错误 "Unable to access https://xxx/code : svn: ...

  6. asp.net验证码的编写

    很多时候我们在登录什么网站的时候,除了需要什么用户名和密码之外,有的还需要验证码那么在asp.net中这个验证码如何编写和设计,今天我就来给大家说一下: 首先创建一个页面名字随便起一个,我们这里叫做C ...

  7. Java 数据类型在实际开发中应用二枚举

    在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的.在JDK1.5之前,人们用接口来描述这一种数据类型. 1. ...

  8. Android_65535问题的解决

    做过比较大的项目的人都知道,当app大到一定程度的时候,会出现65535这个错误,也就是64K,也就是,一个app包中,方法数不能超过65535个,超过了就要分成多个dex包,这个别问为什么,andr ...

  9. 项目DEMO下载

    1.mybatis_generator自动生成代码demo github项目地址:https://github.com/JsonShare/mybatis_generator 2.设计模式解密系列示例 ...

  10. NLP —— 图模型(零):EM算法简述及简单示例(三硬币模型)

    最近接触了pLSA模型,该模型需要使用期望最大化(Expectation Maximization)算法求解. 本文简述了以下内容: 为什么需要EM算法 EM算法的推导与流程 EM算法的收敛性定理 使 ...