Apa yang dimaksud dengan "Pemrograman Sistem"?

33

Saya sedang mempersiapkan magang sebagai programmer game di sebuah perusahaan pengembangan game yang terkenal di dunia. Ketika saya mencari prasyarat yang diperlukan di situs web mereka, itu menunjukkan kepada saya ini:

Keuntungan tambahan

  • Pengetahuan tentang DirectX / OpenGL.
  • Perintah yang kuat pada Matematika dan Fisika 3D.
  • Visual Studio IDE untuk pengembangan C ++.
  • Pemrograman Sistem dan konsep OS.

Apa sebenarnya yang dimaksud dengan pemrograman sistem dan konsep OS?

Haruskah saya mempelajari pemrograman Windows? Atau haruskah saya menggunakan pemrograman Linux (artinya mereka ingin saya tahu konsep-konsep penting). Atau itu sesuatu yang sama sekali berbeda?

Dhannanjai
sumber
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Josh
"Haruskah saya mempelajari pemrograman Windows? Atau haruskah saya menggunakan pemrograman Linux" Keduanya memungkinkan. Setidaknya membaca API mereka, mungkin mencoba melakukan 'membuka jendela' sederhana dengan masing-masing OS OS sehingga Anda belajar betapa berbedanya mereka dan upaya apa yang bisa dilakukan.
Pharap
@Pharap Secara teknis, tidak ada "API OS" Linux yang dapat membuka jendela, dan lebih baik menggunakan glut, glfw, atau serupa untuk membuka jendela sehingga akan bekerja dengan X dan Wayland (dan Windows dan macOS).
Majora320
@ Majora320 Tidak, tetapi ada API shell yang menanganinya, dan mereka cenderung khusus untuk distro Linux (yaitu X digunakan pada beberapa distro Linux, tetapi biasanya tidak pada Windows dan Mac). Anda juga bisa menggunakan glut / glfw / SDL / apa pun, poin pentingnya adalah mengambil pendekatan tingkat rendah sehingga OP dapat menggunakan implementasi untuk mempelajari tentang konsep-konsep yang mendasarinya (pesan acara, pengguna-lahan vs os-lahan dll). API portabel / tingkat yang lebih tinggi cenderung mengabstraksi banyak hal yang mungkin menghambat proses pembelajaran.
Pharap
@Dhannanjai Jika saya berani, saya ingin merekomendasikan buku berjudul Operating Systems DeMYSTiFieD . Itu banyak membantu saya di tahun-tahun kuliah saya selama unit perangkat keras. Ini menjelaskan banyak konsep penting sistem operasi seperti POST, teknik penjadwalan ulir (round-robin, antrian yang dipesan, dll.) Dan driver.
Pharap

Jawaban:

54

"Pemrograman sistem" (atau "pemrograman sistem") cenderung berarti pemrograman yang dilakukan pada tingkat abstraksi yang lebih rendah daripada (misalnya) pemrograman gameplay. Pemrograman gameplay biasanya tentang membangun mekanisme permainan yang sebenarnya dan fitur-fitur yang menghadap ke depan yang mungkin dilihat oleh seorang pengguna, sedangkan pemrograman sistem lebih banyak tentang membangun kerangka kerja tempat programmer bekerja.

Ini mungkin berarti grafik, pemuatan dan streaming sumber daya, audio, manajemen memori, file IO, API abstraksi platform, dan lain-lain. Detailnya sedikit berbeda, dan karena tidak ada standar untuk jabatan di industri game, maka tidak ada standar untuk nama domain pemrograman. Di satu studio, Anda mungkin menemukan bahwa "pemrograman sistem" berarti semua yang saya sebutkan di atas. Di tempat lain, Anda mungkin menemukan bahwa mereka membedakan "pemrograman grafis" sebagai domain terpisah dan menyebut setiap tugas pemrograman non-gameplay "pemrograman sistem". Di lain, mereka mungkin tidak menggunakan istilah sama sekali dan hanya menyebutnya "pemrograman mesin."

Karena ini adalah domain tingkat lebih rendah, dan biasanya melibatkan antarmuka lebih langsung dengan API khusus platform untuk platform apa pun yang sedang dibuat untuk game, memiliki pengetahuan tentang platform tersebut akan sangat membantu, karena memiliki pengetahuan tentang domain yang lebih umum (misalnya , tentang konsep OS tanpa memperhatikan cara kerja OS tertentu, seperti apa memori virtual itu, atau bagaimana thread bekerja, bagaimana buffering IO bekerja, dan lain-lain).

Josh
sumber
2
Singkatnya, saya akan mengatakan pemrograman non-sistem (permainan sebenarnya) akan sebagian besar platform independen (tidak benar-benar peduli apakah itu Mac / PC / Xbox), sedangkan pemrograman sistem akan jauh lebih spesifik platform (dalam rangka untuk menyediakan lapisan platform-independen untuk programmer non-sistem).
TripeHound
22

Jawaban Josh benar-benar baik tetapi saya pikir saya akan melemparkan beberapa poin penting tentang tim Sistem tempat saya bekerja. Saya tidak bekerja pada Sistem tetapi saya sering bekerja dengan mereka. Tanggung jawab tim Sistem sangat bervariasi dari perusahaan ke perusahaan.

