การเขียนโปรแกรมระบบคืออะไร?


26

ฉันไม่เคยเข้าใจว่าการเขียนโปรแกรมระบบหมายถึงอะไร คำจำกัดความตามปกติที่ได้รับคือ "... ทำบางสิ่งบางอย่างใกล้เคียงกับระบบปฏิบัติการหรือขยายคุณสมบัติระบบปฏิบัติการ ... "

การใช้ Windows API โดยตรงแทนที่จะใช้ไลบรารีบางอันเพื่อบอกว่าไฟล์ i / o ทำให้เป็นโปรแกรมระบบหรือไม่ เขียนโปรแกรมระบบ Android OS หรือไม่? ถ้าฉันเขียนสิ่งที่จะให้เคอร์เนล linux ผ่านคอนโซลเช่นแอพบน Android ฉันกำลังเขียนโปรแกรมระบบอยู่หรือไม่? หากฉันกำลังเขียนซอฟต์แวร์เพื่อควบคุมเครื่องซักผ้าฉันกำลังเขียนโปรแกรมระบบอยู่หรือไม่?

ฉันเป็นผู้เริ่มต้นในการเขียนโปรแกรมและนี่ทำให้ฉันสับสนไม่สิ้นสุด โปรดอธิบายการตัดกันด้วย "การเขียนโปรแกรมประยุกต์"


2
คำจำกัดความนี้มีการเปลี่ยนแปลงและโปรแกรมเมอร์ระบบเองก็ดูเหมือนจะไม่แน่ใจในคำจำกัดความที่เป็นเอกลักษณ์ในปัจจุบัน ปัญหานี้มักเกิดขึ้นเมื่อผู้คนถกเถียงกันว่าภาษา X สะดวกสำหรับการเขียนโปรแกรมระบบหรือไม่ ...
Denys Séguret

@Denys Séguret - แดกดันถ้าไม่มีใครสามารถเห็นด้วยกับสิ่งที่ "การเขียนโปรแกรมระบบ" คือการเริ่มต้นด้วย
John

คำตอบ:


19

ฉันชอบความหมายจาก Wikipedia :

การเขียนโปรแกรมระบบ (หรือการเขียนโปรแกรมระบบ) เป็นกิจกรรมของซอฟต์แวร์ระบบการเขียนโปรแกรม ลักษณะที่แตกต่างหลักของการเขียนโปรแกรมระบบเมื่อเทียบกับการเขียนโปรแกรมประยุกต์คือการเขียนโปรแกรมประยุกต์ที่มีวัตถุประสงค์เพื่อผลิตซอฟต์แวร์ที่ให้บริการแก่ผู้ใช้ (เช่นโปรแกรมประมวลผลคำ) ในขณะที่การเขียนโปรแกรมระบบมีวัตถุประสงค์เพื่อผลิตซอฟต์แวร์ที่ให้บริการกับฮาร์ดแวร์คอมพิวเตอร์ ) มันต้องการระดับการรับรู้ฮาร์ดแวร์ที่สูงขึ้น


12

