ทำไมไม่มีระบบปฏิบัติการภาษาระดับสูง? ภาษาระดับต่ำมีประสิทธิภาพมากขึ้นหรือไม่


44

โดยไม่ต้องเกรงใจฉันอยากให้คุณพิจารณาความเป็นไปได้ของสิ่งนี้ ระบบปฏิบัติการส่วนใหญ่ในปัจจุบันนี้ใช้ภาษาระดับต่ำ (ส่วนใหญ่ C / C ++) แม้แต่ภาษาใหม่เช่น Android ใช้ JNI และการใช้งานพื้นฐานอยู่ใน C

ในความเป็นจริง (นี่เป็นการสังเกตการณ์ส่วนตัว) หลายโปรแกรมที่เขียนใน C ทำงานเร็วกว่าโปรแกรมระดับสูง (เช่น: การส่ง (ไคลเอนต์ bittorrent บน Ubuntu) เป็นจำนวนมากเร็วกว่า Vuze (Java) หรือ Deluge (Python) ) แม้แต่คอมไพเลอร์ไพ ธ อนก็เขียนด้วยภาษา C ถึงแม้ว่า PyPy จะเป็นข้อยกเว้น

ดังนั้นมีเหตุผลพิเศษสำหรับเรื่องนี้หรือไม่? ทำไมมันจึงเรียกว่า "ภาษาระดับสูง" ของเราที่มีแนวคิด "OOP" ที่ยอดเยี่ยมไม่สามารถใช้ในการสร้างระบบปฏิบัติการที่มั่นคง?

ดังนั้นฉันมี 2 คำถามโดยทั่วไป

  1. เหตุใดแอปพลิเคชันที่เขียนด้วยภาษาระดับต่ำจึงมีประสิทธิภาพมากกว่า HLL ที่เป็นคู่กัน ภาษาระดับต่ำมีประสิทธิภาพดีกว่าด้วยเหตุผลง่าย ๆ ว่าภาษาระดับต่ำและแปลเป็นรหัสเครื่องจักรง่ายขึ้นหรือไม่
  2. ทำไมเราไม่มีระบบปฏิบัติการที่สมบูรณ์แบบที่ใช้ภาษาระดับสูงทั้งหมด?

36
คุณหมายความว่ามีเพียง "ภาษาระดับสูง" เท่านั้นที่เป็นวัตถุซึ่งไม่เป็นความจริง
Uooo

2
@rtindru "ภาษาระดับต่ำที่น่ารัก" (ส่วนใหญ่ C / C ++)? คำจำกัดความของภาษาระดับสูงของคุณคืออะไร? คุณต้องมีความชัดเจนเกี่ยวกับคำจำกัดความ / การตีความภาษาระดับสูงของคุณ Python เป็นภาษาสคริปต์ที่ได้รับการดำเนินการโดยตรงบนเอ็นจิน (IDLE หรือเทอร์มินัลบรรทัดคำสั่ง) โดยตรงหากคุณไม่เข้าใจในตอนนี้ มีเหตุผลที่ดีมาก (ปรัชญาและการปฏิบัติ) ทำไม C / C ++ ถูกใช้เป็นภาษาสำหรับการใช้งานระบบปฏิบัติการจำนวนมาก แต่ฉันแน่ใจว่าผู้ใช้ระดับสูงที่นี่อาจจะไม่ได้กระโดดลงไปที่คำถามนี้
hagubear

10
Android ไม่ใช่ระบบปฏิบัติการใหม่ มันเป็นอีกหนึ่งรสชาติของ Linux
Den

3
@hagubear มีเหตุผลที่ดีมากคือ (ปรัชญาและการปฏิบัติ) ทำไม C / C ++ จะถูกใช้เป็นภาษาการดำเนินงานสำหรับจำนวนของระบบปฏิบัติการ นี่คือเหตุผลที่ดีมากคืออะไร?
rtindru

2
ถ้าฉันเข้าใจถูกต้องระบบปฏิบัติการสำหรับ LISP จะเขียนด้วย LISP แม้ว่ามันอาจจะเป็นที่ถกเถียงกันอยู่ว่าภาษาที่ใช้เป็นภาษาระดับต่ำ?
Robert Fisher

