คำถามติดแท็ก operating-systems

ระบบปฏิบัติการ (OS) เป็นซอฟต์แวร์พื้นฐานที่มีกฎคือข้อกำหนดซอฟต์แวร์ระดับกลางสำหรับทรัพยากรและฮาร์ดแวร์ที่มีอยู่จัดการอินพุต / เอาต์พุตการจัดสรรหน่วยความจำ / การจัดสรรคืนหน่วยความจำระบบไฟล์และงานพื้นฐานอื่น ๆ ที่อุปกรณ์ควรทำ

6
เราได้รับอานม้าด้วยระบบแฟ้ม (ลำดับชั้น) เป็นโครงสร้างข้อมูลพื้นฐานได้อย่างไร
ฉันเรียนด้วยตัวเองและฉันไม่มีวุฒิปริญญาตรี ยิ่งฉันได้เรียนรู้เกี่ยวกับโครงสร้างข้อมูลมากเท่าไหร่ฉันก็ยิ่งสงสัยว่าในยุคนี้เราจะยังคงผูกมัดกับระบบไฟล์ด้วยไดเรคทอรีและไฟล์เป็นโครงสร้างการจัดเก็บข้อมูลพื้นฐานบนระบบปฏิบัติการได้อย่างไร ฉันเข้าใจความเรียบง่ายของมัน แต่ดูเหมือนทุกวันนี้อาจมีตัวเลือกเพิ่มเติมให้ใช้ เท่าที่ฉันทราบโครงการเดียวที่จะปรับปรุงการทำงานพื้นฐานของระบบไฟล์คือ ReiserFS ซึ่งคุณสามารถบอกได้ว่าบรรทัดใดของไฟล์ที่ถูกเปลี่ยนแปลงโดยใครและเมื่อใด ตัวอย่างเช่นถ้าฉันสามารถมีการติดแท็กเนทีฟสำหรับไฟล์ซึ่งฉันสามารถแท็กรูปภาพไดอะแกรมเอกสารประมวลผลคำพื้นที่เก็บข้อมูลรหัสทั้งหมดทั้งหมดเป็นของโครงการเดียวซึ่งจะเป็นประโยชน์กับฉันจริงๆ เนื่องจากฉันติดอยู่ในกระบวนทัศน์ของระบบแฟ้มฉันรู้ว่าฉันสามารถใส่สิ่งเหล่านั้นลงในโฟลเดอร์ / ไดเรกทอรีเดียว แต่ถ้าพวกมันมีอยู่แล้วในไดเรกทอรีที่แตกต่างกันและพวกเขาจำเป็นต้องอยู่ที่นั่น? ฉันรู้ว่ามีโปรแกรมออกมีที่สามารถทำได้ แต่ทำไมพวกเขาไม่ได้อยู่ในระบบไฟล์? สิ่งที่น่ายินดีที่มีก็คือคุณลักษณะเชิงสัมพันธ์บางอย่างในระบบไฟล์เช่นคุณได้รับจาก RDBMS ฉันเข้าใจว่าควรจะเป็นส่วนหนึ่งของ Vista / 7 แต่นั่นก็ลดลงจากรายการคุณสมบัติเช่นกัน แน่นอนว่าโปรแกรมใด ๆ สามารถจัดเก็บไฟล์ไบนารีและมีโครงสร้างข้อมูลใด ๆ ที่มันต้องการเพราะเหตุใดระบบปฏิบัติการจึงไม่สามารถเสนอวิธีการที่ซับซ้อนกว่าในการจัดเก็บข้อมูลนอกเหนือจากการสืบทอดแบบง่าย ๆ ของระบบไฟล์?

7
เหตุใด SSL / TLS จึงไม่รวมอยู่ในระบบปฏิบัติการสมัยใหม่
โปรโตคอลเครือข่ายพื้นฐานจำนวนมากที่ประกอบขึ้นเป็นโครงสร้างพื้นฐานของอินเทอร์เน็ตถูกสร้างขึ้นในระบบปฏิบัติการส่วนใหญ่ ตัวอย่างเช่น TCP, UDP และ DNS ทั้งหมดมีอยู่ใน Linux, UNIX และ Windows และให้บริการแก่โปรแกรมเมอร์ผ่าน API ระบบระดับต่ำ แต่เมื่อพูดถึง SSL หรือ TLS เราต้องเปลี่ยนไปใช้ห้องสมุดบุคคลที่สามเช่น OpenSSL หรือ Mozilla NSS SSL เป็นโปรโตคอลที่ค่อนข้างเก่าและโดยทั่วไปจะเป็นมาตรฐานอุตสาหกรรมที่แพร่หลายเหมือนกับ TCP / IP ดังนั้นทำไมมันไม่สร้างในระบบปฏิบัติการส่วนใหญ่

