c++复习__2018.07.25

语言这个东西,看不出人的差别,你说你会,别人花上几个月,也就会了,主要看出差别的是:操作系统,的理解。

《程序员的自我修养》1,2,3,4,6,10

《深入理解计算机系统》5,6,7,8,9

现代操作系统/操作系统设计与精髓原理pdf

虚拟内存  进程管理以及通信 网络  虚拟文件系统

程序的运行要加载到内存里面。程序从内存中取东西比从磁盘上取东西要快得多。

cpu 内存 I/O:操作系统为了屏蔽底层硬件的差异,

I/O:VFS

内存+I/O:虚拟内存

CPU+内存+I/O:进程

CPU是用来运算数据的,ALU算术逻辑单元数据宽度,数据总线的条数。

程序都是运行在虚拟内存上的。

虚拟内存是IBM提出的。虚拟内存不存在,虚拟地址空间

数据总线的位数决定了cpu的寻址能力。

每一个程序运行起来,操作系统都会给它分配一个4G的内存空间。

局部变量不是数据,是指令。

当不带参数时,程序会带上一个默认的参数,就是当前程序的绝对路径。

libc.so      c动态库

libc++.so  c++动态库

汇编两种:inter:*86  Linux:AT&T汇编。

objdump可以查看二进制可重定位目标文件:objdump -h main.o

.c表示c源文件,用c编译器编译。

初始化了的就是强符号、未初始化的时弱符号。

弱符号给程序带来的不可预知的结果。

当出现同名符号:会用强符号去替代弱符号,当弱符号占用内存比强符号大时,弱符号替代强符号。

静态函数和静态变量,链接时只对所有全局符号进行处理,静态的本地符号,连接器不做任何处理。

在编译目标文件时,所有的数据符号都用0地址表示。函数地址用与下一条指令的偏移地址表示。

cpu运行那一条指令,由PC寄存器决定。

可执行文件要按页合并(4K)

许多目标文件合并时,所有相同属性的段组织到一个页面上。(按属性合并,不是按名字),调整段偏移地址和段的长度,合并符号表,进行符号解析,给符号分配内存空间,

手动链接两个目标文件,ld mian.o sun.o -o run

objdump -h run查看

程序的运行:进程

./a.out

1.创建虚拟地址空间到物理内存的映射(创建内核地址映射结构体),创建页目录和页表。

2.加载代码段和数据段

3.把可执行文件的入口地址写到cpu的pc寄存器中。

objdump -h a.out

readelf  -S run  把段全部打印出来。

可执行文件是以页面组织的。

readelf -l run  查看内存页。

不表文件不能执行的原因:没有program head 没有load装载指令。

可执行文件本身的存储还是按照段存储的,加载的时候有两个load指令。

2:14:39

/*****************2018.07.26*****************/

从C语言过来就是一个不断深入的过程。

《算法导论》没看过3、4遍不能算是理解。

将磁盘页往内存上加载的时候,加载到虚拟地址空间中。

猜你喜欢

转载自blog.csdn.net/weixin_40316053/article/details/81196325