มีคำถามหลายข้อที่คุณสามารถถามตัวเองเพื่อฝึกฝนเพื่อตัดสินใจคำถามนั้น

  • เดิมระบบขายโดยไม่มีโปรแกรมนี้หรือไม่? Angry Birds อาจเป็น "แอพนักฆ่า" สำหรับสมาร์ทโฟน (สาเหตุที่มีคนซื้อ) แต่ก็ยังคงเป็นแอปของบุคคลที่สามแยกต่างหากที่เขียนมานานหลังจากเปิดตัวโทรศัพท์ การเขียนมันน่าจะเป็นการเขียนโปรแกรมประยุกต์ แต่ไดรเวอร์การแสดงผลของโทรศัพท์สมาร์ทโฟนเครื่องเดียวกันนั้นมีความสำคัญต่อการใช้งานเลยดังนั้นจะต้องมีการเขียนโปรแกรมระบบ
  • คุณนึกภาพการย้ายรหัสไปยังแพลตฟอร์มอื่นโดยไม่ต้องเขียนใหม่ได้หรือไม่? TeX และtroffได้รับการเข้าสู่ระบบแทบทุกระบบที่มีการเปลี่ยนแปลงเล็กน้อยดังนั้นจึงเป็นแอพพลิเคชั่นแม้ว่าจะอยู่ด้านล่างสุดของห่วงโซ่เครื่องมือที่คนทั่วไปใช้ ระบบไฟล์ที่ TeX เขียนเอาต์พุตไปยังเช่น UFS หรือ VFAT เป็นกรณีเส้นขอบ คุณสามารถย้ายระบบไฟล์ไปยังระบบปฏิบัติการอื่นหากมันยอดเยี่ยมมาก แต่โดยปกติแล้วคนมักจะใช้ความคิดที่ยอดเยี่ยมและเขียนระบบไฟล์ของตัวเองสำหรับระบบปฏิบัติการของตัวเอง ที่ทำให้ซอฟต์แวร์ระบบไฟล์
  • มีการใช้งานฟังก์ชั่นในเคอร์เนลหรือในไบนารีแยกกันหรือไม่? (ระบบไฟล์ใช้พื้นที่ตรงกลางที่นี่เช่นกันหลาย ๆ ส่วนของระบบไฟล์ส่วนใหญ่เป็นรหัสเคอร์เนล แต่ส่วนมากมีส่วนสำคัญในพื้นที่ผู้ใช้) กราฟิกไดรเวอร์จอแสดงผลในหลักการสามารถเป็นส่วนประกอบภายนอกที่เสียบได้ ในเคอร์เนลหรืออย่างน้อยด้วยสิทธิ์การเข้าถึงโดยตรงไปยังเคอร์เนล (หรือแม้แต่กับฮาร์ดแวร์) นั่นจะเป็นการวางระบบ ในขณะที่เกมคอมพิวเตอร์ที่ใช้กราฟิกแสดงกองซ้อนเป็นโปรแกรม

สำหรับคำถามของคุณการเขียนระบบปฏิบัติการ Android เป็นการเขียนโปรแกรมระบบอย่างแน่นอน การเขียนโปรแกรมที่ใช้การเรียก Windows API เป็นการเขียนโปรแกรมประยุกต์ มันไม่สามารถพกพาได้ราวกับว่าคุณใช้ไลบรารีข้ามแพลตฟอร์มเช่น SDL หรือ OpenGL แต่โดยหลักการแล้วมันสามารถพอร์ตได้โดยที่เป็นรหัสของบุคคลที่สามและทำงานในพื้นที่ผู้ใช้ แอปคอนโซลที่เปิดเผยสถานะของเคอร์เนล Linux คือการทดสอบความคิดที่น่าสนใจ แน่นอนฉันจะบอกว่ามันเกี่ยวข้องกับการเขียนโปรแกรมระบบเนื่องจากคุณต้องรู้มากเกี่ยวกับโครงสร้างของ Linux (โปรดทราบว่า "Linux" เป็นเพียงเคอร์เนลเท่านั้นไม่ใช่การกระจาย) เพื่อเขียนและอาจใช้งานได้!


4

กล่าวโดยย่อ: การเขียนซอฟต์แวร์ที่ขยายหรือปรับปรุงการทำงานของระบบปฏิบัติการเช่นไดรเวอร์อัปเดตยูทิลิตี้ของระบบเป็น OS'es หรือแม้แต่ระบบปฏิบัติการใหม่เอี่ยม

ส่วนใหญ่เกี่ยวข้องกับการจัดการหน่วยความจำ การดำเนินการ I / O ในความหมายที่กว้างที่สุดของคำเช่นเครือข่ายการเข้าถึงไฟล์และการจัดการอุปกรณ์ การจัดการกระบวนการ (มัลติทาสกิ้ง, การบริหารกระบวนการ ฯลฯ ); ผู้ใช้ <-> วิธีการโต้ตอบของระบบ (ทั้งในและนอก) และการจัดการผู้ใช้ โดยทั่วไปทุกอย่างที่เป็นส่วนหนึ่งของระบบปฏิบัติการที่ไม่ใช่แอปพลิเคชันคือการเขียนโปรแกรมระบบ


3

การใช้ Windows API โดยตรงเป็นหนึ่งในวิธีการทั่วไปในการเขียนแอปพลิเคชันสำหรับ Windows ดังนั้นไม่ใช่นั่นไม่ใช่การเขียนโปรแกรมระบบ