3
มัลติทาสกิ้งทำงานอย่างไร
ฉัน clueless อย่างสมบูรณ์เกี่ยวกับการทำงานภายในของระบบปฏิบัติการ แต่ฉันสามารถเดาพฤติกรรมโดยประมาณของฟังก์ชั่นมากมาย สิ่งหนึ่งที่ฉันไม่สามารถคิดออกมาได้คือการทำงานหลายอย่างพร้อมกัน ในทางทฤษฎีระบบปฏิบัติการจัดการเวลาตาม CPU สำหรับช่วงเวลาเล็ก ๆ กับโปรแกรมต่างๆที่ทำงานอยู่ แต่มันยังไม่ชัดเจนว่ามันใช้งานได้จริงอย่างไร สมมติว่าระบบปฏิบัติการต้องการเริ่มโปรแกรมของฉัน รหัสเครื่องโหลดที่ใดที่หนึ่งใน RAM เริ่มต้นที่ที่อยู่ที่แน่นอน ฉันเดาว่าควรทำการข้ามไปยังที่อยู่นั้นเพื่อให้โค้ดของฉันดำเนินการได้ แต่ด้วยวิธีนี้ระบบปฏิบัติการไม่สามารถควบคุมได้จนกว่าฉันจะกระโดดกลับ โดยพื้นฐานแล้วฉันสามารถจินตนาการได้สองวิธีในการทำให้งานนี้ แต่ดูเหมือนจะไม่เหมาะสมจริงๆ: ระบบปฏิบัติการสามารถอ่านคำแนะนำเครื่องที่ฉันต้องการดำเนินการและเลียนแบบพวกเขาแทนการดำเนินการโดยตรง ฉันตั้งใจคลุมเครือเนื่องจากฉันไม่รู้ว่ามันจะทำงานอย่างไร แต่ดูเหมือนว่ามันจะทำให้โปรแกรมช้าลงอย่างมาก อีกทางหนึ่งระบบปฏิบัติการอาจรอจนกว่าฉันจะโทรออกระบบ ในช่วงเวลานั้นมันกลับมาควบคุมและสามารถตรวจสอบว่าฉันใช้งานมานานแค่ไหน สิ่งนี้อาจใช้งานได้ แต่ดูเหมือนไม่น่าเชื่อถือเนื่องจากฉันสามารถคำนวณระยะยาวซึ่งไม่เกี่ยวข้องกับการโทรของระบบและแขวนทุกอย่างในขณะที่ ดังนั้นดูเหมือนว่ากลไกทั้งสองจะทำงานได้ไม่ดีนัก มัลติทาสกิ้งมีประสิทธิภาพอย่างไร

8
คุณคิดว่าระบบปฏิบัติการที่จัดการเป็นความคิดที่ดีหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ระบบปฏิบัติการที่มีการจัดการเช่นMicrosoft SingularityและJNodeค่อนข้างเป็นแนวคิดที่น่าสนใจ โดยพื้นฐานแล้วระบบปฏิบัติการจะบู๊ตด้วยโค้ดที่เขียนด้วยภาษาระดับต่ำ (C / C ++ / Assembly) ซึ่งใช้เครื่องเสมือนเป็นหลัก ส่วนที่เหลือของ OS (และแอพผู้ใช้ทั้งหมด) ทำงานบนเครื่องเสมือน มีบางสิ่งที่ยอดเยี่ยมเกี่ยวกับเรื่องนี้ ตัวอย่างเช่นคุณทำตัวชี้โดยพลการล้าสมัย และถ้าเขียนได้ดีคุณก็จะกำจัดสิ่งที่เป็นมรดกตกทอดมากมายที่ระบบปฏิบัติการสมัยใหม่ส่วนใหญ่มีอยู่ในปัจจุบัน อย่างไรก็ตามในฐานะผู้เสียเปรียบคุณอยู่ห่างจากฮาร์ดแวร์มากและในฐานะนักพัฒนาคุณสูญเสียความสามารถในการเลื่อนลงไปสู่ระดับที่เป็นนามธรรมและทำให้มือสกปรก คุณมีความคิดเห็นอย่างไรกับเรื่องนี้?

