Skip to content

Latest commit

 

History

History
65 lines (54 loc) · 2.75 KB

File metadata and controls

65 lines (54 loc) · 2.75 KB

5. 시스템 기본 프로그래밍 - 4

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

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

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

  1. 시스템 콜
  • 운영체제 리소스나 서비스 요청을 위해 사용자 영역에서 커널 영역으로 들어가는 함수
  • 주요 시스템콜 : read(), write(), open() 등

리눅스 / 유닉스는 C 언어로 만들어져있으므로 시스템콜도 C 언어로 구현

  1. 시스템 콜 구현
  • eax 레지스터에서 시스템 콜 번호 넣음
  • ebx 레지스터에는 시스템 콜에 해당하는 인자값을 넣고
  • 소프트웨어 인터럽트 명령을 호출하면서 Ox80 값 넘김
mov eax, 1
mov ebx, 0
int 0x80
  • 소프트웨어 인터럽트 명령을 호출하면서 0x80 값을 넘겨줌
    • CPU 는 사용자 모드를 커널 모드로 바꿔줌
    • IDT(Interrupt Descriptor Table) 에서 0x80 에 해당하는 주소 함수) 를 찾아서 실행
    • System_call() 함수에서 eax 로부터 시스템 콜 번호를 찾아서 해당 번호에 맞는 시스템 콜 함수로 이동
    • 해당 시스템콜 함수 실행 후 다시 커널 모드에서 사용자 모드로 변경하고 다시 해당 프로세스 다음 코드 진행
  1. API
  • 응용 프로그램과 분리된 하위 호환 인터페이스
    • 시스템 콜 래퍼, 입출력 라이브러리 등등
  1. C 라이브러리
  • 유닉스 C 라이브러리 : libc
  • 리눅스 C 라이브러리 : GNU libc, glibc
    • 시스템, 시스템콜 래퍼, 기본 응용 프로그램 기능 포함
  1. C 컴파일러
  • 유닉스 C 컴파일러 : cc
  • 리눅스 C 컴파일러 : GNU cc -> gcc
  • Ubuntu 리눅스에 gcc 설치
# sudo apt-get install gcc
# gcc --version
# gcc -o test.c test
  1. ABI (Application Binary Interface)
  • 응용 프로그램 바이너리 인터페이스
  • 함수 실행 방식, 레지스터 활용, 시스템 콜 실행, 라이브러리 링크 방식 등
  • ABI 가 호환되면 재컴파일 없이 동작
  • 컴파일러, 링커(라이브러리 링크), 툴체인(컴파일러를 만드는 프로그램) 에서 제공
  1. POSIX
  • 유닉스 시스템 프로그래밍 인터페이스 표준
  • IEEE(Institute of Electronic and Electronics Engineers) 에서 표준화 시도
  • 리차드 스톨만(자유 소프트웨어 재단) 이 POSIX를 표준안 이름으로 제안
  1. 시스템 프로그래밍과 버전
  • 끊임없는 POSIX, C, C++ 표준 업데이트
  • 끊임없는 소프트웨어 업데이트
  • 프로그래밍 트렌드와 상관없이 시스템 레벨단 기술은 유지되고 필요함

상위 레벨 프로그래밍을 할지라도 하위 시스템 레벨을 알고 있으면 더 나은 성능이 개선된 소프트웨어 개발 가능