การเขียนโปรแกรมระบบไม่ใช่แค่ "ใกล้เคียงกับระบบปฏิบัติการ" - เป็นสิ่งที่จำเป็นสำหรับการทำงานหลักของระบบคอมพิวเตอร์ ดังนั้นการเขียนระบบปฏิบัติการจึงเป็นการเขียนโปรแกรมระบบ การเขียนไดรเวอร์วิดีโอไดรเวอร์ระบบไฟล์ไดรเวอร์เครือข่ายสำหรับ OS นั้นคือการเขียนโปรแกรมระบบ การเขียนคอมไพเลอร์สำหรับชุดภาษา / ชิปเซ็ตโดยเฉพาะคือการเขียนโปรแกรมระบบ


1

โดยปกติจะหมายถึง "สิ่งที่อยู่ในระดับต่ำซึ่งผู้ใช้ที่ไม่ใช่ด้านเทคนิคไม่รู้ว่ามีอยู่จริงหรือไม่ทราบอย่างชัดเจนว่าพวกเขากำลังใช้งานหรือสิ่งที่พวกเขาทำ"

ตัวอย่างบางส่วนที่มักถูกพิจารณาว่าเป็นการเขียนโปรแกรมระบบ:

  • ระบบปฏิบัติการและไดรเวอร์
  • คอมไพเลอร์
  • การจำลองและการจำลองเสมือน
  • การสร้างการกระจายคือการสร้างภาพ userland

    โดยปกติจะเกี่ยวข้องกับการเลือกไลบรารีมาตรฐาน C ระบบเริ่มต้นและส่วนประกอบ userland พื้นฐานเช่นเชลล์

ระบบการโปรแกรมมักจะทำในที่ต่ำกว่าระดับภาษาเรียบเรียงโดยไม่ต้องเก็บขยะอัตโนมัติเช่น C หรือประกอบและมีแนวโน้มที่จะเข้าถึงน้อยกว่าระบบทั่วไปเรียกมักจะผ่านอินเตอร์เฟซ POSIX C

ฉันยังคงรักษามือในการกวดวิชาที่ครอบคลุมหัวข้อการเขียนโปรแกรมระบบหลายที่นี่


0

เมื่อกำหนดสิ่งนี้ฉันจะคัดท้ายชัดเจนจากรายละเอียดทางเทคนิคใด ๆ ทั้งสิ้น จากนั้นจะกลายเป็นเรื่องง่าย

แอปพลิเคชั่นอนุญาตให้ผู้ใช้ทำบางสิ่งที่มีประโยชน์กับเทคโนโลยีบางอย่าง ดังนั้นการเขียนโปรแกรมของแอปพลิเคชั่นจึงมีเป้าหมายเพื่อมอบฟีเจอร์ให้กับผู้ใช้โดยตรง

การเขียนโปรแกรมระบบในทางกลับกันจะวางรากฐานเพื่อให้การเขียนโปรแกรมประยุกต์เป็นไปได้ มันมอบคุณสมบัติให้กับโปรแกรมเมอร์แอพพลิเคชั่นมากกว่าให้กับผู้ใช้

คำจำกัดความนี้จะเก็บไว้ แต่มันเป็นเรื่องของมุมมองและบริบทและบทบาท สำหรับโปรแกรมเมอร์คอมพิวเตอร์เครื่องมือการเขียนโปรแกรมเป็นแอพพลิเคชั่น สำหรับผู้ใช้พวกเขาไม่มีความหมายเพียงแค่ออกจากรูปภาพ


-3

กล่าวโดยย่อการเขียนโปรแกรมระบบเมื่อเปรียบเทียบกับการเขียนโปรแกรมแอปพลิเคชันคือ SP จัดการซอฟต์แวร์ระบบปฏิบัติการเพื่อทำงานกับทรัพยากรฮาร์ดแวร์และ AP จัดการกิจกรรมผู้ใช้ปลายทาง


4
นี้ไม่ได้ดูเหมือนจะนำเสนออะไรที่สำคัญกว่าจุดทำและอธิบายในก่อน 4 คำตอบ
ริ้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.