2
คอนโทรลเลอร์ DMA ทำงานอย่างไร
จากหัวข้อ 5.1.4 การเข้าถึงหน่วยความจำโดยตรงในระบบปฏิบัติการสมัยใหม่โดย Andrew S. Tanenbaum, Herbert Bos, 2014 , เพื่อให้คำอธิบายง่ายขึ้นเราสันนิษฐานว่า CPU เข้าถึงอุปกรณ์และหน่วยความจำทั้งหมดผ่านบัสระบบเดียวที่เชื่อมต่อ CPU หน่วยความจำและอุปกรณ์ I / O ดังแสดงในรูปที่ 5-4 เพื่ออธิบายวิธีการทำงานของ DMA ให้เราพิจารณาก่อนว่าการอ่านดิสก์เกิดขึ้นอย่างไรเมื่อไม่ได้ใช้ DMA ก่อนอื่นตัวควบคุมดิสก์จะอ่านบล็อก (หนึ่งส่วนขึ้นไป) จากไดรฟ์แบบอนุกรมทีละบิตจนกระทั่งบล็อกทั้งหมดอยู่ในบัฟเฟอร์ภายในของคอนโทรลเลอร์ จากนั้นคำนวณการตรวจสอบเพื่อตรวจสอบว่าไม่มีข้อผิดพลาดในการอ่านเกิดขึ้น จากนั้นคอนโทรลเลอร์จะทำให้เกิดการขัดจังหวะ เมื่อระบบปฏิบัติการเริ่มทำงานมันสามารถอ่านบล็อกดิสก์จากบัฟเฟอร์ของคอนโทรลเลอร์เป็นไบต์หรือคำในแต่ละครั้งโดยเรียกใช้ลูปโดยการวนซ้ำแต่ละครั้งจะอ่านหนึ่งไบต์หรือหนึ่งคำจากอุปกรณ์ควบคุมรีจิสเตอร์และเก็บไว้ในหน่วยความจำหลัก ถาม: ในขั้นตอนที่สอง ไม่ถ่ายโอนข้อมูล " จากบัฟเฟอร์ของคอนโทรลเลอร์ " ไปยังหน่วยความจำหลัก? ทำไมถึงพูดว่า " จากบัฟเฟอร์ของคอนโทรลเลอร์ " และ " จากอุปกรณ์ควบคุมรีจิสเตอร์ "? ในขั้นตอนที่สองคอนโทรลเลอร์สามารถถ่ายโอนข้อมูลจากบัฟเฟอร์ไปยังหน่วยความจำหลักโดยไม่รบกวนการทำงานของ cpu และไม่เกี่ยวข้องกับระบบปฏิบัติการอีกครั้ง? เมื่อใช้ DMA …

4
แนวปฏิบัติที่ดีที่สุดสำหรับโปรแกรมทดสอบที่มีพฤติกรรมสุ่มคืออะไร
เมื่อทำงานวิจัยและพัฒนาฉันมักพบว่าตัวเองกำลังเขียนโปรแกรมที่มีการสุ่มในระดับสูงในพฤติกรรมของพวกเขา ตัวอย่างเช่นเมื่อฉันทำงานในการเขียนโปรแกรมทางพันธุกรรมฉันมักจะเขียนโปรแกรมที่สร้างและรันซอร์สโค้ดแบบสุ่มโดยพลการ ปัญหาเกี่ยวกับการทดสอบรหัสดังกล่าวคือข้อผิดพลาดมักจะเป็นระยะ ๆ และอาจเป็นเรื่องยากที่จะทำซ้ำ สิ่งนี้นอกเหนือไปจากการตั้งค่าเมล็ดพันธุ์แบบสุ่มเป็นค่าเดียวกันและเริ่มต้นการดำเนินการ ตัวอย่างเช่นโค้ดอาจอ่านข้อความจาก kernal ring buffer จากนั้นทำการข้ามแบบมีเงื่อนไขกับเนื้อหาข้อความ ตามปกติสถานะของบัฟเฟอร์บัฟเฟอร์จะเปลี่ยนไปเมื่อพยายามทำซ้ำอีกครั้งในภายหลัง แม้ว่าพฤติกรรมนี้เป็นคุณสมบัติที่สามารถเรียกใช้รหัสอื่นในวิธีที่ไม่คาดคิดและมักจะพบข้อบกพร่องที่หน่วยทดสอบ (หรือผู้ทดสอบมนุษย์) ไม่พบ มีการกำหนดแนวปฏิบัติที่ดีที่สุดสำหรับระบบทดสอบประเภทนี้หรือไม่? ถ้าเป็นเช่นนั้นการอ้างอิงบางอย่างจะมีประโยชน์มาก ถ้าไม่คำแนะนำอื่น ๆ ยินดีต้อนรับ!

