linux - "POSIX"의 의미는 무엇입니까?



unix terminology (9)

POSIX 란 무엇입니까? 나는 Wikipedia 기사 를 읽었으며 나는이 용어를 접할 때마다 그것을 읽었다. 사실은 그것이 무엇인지 결코 정말로 이해하지 못한다.

누구든지 "POSIX에 대한 필요성"을 설명함으로써 나에게 설명해 줄 수 있습니까?

https://ffff65535.com


1985 년 컴퓨터 업계의 여러 회사의 사람들이 함께 참여하여 UNIX 시스템 V 인터페이스 정의 (SVID) 및 기타 초기 표준화 노력에 기반을 둔 POSIX (컴퓨터 환경 용 휴대용 운영 체제 인터페이스) 표준을 개발했습니다. 이러한 노력은 훈련 및 조달 비용을 최소화하기위한 표준 컴퓨팅 환경이 필요한 미국 정부에 의해 촉진되었습니다. 1988 년에 발표 된 POSIX는 운영 체제 용 API, 쉘 및 유틸리티 인터페이스를 정의하는 IEEE 표준 그룹입니다. 유닉스와 유사한 시스템을 목표로하지만이 표준은 모든 호환 운영 체제에 적용될 수 있습니다. 이러한 표준이 받아 들여지면서 소프트웨어 개발자는 UNIX, Linux 및 기타 운영 체제의 모든 호환 버전에서 실행되는 응용 프로그램을 개발할 수 있습니다.

이 책에서 : Linux 실용 가이드


POSIX는 IEEE와 The Open Group이 제시 한 일련의 표준으로 이상적인 유닉스가 어떻게 운영되는지 설명합니다. 프로그래머, 사용자 및 관리자는 모두 POSIX 문서에 익숙해 질 수 있으며 POSIX에 대한 불만 사항을 Unix가 언급 한 모든 표준 기능을 제공 할 것으로 기대합니다.

솔라리스, 맥 오에스텐, IRIX, BSD, 리눅스는 모두 각기 다른 일을하기 때문에 POSIX는 표준 환경을 정의 할 때 특히 유용합니다. 예를 들어, C 라이브러리의 대부분의 함수는 POSIX를 기반으로합니다. 따라서 프로그래머는 자신의 응용 프로그램에서 하나를 사용하여 대부분의 Unices에서 동일하게 동작 할 것으로 기대합니다.

그러나 Unix의 다른 영역은 일반적으로 표준 영역이 아니라 초점 영역입니다.

POSIX의 가장 큰 장점은 여러분이 직접 읽을 수 있다는 것입니다 :

오픈 그룹 기본 사양 문제 7

이슈 7은 POSIX.1-2008으로 알려져 있으며 거기에 새로운 것들이 있습니다. 그러나 POSIX.1 용 Google-fu 등을 사용하면 유닉스가 무엇인지 배후에서 전체 역사를 볼 수 있습니다.


POSIX는 크로스 플랫폼 소프트웨어를 쉽게 작성하도록되어있는 운영 체제의 표준입니다. 그것은 유닉스 세계에서 특히 큰 문제입니다.


Posix는 OS로서 더 많으며 "OS 표준"입니다. 실제로 존재하지 않는 상상의 OS로 상상할 수 있지만 문서가 있습니다. 이 논문은 미국의 큰 표준 조직인 IEEE에 의해 정의 된 "posix 표준"입니다. 이 사양을 구현하는 OS는 "Posix 호환"입니다.

정부 규정은 투자에서 Posix 준수 솔루션을 선호하기 때문에 Posix를 준수하는 것은 특히 미국의 IT 대기업에게 중요한 재정적 이점이 있습니다.

완벽하게 호환되는 운영 체제에 대한 보상으로 모든 Posix 호환 응용 프로그램을 완벽하게 컴파일하고 실행할 수 있습니다.

리눅스가 가장 잘 알려져 있습니다. OSX, Solaris, NetBSD 및 Windows NT도 여기서 재생됩니다. FreeBSD와 OpenBSD는 Posix와 거의 비슷합니다. 위의 정부 규제를 피하기 위해 WinNT의 posix-compliance는 단지 의사적인 해결책 일뿐입니다.


churlish "비공식"설명을 드리겠습니다.

POSIX는 "UNIX"와 UNIX 계열 시스템을 호환 할 수없는 시스템과 구별하려는 일련의 표준입니다. 그것은 조달 목적으로 미국 정부에 의해 만들어졌습니다. 그 아이디어는 미국 연방 조달 기관이 주어진 기존 코드 기반이나 프로그래밍 직원이 이식 할 수없는 시스템을 배제하는 데 사용할 수있는 방식으로 다양한 종류의 입찰 및 계약에 대한 요구 사항을 합법적으로 지정하는 방법을 필요로한다는 것이 었습니다.

POSIX는 사후에 쓰여졌 기 때문에 느슨하게 유사한 경쟁 시스템 세트를 설명하기 위해 구현 될 수있는 방법으로 작성되지 않았습니다.

