随心记忆

本文深入探讨了操作系统与运行库的接口类型,包括应用程序编程接口、系统调用接口、硬件接口及其作用,同时介绍了不同操作系统提供的运行库,如glibc、windowsAPI,并解释了虚拟地址空间、物理地址空间、分段与分页的概念,以及编译和链接过程的基本步骤。

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命令



转载于:https://my.oschina.net/u/2357574/blog/608232

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值