8
การคำนวณแบบกระจายคืออะไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา อะไรคือการคำนวณแบบกระจายและอะไรคือความแตกต่างจากการคำนวณแบบขนาน / แบบพร้อมกัน? การใช้ mutexes และ semaphores ในหลายเธรดแบบขนานพยายามซิงโครไนซ์สำหรับการเข้าถึงทรัพยากรเป็นปัญหาในโดเมนของการคำนวณแบบกระจายหรือไม่?

9
Ubuntu สามารถใช้งานได้กับแล็ปท็อปสำหรับที่ปรึกษาด้านไอทีหรือไม่
ฉันทำงานเป็นโปรแกรมเมอร์ที่ปรึกษาซึ่งโดยปกติจะเป็นธุรกิจขนาดใหญ่ ฉันใช้แล็ปท็อป Windows และเพื่อนร่วมงานหลายคนใช้ Mac ความชอบส่วนตัวของฉันคือการใช้ Ubuntu ถ้าฉันสามารถควบคุมสภาพแวดล้อมการพัฒนาของฉันได้อย่างสมบูรณ์ แต่ฉันจะต้องการผลิตภัณฑ์เฉพาะของ Microsoft เป็นครั้งคราวโดยเฉพาะ IE เพื่อนร่วมงานของฉันที่ใช้ Mac มักใช้ Windows บนเครื่องเสมือนสำหรับสถานการณ์เหล่านี้ คำถามของฉันคือ Ubuntu เป็นวิธีแก้ปัญหาที่สามารถใช้งานได้กับแล็ปท็อปของโปรแกรมเมอร์ระดับองค์กรหรือไม่ ตัวอย่างเช่นมันใช้งาน Windows บน VM บน Ubuntu ได้ง่ายเหมือนบน Mac หรือไม่? มีใครลองทำไหม? มีเหตุผลใดที่ทำให้ Ubuntu ไม่รองรับ Mac ในการพัฒนาในสภาพแวดล้อมนี้หรือไม่? โปรดทราบว่าฉันไม่ได้พัฒนา. NET ดังนั้นฉันมักจะจัดการกับ Java ที่กำลังจะทำงานบนเซิร์ฟเวอร์ Apache และลูกค้าที่ใช้ Windows ใช้

8
สตริง C ถูกยกเลิกเป็นโมฆะเสมอหรือขึ้นอยู่กับแพลตฟอร์มหรือไม่
ตอนนี้ฉันกำลังทำงานกับระบบฝังตัวและหาวิธีที่จะใช้สตริงในไมโครโปรเซสเซอร์ที่ไม่มีระบบปฏิบัติการ จนถึงตอนนี้สิ่งที่ฉันทำคือการใช้ความคิดของการมีตัวชี้ NULL สิ้นสุดตัวอักษรและปฏิบัติต่อพวกเขาเป็นสตริงที่ NULL หมายถึงจุดสิ้นสุด ฉันรู้ว่านี่เป็นเรื่องธรรมดา แต่คุณสามารถเสมอนับเกี่ยวกับเรื่องนี้จะเป็นกรณีที่? เหตุผลที่ฉันถามคือฉันกำลังคิดว่าอาจจะใช้ระบบปฏิบัติการแบบเรียลไทม์ในบางจุดและฉันต้องการใช้รหัสปัจจุบันของฉันให้มากที่สุด ดังนั้นสำหรับตัวเลือกต่าง ๆ ที่อยู่ข้างนอกฉันจะคาดหวังได้ไหมว่าสตริงจะทำงานเหมือนกันหรือไม่? ให้ฉันเจาะจงมากขึ้นสำหรับกรณีของฉัน ฉันกำลังใช้ระบบที่ใช้และประมวลผลคำสั่งผ่านพอร์ตอนุกรม ฉันสามารถรักษารหัสการประมวลผลคำสั่งของฉันไว้เหมือนกันได้หรือไม่แล้วคาดว่าวัตถุสตริงที่สร้างขึ้นบน RTOS (ซึ่งมีคำสั่ง) ทั้งหมดนี้จะถูกยกเลิกเป็น NULL หรือไม่ หรือว่ามันจะแตกต่างกันไปตามระบบปฏิบัติการหรือไม่ ปรับปรุง หลังจากได้รับคำแนะนำให้ดูคำถามนี้ฉันตัดสินใจแล้วว่าไม่ตอบคำถามที่ฉันขอ คำถามก็คือการถามว่าความยาวของสตริงควรส่งผ่านซึ่งแตกต่างอย่างสิ้นเชิงกับสิ่งที่ฉันถามหรือไม่และถึงแม้ว่าคำตอบบางส่วนจะมีข้อมูลที่เป็นประโยชน์ในพวกเขาพวกเขาไม่ใช่สิ่งที่ฉันกำลังมองหา คำตอบที่ดูเหมือนจะให้เหตุผลว่าทำไมหรือทำไมไม่ยุติสตริงด้วยอักขระ null ความแตกต่างกับสิ่งที่ฉันถามคือถ้าฉันสามารถคาดหวังมากขึ้นหรือน้อยลงสตริงที่เกิดในแพลตฟอร์มที่แตกต่างกันเพื่อยุติสตริงของตัวเองด้วย null โดยไม่ต้องออกไปข้างนอกและลองทุกแพลตฟอร์มเดียวถ้ามันสมเหตุสมผล

