我正在阅读流程管理,我有一些疑问 -
答案 0 :(得分:2)
关于第一个问题:
一种思考它的简单方法......
您的计算机有很多组件。 CPU,硬盘驱动器,网卡,声卡,gpu等。所有这些工作并行且彼此独立。它们通常也比CPU慢
这意味着每当进程进行调用时(在OS端)最终与外部设备进行通信,操作系统就没有必要等待结果,因为该操作需要花费的时间。完成可能是永恒的(在CPU观点上)
因此,操作系统会激活进程请求的任何通信(称之为IO请求),将进程标记为等待IO,并将执行切换到另一个进程,以便CPU可以执行一些有用的操作,而不是等待阻塞等待IO请求完整。
当外部设备完成所请求的任何操作时,它会生成一个中断,因此OS会通知工作已完成,然后它可以再次将阻止的进程标记为就绪。
这当然是一个非常简化的视图,但这是主要的想法。它允许CPU执行有用的工作,而不是等待IO请求完成。
关于第二个问题:
即使对于单CPU机器也很棘手,并且取决于操作系统如何处理中断 为了简化代码,一个简单的操作系统可能是,例如,每当中断发生一次处理中断,然后恢复它决定的任何过程,只要中断处理完成。所以在这种情况下,在中断处理完成之前,其他任何进程都不会运行。
在实践中,由于性能和延迟原因,事情会变得复杂一些
如果你认为中断生命周期只是CPU的另一个任务(从中断开始到操作系统认为处理完成的那一点),你可以有效地编写中断处理代码以与其他东西并行运行。
只需将中断视为操作系统启动另一个任务(中断处理)的通知。它在中断开始时抓取它需要的任何上下文,然后继续与其他进程并行处理该任务。
答案 1 :(得分:1)
I / O请求通常仅表示请求输入,输出或两者。具体含义取决于您的上下文,如HTTP,网络,控制台操作,或者可能是CPU中的某些进程。
进程正在等待IO:例如,假设您在C中编写程序以在命令行上接受用户的名称,然后想要打印' Hello用户'背部。您的代码将进入等待状态,直到用户输入其名称并按Enter键。这是一个更高级别的示例,但即使在计算机处理器中执行的非常低级别的进程也基于相同的基本原则
当电流中断并等待某些事情时,处理器可以在其他进程上工作吗?是!你最好希望它能做到。这就是调度算法和堆栈的用途。然而,真正的答案取决于您所使用的架构,它是否支持并行或串行处理等。