“Sistem Programlama” ile ne kastedilmektedir?


33

Dünyaca ünlü bir oyun geliştirme firmasında oyun programcısı olarak staj için hazırlık yapıyorum. Gerekli önkoşullar için web sitelerini aradığımda bana şunu gösterdi:

Avantaj Eklendi

  • DirectX / OpenGL bilgisi.
  • 3D Matematik ve Fizik üzerine güçlü komut.
  • C ++ geliştirme için Visual Studio IDE.
  • Sistem Programlama ve İşletim Sistemi kavramları.

Sistem programlama ve işletim sistemi kavramları ile tam olarak ne anlama geliyor?

Windows programlama çalışmalı mıyım? Yoksa Linux programlamaya mı gitmeliyim (yani önemli kavramları bilmemi istiyorlar). Yoksa tamamen farklı bir şey mi?


Yorumlar uzun tartışmalar için değildir; bu konuşma sohbete taşındı .
Josh

"Windows programlama çalışmalı mıyım, yoksa Linux programlamaya mı gitmeliyim?" Her ikisi de mümkün. En azından API'lerini okumuş olabilirsiniz, belki de ilgili işletim sistemi API'leri ile basit bir 'pencere aç' işlemini yapmaya çalışın, böylece ne kadar farklı olduklarını ve ne kadar çaba gösterebileceklerini öğrenebilirsiniz.
Pharap

@Pharap Teknik olarak, bir pencereyi açabilecek Linux "OS API" yoktur ve bir pencereyi açmak için glut, glfw veya benzeri kullanmak daha iyidir, böylece hem X hem de Wayland (ve Windows ve macOS) ile çalışır.
Majora320

@ Majora320 Hayır, ancak işleyen bir kabuk API'si var ve bunlar Linux dağıtımlarına özgü olma eğilimindedir (yani, X bazı Linux dağıtımlarında kullanılır, ancak tipik olarak Windows ve Mac'te değildir). Ayrıca glut / glfw / SDL / kullanabilirsiniz, önemli olan nokta düşük seviyeli bir yaklaşımı kullanmaktır; böylece OP, temel kavramları (olay mesajları, kullanıcı-arazi vs os-land vb.) Hakkında bilgi edinmek için uygulamaları kullanabilir. Taşınabilir / üst seviye API'ler, öğrenme sürecini engelleyebilecek birçok şeyi soyutlama eğilimindedir.
Pharap

@Dhannanjai Çok cesur olabilirsem, İşletim Sistemleri DeMYSTiFieD adlı bir kitap önermek isterim . Donanım yıllarında kolej yıllarımda bana çok yardımcı oldu. POST, iş parçacığı çizelgeleme teknikleri (yuvarlak-robin, sıralı kuyruklar vb.) Ve sürücüler gibi işletim sistemlerinin önemli kavramlarının çoğunu açıklar.
Pharap

Yanıtlar:


54

"Sistem programlama" (veya "sistem programlama"), oyun programlamasından (örneğin) daha düşük bir soyutlama düzeyinde yapılan programlama anlamına gelir. Oyun programlaması genellikle kullanıcının görebileceği gerçek oyun mekaniği ve öne bakan özellikler oluşturmakla ilgilidir, oysa sistem programlaması daha fazla oyun programcılarının çalıştığı çerçeveleri inşa etmekle ilgilidir.

Bu grafik, kaynak yükleme ve akış, ses, bellek yönetimi, dosya GÇ, platform soyutlama API'leri ve benzeri anlamına gelebilir. Detaylar oldukça değişkendir ve oyun endüstrisinde iş unvanları için standartlar olmadığı için benzer şekilde programlama alan adları için standartlar yoktur. Bir stüdyoda, "sistem programlamanın" yukarıda listelediğim her şey anlamına geldiğini görebilirsiniz. Bir başkasında, "grafik programlamayı" ayrı bir alan olarak ayırt ettiklerini ve diğer her türlü oyun programlama dışı görevi "sistem programlaması" olarak adlandırdıklarını öğrenebilirsiniz. Yine bir diğerinde, bu terimi hiç kullanmayabilirler ve sadece "motor programlaması" olarak adlandırırlar.

Alt seviye bir etki alanı olduğundan ve genellikle oyunun hangi platform için inşa edildiğine bakılmaksızın, platforma özgü API'lerle daha doğrudan etkileşime girmeyi içerdiğinden, bu platformlar hakkında bilgi sahibi olmak, daha genel bir alan bilgisine sahip olacağı gibi yardımcı olacaktır. hangi sanal belleğin ne olduğu gibi belirli bir işletim sisteminin nasıl çalıştığı veya iş parçacıklarının nasıl çalıştığı, IO arabelleğinin nasıl çalıştığı, vb.


2
Özetle, sistem dışı programlamanın (gerçek oyun) çoğunlukla platformdan bağımsız olacağını söyleyebilirim ( Mac / PC / Xbox ise gerçekten umursamıyorum), sistem programlama ise çok daha fazla platforma özgü olacaktır. sistem dışı programcılar için platformdan bağımsız bir katman sağlamak için).
TripeHound

22

Josh'un cevabı gerçekten iyi ama çalıştığım Sistemler ekibi hakkında bazı mermilerden atacağımı düşündüm. Sistemler üzerinde çalışmıyorum ama onlarla çok çalışıyorum. Bir Sistem ekibinin sorumlulukları şirketten şirkete çok değişir.