คำตอบ:


38

Microsoft ได้ทำการวิจัยที่น่าสนใจมากในทิศทางนี้หากคุณพิจารณาภาวะเอกฐาน:

http://research.microsoft.com/en-us/projects/singularity/

นอกจากนี้ Mothy Roscoe et al ยังทำงานกับ Barrelfish ซึ่งใช้ภาษาการเขียนโปรแกรมข้อ จำกัด Eclipse เป็นบริการ OS เพื่อแยกแยะปัญหาการจัดการ OS และปัญหาการจัดสรรทรัพยากรทุกประเภท:

http://www.barrelfish.org/


ว้าวฉันลงคะแนนไม่ได้ต้องการ 15 reps ... เพิ่งเข้าร่วมวันนี้! ขอบคุณมาก.
rtindru

9
@rtindru: แม้จะมี 1 จุดตัวแทนคุณสามารถยอมรับคำตอบมันหมายความว่าอย่างไรเมื่อคำตอบคือ "ยอมรับ"?
Marjan Venema

6
การยอมรับคำตอบมีแนวโน้มที่จะลดคำตอบ / การสนทนาใหม่ โดยส่วนตัวแล้วฉันขอแนะนำไม่ให้ยอมรับ (สำหรับคำถามเฉพาะนี้) เป็นเวลาอย่างน้อยอีกวันหนึ่ง
Brian

1
ฉันจะเพิ่มคอสโมสลงในพวง: โอเพ่นซอร์ส, บุคคลที่สาม, ไม่น่าสนใจเท่ากับความแปลกประหลาด แต่มีความคิดดีๆ! cosmos.codeplex.com
Lorenzo Dematté

38

มากขึ้นอยู่กับที่คุณวางการแบ่งระหว่างภาษาระดับต่ำและระดับสูง ตัวอย่างเช่นคนที่แตกต่างกันมักจะใส่ภาษาเช่น C ++ ลงไปในด้านที่แตกต่างกันของการแบ่งนั้น

เกี่ยวกับคำถามของคุณ:

  1. ฉันไม่เชื่อว่ามีความแตกต่างระหว่างภาษาระดับต่ำและระดับสูง แต่มีความแตกต่างระหว่างภาษาที่ตีความและภาษาที่รวบรวมคำสั่งดั้งเดิม

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

  2. หากคุณคิดว่า C ++ เป็นระดับสูงแสดงว่ามีระบบปฏิบัติการอย่างน้อยหนึ่งระบบที่เขียนด้วยภาษาระดับสูงทั้งหมด (Symbian OS เขียนด้วยภาษา C ++) สิ่งที่ทำให้คุณไม่สามารถเขียนระบบปฏิบัติการในภาษาระดับสูงส่วนใหญ่มีสองสิ่ง:

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

35
ไม่มีสิ่งใดในภาษาที่ตีความหรือภาษาที่รวบรวมคำสั่งดั้งเดิม ภาษาเป็นชุดของกฎทางคณิตศาสตร์ก็จะไม่ตีความมิได้รวบรวมมันก็คือ interp และคอมพ์ เป็นลักษณะของ, ดี, ล่ามหรือคอมไพเลอร์, ไม่ใช่ภาษา ทุกภาษาสามารถใช้งานได้โดยใช้คอมไพเลอร์หรือล่าม ภาษาส่วนใหญ่ในปัจจุบันมีการตีความและรวบรวมการใช้งาน มีล่ามสำหรับ C และการใช้งาน JavaScript ที่สำคัญทั้งหมดรวบรวมเป็นรหัสพื้นเมือง แล้วรหัสพื้นเมืองคืออะไรล่ะ? ถ้าฉันรวบรวม Java เป็น JVM bytecode แล้วรัน
Jörg W Mittag

11
ใน Java CPU และฉันรวบรวมรหัสเครื่อง C ถึง ARM และเรียกใช้บนล่าม ARM เพราะพีซีของฉันไม่มี ARM CPU แล้วอะไรทำให้ ARM native และ JVML ไม่
Jörg W Mittag

