手写(chao)操作系统-编译器的flag

本来学java并发,但是一直无法从汇编层面来理解synchronized、wait在底层是怎么实现的,比如wait是cpu、寄存器、内存中3者交互数据,一直死循环实现的吗?理论上也只有只能才能实现。就算有所说的通知机制,你不一直去轮询消息,怎么收到通知的。在网上也一直找不到答案。

于是了解到java首先编译成字节码。字节码中有代码执行大于2万次(印象中),会进行编译(编译为机器码,这个还不清楚),这就是JIT-即时编译(这些代码就是热点代码,也就是hotspot的名字来源);若是这些字节码执行次数较少,就是解释执行,就是一句翻译为机器码,然后执行,接着翻译下一句,又执行。jvm中有client和server的,client的就是注重启动效率,会舍去一些编译优化的过程;server就是启动慢,时间用来优化编译,在执行时,响应执行就更快了。

了解了这些还是不能解答上面的疑问,于是把openjdk中的Hotspot的源码调试看看。代码是c++的,在eclipse用gdb调试起来,类似pthread_create这些是怎么做的,join、wait是怎么实现还是看不出来,c++一大堆的宏定义看得头疼…

在网上看到R大的推荐《自制编程语言》,好像有实现类似jvm的简易版,但是这本感觉不够友好,还是太菜了,源码没有。发现郑刚《自制编程语言-基于c实现》有源码,可以用来学习一遍,还有极客时间《编译原理之美》的老师也讲很细。现在也了解了一些东西:例如实现类就是c++\c的结构体;生成类的抽象有meta;对象有对象头,这个和synchronized的实现也有关系;还有很感兴趣的是能好像学习后可以从根本上了解 继承、接口这些的设计;

学习进程、线程的机制,线程、进程间通信,中断是怎么实现的,单单编程语言做(抄)出来也不够能理解到,这些东西怎么用硬件实现的,极客时间《趣谈linux操作系统》也一直看不懂。狗东买书的时候一起买了郑刚老师的《操作系统系统还原》,也有源码,似乎也能学学。

于是立下此flag,写(抄)出一个编程语言和一个操作系统,每天睡觉前和起床后和自己说3遍。

你可能感兴趣的:(手写(chao)操作系统-编译器的flag)