2
ระบบไฟล์“ ดู” อุปกรณ์เก็บข้อมูลเป็นอาร์เรย์ขนาดใหญ่มากหรือไม่?
ฉันต้องการทราบว่าระบบไฟล์เขียนและอ่านจากอุปกรณ์เก็บข้อมูลอย่างไร ฉันคิดว่านี่เป็นวิธีการทำงาน: ระบบไฟล์ไม่สามารถเข้าถึงอุปกรณ์จัดเก็บข้อมูลได้โดยตรง แต่จะแสดงอุปกรณ์เก็บข้อมูล (โดยไดรเวอร์อุปกรณ์ของอุปกรณ์เก็บข้อมูล) ไปยังระบบไฟล์ในรูปแบบอาร์เรย์ไบต์ (มีขนาดใหญ่มาก) ตัวอย่างเช่นหากระบบไฟล์ต้องการเข้าถึงฮาร์ดดิสก์ก็จะเข้าถึงอาร์เรย์ไบต์ที่เป็นตัวแทนของฮาร์ดดิสก์ วิธีนี้ระบบไฟล์สามารถทำงานกับอุปกรณ์เก็บข้อมูลชนิดใดก็ได้ (ฮาร์ดดิสก์แบบดั้งเดิม SSD, USB แฟลชไดรฟ์ ฯลฯ ) และมีการเปลี่ยนแปลงเฉพาะไดรเวอร์อุปกรณ์สำหรับอุปกรณ์เก็บข้อมูล ภาพนี้แสดงสิ่งที่ฉันเพิ่งอธิบาย: ฉันถูกต้องในการทำความเข้าใจของฉัน?

2
ประโยชน์ของ RTOS กับ Bare Metal สำหรับการเขียนโปรแกรม MCU?
โปรดทราบ:คำถามนี้กล่าวถึง RTOS สองตัวโดยเฉพาะ แต่มีความเป็นทั่วไปมากกว่าและใคร ๆ ก็สามารถตอบได้โดยเขียนรหัส C สำหรับ RTOSes แบบฝังตัวก่อนหน้านี้และให้ซอฟต์แวร์ทำงานโดยตรงบน MCU ฉันสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ RTOS แบบฝังและการเขียนแอปพลิเคชันสำหรับพวกเขา ฉันกำลังดูEmboxและRIOTเพราะพวกเขาเป็นโอเพ่นซอร์สที่ทันสมัยใช้งานได้และดูเหมือนจะมีเอกสารที่ยอดเยี่ยม เป้าหมายของฉันมีสองขั้นตอน: ระยะที่ 1 คือการหาวิธีการคอมไพล์และแฟลชระบบปฏิบัติการเหล่านี้ไปยัง MCU (อาจเป็น AVR หรือ ARM) ขั้นตอนที่ 2 คือเขียนโปรแกรม C อย่างง่าย (โดยทั่วไปคือ daemon ไร้หัว) ซึ่งจะพัฒนาไปตามเวลาเป็น "งานอดิเรก" จากนั้นฉันจะแฟลช / ปรับใช้โปรแกรมนี้กับ MCU เดียวกันดังนั้นจึงประสบความสำเร็จในการปรับใช้ appstack ซึ่งประกอบด้วย Embox / RIOT และแอพของฉันอยู่ด้านบนของมัน ก่อนที่ผมจะไปลงถนนใด ๆ ที่ในที่สุดนำไปสู่การสิ้นสุดตายผมเจอบทความนี้ที่จะได้งานที่ดีงามของการอธิบายว่าทำไมปพลิเคชันแบบ real-time เขียนใน …

