不奢望岁月静好 只希望点滴积累

0%

课后问题汇总

一、图灵机和冯.诺依曼机是不同的计算机吗?

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中结束时间和起始时间相减得到

三、时钟周期是什么

1
2


四、为什么程序无法在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)的格式

image.png
image.png

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空闲状态呢?

1
2