Chính xác thì lập trình hệ thống là gì?


26

Tôi chưa bao giờ hiểu lập trình hệ thống có nghĩa là gì. Định nghĩa thông thường được đưa ra là "... làm điều gì đó gần với các tính năng Os hoặc mở rộng Os ...".

Việc sử dụng Windows API trực tiếp chứ không phải một số thư viện để nói rằng tập tin i / o có làm cho nó lập trình hệ thống không? Đã viết lập trình hệ điều hành Android? Nếu tôi viết một cái gì đó có thể lộ kernel linux thông qua một giao diện điều khiển như ứng dụng trên Android thì tôi có đang lập trình hệ thống không? Nếu tôi đang viết phần mềm để điều khiển máy giặt thì tôi có đang viết chương trình hệ thống không?

Tôi là người mới bắt đầu lập trình và điều này làm tôi bối rối không có hồi kết. Vui lòng giải thích tương phản với "lập trình ứng dụng".


2
Định nghĩa này đã thay đổi và bản thân các lập trình viên hệ thống dường như không chắc chắn về một định nghĩa duy nhất hiện nay. Vấn đề này thường xuất hiện khi mọi người tranh luận về việc liệu ngôn ngữ X có thuận tiện cho việc lập trình hệ thống không ...
Denys Séguret

@Denys Séguret - Trớ trêu thay nếu không ai có thể đồng ý về việc "lập trình hệ thống" là gì để bắt đầu.
John

Câu trả lời:


19

Cá nhân tôi thích định nghĩa từ Wikipedia :

Lập trình hệ thống (hay lập trình hệ thống) là hoạt động của phần mềm hệ thống lập trình. Đặc điểm phân biệt chính của lập trình hệ thống khi so sánh với lập trình ứng dụng là lập trình ứng dụng nhằm tạo ra phần mềm cung cấp dịch vụ cho người dùng (ví dụ: trình xử lý văn bản), trong khi lập trình hệ thống nhằm tạo ra phần mềm cung cấp dịch vụ cho phần cứng máy tính (ví dụ như trình chống phân mảnh đĩa ). Nó đòi hỏi một mức độ cao hơn về nhận thức phần cứng.


12

Có một số câu hỏi bạn có thể tự hỏi mình để có được thực hành trong việc quyết định câu hỏi đó.

  • Hệ thống ban đầu được bán mà không có chương trình này? Angry Birds có thể là "Ứng dụng sát thủ" cho điện thoại thông minh (lý do tại sao ai đó mua nó), nhưng nó vẫn là một ứng dụng bên thứ ba riêng biệt được viết rất lâu sau khi điện thoại được giới thiệu. Viết nó sẽ được lập trình ứng dụng. Nhưng trình điều khiển hiển thị của cùng một điện thoại thông minh là điều cần thiết để sử dụng nó, vì vậy nó sẽ là lập trình hệ thống.
  • Bạn có thể tưởng tượng việc chuyển mã sang nền tảng khác mà không cần viết lại phần lớn không? TeX và troffđã được chuyển đến hầu như bất kỳ hệ thống nào có ít thay đổi, vì vậy chúng là các ứng dụng, mặc dù chúng nằm ở phía dưới của chuỗi công cụ mà mọi người thường sử dụng. Hệ thống tệp mà TeX ghi đầu ra của nó, ví dụ UFS hoặc VFAT, là trường hợp đường biên. Bạn có thể chuyển một hệ thống tệp sang một HĐH khác nếu nó hoàn toàn tuyệt vời, nhưng thông thường mọi người chỉ tiếp nhận những ý tưởng tuyệt vời và viết hệ thống tệp của riêng họ cho HĐH của riêng họ. Điều đó làm cho phần mềm hệ thống tập tin hệ thống.
  • Là chức năng được thực hiện trong kernel hoặc trong các nhị phân riêng biệt? (Các hệ thống tệp cũng chiếm một vị trí trung gian ở đây. Nhiều phần của nhiều hệ thống tệp trên thực tế là mã hạt nhân, nhưng nhiều phần có phần đáng kể trong không gian người dùng.) Về nguyên tắc, trình điều khiển hiển thị đồ họa có thể cắm được các thành phần bên ngoài, nhưng chúng thường được triển khai trong kernel hoặc ít nhất là có quyền truy cập trực tiếp vào kernel (hoặc thậm chí vào phần cứng). Đó sẽ là hệ thống lập trình. Mặt khác, các trò chơi máy tính sử dụng ngăn xếp hiển thị đồ họa là các ứng dụng.

