시스템 프로그래밍의 기반 요소
* 시스템 콜 (system call)
* C 라이브러리
* C 컴파일러
시스템 콜
* 시스템 콜 : 운영체제 리소스나 서비스 요청을 위해, 사용자 영역에서 커널 영역으로 들어가는 함수
* 주요 시스템콜 : read(), write(), open() 등
* 리눅스 / 유직스는 C 언어로 만들어져있으므로, 시스템콜도 C언어로 구현되어 있다
시스템 콜은 어떻게 구현?
* eax 레지스터에 시스템 콜 번호를 넣는다
* ebx 레지스터에는 시스템 콜에 해당하는 인자값을 넣는다
* 소프트웨어 인터럽트 명령을 호출하면서 0x80값을 넘겨준다
1. CPU는 사용자 모드를 커널 모드로 바꿔준다
2. IDT (Interrupt Descrpitor Table)에서 0x80에 해당하는 주소(함수)를 찾아서 실행한다
3. system_call() 함수에서 eax로부터 시스템 콜 번호를 찾아서, 해당 번호헤 맞는 시스템콜 함수로 이동한다
4. 해당 시스템콜 함수 실행 후, 다시 커널 모드에서 사용자 모드로 변경하고, 다시 해당 프로세스 다음 코드를 진행한다
mov eax, 1
mov ebx, 0
int 0x80 // 소프트웨어 인터럽트 명령
API
* 응용 프로그램과 분리된 하위 호환 인터페이스
- 예: 시스템 콜 래퍼, 입출력 라이브러리 등등
C 라이브러리
* 유닉스 C 라이브러리 - libc
* 리눅스 C 라이브러리 - GNU libc- glibc (지립씨, 글립씨)
- 시스템콜, 시스템콜 래버, 기본 응용 프로그램 기능 포함
C 컴파일러
* 유닉스 C 컴파일러 -cc
* 리눅스 C 컴파일러 - GNU cc- gcc(지씨씨)
* 우분투 리눅스에 gcc 설치
ABI
* 응용 프로그램 바이너리 인터페이스
* 함수 실행 방식, 레지스터 활용, 시스템 콜 실행, 라이브러리 링크 방식 등
* ABI가 호환되면 재컴파일 없이 동작
* 컴파일러, 링커 (라이브러리 링크), 툴체인 (컴파일러를 만드는 프로그램)에서 제공
POSIX
* 유닉스 시스템 프로그래밍 인터페이스 표준
* IEEE (Institute of Electronic and Electronics Engineers)에서 표준화 시도
* 리차드 스톨만 (자유 소프트웨어 재단)이 POSIX를 표준안 이름으로 제안
C 언어표준
* 다양한 C 언어 변종
* ANSI (American National Standards Institute)에서 ANSI C 표준 정립
* 리눅스는 POSIX와 ANSI C 지원
시스템 프로그래밍과 버전
* 끊임없는 POSIX, C, C++ 표준 업데이트
* 끊임없는 소프트웨어 업데이트
* 프로그래밍 트렌드와 상관없이 시스템 레벨단 기술은 유지되고, 필요하다.
* 상위 레벨 프로그래밍을 할지라도, 하위 시스템 레벨을 알고 있으면, 더 나은 또는 성능이 개선된 소프트웨어 개발 가능하다
출처 : 제로베이스
'공부 Note > 시스템 프로그래밍' 카테고리의 다른 글
Chapter 04 시스템 프로그래밍 (3) (0) | 2022.02.07 |
---|---|
Chapter 04 시스템 프로그래밍 (2) (0) | 2022.02.07 |
Chapter 03 쉘로 시작하는 시스템 프로그래밍 (5) (0) | 2022.02.07 |
Chapter 03 쉘로 시작하는 시스템 프로그래밍 (4) (0) | 2022.02.07 |
Chapter 03 쉘로 시작하는 시스템 프로그래밍 (3) (0) | 2022.02.07 |