- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我接到了一项任务,要从如下所示的 txt 文件中读取模拟进程。
ID: 35; Arrival_Time: 0; Total_Exec_Time: 4;
ID: 65; Arrival_Time: 2; Total_Exec_Time: 6;
ID: 10; Arrival_Time: 3; Total_Exec_Time: 3;
ID: 124; Arrival_Time: 5; Total_Exec_Time: 5;
ID: 182; Arrival_Time: 6; Total_Exec_Time: 2;
我必须从(先到先得、最短过程接下来、最短剩余时间、循环 q=2)的选择中完成两种算法。我需要根据我选择的两种算法打印出当前时间和当时正在运行的进程。我已经成功完成了 FCFS。我的下一个方法是在 SRT 上,除了我对算法背后的逻辑有一些严重的问题。
我目前正在尝试一种迭代方法(在下面发布),它在一定程度上起作用(直到当前时间 9),但我觉得这可能只是一个幸运的巧合。
有人对此算法或其他两个算法有任何建议吗?我已经完成这项任务好几天了,决定放下我的骄傲,在堆栈上发帖。
注意:这是我第一次使用 shell 脚本,所以我的代码可能有点乱。我仍在努力理解 KornShell (ksh)。
file="/path/to/file.txt"
IFS=': \;'
i=0
while read -r f1 f2 f3 f4 f5 f6
do
integer id[i]="$f2" #id array
integer at[i]="$f4" #arrival time array
integer et[i]="$f6" #exec time array
integer rt[i]=0 #run time so far
integer current[i]=i
((i++))
done <"$file"
integer curr_index=0
integer currTime=0
let totalProcesses=${#at[@]}
let totalProcesses=totalProcesses-1
let totalRunTime=0
for x in ${et[@]}; do
let totalRunTime+=$x
done
scheduleTask () {
currTime=$1
for y in ${current[@]}; do
if (( rt[$y] < et[$y] )); then
#if the program is not finished, keep going
if (( at[$y] < $currTime )); then
#if the program is in que, keep going
let diff=et[$y]-rt[$y]#not currently using
let currDiff=et[$curr_index]-rt[$curr_index] #not currently using
if (( et[$y] <= et[$curr_index] )); then #is this broken?
curr_index=$y
fi
fi
else
echo "${id[$y]} RAN ${rt[$y]} out of ${et[$y]} seconds"
unset current[$y]
fi
done
}
for (( i = 0; i < $totalRunTime; i++ )); do
echo "================================="
scheduleTask $i
((rt[$curr_index]++))
print "\t\tcurrent time: $i"
print "\t\t\tcurrent process: ${id[$curr_index]}"
echo "================================="
done
SRT 的正确输出应该是这样的..
=================================
current time: 0
current process: 35
=================================
=================================
current time: 1
current process: 35
=================================
=================================
current time: 2
current process: 35
=================================
=================================
current time: 3
current process: 35
=================================
=================================
current time: 4
current process: 10
=================================
=================================
current time: 5
current process: 10
=================================
=================================
current time: 6
current process: 10
=================================
=================================
current time: 7
current process: 182
=================================
=================================
current time: 8
current process: 182
=================================
=================================
current time: 9
current process: 124
=================================
=================================
current time: 10
current process: 124
=================================
=================================
current time: 11
current process: 124
=================================
=================================
current time: 12
current process: 124
=================================
=================================
current time: 13
current process: 124
=================================
=================================
current time: 14
current process: 65
=================================
=================================
current time: 15
current process: 65
=================================
=================================
current time: 16
current process: 65
=================================
=================================
current time: 17
current process: 65
=================================
=================================
current time: 18
current process: 65
=================================
=================================
current time: 19
current process: 65
=================================
最佳答案
我对堆栈溢出还比较陌生,对家庭作业的想法和意见也很幼稚。我正在考虑是否删除该问题,但在阅读这篇文章 (https://meta.stackexchange.com/questions/10811/how-to-ask-and-answer-homework-questions) 后,我认为我的问题符合指南,因此值得跟进。
我想出了最短剩余时间算法。我很庆幸没有人回答这个问题,我自己(在我的助教的帮助下)弄清楚算法是值得的。因此,我提供的答案只有基本的伪逻辑,没有实际代码。
shortest = the first process read from the input(assuming it has already arrived)
while there are still processes to be run
process = next process (out of processes that have not completed yet)
if (process arrival time <= currentTime) #process arrived
if (process execution time < shortest execution time)
shortest = process
注意:这与我从我的助教(编写作业的人)那里得到的帮助几乎相同,这就是为什么我觉得发布这个答案很舒服。
关于algorithm - KornShell (ksh) 调度算法 (SRT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13671845/
我试图检查一个变量是否正好是两个数字,但我似乎无法弄清楚。 您如何在 KornShell (ksh) 中检查正则表达式 (regex)? 我试过了: if [[ $month =~ "[0-9]{2}
我在 KornShell (ksh) 中有以下代码: FAILURE=1 SUCCESS=0 isNumeric(){ if [ -n "$1" ]; then case $1
$$是什么意思在 KornShell 中?我猜它与进程 ID 相关联,但我想知道它的确切含义。 最佳答案 $$是 ksh 进程本身的进程 ID; $PPID是其父进程的进程 ID。 这是ksh (93
尝试将一个变量的值分配给另一个变量时,我遇到了一个奇怪的错误。初始变量值在开头和结尾包含'符号。 代码如下: server = $(uname -n) passpre = "'HPre2053#'"
如果没有 ksh,我将无法执行我的 KornShell (ksh) 脚本命令。我包括 #!/bin/ksh在脚本的第一行,但是当我尝试仅按名称执行它时,它说没有这样的文件或目录。有人能帮我吗? 最佳答
我想从函数内部获取函数名称,用于记录目的。 KornShell (ksh) 函数: foo () { echo "get_function_name some useful output" }
我在 Solaris 上使用 KornShell (ksh),目前我的 PS1 环境变量是: PS1="${HOSTNAME}:\${PWD} \$ " 并且提示显示:hostname:/full/p
我是 Unix 的新手,正在使用 sun solaris(我认为是 v10)。我的 shell 设置为 KornShell (ksh)。 我想知道如何使箭头键和删除键在命令行中工作。我已经完成了 se
是否可以找到当前在 KornShell (ksh) 中执行的脚本的完整路径? 即如果我的脚本位于 /opt/scripts/myscript.ksh 中,我可以在该脚本中以编程方式发现 /opt/sc
我正在尝试编写一个使用 printf 将字符串填充到特定宽度的 KornShell (ksh) 函数。 例子: 打电话 padSpaces Hello 10 输出 'Hello ' 我目前有:
我在 KornShell (ksh) 上遇到以下代码片段失败: var1="1" var2="2" if [ ( "$var1" != "" -o "$var2" != "") -a ( "$var1
我正在使用 KornShell (ksh) 编写脚本。我的数据库连接是通过 SQLPLUS 连接到 Oracle 9i 数据库。我在将 DB 值放入 shell 变量中没有遇到任何问题,除了任何连续的
我对我正在编写的这个 KornShell (ksh) 脚本有点困惑,主要是使用 bool 值和条件。 所以我的脚本的第一部分是 catme和 wcme两者都设置为 true或 false .这部分工作
假设我在 BASH 或 Kornshell 中执行以下命令: $ foo | while read line > do > echo "Line = '$line'" > done 如果我设置了
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我对 KornShell (ksh) 中的测试命令有疑问。我知道 -ne 用于比较整数,而 != 用于比较字符串。如果一个参数是字符串而另一个是整数,测试命令将如何表现?我的代码中有以下条件,并且都正
我知道,获取脚本和执行脚本的唯一区别是在后一种情况下,父环境不受影响。 考虑这个示例脚本: SETUP_DIR=`dirname $0` echo $SETUP_DIR echo $0 echo $1
下面是一个简单的脚本,用于查明所有文件是否存在以及大小是否大于零。来自 here我知道“-s”用于该任务。 if [ -s ${file1} && -s ${file2} && -s ${file3}
我有一个 KornShell (ksh) 脚本,它应该在从提示符运行后显示 echo。 #!/bin/ksh file="file_path" if [ -s $file ] then
我有一个重定向 std out/std err 的脚本,如下所示: SCRIPTS=/test/scripts LOG=/test/log echo $SCRIPTS echo $LOG $SCRIP
我是一名优秀的程序员,十分优秀!