시스템 프로그래밍이란 무엇입니까?


26

시스템 프로그래밍의 의미를 이해하지 못했습니다. 주어진 일반적인 정의는 "... Os에 가까운 것을하거나 Os 기능을 확장하는 것"입니다.

일부 라이브러리 대신 Windows API를 직접 사용하여 파일 I / O가 시스템 프로그래밍을 수행합니까? Android OS 시스템 프로그래밍을 작성 했습니까? 안드로이드의 앱과 같은 콘솔을 통해 리눅스 커널을 노출시키는 것을 작성하면 시스템 프로그래밍을하고 있습니까? 세탁기를 제어하기 위해 소프트웨어를 작성하는 경우 시스템 프로그래밍을 작성하고 있습니까?

나는 프로그래밍 초보자이며 이것은 끝이 없다. "응용 프로그램 프로그래밍"과 대조하여 설명하십시오.


2
이 정의가 바뀌었고 시스템 프로그래머들도 오늘날 고유 한 정의를 확신하지 못하는 것 같습니다. 이 문제는 일반적으로 사람들이 언어 X가 시스템 프로그래밍에 편리한 지에 대해 토론 할 때 발생합니다 ...
Denys Séguret

@Denys Séguret-아무도 "시스템 프로그래밍"이 무엇인지에 동의 할 수 없다면 아이러니하다.
John

답변:


19

나는 개인적 으로 Wikipedia정의를 좋아합니다 .

시스템 프로그래밍 (또는 시스템 프로그래밍)은 프로그래밍 시스템 소프트웨어의 활동입니다. 응용 프로그램 프로그래밍과 비교할 때 시스템 프로그래밍의 주요 특징은 응용 프로그램 프로그래밍이 사용자에게 서비스를 제공하는 소프트웨어 (예 : 워드 프로세서)를 생산하는 반면 시스템 프로그래밍은 컴퓨터 하드웨어에 서비스를 제공하는 소프트웨어 (예 : 디스크 조각 모음)를 만드는 것입니다. ). 더 높은 수준의 하드웨어 인식이 필요합니다.


12

그 질문을 결정할 때 스스로 연습 할 수있는 몇 가지 질문이 있습니다.

  • 시스템이이 프로그램없이 원래 판매 되었습니까? Angry Birds는 스마트 폰의 "킬러 앱"일 수 있지만 (다른 사람이 구입 한 이유), 여전히 전화기가 소개 된 지 얼마 후에 작성된 별도의 타사 앱입니다. 응용 프로그램을 작성했을 것입니다. 그러나 동일한 스마트 폰의 디스플레이 드라이버는 그것을 사용하는 데 필수적이므로 시스템 프로그래밍 일 것입니다.
  • 코드를 크게 다시 작성하지 않고 다른 플랫폼으로 코드를 이식한다고 상상할 수 있습니까? TeX troff는 거의 변경없이 거의 모든 시스템에 이식되었으므로 사람들이 일반적으로 사용하는 툴 체인의 하단에 위치하더라도 응용 프로그램입니다. TeX가 출력을 기록하는 파일 시스템 (예 : UFS 또는 VFAT)은 경계선 사례입니다. 당신은 할 수 는 완전히 끝내 있다면 다른 OS에 대한 포트 파일 시스템을, 그러나 보통 사람들은 멋진 아이디어를 넘겨 받아 자신의 OS에 대한 자신의 파일 시스템을 작성합니다. 파일 시스템 시스템 소프트웨어를 만듭니다.
  • 기능이 커널 또는 별도의 바이너리로 구현됩니까? (파일 시스템은 여기에서도 중간 지점을 차지합니다. 많은 파일 시스템의 많은 부분이 실제로 커널 코드이지만 많은 부분이 사용자 공간에 상당한 부분을 가지고 있습니다.) 그래픽 디스플레이 드라이버는 원칙적으로 플러그 가능한 외부 구성 요소 일 수 있지만 종종 구현됩니다. 커널에서 또는 적어도 커널 (또는 하드웨어에 대한 특권 직접 액세스 권한) 그것은 시스템 프로그래밍 일 것입니다. 반면에 그래픽 디스플레이 스택을 사용하는 컴퓨터 게임은 응용 프로그램입니다.