5
@ JörgWMittag: หากคุณมี CPU ที่สามารถรัน Java bytecode โดยตรง (โดยไม่ต้องใช้ JVM เพิ่มเติม) แสดงว่า Java bytecode เป็นรหัสดั้งเดิมสำหรับ CPU นั้น นอกจากนี้ฉันไม่ได้แยกแยะความเป็นไปได้ในการเขียนระบบปฏิบัติการในภาษาที่ตีความหรือดำเนินการใน VM แต่มันทำให้มีตัวเลือกที่ชัดเจนน้อยลง
Bart van Ingen Schenau

15
@ JörgWMittag - ฉันยอมรับว่าภาษาใด ๆ ที่สามารถรวบรวมหรือตีความ (รวบรวมสคริปต์ทุบตีใช้ตีความ C ++ (CINT / Cling)) แต่การตัดสินใจจำนวนมากในการออกแบบภาษาจะขึ้นอยู่กับสิ่งนี้จะถูกตีความรวบรวมหรือทั้งสองอย่าง ภาษาที่ทำให้คุณประกาศ / เริ่มต้นตัวแปรแบบคงที่ด้วยตนเองจัดสรรด้วยตนเอง / หน่วยความจำด้วยตนเองทำเลขคณิตตัวชี้อย่าลืมตรวจสอบขอบเขตอาเรย์จะสะดวกน้อยลงในล่าม (เทียบกับภาษาที่เก็บขยะหน่วยความจำ ตรวจสอบขอบเขตของอาร์เรย์) เส้นนี้ชัดเจนหรือไม่ 100% ไม่ แต่มีความแตกต่างในทางปฏิบัติ
dr jimbob

15

มีหลายเหตุผลที่ดีสำหรับสิ่งนี้

ภาษาระดับต่ำของวันนี้เป็นภาษาระดับสูงของเมื่อวาน

ใช่เชื่อหรือไม่กาลครั้งหนึ่งแม้กระทั่ง C ถูกมองว่าเป็นภาษาระดับสูง แม้กระทั่งเมื่อ 20 ปีก่อนมันเป็นเรื่องธรรมดาพอที่จะเห็นมันอธิบายว่าเป็นภาษา "ระดับกลาง" นี่เป็นช่วงเวลาก่อนที่ OO จะได้รับความนิยมอย่างที่ทุกวันนี้ Java ไม่มีอยู่จริง C # ไม่มีอยู่แม้แต่ C ++ ก็ยังไม่ได้มาตรฐานอย่างถูกต้อง

ความเฉื่อยทางประวัติศาสตร์

ระบบปฏิบัติการที่คุณใช้ในปัจจุบันมีรากฐานที่ลึกล้ำในประวัติศาสตร์ Windows กลับไปที่ต้น / กลาง 80s, Unix กลับไปที่ต้น / กลางยุค 70 มีโค้ดเก่าจำนวนมากที่ใช้งานได้ในระบบปฏิบัติการและโดยทั่วไปคุณไม่ต้องการเขียนโค้ดเก่าที่ใช้งานได้

ในบางจุดคุณต้องลงไปที่ฮาร์ดแวร์

สิ่งนี้เกิดขึ้นในเคอร์เนลมันเกิดขึ้นในไดรเวอร์มันเกิดขึ้นในระบบย่อยการจัดการหน่วยความจำมันเกิดขึ้นในระบบไฟล์ แน่นอนว่าคุณสามารถเลเยอร์ภาษาระดับสูงไว้ด้านบนของภาษานั้นได้ แต่คุณยังต้องการความสามารถในการเข้าถึงฮาร์ดแวร์โดยตรงที่ภาษาระดับต่ำกว่ามีให้

ความเบา

