본문 바로가기
컴퓨터공학기초 개념/시스템 프로그래밍

16. 시스템 프로그래밍 - ABI와 표준

by devraphy 2021. 9. 10.

1. API

- API는 다양한 환경에서 사용될 수 있도록 하위호환이 가능한 인터페이스다. 

- 하위호환이라는 의미는, 실행파일(= 응용프로그램)의 코드를 변경하지 않고도 다양한 환경에서 동일한 기능을 수행할 수 있도록, 

- 하나의 기능에 대해서 다양한 인터페이스를 제공한다는 의미다. 


2. C 라이브러리 

▶ libc

   - 유닉스의 C 라이브러리

 

▶ glibc(GNU libc)

   - GNU 프로젝트에서 개발된 리눅스 C 라이브러리 

   - 시스템 콜, 시스템 wrapper, 기본 응용 프로그램 등이 포함된 라이브러리 


3. C 컴파일러 

▶ cc

    - 유닉스의 C 컴파일러 

 

▶ gcc(GNU cc)

   - GNU 프로젝트에서 개발된 리눅스 C 컴파일러 

   - 우분투 리눅스에는 gcc를 설치하여 사용한다. 

 

- gcc 컴파일러를 설치하기 위해서는 다음의 명령어를 사용해야한다. 

sudo apt-get install gcc # gcc 설치 명령
gcc --version # gcc 버전확인 
gcc -o test.c test # 실행파일을 만드는 명령어, test.c를 test라는 이름의 실행파일로 생성

- 우선 gcc를 설치하고 버전을 확인한다. 

- 이전 포스팅의 내용을 직접 실습해보았다면 gcc 컴파일러를 이미 설치했을 것이다. 

- test.c라는 파일을 만들어 컴파일러가 잘 작동하는지 확인한다. (이 과정은 나중에 수행할 예정입니다.)


4. ABI (Application Binary Interface)

- 응용 프로그램 바이너리 인터페이스

- 함수의 실행방식, 레지스터 활용방식, 시스템 콜 실행방식, 라이브러리와 응용프로그램의 링크방식 등의 원초적인 설정을 작성한 것 

- ABI가 호환되면 재컴파일 없이 동작한다. (리눅스 프로그램을 윈도우에서 사용할 수 없는 이유 - ABI가 호환되지 않음) 

- 컴파일러, 링커(라이브러리 링크), 툴체인(컴파일러를 만드는 프로그램)등 에서 ABI를 제공 

 


5. 표준화

- 컴퓨터마다 시스템 프로그래밍 방식이 다르면 서로 사용하는 프로그램이 호환되지 않는다. 

- 그렇게 되면 동일한 프로그램에 대해서 컴퓨터마다의 시스템 환경에 맞는 여러가지 버전이 개발되어야 하는 불편함이 있다.  

- 그러므로 시스템프로그래밍 방식에 대한 표준화는 굉장히 중요하다. 

 

a) POSIX

- 유닉스 시스템 프로그래밍 인터페이스의 표준

- IEEE(Institute of Electronic and Electronics Engineers)에서 표준화를 시도했다.

- 리차드 스톨만(GNU 재단)이 POSIX를 표준안 이름으로 제안했다. 

 

 

b) C언어 표준화

- C언어도 다양한 종류가 있다.

- ANSI(American National Standars Institute)에서 ANSI C 라는 C언어 표준을 정립했다.

- 리눅스의 경우 POSIX와 ANSI C를 모두 지원한다. 

 

 

d) 계속되는 업데이트

- 끊임없이 POSIX와 C, C++ 표준이 업데이트 되고 있다. 

- 이에 따라 소프트웨어 또한 계속해서 업데이트되고, 개발/기술 트랜드 또한 계속해서 변한다. 

- 모든 소프트웨어, 프로그래밍 트랜드는 밑바탕이 되는 시스템 레벨의 기술을 기반하고 있다. 

- 그러므로 소프트웨어와 프로그래밍 트랜드와는 상관없이 시스템 레벨의 기술은 유지되고 있다. 

- 이와 같은 이유로 상위 레벨의 프로그래밍을 할지라도,

- 하위(시스템 레벨)레벨의 기술을 이해를 하고 있다면, 더 나은 성능의 소프트웨어 개발이 가능하다.  

 

댓글