Đối với câu hỏi của bạn, viết HĐH Android chắc chắn là lập trình hệ thống. Viết chương trình sử dụng các lệnh gọi API của Windows là lập trình ứng dụng. Nó không dễ mang theo như nếu bạn sử dụng các thư viện đa nền tảng như SDL hoặc OpenGL, nhưng về nguyên tắc nó có thể được chuyển, đó là mã của bên thứ ba và nó chạy trong không gian người dùng. Một ứng dụng giao diện điều khiển phơi bày trạng thái của nhân Linux là một thử nghiệm suy nghĩ thú vị. Tôi chắc chắn sẽ nói rằng nó liên quan đến việc lập trình các hệ thống, vì bạn phải biết nhiều về cấu trúc của Linux (lưu ý rằng "Linux" chỉ đúng là kernel chứ không phải phân phối) để viết và thậm chí có thể sử dụng nó!


4

Tóm lại: Viết phần mềm mở rộng hoặc tăng cường chức năng của HĐH, như trình điều khiển, tiện ích hệ thống cập nhật lên HĐH hoặc thậm chí là các HĐH hoàn toàn mới.

Nó chủ yếu liên quan đến Quản lý bộ nhớ; Hoạt động I / O theo nghĩa rộng nhất của từ như kết nối mạng, truy cập tệp và quản lý thiết bị; quản lý quy trình (đa tác vụ, quản trị quy trình, v.v.); người dùng <-> phương thức tương tác hệ thống (cả trong và ngoài) và quản trị người dùng. Về cơ bản, mọi thứ là một phần của HĐH không phải là ứng dụng là lập trình hệ thống.


3

Sử dụng API Windows trực tiếp, tại một thời điểm, là cách phổ biến để viết các ứng dụng cho Windows. Vì vậy, không, đó không phải là lập trình hệ thống.

Lập trình hệ thống không chỉ là "gần với HĐH" - đó là điều cần thiết cho hoạt động cốt lõi của hệ thống máy tính. Vì vậy, viết một hệ điều hành là lập trình hệ thống. Viết trình điều khiển video, trình điều khiển hệ thống tập tin, trình điều khiển mạng cho HĐH đó là lập trình hệ thống. Viết một trình biên dịch cho một sự kết hợp cụ thể của ngôn ngữ / chipset là lập trình hệ thống.


1

Thông thường, nó đề cập đến "những thứ cấp thấp mà người dùng cuối không có kỹ thuật không biết tồn tại hoặc không biết rất rõ rằng họ đang sử dụng hoặc những gì họ làm".

Một số ví dụ thường được coi là lập trình hệ thống:

  • hệ điều hành và trình điều khiển
  • trình biên dịch
  • trình giả lập và ảo hóa
  • tạo phân phối, tức là tạo ra hình ảnh người dùng.

    Điều này đáng chú ý thông thường liên quan đến việc chọn thư viện chuẩn C, hệ thống init và các thành phần cơ bản của người dùng như vỏ.

Hệ thống lập trình thường được thực hiện bằng các ngôn ngữ cấp thấp hơn biên soạn mà không thu gom rác thải tự động như C hoặc lắp ráp, và có xu hướng truy cập ít hệ thống phổ biến gọi thường là thông qua giao diện POSIX C .

Tôi đang duy trì hướng dẫn bao gồm một số chủ đề lập trình hệ thống ở đây .


0

Khi xác định điều này, tôi sẽ tránh xa mọi chi tiết kỹ thuật. Sau đó, nó trở nên dễ dàng.

Một ứng dụng cho phép người dùng làm một cái gì đó hữu ích với một số công nghệ. Vì vậy, lập trình ứng dụng được nhắm mục tiêu cung cấp các tính năng cho người dùng, khá trực tiếp.

Mặt khác, lập trình hệ thống sẽ đặt nền tảng để có thể lập trình ứng dụng. Nó cung cấp các tính năng cho người lập trình ứng dụng chứ không phải cho người dùng.

Định nghĩa này sẽ đúng, nhưng đó là vấn đề về quan điểm và bối cảnh và vai trò. Đối với một lập trình viên máy tính, các công cụ lập trình là các ứng dụng. Đối với người dùng cuối, họ là vô nghĩa, chỉ cần ra khỏi hình ảnh.


-3

Nói tóm lại, Lập trình hệ thống khi so sánh với lập trình ứng dụng là SP xử lý phần mềm HĐH để làm việc với tài nguyên phần cứng và AP xử lý hoạt động của người dùng cuối.


4
điều này dường như không cung cấp bất cứ điều gì đáng kể qua các điểm được thực hiện và giải thích trong 4 câu trả lời trước
gnat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.