ฉันไม่ได้หมายถึงการพกพาไปยังฮาร์ดแวร์ที่แตกต่างกันหรือระบบปฏิบัติการที่แตกต่างกันเพราะมันเป็นที่เข้าใจกันมากกว่าทุกวันนี้ นี่เป็นสิ่งที่ลึกซึ้งยิ่งขึ้น มีข้อได้เปรียบที่สำคัญอย่างหนึ่งในการจัดหาส่วนต่อประสานกับ C สำหรับบางสิ่งและนั่นคือความจริงที่ว่าภาษาอื่น ๆ ที่มีอยู่สามารถเชื่อมโยงกับ C ได้แม้แต่ Windows API ก็ยังคงเป็น C-based API ในทุกวันนี้

ความชอบส่วนบุคคล

บางคนชอบที่จะเขียนโปรแกรมด้วยวิธีนี้และนั่นอาจเป็นปัจจัยสำคัญ ตัวอย่างเช่น Linus Torvalds มีคำโหยหาที่โด่งดังกับ C ++ซึ่งทำให้ชัดเจนว่าตราบใดที่เขาเป็นห่วง C จะเป็นเครื่องมือที่เขาเลือกสำหรับงานประเภทนี้ (เนื้อหาของการคุยโวและไม่ว่าคุณจะเห็นด้วยหรือไม่ก็ตาม ไม่เกี่ยวข้องกับการสนทนานี้ความจริงที่ว่ามีการคุยโวก็เพียงพอแล้ว)

เมื่อนำมารวมกันสิ่งเหล่านี้ควรสร้างความชัดเจนว่าเหตุใดระบบปฏิบัติการถูกเขียนขึ้นในตอนแรกเช่น C ในสมัยก่อนและทำไมชิ้นส่วนสำคัญของมันถึงแม้ทุกวันนี้ก็ยังคงเป็นเช่นนั้น


13

เหตุผลหลักสำหรับการครอบงำของ C สำหรับระบบปฏิบัติการอยู่ในประวัติศาสตร์ - ระบบปฏิบัติการกระแสหลักในปัจจุบันเช่น Windows และ Unix ทุกรูปแบบ (BSD, Solaris, HP-UX, MacOS X, ... และโคลนเช่น Linux) กลับไป เป็นเวลานานก่อนที่ OO และสิ่งก่อสร้าง "ระดับสูง" อื่น ๆ จะกลายเป็นกระแสหลัก

สำหรับแกนหลักของระบบปฏิบัติการนอกเหนือจากประสิทธิภาพการทำงานนั้นจำเป็นที่จะต้องเฉพาะเจาะจงเกี่ยวกับคำแนะนำฮาร์ดแวร์และต้องการการควบคุมหน่วยความจำอย่างเต็มรูปแบบซึ่งภาษาเช่น C ทำได้ดีมาก

สำหรับระบบฝังตัวบางครั้งมีระบบปฏิบัติการที่ใช้ภาษาระดับสูงกว่าสำหรับส่วนต่าง ๆ ของระบบ ตัวอย่างหนึ่งที่น่าสังเกตคือJavaOSโดย Sun

สำหรับระบบปฏิบัติการที่แพร่หลายตัวอย่างที่เด่นชัดที่ไม่ได้ใช้ C ก็คือ MacOS แบบคลาสสิกก่อน MacOS X - ซึ่งส่วนใหญ่เขียนด้วยภาษา Pascalซึ่งอนุญาตให้วางแนววัตถุบางรูปแบบ


12

ก่อนอื่นมีปัญหาบูตสแตรปอยู่ คุณสมบัติส่วนใหญ่ที่ทำให้ภาษาระดับสูงง่ายขึ้นนั้นขึ้นอยู่กับนามธรรมที่เคอร์เนลต้องจัดเตรียมเอง คุณเขียนตัวจัดการหน่วยความจำในภาษาที่ต้องใช้ตัวจัดการหน่วยความจำได้อย่างไร คุณจะเขียนไดร์เวอร์ I / O โดยไม่ใช้ไลบรารี่มาตรฐานภาษา I ของคุณได้อย่างไร? คุณจะสร้างเธรดพื้นฐานและการซิงโครไนซ์ได้อย่างไรโดยไม่ต้องใช้ไลบรารีของภาษา

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

