定义指令流

青春壹個敷衍的年華 提交于 2020-01-15 17:07:32

程序嘛,简单的定义以下就是一组指令序列,这个指令序列大多数并不是连续的(从被CPU"吸入"的第一个段指令开始(想象吸面条的样子)),假设我们写一个程序,

 

main( ){

int i = 1;

i++;

i++;

open("a file");

close("a file");

}

没有判断操作产生的指令分支切换、也没有循环(当然,程序很丑),这个程序的指令序列会像一根面条一样丝滑的执行完吗?程序中的代码编译出的指令序列即为被执行的指令流吗?

很明显不是的,它调用了open/close这些系统调用,当然,严格来讲,他们并不是系统调用,而是一些库,一些操作系统调用的库,只不过他们总是代表着执行系统调用,所以这么说也算是有所依据;如果看过<ARMv8指令集下的一次异常>系列的文章就会知道,执行到真实的系统调用后,后续CPU执行的代码就不是我们写的。这与动态库的原理有些相似,动态库的代码也不是我们写的,但那些代码并不能在改变CPU硬件状态后继续执行。

于是,程序的指令序列的界限应该在哪里?很明显不能包含CPU状态改变后执行的指令序列,甚至都不能包含公有动态库的部分。

而指令流就可以被理解为跨越程序、动态库、内核代码的一柄闪闪发光的大刀:在程序出发后,将要被CPU执行的指令序列的集合。

完美表达出目标含义。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!