귀하의 질문에, 안드로이드 OS를 작성하는 것은 확실히 시스템 프로그래밍이었습니다. Windows API 호출을 사용하는 프로그램 작성은 응용 프로그램 프로그래밍입니다. SDL 또는 OpenGL과 같은 크로스 플랫폼 라이브러리를 사용하는 것처럼 이식성이 떨어지지 만 원칙적으로 이식 될 수 있으며 타사 코드이며 사용자 공간에서 실행됩니다. 리눅스 커널의 상태를 공개하는 콘솔 앱은 흥미로운 생각 실험입니다. 필자는 리눅스의 구조 ( "리눅스"는 배포판이 아니라 커널 일 뿐이다)에 대해 많은 것을 알아야하고, 심지어 그것을 사용해야하기 때문에 시스템 프로그래밍이 필요하다.


4

간단히 말해서 : 드라이버, 시스템 유틸리티 업데이트와 같은 OS의 기능을 확장하거나 향상시키는 소프트웨어 작성은 OS 또는 심지어 새로운 OS로 작성됩니다.

대부분 메모리 관리와 관련이 있습니다. 네트워킹, 파일 액세스 및 장치 관리와 같은 가장 넓은 의미의 I / O 작업; 프로세스 관리 (멀티 태스킹, 프로세스 관리 등); 사용자 시스템 상호 작용 방법 (내부 및 외부) 및 사용자 관리. 기본적으로 응용 프로그램이 아닌 OS의 일부는 시스템 프로그래밍입니다.


3

한 시점에서 Windows API를 직접 사용하는 것이 Windows 용 응용 프로그램을 작성하는 일반적인 방법이었습니다. 따라서 시스템 프로그래밍이 아닙니다.

시스템 프로그래밍은 "OS에 가깝게"있는 것이 아니라 컴퓨터 시스템의 핵심 기능에 필수적인 것입니다. OS를 작성하는 것은 시스템 프로그래밍입니다. 해당 OS의 비디오 드라이버, 파일 시스템 드라이버, 네트워크 드라이버 작성은 시스템 프로그래밍입니다. 언어 / 칩셋의 특정 조합에 대한 컴파일러 작성은 시스템 프로그래밍입니다.


1

일반적으로 이는 "기술적이지 않은 최종 사용자가 존재하지 않거나 자신이 사용하고 있거나 무엇을하고 있는지 명확하게 알지 못하는 저수준 물건"을 말합니다.

종종 시스템 프로그래밍으로 간주되는 몇 가지 예 :

  • 운영 체제 및 드라이버
  • 컴파일러
  • 에뮬레이터 및 가상화
  • 배포 생성, 즉 사용자 랜드 이미지 생성.

    이것은 일반적으로 C 표준 라이브러리, init 시스템 및 쉘과 같은 기본 사용자 구성 요소를 선택하는 것과 관련이 있습니다.

시스템 프로그래밍은 종종 C 또는 어셈블리와 같은 자동 가비지 콜렉션없이 낮은 컴파일 레벨 언어로 수행되며 POSIX C 인터페이스를 통해 덜 일반적인 시스템 호출에 액세스하는 경향이 있습니다 .

여러 시스템 프로그래밍 주제를 다루는 튜토리얼을 계속 진행하고 있습니다 .


0

이것을 정의 할 때 나는 모든 기술적 세부 사항을 분명히 할 것입니다. 그러면 쉬워집니다.

응용 프로그램을 통해 사용자는 일부 기술로 유용한 작업을 수행 할 수 있습니다. 따라서 응용 프로그래밍은 사용자에게 기능을 제공하는 것을 목표로합니다.

반면에 시스템 프로그래밍은 애플리케이션 프로그래밍이 가능하도록 토대를 마련합니다. 사용자가 아닌 응용 프로그램 프로그래머에게 기능을 제공합니다.

이 정의는 유지되지만 관점과 맥락 및 역할의 문제입니다. 컴퓨터 프로그래머에게 프로그래밍 도구는 응용 프로그램입니다. 최종 사용자에게는 그림에서 알 수없는 의미가 있습니다.


-3

즉, 응용 프로그램 프로그래밍과 비교할 때 시스템 프로그래밍은 SP가 OS 소프트웨어를 처리하기 위해 OS 소프트웨어를 처리하고 AP는 최종 사용자 활동을 처리한다는 것입니다.


4
이것은 이전의 4 가지 답변에서 제시되고 설명 된 포인트를 넘어서는 실질적인 것을 제공하지 않는 것 같습니다
gnat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.