Tim Sistem kami bertanggung jawab atas banyak hal:

  • Perpustakaan Matematika
  • Perpustakaan Penggantian STD
  • Kerangka Game Inti
  • Kerangka Aplikasi Inti
  • Memasukkan
  • Olahpesan acara
  • Sistem Komponen-Entitas
  • Penjilidan naskah
  • (dan banyak lagi)

Ada banyak pengetahuan domain Windows dan Linux di sini serta banyak pengetahuan tentang Fisika, logika permainan inti dan manajemen memori tingkat rendah. Tim sistem biasanya akan terlibat setidaknya di beberapa bagian dalam setiap OS yang didukung karena sebagian besar proyek mereka berada di setiap OS pada level yang cukup rendah.

Beberapa hal yang mungkin termasuk dalam tim "Sistem" yang kami bagi menjadi beberapa tim yang terpisah (tetapi tim Sistem kami masih berinteraksi dengan cukup banyak):

  • Fisika
  • Linux (dedicated server)
  • Dukungan langsung untuk OS lain (iOS / Mac / Konsol / dll)
  • Membangun Sistem
  • Audio
Honeybunch
sumber
0

Pemrograman sistem sangat terdefinisi dengan baik, tetapi perusahaan berusaha mengembangkannya sesuai kebutuhan mereka. Jika Anda menggunakan atau menulis panggilan sistem, Anda sedang melakukan pemrograman sistem. Panggilan sistem adalah fungsi yang disediakan oleh kernel, atau driver userspace. Ini termasuk OpenGL karena pada dasarnya adalah driver.

Cem Kalyoncu
sumber
Saya tidak berpikir programmer grafis (ahli OpenGL) akan berlaku untuk pekerjaan programmer Sistem ...
Vaillancourt
Pemrograman grafik dan pemrograman OpenGL adalah dua hal yang berbeda. Satu berkaitan dengan algoritma grafik komputer, yang lainnya berkaitan dengan rincian API.
Cem Kalyoncu
0

Keuntungan tambahan yang tercantum di atas sebagian besar untuk pemrograman mesin permainan bila perlu, sehingga melibatkan penggunaan API tingkat rendah. Pemrograman sistem di sini mengharapkan Anda untuk mengetahui cara melakukan panggilan ke audio OS, manajemen proses, manipulasi file, panggilan jaringan, dan sebagainya ...

lebih banyak vitamin
sumber
-6

Karena mereka merujuk Visual Studio, pemrograman sistem mengacu pada penulisan program khusus untuk Sistem Operasi windows, yang berarti: windows syscalls (misalnya tidak ada rantai fork-exec), akun pengguna, tempat meletakkan data spesifik pengguna Anda, model berbagi data di windows Cari, misalnya bagaimana Anda dapat memeriksa pengguna saat ini dalam visual c ++ atau cara memulai proses baru

Konsep OS, merujuk pada penjadwalan, abstraksi file, utas, userspace dll. Os dev wiki dan forum dapat menjadi bacaan yang baik

Otentikasi pengguna misalnya di kedua bagian, karena windows adalah sistem operasi pengguna tunggal, yang memiliki integrasi kernel jauh lebih dalam dari manajemen pengguna dan antarmuka pengguna.

Msdn adalah basis pengetahuan untuk semua hal pemrograman windows, perpustakaan dll https://msdn.microsoft.com/

Stackoverflow untuk pengkodean aktual jika Anda macet.

Git
sumber
Windows bukan OS pengguna tunggal.
Maximus Minimus
Dan pemrograman sistem tidak berarti menulis program khusus untuk OS yang diberikan. Driver misalnya dapat dengan mudah lintas platform. Karena syscalls Windows sebenarnya berbeda dari rilis ke rilis sehingga biasanya ditangani melalui kernel32.dll dan user32.dll daripada berbicara langsung dengan kernel.
Maciej Piechotka
@MaciejPiechotka Systemsprogramming sedang memprogram pada level di dekat perangkat keras // sistem operasi. Bagian dari driver yang lintas platform adalah api, bukan pembungkus syscall. Di Linux, syscalls dibungkus juga di perpustakaan, jika tidak, Anda tidak dapat mengubah implementasi di bawahnya. Misalnya mendapatkan temp cpu melalui register sangat berbeda antara oses.
Git
@ LeComteduMerde-fou jika Anda hanya melihat bagaimana pengguna ditangani, itu adalah. -> Kunci Keamanan (ctrl + alt + delete), GUI, dll. Unix // BSD menangani pengguna yang sama sekali berbeda
Git
@ gismo Saya menulis driver untuk hidup - ada banyak lagi untuk driver yang bukan bagian OS-spesifik maka API;) Maksud saya tentang syscalls terpisah kemudian tentang driver. Tentu saja di Linux Anda memiliki perpustakaan tetapi poin saya adalah bahwa Linux memiliki ABI untuk syscalls - yaitu syscalls, setidaknya secara teori, stabil dan didokumentasikan (dan secara dekat dimodelkan setelah POSIX). Untuk Windows, antarmuka pengguna <-> kernel tidak dianggap stabil di seluruh rilis.
Maciej Piechotka