POSIX可移植操作系统接口
POISX 可移植操作系统接口,(Portable Operating System Interface of UNIX)
POSIX是各种UNIX操作系统中运行的软件定义的一系列API标准的总称,也就是说,POISX是UNIX的标准,经由IEEE或者The Open Group认证后,符合标准的,就可以采用POSIX®
发展历史
来由
1974年贝尔实验室发布了Unix后,就提供了源代码,在获得大量支持后得以继续发展,同时也出现了一批独立开发,但是与Unix基本兼容但又不完全兼容的系统,也叫Unix-like OS ,类Unix操作系统,UNix的发展历史在之前一篇介绍Linux的文章中有提到过 点击跳转unix历史,可以查看pdf中的记录的各个分支系统
非常混乱的背景下,兼容性就大相径庭,这时候就需要一个标准,来制约Unix的开发,后来也就叫做Posix 这一套标准定义了很多:如C语言接口,shell程序,网络编程,线程,等等。
逐渐普及
我们现在熟悉的Unix,Linux,安卓,苹果,这些都是基于Unix-based的,在这个规范的定义之下,就可以调用通用的API了,WIndows也是在市场的逼迫之下,支持了POSIX
部分功能
系统调用和库函数调用
Linux下的很多操作可以看成对文件的操作,文件操作就有两种;
系统调用(system call) 系统调用本来就是操作系统留给应用程序的接口,是直接面向底层硬件的,可以让用户态运行的资源与硬件交互,其执行的位置在内核地址空间
库函数调用(Library functions) 库函数是把定义好的函数放到库里,供人使用的一种方式,也就是传说中的头文件,当然这只是其中一类还有一类就是编译器特定的库函数,其执行的位置在用户地址空间
POISX的兼容就是指定这些接口函数兼容
一般库函数的源代码是不可见的,但在头文件中可以看到他对外的接口
可移植性
我们实际使用的程序,都是经过编译器的编译来变成最终的程序,从而顺利执行的,分为两块后,就是启动代码+目标代码
目标代码就是由编译器编译而来的,而启动代码,也即是在不同的平台,就是不同的运行结果了,为了其相互兼容,POSIX也对此做了不同的目标代码函数,这样一来,不同的平台,由不相同的启动代码+不相同的目标代码完成了应有的功能。
这个过程很像网络五层协议之间的加减请求头的操作。(其实这个就涉及到对一个一般很难的问题的拆分和解构,也就是传说中的解耦)
系统开销
系统调用的使用往往伴随着程序的中断,执行调用是用户态和内核态的切换,为了减少系统调用带来的开销,久需要尽可能的减少系统调用的次数,每次让系统调用尽可能的完成多的任务,
这个过程其实就是先提供一些标准的函数库,然后综合,尽量向设备和文件提供更高层的接口,
系统调用和API(Application Programming Interface)不同,系统调用涉及到操作系统状态的转换,而API始终是开放的
其实写这一篇的目的就是引出接下来的WSL(windoes subsystem for Linux)用来学习操作系统和LInux,而WSL就是POISX subsystem