예를 들어, Microsoft의 NT는 POSIX 하위 시스템이 실질적인 이식성과 UNIX 시스템과의 호환성면에서 본질적으로 쓸모가 없었지만 일부 입찰가를 충족시키기에 충분한 POSIX 적합성으로 작성되었습니다.

UNIX에 대한 다양한 표준이 수십 년에 걸쳐 작성되었습니다. SPEC1170 (호환 가능하게 구현되어야했던 11 백 70 번째 함수 호출) 및 SUS (Single UNIX Specification)의 다양한 구현.

대부분의 경우 이러한 "표준"은 실용적인 기술 응용에 부적합합니다. 그들은 논증, 법적인 논쟁 및 다른 기능 상 이유 때문에 존재합니다.


너무 밝지 않은 POSIX에 대한 몇 가지 사실.

POSIX는 시스템 호출 인터페이스 또는 API이기도하며 약 30 년 전입니다.

단일 CPU를 사용하는 단일 컴퓨터를 사용하여 로컬 스토리지에 대한 직렬화 된 데이터 액세스를 위해 설계되었습니다.

보안은 설계 상 POSIX의 주된 관심사는 아니 었습니다. 수년 동안 수 많은 경합 상태에 빠져 프로그래머가 이러한 한계를 극복해야했습니다.

심각한 버그가 여전히 발견되어 더 안전한 POSIX API 디자인으로 회피 될 수있는 버그가 있습니다.

POSIX는 사용자가 한 번에 하나의 동기 호출을 실행하고 다음 호출을 보내기 전에 결과를 기다릴 것을 기대합니다. 오늘날의 프로그래머는 전체 처리량을 향상시키기 위해 동시에 많은 비동기 요청을 발생시킬 것으로 예상합니다.

이 동기 API는 대기 시간이 중요한 원격 및 클라우드 개체에 액세스 할 때 특히 적합하지 않습니다.


이 표준은 Unix 계열 운영 체제에 대한 공통 기반을 제공합니다. 쉘이 작동하는 방법, ls 및 grep과 같은 명령에서 기대할 사항, 그리고 C 작성자가 사용할 수있는 많은 C 라이브러리를 지정합니다.

예를 들어 명령 줄 사용자가 명령을 함께 묶는 데 사용하는 파이프는 여기서 자세히 설명합니다. 즉 C의 popen (파이프 열기) 함수는 ISO C 표준이 아닌 POSIX 표준입니다.


POSIX 는 Unix-y 운영 체제에서 제공하는 응용 프로그램 프로그래밍 인터페이스 (및 명령 줄 셸 유틸리티와 같은 부수적 인 문제)를 명확히하고 유니폼을 만들기 위해 IEEE 에서 지정한 표준 제품군입니다. POSIX 표준에 의존하는 프로그램을 작성할 때, 유닉스 계열의 유도체 (리눅스를 포함하지만 이에 국한되지 않음) 사이에서 쉽게 포팅 할 수 있다는 것을 확신 할 수있다. Posix의 일부로 표준화되지 않은 일부 Linux API를 사용하는 경우 나중에 해당 프로그램이나 라이브러리를 다른 Unix-y 시스템 (예 : MacOSX)으로 이식하려는 경우 더 힘들어집니다.