Sistem ekibimiz birçok şeyden sorumludur:

  • Matematik Kütüphanesi
  • STD Değiştirme Kütüphanesi
  • Çekirdek Oyun Çerçevesi
  • Çekirdek Uygulama Çerçevesi
  • Giriş
  • Etkinlik mesajı
  • Bileşen-Varlık sistemleri
  • Komut dosyası bağlama
  • (ve dahası)

Burada birçok Windows ve Linux etki alanı bilgisinin yanı sıra birçok Fizik bilgisi, çekirdek oyun mantığı ve düşük seviye bellek yönetimi var. Sistem ekipleri genellikle projelerin çoğunda oldukça düşük bir seviyede oturduğundan, desteklenen işletim sistemlerinde en azından bir kısım yer alacaktır.

Ayrı takımlara ayırdığımız bir "Sistemler" ekibine girebilecek bazı şeyler (ancak Sistemler ekibimiz hala oldukça yoğun bir şekilde etkileşime giriyor):

  • Fizik
  • Linux (özel sunucu)
  • Diğer işletim sistemlerine doğrudan destek (iOS / Mac / Konsollar / vb.)
  • Yapı Sistemleri
  • Ses

0

Sistem programlaması çok iyi tanımlanmıştır, ancak şirketler bunu gereksinimlerine göre genişletmeye çalışmaktadır. Sistem çağrıları kullanıyorsanız veya yazıyorsanız, sistem programlaması yapıyorsunuzdur. Sistem çağrıları, çekirdek veya kullanıcı alanı sürücüleri tarafından sağlanan işlevlerdir. Bu temelde bir sürücü olduğu için OpenGL'yi içerir.


Ben ... grafik programcıları (OpenGL uzmanlar) Sistem programcısı iş için de geçerli olacak sanmıyorum
Vaillancourt

Grafik programlama ve OpenGL programlama iki farklı şeydir. Biri bilgisayar grafik algoritmalarıyla, diğeri ise API'nın özellikleriyle ilgileniyor.
Cem Kalyoncu

0

Yukarıda listelenen ilave avantajlar çoğunlukla gerektiğinde oyun motoru programlaması içindir, bu nedenle düşük seviye API'leri kullanmayı içerir. Buradaki sistemler programlama, OS sesini, işlem yönetimini, dosya manipülasyonunu, ağ aramalarını vb. Nasıl yapacağınızı bilmenizi bekler.


-6

Visual Studio'ya başvurdukları için, sistem programlaması, özellikle Windows İşletim Sistemleri için programlar yazmayı ifade eder, yani: Windows sistem çağrıları (örneğin, çatal yürütme zinciri yoktur), kullanıcı hesapları, kullanıcıya özel verileri nereye koyacağınızı, veri paylaşım modellerini windows Bakın, örneğin mevcut kullanıcıyı görsel olarak nasıl kontrol edebilirsiniz c ++ veya nasıl yeni bir işlem başlatılır

İşletim sistemi kavramları, zamanlama, dosya soyutlama, konu başlıkları, kullanıcı alanı vb. Konularına bakın. Os dev wiki ve forumlar iyi bir okuma olabilir

Kullanıcı doğrulama, örneğin her iki bölümde de geçerlidir; çünkü pencereler, kullanıcı yönetimi ve kullanıcı arayüzü arasında daha derin bir çekirdek entegrasyonuna sahip olan tek bir kullanıcı işletim sistemidir.

Msdn, apis, kütüphaneler vb. Programlayan her şey için bilgi bankasıdır. Https://msdn.microsoft.com/

Sıkışmışsanız, gerçek kodlama için yığın akışı.


Windows tek bir kullanıcı işletim sistemi değil.
Maximus Minimus

Sistem programlama, belirli bir işletim sistemi için özel programlar yazmak anlamına gelmez. Örneğin sürücüler kolayca platformlar arası olabilir. Gerçek Windows sistemleri, sürümden sürüme farklılık gösterdiğinden, genellikle çekirdeğe doğrudan konuşmak yerine genellikle kernel32.dll ve user32.dll aracılığıyla işlenir.
Maciej Piechotka

@ MaciejPiechotka Systemsprogramming, donanım / işletim sisteminin yakınında bir seviyede programlama yapıyor. Çapraz platform olan bir sürücünün parçası, sistem çağrıcısı değil api'dir. Linux'ta, sistemler de kitaplıklara sarılır, aksi halde altındaki uygulamayı değiştiremezsiniz. Örneğin, kayıtlar üzerinden cpu sıcaklığını almak, hortumlar arasında çok farklıdır.
Git

@ LeComteduMerde-fou, yalnızca kullanıcıların nasıl kullanıldığına bakarsanız, öyledir. -> Güvenlik Anahtarları (ctrl + alt + delete), GUI vb. Unix // BSD kullanıcıları tamamen farklı tutar
Git

@ gismo Ben yaşam için sürücüleri yazıyorum - işletim sistemine özgü olmayan API'den sonra sürücüye çok daha fazlası var;) Sistem çağrılarına ilişkin noktam, sürücülerden ayrıydı. Tabii ki Linux'ta kütüphaneleriniz var ama benim açımdan Linux, sistem çağrıları için bir ABI'ye sahip - yani en azından teoride sistem çağrıları kararlı ve belgelenmiş (ve POSIX'den sonra yakından modellenmiş). Windows için kullanıcı alanı <-> çekirdek arayüzünün sürümler arasında kararlı olduğu düşünülmez.
Maciej Piechotka,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.