กล่าวอีกนัยหนึ่งเมื่อคุณคำนึงถึงข้อ จำกัด และการดัดแปลงทั้งหมดที่คุณต้องยอมรับ C และ C ++ เริ่มมองหาง่ายขึ้นมาก


2
ย่อหน้าแรกของคุณไม่สมเหตุสมผล ไดรเวอร์ I / O ใน C ไม่ได้ใช้งานstdio.hเช่นกัน การใช้งาน mutex แบบกำหนดเองไม่ได้ใช้ pthreads นั่นคือความหมายของการใช้งานมันเองอย่างแม่นยำ! และนั่นเป็นอิสระจากภาษาที่คุณใช้ ไม่ได้หมายความว่าภาษาระดับสูงเป็นตัวเลือกที่ดีสำหรับงานระดับต่ำ (โดยปกติแล้วจะไม่ได้อยู่ในประสบการณ์ของฉัน)

ฉันรู้เรื่องนั้น ฉันแค่ชี้ให้เห็นว่าสิ่งที่แตกต่างระดับสูงจากภาษาระดับต่ำอยู่ในส่วนของภาษาที่ไม่สามารถใช้งานได้ในการพัฒนาเคอร์เนล เมื่อคุณเปรียบเทียบภาษาหลักกับหลัก C จะไม่ดูสปาร์ตันอีกต่อไป
Karl Bielefeldt

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

นั่นเป็นจุดที่ดี
Karl Bielefeldt

6

ก่อนอื่น bootstrapping ต้องการอย่างน้อยส่วนเล็ก ๆ ที่จะเขียนในการประกอบหรือเทียบเท่า

ประการที่สองเป็นระบบปฏิบัติการที่เขียนใน HLL ยก - เสียงกระเพื่อมเครื่อง (ความจริงที่ว่ามันล้มเหลวในเชิงพาณิชย์มีมากขึ้นจะทำอย่างไรกับฮาร์ดแวร์อื่น ๆ กลายเป็นราคาถูกกว่าเร็วกว่าและชัยชนะของแย่ลงดีกว่าข้อบกพร่องของปรัชญาหรือการออกแบบของมัน)

ประการที่สาม C ++ ค่อนข้างเชิงวัตถุและอยู่ในระดับสูงดังนั้นอย่างที่คนอื่น ๆ ชี้ให้เห็นSymbian OSเป็นอีกตัวอย่างหนึ่ง

สี่มีความต้องการน้อยสำหรับระบบปฏิบัติการใหม่ในเวลานี้ เรามีลินุกซ์และ bsd ไม่กี่รสชาติที่ทำงานบนฮาร์ดแวร์เกือบทุกชนิดและการสร้างระบบปฏิบัติการใหม่ล่าสุดนั้นค่อนข้างแพง


คุณพลาดเกมหลัก Burroughs B5000 ระบบปฏิบัติการของพวกเขาเขียนขึ้นใน Burroughs Extended ALGOL
John R. Strohm

1
there is little need for new OSes at this timeฉันยังไม่ได้ตัดสินใจด้วยตัวเองว่าเป็นจริงหรือไม่ .. ใช่ระบบปฏิบัติการสมัยใหม่ (modern windows (NT) / modern Unix) เป็นสิ่งที่เราต้องการฟังก์ชั่นและประสิทธิภาพการทำงานที่ชาญฉลาด แต่แทบจะไม่: พวกเขาเกิดในพื้นที่อื่นที่ "เน็ต" เป็น บริษัท / มหาวิทยาลัยและผู้ใช้ที่เชื่อถือได้และมัลติโปรเซสเซอร์เป็นโปรเซสเซอร์ 2/4 พวกเขาถูก "รบกวน" ในระดับหนึ่งโดยความเชื่อมั่นที่มากเกินไป (รูทคิทมัลแวร์ไวรัส .. ) ฉันเริ่มคิดว่ามีพื้นที่สำหรับระบบปฏิบัติการที่ทันสมัยปลอดภัยแยกได้ ... พร้อมการสนับสนุนการขนานที่ดีกว่า (ดีกว่าเธรด)
Lorenzo Dematté

