Có nghĩa là gì khi lập trình hệ thống


33

Tôi đang chuẩn bị cho một kỳ thực tập là lập trình viên trò chơi tại một công ty phát triển trò chơi nổi tiếng thế giới. Khi tôi tìm kiếm trang web của họ cho các điều kiện tiên quyết cần thiết, nó cho tôi thấy điều này:

Thêm lợi thế

  • Kiến thức về DirectX / OpenGL.
  • Lệnh mạnh về Toán và Vật lý 3D.
  • Visual Studio IDE để phát triển C ++.
  • Lập trình hệ thống và khái niệm hệ điều hành.

Chính xác thì chúng có ý nghĩa gì bởi các khái niệm lập trình hệ điều hành và hệ điều hành?

Tôi có nên học lập trình Windows không? Hoặc tôi nên đi với lập trình Linux (có nghĩa là họ muốn tôi biết các khái niệm quan trọng). Hay nó là một cái gì đó hoàn toàn khác nhau?


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Josh

"Tôi có nên học lập trình Windows không? Hay tôi nên học lập trình Linux" Cả hai nơi đều có thể. Ít nhất là đã đọc các API của họ, có thể thử thực hiện một cách đơn giản là 'mở một cửa sổ' với các API hệ điều hành tương ứng để bạn tìm hiểu sự khác biệt của chúng và nỗ lực của nó.
Pharap

@Pharap Về mặt kỹ thuật, không có "API hệ điều hành" Linux nào có thể mở cửa sổ và tốt hơn là sử dụng glut, glfw hoặc tương tự để mở cửa sổ để nó hoạt động với cả X và Wayland (và Windows và macOS).
Majora320

@ Majora320 Không, nhưng có một API shell xử lý nó và chúng có xu hướng đặc trưng cho các bản phân phối Linux (tức là X được sử dụng trên một số bản phân phối Linux, nhưng thường không có trên Windows và Mac). Bạn cũng có thể sử dụng glut / glfw / SDL / bất cứ điều gì, điểm quan trọng là sử dụng cách tiếp cận ở mức độ thấp để OP có thể sử dụng các triển khai để tìm hiểu về các khái niệm cơ bản (thông điệp sự kiện, vùng đất người dùng so với os-Land, v.v.). Các API di động / cấp cao hơn có xu hướng trừu tượng hóa rất nhiều thứ có thể cản trở quá trình học tập.
Pharap

@Dhannanjai Nếu tôi có thể quá táo bạo, tôi muốn giới thiệu một cuốn sách có tên Hệ điều hành DeMYSTiFieD . Nó giúp tôi rất nhiều trong những năm đại học của tôi trong đơn vị phần cứng. Nó giải thích nhiều khái niệm quan trọng của các hệ điều hành như POST, kỹ thuật lập lịch luồng (vòng tròn, hàng đợi, v.v.) và trình điều khiển.
Pharap

Câu trả lời:


54

"Lập trình hệ thống" (hay "lập trình hệ thống") có nghĩa là lập trình được thực hiện ở mức độ trừu tượng thấp hơn so với (ví dụ) lập trình trò chơi. Lập trình trò chơi thường là về việc xây dựng các cơ chế trò chơi thực tế và các tính năng trực diện mà người dùng có thể thấy, trong khi lập trình hệ thống là về việc xây dựng các khung mà các lập trình viên chơi trò chơi làm việc.

Điều này có thể có nghĩa là đồ họa, tải và phát tài nguyên, âm thanh, quản lý bộ nhớ, IO tệp, API trừu tượng nền tảng, et cetera. Các chi tiết khác nhau khá nhiều, và vì không có tiêu chuẩn nào cho các chức danh trong ngành công nghiệp trò chơi nên không có tiêu chuẩn nào cho tên của các lĩnh vực lập trình. Tại một studio, bạn có thể thấy rằng "lập trình hệ thống" có nghĩa là mọi thứ tôi liệt kê ở trên. Mặt khác, bạn có thể thấy rằng họ phân biệt "lập trình đồ họa" là một miền riêng biệt và gọi mọi tác vụ phi lập trình trò chơi khác là "lập trình hệ thống". Trong một trường hợp khác, họ có thể không sử dụng thuật ngữ này và chỉ gọi nó là "lập trình động cơ".

Vì đó là miền cấp thấp hơn và thường liên quan đến việc giao tiếp trực tiếp hơn với các API dành riêng cho nền tảng cho bất kỳ nền tảng nào mà trò chơi đang được xây dựng, nên có kiến ​​thức về các nền tảng đó sẽ hữu ích, cũng như có kiến ​​thức về miền chung hơn (ví dụ: , về các khái niệm hệ điều hành mà không liên quan đến cách thức hoạt động của hệ điều hành cụ thể, chẳng hạn như bộ nhớ ảo là gì hoặc cách hoạt động của các luồng, cách bộ đệm IO hoạt động, et cetera).


2
Tóm lại, tôi muốn nói rằng lập trình phi hệ thống (trò chơi thực tế) sẽ chủ yếu độc lập với nền tảng (không thực sự quan tâm nếu đó là Mac / PC / Xbox), trong khi lập trình hệ thống sẽ cụ thể hơn về nền tảng (theo thứ tự để cung cấp lớp độc lập nền tảng cho các lập trình viên không phải là hệ thống).
TripeHound

22

Câu trả lời của Josh thực sự rất hay nhưng tôi đoán rằng tôi đã ném xuống một số gạch đầu dòng về đội Hệ thống nơi tôi làm việc. Tôi không làm việc trên Hệ thống nhưng tôi làm việc với họ rất nhiều. Trách nhiệm của một nhóm Hệ thống thay đổi rất nhiều từ công ty này sang công ty khác.

