시스템 프로그래밍의 목적은,
컴퓨터 소프트웨어를 만드는 것이다.
어떠한 서비스를 다른 소프트웨어에게 제공하는 것이다.
즉 정리하자면,
컴퓨터 시스템의 운영을 위한 응용 소프트웨어를 실행시키기 위한 플랫폼이다.
그러면 유닉스 시스템 프로그래밍은
유닉스에서 제공하는 시스템 호출을 이용해서 프로그램을 작성하는 것이다.
시스템 호출은 유닉스 시스템이 제공하는 서비스를 프로그램에서 이용할 수 있도록
지원하는 프로그래밍 인터페이스를 의미한다.
마찬가지로 시스템이 제공하는 서비스를 이라는 키워드 붙는다.
시스템 프로그래밍을 이해하려면
다음과 같은 시스템 소프트웨어, 시스템 호출과 같은 의미를 이해해야한다.
시스템이란 무엇인가?
시스템에는 가장 대표적으로 컴퓨터 시스템이 있다.
이외에도 조금 더 확장해서 어떠한 연산을 지원하는 장치도
시스템의 하나로 볼 수 있다. (CPU, GPU)
나아가서 자동차도 하나의 커다란 시스템이라고 이야기할 수 있다.
또한 우리 생활 속 깊숙히 있는 건조기, 세탁기 또한 시스템이라고 이야기할 수 있다.
그럼 시스템의 예로 든 공통점은 무엇일까?
다양한 공통점을 예로 들 수 있겠지만
시스템이란 관점에서 가지는 공통점은 다음과 같다.
어떠한 목적을 달성하기 위해서 필요한 것들을 모아 놓은 것이다.
어떠한 목적을 달성하기 위해서 필요한 것들을 모아서
이 목적에 해당하는 서비스를 제공하는 것을 시스템이라고 정의할 수 있다.
한 가지 목적을 달성하기 위해서 모아 놓은 것인데,
그 모아 놓은 것들을
하드웨어와 소프트웨어로 분류해서 생각할 수 있다.
이를 영어로 표현하면 다음과 같다.
What is system?
A set HW/SW resources combined for one purpose
한가지 목적을 달성하기 위해서 하드웨어와 소프트웨어를
이 목적에 해당하는 서비스를 제공하기 위해서 묶어 놓은 것
Systeam call & System SW
이 둘을 이해하려면
시스템을 구동하기 위해서 운영하는 OS가 어떻게 생겼는지 이해를 해야한다.
아마 운영체제를 공부했던 분들이라면 자주 접했던 그림일 것이다.
우리가 운영 체제라는 녀석은 하드웨어가 효율적으로 관리하기 위해서 사용하고,
그러한 관리를 통해 사용자가 원하는 서비스를 제공해주는 소프트웨어이다.
우리가 시스템을 가지고 있는 하드웨어 위에
그것을 제공하는 운영 체제가 있을 것이다.
비단 윈도우즈, 리눅스 뿐만 아니라 OS는 특정 하드웨어에 적합한
운영체제 들이 안에 들어갈 수 있다.
어떤 어플리케이션을 (사용자(유저)=어플리케이션)에서 접근하게 되면
이러한 운영체제를 통해서 사용하는 것이 일반적이다.
그래서 이러한 운영체제가 제공하는 기능을 사용하기 위해서
어떠한 통로인 인터페이스를 시스템 콜 인터페이스라 한다.
그래서 어플리케이션(또는 유저)들은 운영체제에게
시스템 콜을 통해서 요청을 한다.
그럼 운영체제는 하드웨어들을 사용해서 그에 해당되는 서비스를
어플리케이션(또는 유저) 에게 제공하는 것이다.
그럼 시스템 콜은 무엇인가?
운영체제에게 기능을 요청하는 것을 시스템 콜이라고 부른다.
그럼 다시 시스템 소프트웨어란?
그럼 다시 돌아와서
시스템 소프트웨어란 무엇인가를 정의해보면,
시스템 콜을 통해서 운영체제의 기능을 사용할 수 있다.
하지만 우리가 운영체제의 모든 기능을 다 알고 쉽게 사용하는 것은 쉽지 않다.
그렇다면 이런 운영체제를 잘 아는 사람이 운영체제를 쉽게 사용할 수 있도록
어떠한 소프트웨어를 만들어 주면 이러한 문제가 해소될 것이다.
그래서 우리가 원하는 기능만 모아서 소프트웨어를 만들어 주면
우리는 그 소프트웨어를 통해서 운영체제를 거쳐서 원하는 서비스를 받을 수 있을 것이다.
이러한 목적을 위해서 만들어진 게 시스템 소프트웨어 라는 것이다.
시스템 소프트웨어를 다시 정의해보면,
운영체제가 제공하는 기능 중에서
어플리케이션이 원하는 기능을 원활하게 사용할 수 있도록 중재해주는 녀석이다.
운영체제의 기능을 사용해서 서비스를 제공해주는 또 하나의 레이어 역할을 맡고있는 것이다.
이러한 시스템 콜과 시스템 소프트웨어가 어떠한 의미를 가지는 지 살펴보았다.
'컴퓨터 프로그래밍 공부 > 컴퓨터 구조 + 운영체제' 카테고리의 다른 글
Unix/Linux Architecture (0) | 2024.11.10 |
---|---|
시스템 프로그래밍 능력을 갖춰야 하는 이유 (0) | 2024.11.09 |
힙 메모리 영역 특징 (1) | 2024.09.29 |
에러 처리와 스레드의 상관 관계와 커널 개체 (0) | 2024.05.16 |
파일 시스템 (0) | 2024.04.21 |