一、图灵机和冯.诺依曼机是不同的计算机吗?
1
| 简单来说: 图灵机更侧重于计算抽象、后者更侧重于硬件抽象
|
二、time指令的返回分表代表什么?
1 2 3 4 5 6 7 8 9 10 11 12
| real time: 时钟时间(Wall clock time), 进从开始到结束所用的实际时间、包括其它进程使用的时间片和等待io完成的时间
user time: 指进程执行用户态代码(核心之外)使用的时间、执行此进程实际消耗的CPU时间、其它进程和此进程阻塞时间不包含在内
sys time: 指进程在内核态消耗的cpu时间
为什么user+sys > real ? 1. user + sys 为实际的CPU时间、若有多个线程、则可能出现、user+sys包含子进程的时间 2. 在多处理器系统上、可能出现、因为多进程或者线程可并行处理 3. time的输出是由几个不同的系统调用得到的 user time和sys time是从wait(2) 或 time(2) 得到的(根据系统不同决定) real time是从 ge't'timeofday中结束时间和起始时间相减得到
|
三、时钟周期是什么
四、为什么程序无法在linux和win下同时运行?
因为两个系统下的可执行文件的格式不同
1 2 3 4 5 6 7 8
| -g 得到的是目标文件 -o 得到的是可执行文件
c -> 汇编 -> 机器码 c->汇编: 编译、汇编、链接 3部分组成 汇编-> 机器码: 通过装载器Loader把可执行文件Load到内存中、CPU从内存读取指令和数据、开始真正的执行程序
目标文件和可执行文件dump得到的内容差不多、因为linux下、都是使用elf(executable and linkable file format)的格式
|
1 2 3 4 5 6
| ELF 文件格式信息: 1. text Section: 代码段 用来保存程序的代码和指令 2. .data Section: 数据段 用来保存程序里边设置好的初始化数据信息 3. .rel.text Section: 重定向表Relocation Table 保留的是当前文件里、哪些跳转地址是未知的 4. .symtab Section: 符号表 保留了当前文件里定义的函数和对应的地址信息 连接器会扫描所有的输入目标文件、把所有符号表里的信息收集起来、构成一个全局的符号表、把所有不确定要跳转地址的代码、根据符号表里存储的地址、进行一次修正, 最后 把所有的目标文件的对应段进行一次合并、变成了最终的可执行代码
|
五、java这样使用虚拟机的编程语言里、程序是如何装载到内存的 ?
1
| jvm是上层应用、无需考虑物理分页、一般是直接考虑对象本身的空间大小、物理硬件统一管理由承载jvm的操作系统来解决
|
六、CPU一直在取下一条指令、为什么还有满载和idle空闲状态呢?