Nhóm Hệ thống của chúng tôi phụ trách rất nhiều thứ:

  • Thư viện toán
  • Thư viện thay thế STD
  • Khung trò chơi cốt lõi
  • Khung ứng dụng cốt lõi
  • Đầu vào
  • Tin nhắn sự kiện
  • Hệ thống thành phần thực thể
  • Kịch bản ràng buộc
  • (và hơn thế nữa)

Có rất nhiều kiến ​​thức về miền Windows và Linux ở đây cũng như nhiều kiến ​​thức về Vật lý, logic trò chơi cốt lõi và quản lý bộ nhớ cấp thấp. Các nhóm hệ thống thường sẽ tham gia ít nhất một phần trong mỗi HĐH được hỗ trợ do hầu hết các dự án của họ nằm trên mỗi HĐH ở mức khá thấp.

Một số điều có thể thuộc nhóm "Hệ thống" mà chúng tôi chia thành các nhóm riêng biệt (nhưng nhóm Hệ thống của chúng tôi vẫn tương tác với nhau khá nhiều):

  • Vật lý
  • Linux (máy chủ chuyên dụng)
  • Hỗ trợ trực tiếp cho các HĐH khác (iOS / Mac / Bảng điều khiển / v.v.)
  • Xây dựng hệ thống
  • Âm thanh

0

Lập trình hệ thống được xác định rất rõ, nhưng các công ty cố gắng kéo dài nó theo nhu cầu của họ. Nếu bạn đang sử dụng hoặc viết các cuộc gọi hệ thống, bạn đang thực hiện lập trình hệ thống. Các cuộc gọi hệ thống là các chức năng được cung cấp bởi kernel hoặc trình điều khiển không gian người dùng. Điều này bao gồm OpenGL vì về cơ bản nó là một trình điều khiển.


Tôi không nghĩ các lập trình viên đồ họa (chuyên gia OpenGL) sẽ áp dụng cho công việc lập trình viên hệ thống ...
Vaillancourt

Lập trình đồ họa và lập trình OpenGL là hai điều khác nhau. Một giao dịch với các thuật toán đồ họa máy tính, các giao dịch khác liên quan đến các chi tiết của API.
Cem Kalyoncu

0

Các lợi thế được thêm vào được liệt kê ở trên hầu hết là dành cho lập trình công cụ trò chơi khi cần thiết, do đó liên quan đến việc sử dụng API cấp thấp. Lập trình hệ thống ở đây hy vọng bạn biết cách thực hiện cuộc gọi đến âm thanh hệ điều hành, quản lý quy trình, thao tác tệp, cuộc gọi mạng, v.v.


-6

Vì họ tham chiếu Visual Studio, lập trình hệ thống đề cập đến việc viết các chương trình dành riêng cho windows Hệ điều hành, nghĩa là: các tòa nhà cửa sổ (ví dụ: không có chuỗi fork-exec), tài khoản người dùng, nơi đưa dữ liệu cụ thể của người dùng, mô hình chia sẻ dữ liệu của bạn vào cửa sổ Nhìn lên, ví dụ như cách bạn có thể kiểm tra người dùng hiện tại trong visual c ++ Hoặc cách bắt đầu một quy trình mới

Các khái niệm hệ điều hành, tham khảo lịch trình, trừu tượng tập tin, chủ đề, không gian người dùng, v.v. os dev wiki và diễn đàn có thể là một đọc tốt

Xác thực người dùng là ví dụ trong cả hai phần, vì windows là một hệ điều hành người dùng duy nhất, có tích hợp nhân sâu hơn nhiều về quản lý người dùng và giao diện người dùng.

Msd là cơ sở tri thức cho tất cả những thứ lập trình cửa sổ apis, thư viện, v.v https://msdn.microsoft.com/

Stackoverflow cho mã hóa thực tế nếu bạn bị mắc kẹt.


Windows không phải là một hệ điều hành người dùng.
Maximus Minimus

Và lập trình hệ thống không có nghĩa là viết chương trình cụ thể cho một HĐH nhất định. Trình điều khiển ví dụ có thể dễ dàng đa nền tảng. Do các tòa nhà thực tế của Windows khác với phát hành đến phát hành nên nó thường được xử lý thông qua kernel32.dll và user32.dll thay vì nói chuyện trực tiếp với kernel.
Maciej Piechotka

@MaciejPiechotka Systemsprogramming đang lập trình ở mức gần hệ điều hành // phần cứng. Một phần của trình điều khiển là nền tảng chéo là api, không phải là trình bao bọc tòa nhà. Trong Linux, các tòa nhà chọc trời cũng được bọc trong các thư viện, nếu không bạn không thể thay đổi việc triển khai bên dưới. Ví dụ, việc lấy temp cpu thông qua các thanh ghi rất khác nhau giữa các lần.
Git

@ LeComteduMerde-fou nếu bạn chỉ nhìn vào cách xử lý của người dùng. -> Khóa bảo mật (ctrl + alt + xóa), GUI, v.v. Unix // BSD xử lý người dùng hoàn toàn khác nhau
Git

@gismo Tôi viết trình điều khiển để sống - có nhiều hơn nữa cho trình điều khiển không phải là phần dành riêng cho hệ điều hành sau đó API;) Quan điểm của tôi về các tòa nhà chọc trời là riêng biệt về trình điều khiển. Tất nhiên trong Linux bạn có thư viện nhưng quan điểm của tôi là Linux có ABI cho các tòa nhà cao tầng - tức là các tòa nhà, ít nhất là về mặt lý thuyết, ổn định và được ghi lại (và được mô hình hóa chặt chẽ sau POSIX). Đối với Windows, không gian người dùng <-> giao diện kernel không được coi là ổn định trên các bản phát hành.
Maciej Piechotka
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.