핵심 기술

tycode·2021년 5월 1일
0

C.S (Computer Science)

목록 보기
15/40
post-custom-banner

시스템 프로그래밍의 기반 요소

사용자 영역에서의 시스템 프로그래밍

  • 시스템 콜(system call)"
  • C 라이브러리
  • C 컴파일러

시스템 콜

  • 시스템 콜: 운영체제 리소스나 서비스 요청을 위해, 사용자 영역에서 커널 영역으로 들어가는 함수
  • 주요 시스템 콜: read(), write(), open() 등
    리눅스/유닉스는 C언어로 만들어져있으므로, 시스템 콜도 C언어로 구현

어떻게 구현되어 있나?

  • eax 레지스터에 시스템 콜 번호를 넣고,
  • ebx 레지스터에는 시스템 콜에 해당하는 인자값을 넣고,
  • 소프트웨어 인터럽트 명령을 호출하면서 0x80x값을 넘겨줌

    ㄴinstruction code (CPU가 제공한 코드)
    ㄴ인터럽트 번호 0x80(128번)
    ㄴ시스템 콜 번호 1을 시스템 레지스터 eax에 넣어줌
    ㄴ함수인자 0을 ebx에 넣어줌

(1) int명령 받으면 CPU는 사용자모드에서 커널모드로 바꿔주고
(2) OS가 부팅할 때 적어둔 IDT에서 0x80에 해당하는 함수가 저장되어 있는 주소로 이동해서 → PC(Program Counter)에 주소를 써주게되면 실행함.
(3) 리눅스 같은 경우 system_call() 함수가 적혀져있다. (4) 즉, system_call() 함수로 이동해서 eax로부터 시스템 콜 번호를 찾아서, 해당 번호에 맞는 시스템 콜 함수로 이동한다.
(5) 이 때, ebx에 있는 인자를 시스템 콜 함수에 넘겨줘서 실행한다.
(6) 시스템 콜 함수 실행 후, 다시 커널 모드에서 사용자 모드로 변경하고, 다시 해당 프로세스 다음 코드 진행함.

API

  • 응용 프로그램과 분리된 하위 호환 인터페이스
    예) 시스템 콜 래퍼, 입출력 라이브러리 등등

  • 사용자가 사용하기 쉽게 인터페이스를 제공해줌

    • 동적 라이브러리, 정적 라이브러리가 있다.
    • 라이브러리 바이너리는 실행파일과 분리가될 수 있다.
    • 그래서 라이브러리쪽만 업데이트하면 여러가지 실행파일 기능도 같이 업데이트될 수 있다.

C 라이브러리

  • 유닉스 C 라이브러리 - libc
  • 리눅스 C 라이브러리 - GNU libc- glibc (지립씨, 글립씨)
    • 시스템콜, 시스템콜 래퍼, 기본 응용프로그램 기능이 포함하고 있다

C 컴파일러

  • 유닉스 C 컴파일러 - cc
  • 리눅스 C 컴파일러 - GNU cc - gcc (지씨씨)
  • 우분투 리눅스에 gcc 설치

ABI (Application Binary Interface)

응용프로그램과 라이브러리를 연결/통신 어떻게 해야할지 정해야 한다. 이러한 방식을 정하는 것이 ABI.

  • 응용 프로그램 바이너리 인터페이스
  • 함수 실행 방식, 레지스터 활용, 시스템 콜 실행, 라이브러리 링크 방식등
  • ABI가 호환되면 재컴파일 없이 동작 가능
    ㄴ윈도우에서 리눅스 프로그램이 호환되지 않은 이유도 ABI와 라이브러리가 달라서이다.
  • 컴파일러, 링커(라이브러리를 해당 실행파일을 연결 시키는 역할), 툴체인(컴파일러를 만드는 프로그램)에서 제공

컴퓨터 만든 사람들이 중구난방식으로 정했기 때문에 표준화를 작업을 하는 그룹들이 생겼다

POSIX

  • 유닉스 시스템 프로그래밍 인터페이스 표준
    • IEEE(Institute of Electronic and Electonics Engineers)에서 표준화 시도
    • 리차드 스톨만(자유 소프트웨어 재단)이 POSIX를 표준안 이름으로 제안 (시스템콜, ABI 등에 대해 표준화를 하고 있다)

C언어 표준

  • 다양한 C언어 변종
    • ANSI(American national StaNDARS Institute)에서 ANSI C 표준 성립
      리눅스는 POSIX와 ANSI C 지원

시스템 프로그래밍과 버전

  • 끊임없는 POSIX, C, C++ 표준 업데이트
  • 끊임없는 소프트웨어 업데이트
  • 프로그래밍 트렌드와 상관없이 시스템 레벨단 기술은 유지되고, 필요함 (기술들은 시스템 레벨단에서부터 쌓여져 개발됨)
post-custom-banner

0개의 댓글