POSIX 란?

CharlieMoon·2026년 1월 18일

개요

Portable Operating System Interface의 약자로 유닉스 사용자 그룹에서 시스템 표준화 작업을 시작

배경

AT&T(벨 연구소 모회사) Unix가 반독점법으로 인해 유닉스를 상업적으로 판매할 수 없어 대학과 일반기업, 공공기관 및 비영리 단체에 소스코드를 제공했었다. 하지만 이후 상업화가 가능해지자 AT&T는 System-V라는 운영체제를 만들어 비싼 라이선스 비용을 요구하였다. 이에 버클리 대학은 AT&T의 소스코드를 제거하고 독자적인 코드로 운영체제를 만들었고 IBM, HP, DEC 등 다른 기업들은 이에 대항하기 위해서 OSF(Open Software Foundation)을 결성하고 자신들만의 표준을 정해 운영체제를 만들었다. 이것을 Unix Wars라고 한다. 여러 수 많은 버전의 Unix 파생 운영체제가 생겨났고 파편화가 많이 되어 극심한 호환성 혼란이 찾아 왔다. 이런 혼란을 해결 하기위해서 IEEE(전기전자공학자협회)에서 중립적 표준을 만들기로 하였고 이것이 POSIX 이다.

POSIX가 정의하는 표준

대표 시스템 콜 API

fork()

새로운 프로세스를 생성한다. 새로운 프로세스(자식 프로세스)는 특별한 경우를 제외하고 호출 프로세스의 정확한 복사본이어야 한다.

exec()

현재 프로세스 이미지(Process Image)를 새로운 프로세스 이미지로 대체해야한다. 새 이미지는 새로운 프로세스 이미지 파일이라 불리는 일반 실행 파일에서 구성되어야 한다. (현재 프로세스의 메모리를 새로운 프로그램에 교체한다.)

Process Image
프로세스의 메모리 상태 전체를 의미하며
코드 영역 (Text Segment), 데이터 영역 (Data Segment), 힙 (Heap), 스택 (Stack), 레지스터 상태, 환경 변수 등 이 있다.

open()

파일과 파일 디스크립터 간의 연결을 설정한다. 파일을 참조하는 열린 파일 디스크립터를 생성한다. 파일 디스크립터는 다른 I/O 함수들이 해당 파일을 참조하는 데 사용된다. path 파라미터는 파일 이름을 지정하는 경로이름을 가리킨다.

read()

열린 파일 디스크립터인 fildes와 연관된 파일에서 buf가 가리키는 버퍼로 nbyte 바이트를 읽으려고 시도한다. 동일한 파이프 FIFO 또는 터미널 장치에서 여러개의 동시 읽기 동작은 명시되지 않았다.

read() 함수는 다음과 같이 동작:

  • 파일 디스크립터(fildes)로 지정된 파일에서
  • 최대 nbyte 바이트만큼 읽음
  • 메모리 버퍼(buf)에 복사

주의사항: 파이프나 터미널 같은 특수 파일을 여러 프로세스가
동시에 읽으면 어떤 일이 일어날지 표준에서 보장하지 않는다.

write()

write() 함수는 버퍼 buf가 가리키는 데이터에서 nbyte 바이트만큼
파일 디스크립터 fildes와 연결된 파일에 쓰려고 시도한다.

write() 함수는 다음과 같이 동작

  • 메모리 버퍼(buf)에서 데이터를 읽어
  • 파일 디스크립터(fildes)로 지정된 파일에
  • 최대 nbyte 바이트만큼 쓴다.

특수 케이스

  • 쓸 바이트가 0개(nbyte=0)인 경우, 일반 파일이라면 에러만 체크하고
    실제로는 아무것도 쓰지 않는다.
  • 파이프나 소켓에 0바이트를 쓰려고 하면 동작이 보장되지 않는다.

이렇게 POSIX에서 공통으로 추상화 해놓은 표준 API가 존재하고 이런 API를 구현해 놓은 OS를 POSIX 표준을 준수한 OS라고 불리운다.

셸과 유틸리티

bash 와 sh

sh (Bourne Shell)

POSIX 표준의 기준이 되는 Shell. 1977년 Stephen Bourne이 개발했으며, POSIX는 sh의 동작 방식을 기반으로 표준 셸 명세를 정의했다.

특징

  • POSIX 표준을 가장 충실히 따름
  • 최소한의 기능만 제공
  • 높은 이식성 (모든 Unix 계열 시스템에서 동작)
  • 현대 Linux 시스템에서는 대부분 dash 같은 경량 셸이 /bin/sh로 링크됨

bash (Bourne Again Shell)
GNU 프로젝트에서 1989년 개발한 sh의 확장 버전이다. POSIX 표준을 준수하면서도 사용자 편의를 위한 많은 기능을 추가했다.

특징

  • POSIX 표준 완전 호환 + 추가 기능
  • Linux와 macOS의 기본 셸
  • 풍부한 기능 (명령어 자동완성, 히스토리, 배열 등)
  • --posix 옵션으로 순수 POSIX 모드 실행 가능

grep

입력 파일을 검색하여 하나 이상의 패턴과 일치하는 라인을 선택한다. 패턴 유형은 지정된 옵션에 의해 제어된다.

sed

하나 이상의 텍스트 파일을 읽고, 편집 명령 스크립트에 따라 편집 변경을 하며, 결과를 표준 출력으로 기록하는 스트림 편집기 이다. 스크립트는 피연산자 문자열 또는 옵션 파라미터 조합에서 얻어야 한다.

awk

텍스트 데이터 조작에 특화된 awk 프로그래밍 언어로 작성된 프로그램을 실행하는 유틸리티이다.

스레드 (pthread)

  • 멀티스레딩을 위한 표준 라이브러리
profile
산만한 개발자의 노트

0개의 댓글