POSIX 7이 정의하는 가장 중요한 것들

  1. C API

    ANSI C 를 다음과 같이 크게 확장합니다 .

    • 더 많은 파일 작업 : mkdir , dirname , symlink , readlink , link (하드 링크), poll , sync
    • 프로세스 및 스레드 : fork , execl , pipe , semaphors sem_* , 공유 메모리 ( shm_* ), kill , 예약 매개 변수 ( nice , sched_ ), sleep
    • 네트워킹
    • 정규식
    • 고급 메모리 관리 : mmap , mlock , mprotect , madvise

    이러한 API는 또한 의존하는 기본 시스템 개념을 결정합니다. 예를 들어 fork 는 프로세스 개념을 필요로합니다.

    특정 POSIX C API 함수를 구현하고 리눅스가 호환되도록 만드는 많은 Linux 시스템 호출이 존재합니다 (예 : sys_write , sys_read , ...).

    주요 Linux 데스크탑 구현 : glibc. 대부분의 경우 시스템 호출에 얕은 래퍼를 제공합니다.

  2. CLI 유틸리티

    예 : cd , ls , echo , ...

    많은 유틸리티는 해당 C API 함수 (예 : mkdir 직접 쉘 프론트 엔드입니다.

    주요 Linux 데스크탑 구현 : 작은 것들을위한 GNU Coreutils, 큰 것들을위한 별도의 GNU 프로젝트 : sed , grep , awk , ... 일부 CLI 유틸리티는 Bash 에 내장 되어 구현됩니다.

  3. 셸 언어

    예 : a=b; echo "$a" a=b; echo "$a"

    주요 Linux 데스크탑 구현 : GNU Bash.

  4. 환경 변수

    예 : HOME , PATH .

  5. 프로그램 종료 상태

    ANSI C는 성공을 EXIT_SUCCESS 경우 0 또는 EXIT_SUCCESS 를, 실패하면 EXIT_SUCCESS 를 표시하고 나머지 구현은 정의 된 상태로 둡니다.

    POSIX는 다음을 추가합니다.

  6. 정규식

    BRE (기본) 및 ERE (확장)의 두 가지 유형이 있습니다. Basic은 더 이상 사용되지 않으며 API 만 중단시키지 않습니다.

    그것들은 C API 함수에 의해 구현되고 CLI 유틸리티 전체에서 사용됩니다. 예를 들어 grep 은 기본적으로 BRE를 허용하고 ERE는 -E 합니다.

    예 : echo 'a.1' | grep -E 'a.[[:digit:]]' echo 'a.1' | grep -E 'a.[[:digit:]]'

    주요 Linux 구현 : glibc는 regex.h 아래에 grep 과 같은 프로그램을 백엔드로 사용할 수있는 기능을 구현합니다.

  7. 디렉토리 구조

    예 : /dev/null , /tmp

    Linux FHS POSIX를 크게 확장합니다.

  8. Filenames

    • / 는 경로 분리 기호입니다.
    • NUL 은 사용할 수 없습니다.
    • . cwd , .. parent입니다.
    • 이식 가능한 파일 이름
      • 최대 14자를 사용하고 전체 경로를 위해 256자를 사용하십시오.
      • 다음을 포함 할 수 있습니다 : a-zA-Z0-9._-

    참고 항목 : 파일 시스템에 대한 posix 준수 란 무엇입니까?

  9. 명령 행 유틸리티 API 규약

    필수는 아니지만 POSIX에서 사용하지만 거의 다른 곳, 특히 GNU가 아닙니다. 그러나 사실 너무 제한적입니다 (예 : 단일 문자 플래그 (예 : -a ), 이중 하이픈 긴 버전 (예 : --all )).

    몇 가지 널리 사용되는 규칙 :

    • - 파일이 예상되는 표준 입력을 의미합니다.
    • -- 플래그를 종료합니다 (예 : ls -- -l -l

    참고 항목 : Linux 명령 줄 스위치 및 인수에 대한 표준이 있습니까?

누가 POSIX를 준수합니까?

많은 시스템이 POSIX를 철저히 준수하지만 실제로 표준을 유지 관리하는 Open Group이 인증 한 시스템은 거의 없습니다. 주목할만한 인증 된 것들은 다음과 같습니다 :

  • OS X (Apple) X는 10과 UNIX를 의미합니다. 2001 년경에 발표 된 첫 번째 Apple POSIX 시스템이었습니다. 참고 : OSX는 POSIX OS입니까?
  • AIX (IBM)
  • HP-UX (HP)
  • Solaris (Oracle)

대부분의 리눅스 배포판은 컴플라이언스 검사를 지불하고 싶지 않기 때문에 매우 적합하지만 인증되지 않았습니다. Inspur의 K-UXHuawei의 EulerOS 는 인증 된 두 가지 예입니다.

공인 시스템 목록은 https://www.opengroup.org/openbrand/register/위키 페이지에서 확인할 수 있습니다.

Windows

Windows는 일부 전문 배포판에서 POSIX를 구현했습니다.

선택적인 기능 이었기 때문에 프로그래머는 대부분의 최종 사용자 응용 프로그램에 의존 할 수 없었습니다.

Windows 8에서 지원이 더 이상 사용되지 않습니다.

2016 년에는 새로운 공식 Linux 용 API 인 "Windows Subsystem for Linux"가 발표되었습니다. 리눅스 시스템 호출, ELF 실행, /proc 파일 시스템, Bash, GCC, TODO 가능성 glibc?, apt-get 등이 포함되어 있습니다 : https://channel9.msdn.com/Events/Build/2016/P488 그래서 저는 그것이 Windows가 POSIX를 전부는 아니더라도 많이 실행할 수 있다고 믿습니다. 그러나 최종 사용자 대신 개발자 / 배포에 초점을 맞추고 있습니다. 특히 Windows GUI에 대한 액세스를 허용 할 계획이 없었습니다.

공식 Microsoft POSIX 호환성에 대한 역사적 개요 : http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/

Cygwin 은 잘 알려진 GPL 써드 파티 프로젝트로, Windows 용 "POSIX API 기능 제공"을 제공하지만 "Windows에서 실행하려면 소스에서 응용 프로그램을 다시 빌드"해야합니다. MSYS2 는 Cygwin 위에 더 많은 기능을 추가하는 것으로 보이는 관련 프로젝트입니다.

기계적 인조 인간

Android에는 POSIX를 완전히 지원하지 않는 자체 C 라이브러리 (Bionic)가 있습니다. Android O : Android POSIX와 호환됩니까?

보너스 레벨

Linux Standard Base 는 POSIX를 확장합니다.

비 프레임 인덱스를 사용하면 훨씬 더 읽기 쉽고 검색 가능합니다. http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

grepping을위한 HTML 페이지의 완전한 zip 버전 가져 오기 : POSIX C API 함수 목록은 어디에 있습니까?





terminology