1. 시스템 프로그래밍 기반요소
- 리눅스의 시스템 프로그래밍은 크게 3가지를 기반으로 두고 있다.
▶ 시스템 콜(System call)
- 운영체제를 사용자 영역에서 제어하기 위한 명령어
- 사용자가 접근할 수 없는 커널영역을 시스템 콜을 이용해 조작할 수 있다.
- 리눅스의 시스템 콜은 C언어를 기반으로 한다.
▶ C 라이브러리
- 여러가지 기능을 묶어놓은 것을 라이브러리라고 한다.
- 시스템 콜도 라이브러리 형태로 제공된다.
- 라이브러리를 API라고 말하기도 한다.
▶ C 컴파일러
- 리눅스는 C언어로 구성되어 있다.
- C언어는 컴파일러를 필요로 하는 언어다.
- 그러므로 C 컴파일러는 필수다.
2. System call
a) 시스템 콜
- 운영체제 파트에서 깊이있게 배운 개념이므로 간략하게 알아보자.
- 운영체제의 리소스나 서비스 요청을 위해 사용자 영역에서 커널영역으로 들어가는 기능이자 함수다.
- 대표적으로 read(), wirte(), open(), close() 등이 있다.
b) 시스템콜의 구현
- EAX 레지스터에 시스템 콜 번호가 넘어간다.
- EBX 레지스터에서 시스템 콜 번호를 조회하여, 해당 시스템콜의 인자값(=param)을 넣는다.
- 해당 시스템 콜에 대한 인터럽트를 호출하면서 CPU에게 인터럽트 명령(0x80)을 넘긴다.
- 시스템콜 인터럽트가 발생하면 CPU는 사용자모드를 커널모드로 변경한다.
- CPU는 IDT(인터럽트 테이블)를 조회하여 0x80(시스템 콜)에 해당하는 함수(system_call())의 메모리 주소에 접근하여 실행한다.
- system_call() 함수가 실행되면 EAX로 부터 시스템 콜 번호를 찾고, 그에 해당하는 시스템 콜 함수를 실행한다.
- 시스템 콜의 수행이 완료되면 CPU는 다시 커널모드에서 사용자 모드로 변경한다.
- 다음 프로세스를 실행한다.
3. API (Application Programming Interface)
- 사용자가 어떤 기능을 사용하기 쉽도록 만들어놓은 인터페이스를 API라고 부른다.
- 대표적으로 사용자가 시스템 콜을 사용할 수 있는 이유가 시스템 콜 wrapper라고 부르는 API가 제공되기 때문이다.
- 이러한 API 또는 라이브러리는 2가지로 분류된다.
▶ 정적 라이브러리
- 실행파일 내부에 필요한 라이브러리의 기능이 소스코드로서 존재하는 것이다.
- 그러므로 외부에서 해당 기능의 사용여부를 통제할 수 없다.
- 실행파일이 실행되면, 반드시 해당 기능은 동작하게 된다는 특징이 있다.
▶ 동적 라이브러리
- 기본적으로 라이브러리는 미리 컴파일이 된 형태로, 바이너리 코드로 존재한다.
- 실행파일 내부에 어떤 라이브러리의 기능을 호출하는 코드가 있다고 할 때,
- 실행파일을 컴파일 하는 과정에서 해당 기능을 외부에 존재하는 라이브러리로부터 가져와 실행하는 방식을 동적 라이브러리라고 한다.
- 동적 라이브러리 방식은 실행파일과 라이브러리가 분리되어 있는 형태이기 때문에,
- 해당 라이브러리 기능의 사용 및 적용여부를 외부에서 통제할 수 있다는 장점이 있다.
'컴퓨터공학기초 개념 > 시스템 프로그래밍' 카테고리의 다른 글
17. 프로세스 - 프로세스 ID (0) | 2021.09.15 |
---|---|
16. 시스템 프로그래밍 - ABI와 표준 (0) | 2021.09.10 |
14. shell - 소프트링크와 특수파일 (0) | 2021.09.10 |
13. shell - 하드링크 (0) | 2021.09.10 |
12. shell - 리눅스 파일 시스템 탐색 (0) | 2021.09.10 |
댓글