POSIX可移植操作系统接口

这一篇的目的在最后的结语中有说明,可以当作涨知识来康康啊

POISX 可移植操作系统接口,(Portable Operating System Interface of UNIX)

POSIX是各种UNIX操作系统中运行的软件定义的一系列API标准的总称,也就是说,POISX是UNIX的标准,经由IEEE或者The Open Group认证后,符合标准的,就可以采用POSIX®

点击进入opengroup可以查看IEEE和POISX认证

发展历史

来由

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的兼容就是指定这些接口函数兼容

image-20220528184018629

一般库函数的源代码是不可见的,但在头文件中可以看到他对外的接口

可移植性

我们实际使用的程序,都是经过编译器的编译来变成最终的程序,从而顺利执行的,分为两块后,就是启动代码+目标代码

目标代码就是由编译器编译而来的,而启动代码,也即是在不同的平台,就是不同的运行结果了,为了其相互兼容,POSIX也对此做了不同的目标代码函数,这样一来,不同的平台,由不相同的启动代码+不相同的目标代码完成了应有的功能。

这个过程很像网络五层协议之间的加减请求头的操作。(其实这个就涉及到对一个一般很难的问题的拆分和解构,也就是传说中的解耦)

系统开销

系统调用的使用往往伴随着程序的中断,执行调用是用户态和内核态的切换,为了减少系统调用带来的开销,久需要尽可能的减少系统调用的次数,每次让系统调用尽可能的完成多的任务,

这个过程其实就是先提供一些标准的函数库,然后综合,尽量向设备和文件提供更高层的接口,

系统调用和API(Application Programming Interface)不同,系统调用涉及到操作系统状态的转换,而API始终是开放的

其实写这一篇的目的就是引出接下来的WSL(windoes subsystem for Linux)用来学习操作系统和LInux,而WSL就是POISX subsystem

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