首页 > 编程知识 正文

posix虚拟机,posix兼容性

时间:2023-05-04 08:42:46 阅读:62554 作者:4535

POSIX标准介绍POSIX是指便携式操作系统接口标准(简称POSIX ),用于定义操作系统应向APP应用程序提供的接口标准

20世纪60年代是一个大型复杂操作系统盛行的时代,包括IBM的操作系统/360和Honeywell的多点cs系统。 操作系统OS/360是历史上最成功的软件项目之一,但Multics已存在多年,从未得到广泛应用。 贝尔实验室是Multics项目的第一个参与者,但由于项目的复杂性和缺乏进展,他于1969年退出。 鉴于Mutics项目令人不快的经历,贝尔实验室的研究人员Ken Thompson、Dennis Ritchie、Doug Mcllroy和xydxtz Ossanna从1969年开始在DEC PDP-7计算机上完全用机器语言这个新系统的许多思想,例如分层文件系统,作为用户级进程的shell概念来自Multics,不过是用更小更简单的软件包来实现的。 1970年,zjdbb Kernighan将新系统命名为“Unix”。 这也是双关语,暗指了“Multics”的复杂性。 1973年用c重写内核,1974年,Unix正式开始对外发布。

贝尔实验室在慷慨的条件下为学校提供源代码,因此Unix在大学得到了很多支持和持续发展。 最有影响力的工作发生在20世纪70年代后期到80年代初。 美国加州大学伯克利分校向一系列称为UNIX4. xbsd (berkeleysoftwaredistribution )的发行版中添加了虚拟内存和互联网协议。 与此同时,贝尔实验室正在发布一个名为System V Unix的专有版本。 其他供应商(如Sun Microsystems的Solaris系统)的版本来自这些原始BSD和System V版本。

20世纪80年代中期,Unix制造商经常试图通过添加不兼容的新特性来区别程序,也遇到了麻烦。 为了阻止这一潮流,电气和电子工程师协会(IEEE )开始致力于Unix开发的标准化,后来Richard Stallman将其命名为“Posix”。 结果得到了一系列称为Posix标准的标准。 该标准涵盖Unix系统调用的c语言接口、shell程序和工具、线程以及网络编程等多个方面。 最近,被称为“标准Unix规格”的独立标准化工作与Posix一起制定了统一的Unix系统标准。 这些标准化工作的结果是,Unix版本之间几乎没有差别。

70~80年代,ATT对UNIX的实际源代码进行了版权保护,但鼓励根据系统接口和语言进行标准化。 例如,ATT发布了svid (systemvinterfacedefinition,系统v接口定义),这为POSIX及其后续工作奠定了基础。 此后,UNIX便相当优雅地适应了网络环境,虽然不那么轻便,但也可以说十分适应了图形环境。 此后,UNIX的基本内核界面和许多独特的用户级工具集成在开源运动的技术基础上。

POSIX标准是IEEE为运行在各种UNIX操作系统上的软件定义的一系列API标准的总称,正式称为IEEE 1003,国际标准名称为POSIX标准期待源代码级别的软件可移植性。 也就是说,为一个启用POSIX的操作系统创建的程序应该可以在另一个POSIX操作系统上编译和运行,即使是另一个供应商的POSIX操作系统也是如此。

POSIX不限于UNIX。 许多其他操作系统(例如DEC OpenVMS )支持POSIX标准,特别是IEEESTD.1003.1-1990(1995年修订版)或POSIX.1,POSIX.1是源代码级c语言APP POSIX.1已被国际标准化组织(internationalstandardsorganization,ISO )接受,命名为ISO/IEC 9945-1:1990标准。

POSIX.1仅规定了系统服务APP应用程序编程接口(API ),仅概述了基本的系统服务标准。 因此,工作组还希望就系统的其他功能制定标准。 就这样,IEEE POSIX的工作开始了。 最初有10个批准计划正在进行中,近300人参加了每季度一周的会议。 着手的工作有命令和工作标准(POSIX.2 )、测试方法标准(POSIX.3 )、实时API (POSIX.4 )等。 1990年上半年已有25个计划正在进行中,有16个工作组参加。 同时,一些组织指定了类似的标准,如X/Open、ATT和OSF。

20世纪90年代初,POSIX标准的制定处于最终投票决定的阶段。 也就是说,从1991年到1993年,Linux刚开始的时候,这个UNIX标准为Linux提供了极其重要的信息,使Linux在标准的指导下开发,与大多数UNIX操作系统兼容。 在第一个Linux上

内核源码(0.01版、0.11版)中就已经为 Linux 系统与 POSIX 标准的兼容做好了准备工作。在 Linux 0.01 版内核 /include/unistd.h 文件中就已经定义了几个有关 POSIX 标准要求的符号常数,而且 Linus 在注释中已写道:“OK,这也许是个玩笑,但我正在着手研究它呢”。

简单总结:

完成同一功能,不同内核提供的系统调用(也就是一个函数)是不同的,例如创建进程,linux下是fork函数,windows下是creatprocess函数。好,我现在在linux下写一个程序,用到fork函数,那么这个程序该怎么往windows上移植?我需要把源代码里的fork通通改成creatprocess,然后重新编译!

posix标准的出现就是为了解决这个问题。linux和windows都要实现基本的posix标准,linux把fork函数封装成posix_fork(随便说的),windows把creatprocess函数也封装成posix_fork,都声明在unistd.h里。

这样,程序员编写普通应用时候,只用包含unistd.h,调用posix_fork函数,程序就在源代码级别可移植了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。