시스템 프로그래밍

시스템 프로그래밍을 할 때는 반드시 프로그램이 동작할 하드웨어와 운영체제에 대해 정확히 알고 개발해야 한다.

시스템 프로그램은 주로 커널 및 시스템 라이브러리를 사용하고 애플리케이션 프로그램은 고급 라이브러리를 사용한다. 고급 라이브러리는 하드웨어와 운영체제에 대한 자세한 내용을 추상화하는데, 추상화는 서로 다른 시스템 간 이식을 가능하게 하거나 서로 다른 버전 간의 호환성을 제공하며 더 사용하기 쉽고 강력한 상위 레벨의 툴킷을 작성할 수 있게 해준다.

리눅스 시스템 프로그래밍은 시스템 콜, C 라이브러리, C 컴파일러를 주축으로 이뤄진다.

시스템 콜

시스템 콜이란

운영체제에 리소스나 서비스를 요청하려고 사용자 영역에서 시작해서 커널 내부로 들어가는 함수 호출

사용자 영역의 애플리케이션을 커널 영역으로 직접 연결하는 것은 불가능하다. 보안과 안정성의 이유로 애플리케이션은 커널 코드를 직접 실행하거나 커널 내부 데이터를 조작할 수 없다. 대신 애플리케이션은 시스템 콜을 실행한다는 '시그널'을 커널로 보낼 수 있다. 이러한 매커니즘을 통해서만 커널 내부로 진입하고 커널이 허용한 코드를 실행한다.

C 라이브러리

C 라이브러리(libc)는 유닉스 애플리케이션의 핵심이다.

다른 언어로 프로그래밍해도 상위 레벨의 라이브러리에 포함되어 핵심 서비스와 시스템 콜을 처리하기 위해 C 라이브러리가 동작한다.

Last updated