Juc10_CPU指令、缓存结构、运行安全等级、操作系统内存管理、上下文切换、虚拟机指令集架构(三)

⑤. 操作系统内存管理


  • ①. 操作系统有用户空间与内核空间两个概念,目的也是为了做到程序运行安全隔离与稳定,以32位操作系统4G大小的内存空间为例


Juc10_CPU指令、缓存结构、运行安全等级、操作系统内存管理、上下文切换、虚拟机指令集架构(三)


②. 由空间划分我们再引深一下,CPU调度的基本单位线程,也划分为:内核线程模型(KLT)、用户线程模型(ULT)


Java是内核线程模型(KLT)


Juc10_CPU指令、缓存结构、运行安全等级、操作系统内存管理、上下文切换、虚拟机指令集架构(三)


⑥. 上下文切换


  • ①. 线程的上下文切换: 把上一个线程的中间状态保存,切换到另一个线程,这就是线程的上下文切换(这些中间状态保存在内存中(Task State Segment))


②. CPU在执行T1|T2两个线程的时候,实际上是分配时间周期的方式,在调度的时候,会给T1、T2分配时间,比如说T1是50ns、T2是100ns,在执行T1的时间片中,如果T1线程没有执行完毕,那么就会保存T1运行到此刻的中间状态保存(比如代码执行到哪里来了,就把到此刻的结果进行保存),然后再去执行T2)


Juc10_CPU指令、缓存结构、运行安全等级、操作系统内存管理、上下文切换、虚拟机指令集架构(三)


⑦. 虚拟机指令集架构


①. 栈指令集架构(Java采用的是这样架构)


比如说我们执行1+2,会先将1先放到操作数栈中,然后从操作数栈中取出,放到局部变量表,将2放入操作数栈中,然后从操作数栈中取出,放到局部变量表。在将局部变量表的1和2取出放到操作数栈中计算


②. 寄存器指令集架构(会非常快)


比如说我们执行1+2,那么直接将1和2从内存读到CPU中,然后进行相加得到结果,刷回内存中


上一篇:MySQL转换Oracle的七大注意事项


下一篇:ios 关于[xxx timeIntervalSinceNow]出现EXC_BAD_ACCESS错误的解决办法