程序嘛,简单的定义以下就是一组指令序列,这个指令序列大多数并不是连续的(从被CPU"吸入"的第一个段指令开始(想象吸面条的样子)),假设我们写一个程序,
main( ){
int i = 1;
i++;
i++;
open("a file");
close("a file");
}
没有判断操作产生的指令分支切换、也没有循环(当然,程序很丑),这个程序的指令序列会像一根面条一样丝滑的执行完吗?程序中的代码编译出的指令序列即为被执行的指令流吗?
很明显不是的,它调用了open/close这些系统调用,当然,严格来讲,他们并不是系统调用,而是一些库,一些操作系统调用的库,只不过他们总是代表着执行系统调用,所以这么说也算是有所依据;如果看过<ARMv8指令集下的一次异常>系列的文章就会知道,执行到真实的系统调用后,后续CPU执行的代码就不是我们写的。这与动态库的原理有些相似,动态库的代码也不是我们写的,但那些代码并不能在改变CPU硬件状态后继续执行。
于是,程序的指令序列的界限应该在哪里?很明显不能包含CPU状态改变后执行的指令序列,甚至都不能包含公有动态库的部分。
而指令流就可以被理解为跨越程序、动态库、内核代码的一柄闪闪发光的大刀:在程序出发后,将要被CPU执行的指令序列的集合。
完美表达出目标含义。
来源:CSDN
作者:ytfy339784578
链接:https://blog.csdn.net/ytfy339784578/article/details/103946669