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

15. 시스템 프로그래밍 핵심개념

by devraphy 2021. 9. 10.

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가지로 분류된다. 

 

▶ 정적 라이브러리

   - 실행파일 내부에 필요한 라이브러리의 기능이 소스코드로서 존재하는 것이다. 

   - 그러므로 외부에서 해당 기능의 사용여부를 통제할 수 없다. 

   - 실행파일이 실행되면, 반드시 해당 기능은 동작하게 된다는 특징이 있다. 

 

▶ 동적 라이브러리 

  - 기본적으로 라이브러리는 미리 컴파일이 된 형태로, 바이너리 코드로 존재한다. 

  - 실행파일 내부에 어떤 라이브러리의 기능을 호출하는 코드가 있다고 할 때, 

  - 실행파일을 컴파일 하는 과정에서 해당 기능을 외부에 존재하는 라이브러리로부터 가져와 실행하는 방식을 동적 라이브러리라고 한다. 

  - 동적 라이브러리 방식은 실행파일과 라이브러리가 분리되어 있는 형태이기 때문에,

  - 해당 라이브러리 기능의 사용 및 적용여부를 외부에서 통제할 수 있다는 장점이 있다. 

댓글