3
เป็นความคิดที่ดีหรือไม่ที่จะทำ TDD ในส่วนประกอบระดับต่ำ?
ฉันกำลังพิจารณาที่จะเขียนไดรเวอร์ระดับต่ำหรือส่วนประกอบ / เมล็ดระบบปฏิบัติการ ผู้คนosdev.orgดูเหมือนจะคิดว่าบิตที่สำคัญนั้นไม่ได้มีความหมายที่พิสูจน์ได้ด้วยวิธีนี้ แต่ฉันได้อ่านการสนทนาบางอย่างที่ผู้คนคิดแตกต่างกัน ฉันได้ดูไปรอบ ๆ แล้ว แต่ไม่พบตัวอย่างชีวิตจริงของ TDD ในองค์ประกอบระดับต่ำ นี่เป็นสิ่งที่ผู้คนทำจริง ๆ หรือเพียงแค่สิ่งที่ผู้คนพูดถึงในทางทฤษฎีเพราะไม่มีวิธีที่ดีในการฝึกฝน

1
ทำความเข้าใจกับระดับของการคำนวณ
ขออภัยสำหรับคำถามที่สับสนของฉัน ฉันกำลังมองหาตัวชี้บางอย่าง ถึงตอนนี้ฉันทำงานกับ Java และ Python เป็นส่วนใหญ่บนเลเยอร์แอปพลิเคชันและฉันมีความเข้าใจที่ไม่ชัดเจนเกี่ยวกับระบบปฏิบัติการและฮาร์ดแวร์ ฉันต้องการที่จะเข้าใจมากขึ้นเกี่ยวกับการใช้คอมพิวเตอร์ในระดับที่ต่ำกว่า แต่มันก็ท่วมท้นไปมาก ที่มหาวิทยาลัยฉันเข้าเรียนเกี่ยวกับ microprogramming นั่นคือวิธีที่ตัวประมวลผลมีสายแบบยากที่จะใช้รหัส ASM ถึงตอนนี้ฉันคิดอยู่เสมอว่าฉันจะไม่ทำอะไรให้สำเร็จถ้าเรียนรู้เพิ่มเติมเกี่ยวกับ "ระดับต่ำ" คำถามหนึ่งที่ฉันมีคือ: เป็นไปได้อย่างไรที่ฮาร์ดแวร์จะถูกซ่อนไว้เกือบทั้งหมดจากผู้พัฒนา มันถูกต้องหรือไม่ที่จะบอกว่าระบบปฏิบัติการเป็นเลเยอร์ซอฟต์แวร์สำหรับฮาร์ดแวร์? ตัวอย่างเล็ก ๆ น้อยหนึ่ง: ในการเขียนโปรแกรมฉันไม่เคยเจอความต้องการที่จะเข้าใจ L2 หรือ L3 Cache คืออะไร สำหรับสภาพแวดล้อมของแอปพลิเคชันทางธุรกิจทั่วไปเราแทบไม่จำเป็นต้องเข้าใจแอสเซมเบลอร์และการคำนวณในระดับที่ต่ำกว่าเพราะในปัจจุบันมีเทคโนโลยีสแต็คสำหรับเกือบทุกอย่าง ฉันเดาว่าจุดรวมของระดับล่างเหล่านี้คือการให้ส่วนต่อประสานกับระดับที่สูงขึ้น ในทางกลับกันฉันสงสัยว่าจะมีอิทธิพลต่อระดับล่างได้มากน้อยเพียงใดตัวอย่างเช่นการประมวลผลกราฟิกทั้งหมด ในทางกลับกันมีสาขาวิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎีนี้ซึ่งทำงานในรูปแบบการคำนวณเชิงนามธรรม อย่างไรก็ตามฉันยังพบกับสถานการณ์ที่ไม่ค่อยพบซึ่งฉันคิดว่ามันเป็นประโยชน์ในการคิดประเภทของแบบจำลองความซับซ้อนการตรวจสอบหลักฐาน ฯลฯ ฉันรู้ว่ามีคลาสความซับซ้อนที่เรียกว่า NP และพวกเขาไม่สามารถแก้ปัญหาได้ สิ่งที่ฉันขาดไปมากคือการอ้างอิงสำหรับกรอบการคิดเกี่ยวกับสิ่งเหล่านี้ สำหรับฉันดูเหมือนว่ามีค่ายต่าง ๆ ทุกประเภทที่ไม่ค่อยมีปฏิสัมพันธ์ ไม่กี่สัปดาห์ที่ผ่านมาฉันได้อ่านเกี่ยวกับปัญหาด้านความปลอดภัย ที่นี่อย่างใดชั้นที่แตกต่างกันมากมารวมกัน การโจมตีและการหาประโยชน์มักเกิดขึ้นในระดับที่ต่ำกว่าดังนั้นในกรณีนี้จำเป็นต้องเรียนรู้เกี่ยวกับรายละเอียดของเลเยอร์ OSI, การทำงานภายในของ OS ฯลฯ

