随心记忆

原创
2016/01/22 22:19
阅读数 47

2016-01-22,成都有雨夹雪

应用程序编程接口:给最上层的应用程序使用。

系统调用接口:在实现中往往以软件中断(linux下使用0x80号中断作为系统调用接口)的方式提供。

运行库:应用程序的提供者是运行库,不同的运行库提供不同的API。

             如:Linux下的glibc提供POSIX的API,windows提供windows API,最常见的32位windows API称为win32

运行库:它是用操作系统提供的系统调用接口。

硬件接口:操作系统内核层对于硬件来说是硬件接口的使用者。硬件的接口定义决定了操作系统内核,具体来讲就是驱动程序如何操作硬件,如何与硬件进行通信。(及硬件规格:硬件生产厂商负责提供硬件规格,操作系统和驱动程序的开发者通过阅读硬件规格文档所规定的各种硬件编程接口标准来编写操作系统和驱动程序


操作系统

功能一:向上提供抽象的接口。

功能二:向下管理硬件资源。(主要的三部分:cpu、存储器、I/0设备)


地址空间

虚拟地址空间:做到进程隔离。

物理地址空间:32位的计算机如果只有512M的内存,那么有效地址空间就是0x0000 0000 ~ 0x1FFF FFFF,其他部分无效(实际还有一些外部的I/O设备映射到物理空间,也是有效的)。


分段:基本思路是把一段与程序所需的内存空间大小的虚拟空间映射到某个足够地址空间。

分页:基本方法是把地址空间人为的等分成固定大小的页,每一页的大小有硬件决定,或硬件支持多种大小的页,由操作系统选择决定页的大小。(多个不同的进虚拟页映射到了相同的物理页,就实现了内存共享)(几乎所有的硬件都采用一个叫MMU(Memory Management Unit)的部件来进行页映射)


编译和链接

  1. 预处理 (Prepressing):生成.i文件。gcc -E hello.c -o hello.i 或 cpp hello.c > hello.i

    处理宏、预编译指令、删除注释、添加行号和文件名标识(要保留#pragma)

  2. 编译(Compilation):生成.s文件。   gcc  -S hello.i -o hello.s 或 cc1 hello.c

  3. 汇编(Assembly):生成.o文件。       gcc -c hello.s -o hello.o 或 as hello.s -o hello.o

  4. 链接(Linking):生成可执行文件。    ld -static crt1.o .............

    链接过程包括:地址和空间分配、符号决议、重定位等步骤。


按照可执行文件格式存储的文件(.exe和elf,COFF格式的变种)

静态链接库:windows的.dll 和 linux的.so

动态链接库:windows的.lib 和 linux的.a

ELF文件标准:

可重定位的文件 linux的.o,windows的.obj
可执行的文件 linux和windows的可执行程序
共享目标文件 linux的.so,windows的.dll
核心转储文件 linux的core dump文件


linux下文件格式查看:file命令



展开阅读全文
打赏
1
0 收藏
分享

作者的其它热门文章

加载中
更多评论
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部