chapter4
通过python process.run.py -h
命令了解了process.run.py
的可用的选项
题外话(关于/home
目录的):
/home
目录是 Linux 系统中用于存储用户个人文件的地方。每个用户在 /home
下都有一个以其用户名命名的子目录,用于存放该用户的个人数据和设置。以下是一些 /home
目录的特点:
-
用户目录:每个用户的主目录通常是
/home/username
,其中 username 是用户的登录名。 -
个人文件:用户可以在其主目录中创建文件夹和文件,保存文档、图片、下载的内容等。
-
配置文件:用户的个性化配置文件(如
.bashrc
、.profile
)通常以点(.)开头,存放在用户的主目录中。 -
权限:用户只能访问和修改自己的主目录,其他用户无法直接访问,除非他们有适当的权限。
第一题
问题:用以下标志运行程序:./process-run.py -l 5:100,5:100
。CPU 利用率(CPU 使用时间的百分比)应该是多少?为什么你知道这一点?利用 -c 标记查看你的答案是否正确。
运行./process-run.py -l 5:100,5:100
运行./process-run.py -l 5:100,5:100 -c
和 ./process-run.py -l 5:100,5:100 -c -p
CPU利用率为100%,程序没有进行IO操作。
第二题
问题:现在用这些标志运行:./process-run.py -l 4:100,1:0
。这些标志指定了一个包含 4 条指令的进程(都要使用 CPU),并且只是简单地发出 I/O 并等待它完成。完成这两个进程需要多长时间?利用-c 检查你的答案是否正确。
运行./process-run.py -l 4:100,1:0
运行./process-run.py -l 4:100,1:0 -c
运行./process-run.py -l 4:100,1:0 -c -p
需要11个时间周期(Time)
第三题
题目:现在交换进程的顺序:./process-run.py -l 1:0,4:100
。现在发生了什么?交换顺序是否重要?为什么?同样,用-c 看看你的答案是否正确。
运行./process-run.py -l 1:0,4:100
运行./process-run.py -l 1:0,4:100 -c
运行./process-run.py -l 1:0,4:100 -c -p
进程0(PID:0)执行IO操作,进程1(PID:1)使用CPU,运行时间从11个时间周期变为7个时间周期
第四题
问题:现在探索另一些标志。一个重要的标志是-S
,它决定了当进程发出 I/O 时系统如何反应。将标志设置为 SWITCH_ON_END
,在进程进行 I/O 操作时,系统将不会切换到另一个进程,而是等待进程完成。当你运行以下两个进程时,会发生什么情况?一个执行 I/O,另一个执行 CPU 工作。(-l 1:0,4:100 -c -S SWITCH_ON_END
)
运行./process-run.py -l 1:0,4:100 -c -S SWITCH_ON_END
进程0(PID:0)执行IO操作时,进程1(PID:1)等待。
第五题
问题:现在,运行相同的进程,但切换行为设置,在等待 I/O 时切换到另一个进程(-l 1:0,4:100 -c -S SWITCH_ON_IO
)。现在会发生什么?利用-c 来确认你的答案是否正确。
运行./process-run.py -l 1:0,4:100 -c -S SWITCH_ON_IO
进程0(PID:0)执行IO操作时,进程1(PID:1)使用CPU,执行CPU操作,充分利用CPU资源。
第六题
问题:另一个重要的行为是 I/O 完成时要做什么。利用-I IO_RUN_LATER
,当 I/O 完成时,发出它的进程不一定马上运行。相反,当时运行的进程一直运行。当你运行这个进程组合时会发生什么?(./process-run.py -l 3:0,5:100,5:100,5:100 -S SWITCH_ON_IO -I IO_RUN_ LATER -c -p
)系统资源是否被有效利用?
运行./process-run.py -l 3:0,5:100,5:100,5:100 -S SWITCH_ON_IO -I IO_RUN_ LATER -c -p
系统资源没有被有效利用,时钟周期19 ~ 23,26 ~ 30,CPU空闲
第七题
问题:现在运行相同的进程,但使用 -I IO_RUN_IMMEDIATE
设置,该设置立即运行发出I/O 的进程。这种行为有何不同?为什么运行一个刚刚完成 I/O 的进程会是一个好主意?
运行./process-run.py -l 3:0,5:100,5:100,5:100 -S SWITCH_ON_IO -I IO_RUN_IMMEDIATE -c -p
系统资源被有效利用,当IO密集进程IO完毕时,立即切换到该进程发出IO操作请求,再让出CPU,使得系统资源被充分利用。(有过IO操作的进程很有可能后面也会进行IO操作,为了使CPU有效利用,应该在IO结束不久后运行该进程,使其得到继续阻塞IO的机会。)
第八题
问题:现在运行一些随机生成的进程,例如-s 1 -l 3:50,3:50
, -s 2 -l 3:50,3:50
, -s 3 -l 3:50,3:50
。看看你是否能预测追踪记录会如何变化?当你使用-I IO_RUN_IMMEDIATE
与-I IO_RUN_ LATER
时会发生什么?当你使用-S SWITCH_ON_IO
与-S SWITCH_ON_END
时会发生什么?
以随机种子=1为例:
运行./process-run.py -s 1 -l 3:50,3:50 -c -p
使用-I IO_RUN_IMMEDIATE
与-I IO_RUN_ LATER
运行./process-run.py -s 1 -l 3:50,3:50 -c -p -I IO_RUN_IMMEDIATE
运行./process-run.py -s 1 -l 3:50,3:50 -c -p -I IO_RUN_LATER
两者没区别,因为在IO完成前所有CPU任务都已经完成
使用-S SWITCH_ON_IO
与-S SWITCH_ON_END
运行./process-run.py -s 1 -l 3:50,3:50 -c -p -S SWITCH_ON_IO
运行./process-run.py -s 1 -l 3:50,3:50 -c -p -S SWITCH_ON_END
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!