9
ทางเลือกระบบปฏิบัติการสำหรับการพัฒนาฟังก์ชั่น [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันเป็นนักพัฒนา. NET เป็นหลักดังนั้นฉันจึงใช้ Windows / VisualStudio (นั่นหมายถึง: ฉันนิสัยเสีย) แต่ฉันสนุกกับ Haskell และภาษาอื่น ๆ (ส่วนใหญ่ใช้งานได้) ในเวลาว่าง ตอนนี้สำหรับ Haskell การสนับสนุน windows ก็โอเค (คุณสามารถรับ Haskell-Platform) แต่ latley ฉันพยายามที่จะได้รับสภาพแวดล้อม Clojure / Scheme พื้นฐานติดตั้งและมันก็แค่ความเจ็บปวดบน windows ดังนั้นฉันจึงคิดว่าจะลองใช้ระบบปฏิบัติการอื่นเพื่อการใช้เครื่องมือและการสนับสนุนที่ดีขึ้น แน่นอนว่าทำให้ฉันใช้ MacOS หรือ Linux ได้บ้าง ฉันไม่เคยใช้ MacOS มาก่อนและแน่นอนว่า Linux จะมีราคาถูกกว่า (ฟรี) และฉันไม่คิดว่าฉันจะสามารถบูต MacOS …

4
การพัฒนาระบบปฏิบัติการในคำถาม C ++
ในฐานะโครงการปริญญาโทฉันกำลังออกแบบระบบปฏิบัติการง่าย ๆ มันถูกออกแบบมาให้ทำงานในโหมดจริง 16 บิตบนสถาปัตยกรรม x86 โดยหลักการแล้วฉันต้องการพัฒนาระบบปฏิบัติการนี้ใน C ++ และใช้แอสเซมบลีเท่าที่จำเป็นเท่านั้น จนถึงตอนนี้ฉันมีบูตโหลดเดอร์ที่เขียนด้วยชุดประกอบที่โหลดเคอร์เนลที่ผสม C ++ และ asm คำถามของฉันเกี่ยวกับการใช้ C ++ ณ ตอนนี้คอมไพล์และสามารถรันได้ แต่ฉันไม่ได้ใช้การจัดสรรหน่วยความจำแบบไดนามิกใด ๆ ถ้าฉันใช้ C มันจะสมเหตุสมผลที่จะเขียนฟังก์ชั่น malloc ที่จะจัดการการจัดสรรหน่วยความจำ แต่ใน C ++ จะมีการใช้คำหลักใหม่ ดังนั้น... 'ใหม่' ทำงานอย่างไรเบื้องหลังการจัดสรรหน่วยความจำและฉันจะจัดการเรื่องนี้อย่างไร และเป็นข้อพิสูจน์ ... มันสมเหตุสมผลหรือไม่ที่จะลองใช้ C ++ เพื่อใช้ประโยชน์จากการงดออกเสียงในระดับที่สูงขึ้น? หรือจะปวดหัวมากกว่าที่จะใช้และฉันควรติดกับ C หรือไม่? โปรดระบุเหตุผลหากคุณเชื่อว่า C ++ จะไม่ใช่ตัวเลือกที่ดี
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.