【问题标题】:Implement the `sleep()` and `awake()` in java在java中实现`sleep()`和`awake()`
【发布时间】:2020-10-24 20:01:30
【问题描述】:

我需要开发操作系统的sleep()awake() 功能。 我有 runningJobs 队列和 sleepJobs 队列。 sleep 方法应该接收一个 Job 并将其插入到 sleep 队列中的正确位置,awake() 方法应该将准备运行的 sleep 作业移动到 runningJobs 队列。

  1. 不确定如何实现我的队列 - 我应该使用 PriorityQueue / LinkedList 队列吗?
  2. 排序列表/在队列中找到合适工作的最有效方法是什么?
  3. awake() 方法如何在不访问当前时间的情况下知道时间

【问题讨论】:

  • Java 操作系统? Unix 的 sleep()awake() 强烈对应于 Object.wait()Object.notify(),它们当然不包含任何排队或优先级。
  • 对我来说,这个问题看起来像producer consumer problem,生产者生产新工作,消费者消费这些工作并处理它。如果有帮助,请告诉我

标签: java operating-system sleep


【解决方案1】:
  1. 任何一个选项(链表/优先队列)都可以。决定取决于您想要什么结果。

链表是一个“先进先出”的队列。第一个休眠的作业是运行时间最长的作业。第一个醒来的工作是睡得最久的工作。

优先级队列会让你有不同的执行优先级:最低优先级的进程会先休眠,最高优先级的进程会先醒来。

  1. 不要在外部重新排序队列,相信数据结构会自己做。

  2. 大概您的操作系统模拟器有自己的时钟,您可以使用它来代替现实世界的时钟时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-28
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2010-11-19
    • 2016-04-13
    • 1970-01-01
    相关资源
    最近更新 更多