เสียงกระเพื่อมอยู่ในระดับต่ำCARและCDRเป็นแมโครแอสเซมเบลอร์ IBM 704 ! แม้แต่C ก็แยกแอสเซมบลีอินไลน์แทนที่จะถือมันเป็นฟังก์ชั่นอื่น ๆ เมื่อพิจารณาจาก Lisp CARและCDRทำงานกับ x86, ARM และโฮสต์ของ ISAs มากกว่านั่นคือชุดประกอบแบบพกพาที่น่าประทับใจ (ข้อสังเกตด้านข้างสำหรับทุกคนที่ฉันอาจสับสน: ใช่เสียงกระเพื่อมเป็นภาษาระดับสูงCARและCDRการเป็นมาโครของแอสเซมเบลอร์เป็นเพียงรายละเอียดการใช้งานไม่ใช่คุณลักษณะสำคัญ;))
8bittree

4

เพื่อดีกว่าขั้นตอนที่ฉันเขียนไว้ก่อนหน้านี้

เครื่อง Burroughs 5xxx - 6xxx ไม่มีภาษาแอสเซมบลี ภาษาต่ำสุดที่มีคือส่วนขยายของ Algol Algol ถูกนำมาใช้ในฮาร์ดแวร์ ระบบปฏิบัติการและภาษาทั้งหมดเขียนเป็นภาษาอัลกอล มันมีประสิทธิภาพสูงกว่าเครื่องจักรของคู่แข่งทั้งหมดในเวลานั้น นอกจากนี้ยังต้องใช้รหัสน้อยลงซึ่งทำให้ง่ายต่อการบำรุงรักษา มันมีฮาร์ดแวร์สแต็คที่รองรับภาษาแบบเรียกซ้ำเช่น Algol

ระบบปฏิบัติการ Burroughs พัฒนาเป็นรุ่นที่เรียกว่า MCP ปัจจุบัน MCP ทำงานบนระบบ Unisys


3

ภาษาระดับสูงส่วนใหญ่ที่คุณพูดถึงมีคุณสมบัติที่ไม่เหมาะกับระบบปฏิบัติการ: การจัดการหน่วยความจำอัตโนมัติ คุณไม่สามารถพึ่งพาตัวเก็บรวบรวมขยะเมื่อเขียนระบบแบบเรียลไทม์ไม่ว่าจะเป็นระบบปฏิบัติการที่อ่อนนุ่มหรือยากที่สุด ในการอ้างอิง Tanenbaum [i]:

บางสิ่งที่ C ไม่มีในสายอักขระเธรดแพคเกจคลาสวัตถุชนิดความปลอดภัยและคอลเลกชันขยะ อันสุดท้ายคือตัวหยุดการแสดงสำหรับระบบปฏิบัติการ การจัดเก็บข้อมูลทั้งหมดใน C เป็นแบบคงที่หรือการจัดสรรอย่างชัดเจนและปล่อยออกมาโดยโปรแกรมเมอร์มักจะมีฟังก์ชั่นห้องสมุดmallocและฟรี มันเป็นคุณสมบัติหลัง - โปรแกรมเมอร์รวมการควบคุมหน่วยความจำ - พร้อมกับตัวชี้ที่ชัดเจนที่ทำให้ C น่าสนใจสำหรับการเขียนระบบปฏิบัติการ ระบบปฏิบัติการนั้นเป็นระบบเรียลไทม์ที่มีขอบเขตแม้กระทั่งวัตถุประสงค์ทั่วไป เมื่อการขัดจังหวะเกิดขึ้นระบบปฏิบัติการอาจมีเพียงไม่กี่ไมโครวินาทีในการดำเนินการบางอย่างหรือสูญเสียข้อมูลที่สำคัญ การมีการเก็บขยะเริ่มขึ้นในเวลาที่เหมาะสม

