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

시스템 프로그래밍이 무엇을 의미하는지 전혀 이해하지 못했습니다. 주어진 일반적인 정의는 “… OS에 가깝게 무언가를하거나 Os 기능을 확장하는 것 …”입니다.

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

저는 프로그래밍 초보자인데 끝까지 혼란 스럽습니다. “애플리케이션 프로그래밍”과 대조되는 내용을 설명해주세요.

댓글

  • 이 정의는 변경되었으며 시스템 프로그래머는 스스로 변경합니다. ' 오늘날 고유 한 정의를 확신하지 못하는 것 같습니다. 이 문제는 보통 사람들이 X 언어가 시스템 프로그래밍에 편리한 지에 대해 토론 할 때 발생합니다 …
  • @Denys S é guret-아무도 동의 할 수 없다면 아이러니합니다. " 시스템 프로그래밍 "부터 시작해야합니다.
  • Perl Cookbook에서 인용-16 장. 프로세스 관리 및 통신 : "이 장에서는 명령을 실행하고 별도의 프로세스를 함께 연결하는 방법에 대해 설명합니다. 그것은 그들의 창조, 의사 소통 및 궁극적 인 죽음을 관리하는 것입니다. 시스템 프로그래밍에 관한 것입니다. "

답변

저는 개인적으로 Wikipedia의 정의 처럼 :

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

답변

질문을 결정하는 연습을 위해 스스로에게 물어볼 수있는 몇 가지 질문입니다.

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

귀하의 질문에 Android OS 작성은 확실히 시스템 프로그래밍이었습니다. Windows API 호출을 사용하는 프로그램을 작성하는 것은 애플리케이션 프로그래밍입니다. SDL 또는 OpenGL과 같은 크로스 플랫폼 라이브러리를 사용하는 것처럼 이식성이 좋지는 않지만 원칙적으로 포팅이 가능하고 타사 코드이며 사용자 공간에서 실행됩니다. Linux 커널의 상태를 노출하는 콘솔 앱은 흥미로운 사고 실험입니다. 나는 그것이 시스템 프로그래밍과 관련이 있다고 말할 것이다. 왜냐하면 당신은 “리눅스의 구조에 대해 많이 알아야만 할 것이기 때문이다 (“리눅스 “는 배포판이 아니라 커널 일 뿐이다). / p>

답변

요약 : 드라이버, OS에 대한 시스템 유틸리티 업데이트와 같이 OS의 기능을 확장하거나 향상시키는 소프트웨어 작성 ” es 또는 심지어 새로운 OS “.

대부분 메모리 관리와 관련이 있습니다. 네트워킹, 파일 액세스 및 장치 관리와 같은 가장 넓은 의미의 I / O 작업 프로세스 관리 (다중 작업, 프로세스 관리 등); 사용자 <-> 시스템 상호 작용 방법 (입 / 출력 모두) 및 사용자 관리. 기본적으로 애플리케이션이 아닌 OS의 일부인 모든 것은 시스템 프로그래밍입니다.

답변

Windows API 직접 사용 한때는 Windows 용 응용 프로그램을 작성하는 일반적인 방법이었습니다. 그렇기 때문에 시스템 프로그래밍이 아닙니다.

시스템 프로그래밍은 단순히 “OS에 가깝다”는 것이 아니라 필수적인 것입니다. 따라서 OS 작성은 시스템 프로그래밍입니다. 해당 OS에 대한 비디오 드라이버, 파일 시스템 드라이버, 네트워크 드라이버 작성은 시스템 프로그래밍입니다. 특정 언어 / 칩셋 조합에 대한 컴파일러 작성은 시스템 프로그래밍입니다.

답변

일반적으로 “비 기술적 최종 사용자가 존재하는지 또는 알지 못하는 저수준 항목”을 나타냅니다. 그들이 사용하고 있거나 무엇을하는지 매우 명확하게 보여줍니다. “

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

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

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

시스템 프로그래밍은 종종 C 또는 어셈블리와 같은 자동 가비지 수집없이 낮은 컴파일 수준의 언어로 수행되며 POSIX C 인터페이스 .

여기

에서 여러 시스템 프로그래밍 주제를 다루는 튜토리얼을 유지하고 있습니다. a>.

답변

이를 정의 할 때 모든 기술적 세부 사항을 완전히 배제합니다. 그러면 쉬워집니다.

응용 프로그램을 사용하면 사용자가 일부 기술로 유용한 작업을 수행 할 수 있습니다. 따라서 애플리케이션 프로그래밍은 사용자에게 기능을 직접적으로 제공하는 것을 목표로합니다.

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

이 정의는 유지되지만 관점과 컨텍스트 및 역할의 문제입니다. 컴퓨터 프로그래머에게 프로그래밍 도구는 응용 프로그램입니다. 최종 사용자에게 그것들은 의미가 없습니다.

답변

요컨대, 애플리케이션 프로그래밍은 SP가 하드웨어 리소스와 함께 작동하도록 OS 소프트웨어를 처리하고 AP가 최종 사용자 활동을 처리하는 것입니다.

댓글

  • 이렇게하지 않습니다. ' 이전 4 개의 답변에서 확인 및 설명 된 점수에 비해 실질적인 정보를 제공하지 않는 것 같습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다