ตอนนี้คุณอาจยืนยันว่า C ++ เป็นตัวเลือกที่ดีเนื่องจากมีการจัดการหน่วยความจำด้วยตนเอง C ++ ได้ถูกใช้ไปแล้วในระบบปฏิบัติการบางระบบเช่น Symbian (ที่กล่าวถึงโดยBart ) และ BeOS แต่ IMHO C ยังคงเป็นภาษาที่เร็วที่สุดที่สามารถจัดวางในสถาปัตยกรรมจำนวนมากได้โดยไม่ต้องใช้ความพยายามมาก (ตรงกันข้ามกับการประกอบสถาปัตยกรรมเฉพาะ)

[i]: ระบบปฏิบัติการสมัยใหม่รุ่นที่ 3, หน้า 73


3
เครื่อง Symbolics มีการจัดการหน่วยความจำอัตโนมัติ สมอลล์ทอล์คทำอัลโต นั่นคือในยุค 80 ระบบชนิดเส้นตรงขจัดความจำเป็นสำหรับ GC อย่างสมบูรณ์ นี่เป็นปัญหาที่แก้ไขได้ถ้าเพียง แต่เราจำได้!
Frank Shearar

อาจเป็นไปได้สำหรับภาษาที่จะรวมการจัดการหน่วยความจำอัตโนมัติ แต่รวมถึงการอ้างอิงแบบ "ปักหมุดลึก" แบบพิเศษและอนุญาตให้วิธีการประกาศอย่างชัดเจนว่าพวกเขาจะไม่เข้าถึงการอ้างอิงที่ไม่ได้ปักหมุดหรือเรียกวิธีการใด ๆ จะไม่มีความจำเป็นสำหรับตัวรวบรวมขยะหยุดโลกเพื่อรบกวนการทำงานของรหัสในวิธีการที่จะไม่เข้าถึงวัตถุใด ๆ ที่อาจถูกแก้ไขโดย GC
supercat

2

ดังที่คนอื่น ๆ ได้ชี้ให้เห็นระบบปฏิบัติการหลายตัวถูกเขียนขึ้นในภาษาระดับสูง บางทีสิ่งที่คุณหมายถึงคือความสำเร็จตลาดมวลชนระบบปฏิบัติการทั่วไปที่เขียนไว้ในชุดประกอบ C และ C ++

ภาษาระดับสูงส่วนใหญ่มีคุณสมบัติที่เป็นประโยชน์มากมายซึ่งมีค่าใช้จ่ายด้านประสิทธิภาพที่เกี่ยวข้อง การจัดการหน่วยความจำอัตโนมัติเป็นตัวอย่างที่ชัดเจนการตรวจสอบขอบเขตของอาร์เรย์เป็นอีกเรื่องหนึ่ง หากคุณกำลังเขียนระบบปฏิบัติการทั่วไปคุณมีแนวโน้มที่จะพบกับสถานการณ์ที่การลงโทษประสิทธิภาพของคุณสมบัติที่เป็นประโยชน์เหล่านี้มากกว่าที่คุณยินดีจ่าย ณ จุดนั้นคุณต้องการปิดพวกเขา ภาษาเช่น Python, C #, และ Java แตกต่างกันไปตามคุณสมบัติที่คุณสามารถปิดได้ แต่ไม่มีภาษาใดที่สามารถใช้งานได้หลากหลายเช่น C หรือ C ++

ในแง่มุมนี้ C และ C ++ นั้นมีความสามารถหลากหลายเช่นเดียวกับการประกอบล้วนๆ หากคุณตัดสินใจว่าคุณต้องการตัวจัดการหน่วยความจำที่แตกต่างกันสิบตัวซึ่งครอบคลุมสถานการณ์การจัดสรรหน่วยความจำที่แตกต่างกันสิบสถานการณ์คุณสามารถนำไปใช้ทั้งหมดใน C และ C ++ และโหลดและยกเลิกการโหลดได้ตามที่เห็นสมควร เฮ้คุณไม่จำเป็นต้องเชื่อมโยงไปยังไลบรารีรันไทม์ C มาตรฐานหรือรหัสเริ่มต้นหากคุณไม่ต้องการ


0

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

มีระบบปฏิบัติการต่างๆที่เขียนในภาษาระดับสูงมีจุดประสงค์หลักของการวิจัยเช่นOberonและเป็นเอกเทศ

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