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

คำถามเกี่ยวกับหลักการของซอฟต์แวร์ที่เชื่อมต่อระหว่างฮาร์ดแวร์และแอพพลิเคชั่น

2
เกิดอะไรขึ้นกับเนื้อหาแคชในการสลับบริบท
ในตัวประมวลผลแบบมัลติคอร์จะเกิดอะไรขึ้นกับเนื้อหาของแคชของคอร์ (เช่น L1) เมื่อมีการสลับบริบทเกิดขึ้นบนแคชนั้น พฤติกรรมขึ้นอยู่กับสถาปัตยกรรมหรือเป็นพฤติกรรมทั่วไปตามด้วยผู้ผลิตชิปทั้งหมดหรือไม่

2
ความแตกต่างระหว่างเธรดระดับผู้ใช้และเธรดระดับเคอร์เนลคืออะไร
หลังจากอ่านหลายแหล่งฉันยังคงสับสนเกี่ยวกับเธรดผู้ใช้และเคอร์เนลระดับ โดยเฉพาะอย่างยิ่ง: เธรดสามารถอยู่ได้ทั้งในระดับผู้ใช้และระดับเคอร์เนล อะไรคือความแตกต่างระหว่างระดับผู้ใช้และระดับเคอร์เนล?

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

6
การสร้างชุดค่าผสมจากชุดคู่โดยไม่มีการทำซ้ำองค์ประกอบ
ฉันมีชุดของคู่ แต่ละคู่เป็นรูปแบบ (x, y) เช่นว่า x, y [0,n)เป็นจำนวนเต็มจากช่วง ดังนั้นถ้า n คือ 4 ดังนั้นฉันมีคู่ต่อไปนี้: (0,1) (0,2) (0,3) (1,2) (1,3) (2,3) ฉันมีคู่แล้ว ตอนนี้ฉันต้องสร้างชุดค่าผสมโดยใช้n/2คู่ที่ไม่มีจำนวนเต็มซ้ำ (กล่าวอีกอย่างหนึ่งว่าจำนวนเต็มแต่ละค่าปรากฏอย่างน้อยหนึ่งครั้งในชุดค่าผสมสุดท้าย) ต่อไปนี้เป็นตัวอย่างของชุดค่าผสมที่ถูกต้องและไม่ถูกต้องเพื่อความเข้าใจที่ดีขึ้น 1. (0,1)(1,2) [Invalid as 3 does not occur anywhere] 2. (0,2)(1,3) [Correct] 3. (1,3)(0,2) [Same as 2] มีคนแนะนำฉันถึงวิธีในการสร้างชุดค่าผสมที่เป็นไปได้ทั้งหมดเมื่อฉันมีคู่

7
ตัวอย่างของความไม่สอดคล้องและความไม่สมบูรณ์ใน Unix / C คืออะไร
ในบทความที่โด่งดังของ Richard Gabriel เรื่องThe Rise of Worse is Betterเขาได้เปรียบเทียบกับปรัชญาการออกแบบของ MIT / Stanford (Lisp) และ New Jersey (C / Unix) ตามแนวแกนของความเรียบง่ายความถูกต้องความสอดคล้องและความสมบูรณ์ เขายกตัวอย่างของ "ปัญหาผู้แพ้ PC" ( พูดถึงที่อื่นโดย Josh Haberman ) เพื่อยืนยันว่า Unix ให้ความสำคัญกับความเรียบง่ายของการใช้งานมากกว่าความเรียบง่ายของอินเตอร์เฟส อีกตัวอย่างหนึ่งที่ฉันคิดขึ้นมาก็คือแนวทางที่แตกต่างกับตัวเลข เสียงกระเพื่อมสามารถแสดงตัวเลขขนาดใหญ่โดยพลการ (ขึ้นอยู่กับขนาดของหน่วยความจำ) ในขณะที่ C จำกัด ตัวเลขไว้ที่จำนวนบิตคงที่ (โดยทั่วไปคือ 32-64) ฉันคิดว่านี่แสดงให้เห็นถึงแกนความถูกต้อง ตัวอย่างบางประการของความสอดคล้องและความสมบูรณ์มีอะไรบ้าง นี่คือคำอธิบายทั้งหมดของ Gabriel (ซึ่งเขายอมรับว่าเป็นการ์ตูนล้อเลียน): วิธีการของ MIT / Stanford ความเรียบง่าย …

4
หัวข้อใดที่แบ่งปันกันโดยทั่วไป
นี่เป็นคำถามทั่วไป และถ้าใครต้องการทำให้การใช้งานเฉพาะเจาะจงฉันจะชอบสิ่งที่เกี่ยวข้องกับ Unix แต่ก่อนอื่นต้องรู้ปัญหาต่อไปนี้โดยทั่วไป: ฉันอ่านกระบวนการเดียวสามารถมีหลายเธรด หลายเธรดของกระบวนการเดียวกันจะแบ่งปันสิ่งต่าง ๆ ในหมู่พวกเขา ฉันต้องการที่จะรู้ว่าสิ่งที่พวกเขาแบ่งปันและสิ่งที่ไม่ กระบวนการพิจารณาประกอบด้วยพื้นที่ที่อยู่, สแต็ค, กอง, ตัวแปรทั่วโลก, รหัส, ข้อมูล, ทรัพยากรระบบปฏิบัติการสิ่งที่ในหมู่พวกเขาร่วมกันโดยกระทู้? ฉันมีการคาดเดาต่อไปนี้: ตัวแปรทั่วโลก -ฉันได้อ่านหัวข้อแบ่งปันตัวแปรทั่วโลก ในขณะที่การเขียนโปรแกรมใน Java และ C # ฉันได้ทำเธรดเพื่อแบ่งปันตัวแปรระดับชั้นเรียน ดังนั้นฉันจึงเชื่อว่าเธรดจะแชร์ตัวแปรทั่วโลก (แต่ไม่แน่ใจว่าแนวคิดในภาษาการเขียนโปรแกรมระดับสูงแปลว่าเป็นข้อเท็จจริงระดับระบบปฏิบัติการต่ำหรือไม่) ฮีป -เนื่องจากตัวแปรโกลบอลถูกเก็บไว้ในฮีปฮีปจะถูกแชร์ระหว่างเธรด สแต็ค -เนื่องจากแต่ละเธรดสามารถมีลำดับการเรียกใช้ / โค้ดของตัวเองได้จึงต้องมีสแต็กของตัวเองซึ่งมันอาจจะผลัก / ป๊อปอัพเนื้อหาของโปรแกรมตัวนับ (เมื่อพูดว่าการเรียกใช้ฟังก์ชัน ดังนั้นเธรดของกระบวนการเดียวกันจะไม่แชร์สแต็ก ตอนนี้ฉันไม่แน่ใจเกี่ยวกับการแบ่งปันสิ่งต่อไปนี้ พื้นที่ที่อยู่ -ไม่แน่ใจว่าสิ่งที่นับว่าอยู่ภายใต้พื้นที่ที่อยู่ แต่ฉันคิดว่าพื้นที่ที่อยู่โดยทั่วไปจะใช้ในบริบทของกระบวนการไม่ใช่เธรด และเนื่องจากเธรดทั้งหมดของกระบวนการเดียวกันอยู่ในพื้นที่แอดเดรสเดียวกันกับกระบวนการพาเรนต์จึงมีการกล่าวว่าเธรดใช้พื้นที่ที่อยู่ร่วมกัน (แต่พวกเขาจะรักษาสแต็คที่แตกต่างกันภายในพื้นที่ที่อยู่เดียวกันได้หรือไม่) ทรัพยากรระบบปฏิบัติการ -ฉันคิดว่านี่อาจเป็นการใช้งานเฉพาะอย่างยิ่ง ตัวอย่างเช่นกระบวนการหลักสามารถเลือกให้การจัดการไฟล์เดียวกันกับบางส่วนของเธรดและไม่ให้ทั้งหมด หรือฉันเข้าใจผิดและทรัพยากรระบบปฏิบัติการหมายถึงอย่างอื่นที่ไม่ใช่ไฟล์? รหัส -เธรดสามารถมีรหัสที่แตกต่างกันได้ดังนั้นรหัสที่ใช้ร่วมกันอาจไม่เป็นเช่นนั้นเสมอไป ข้อมูล …

2
ระบบปฏิบัติการสร้างเอนโทรปีสำหรับเมล็ดสุ่มอย่างไร
บน Linux ไฟล์/dev/randomและ/dev/urandomไฟล์คือแหล่งข้อมูลการบล็อกและไม่บล็อก (ตามลำดับ) ของการสุ่มหลอก พวกเขาสามารถอ่านเป็นไฟล์ปกติ: $ hexdump /dev/random 0000000 28eb d9e7 44bb 1ac9 d06f b943 f904 8ffa 0000010 5652 1f08 ccb8 9ee2 d85c 7c6b ddb2 bcbe 0000020 f841 bd90 9e7c 5be2 eecc e395 5971 ab7f 0000030 864f d402 74dd 1aa8 925d 8a80 de75 a0e3 0000040 cb64 4422 02f7 0c50 …

4
การกำหนดเวลาแบบมีส่วนร่วมหยุดกระบวนการชั่วคราวเมื่อดำเนินการ I / O
การอ้างอิงระบบปฏิบัติการหลายแห่งบอกว่าด้วยการทำงานหลายอย่างร่วมกัน (เมื่อเทียบกับการยึดเอาเสียก่อน) กระบวนการจะรักษา CPU จนกว่าจะระงับตัวเองโดยสมัครใจ หากกระบวนการที่กำลังดำเนินการตามคำขอ I / O ที่ไม่สามารถตอบสนองได้ทันที (เช่นขอให้ใช้รหัสจังหวะที่ยังไม่พร้อมใช้งาน) ตัวกำหนดตารางเวลาจะระงับหรือไม่เก็บ CPU ไว้จนกว่าจะสามารถให้บริการได้จริงหรือไม่ [แก้ไขเพื่อแทนที่ "บล็อกบน i / o" ด้วย "ทำการร้องขอ I / O ที่ไม่สามารถทำได้ทันที"]

3
การจัดการหน่วยความจำที่ชาญฉลาดด้วยการดำเนินการเวลาคงที่?
ลองพิจารณาเซ็กเมนต์หน่วยความจำ (ขนาดที่สามารถเพิ่มหรือลดขนาดเช่นไฟล์เมื่อจำเป็น) ซึ่งคุณสามารถดำเนินการจัดสรรหน่วยความจำขั้นพื้นฐานที่เกี่ยวข้องกับการบล็อกขนาดคงที่สองแบบ: จัดสรรหนึ่งบล็อก การปลดบล็อกที่จัดสรรก่อนหน้านี้ซึ่งไม่ได้ใช้อีกต่อไป นอกจากนี้ตามข้อกำหนดระบบการจัดการหน่วยความจำไม่ได้รับอนุญาตให้ย้ายไปรอบ ๆ บล็อกที่จัดสรรในปัจจุบัน: ดัชนี / ที่อยู่ของพวกเขาจะต้องไม่เปลี่ยนแปลง อัลกอริทึมการจัดการหน่วยความจำที่ไร้เดียงสาที่สุดจะเพิ่มตัวนับทั่วโลก (ด้วยค่าเริ่มต้น 0) และใช้ค่าใหม่เป็นที่อยู่สำหรับการจัดสรรครั้งต่อไป อย่างไรก็ตามสิ่งนี้จะไม่อนุญาตให้ย่อส่วนเมื่อเหลือเพียงไม่กี่บล็อกที่ถูกจัดสรร แนวทางที่ดีกว่า: รักษาตัวนับ แต่เก็บรักษารายการบล็อกที่ถูกจัดสรรคืน (ซึ่งสามารถทำได้ในเวลาคงที่) และใช้เป็นแหล่งสำหรับการจัดสรรใหม่ตราบเท่าที่ยังไม่ว่างเปล่า อะไรต่อไป มีบางสิ่งที่ฉลาดที่สามารถทำได้ยังคงมีข้อ จำกัด ของการจัดสรรเวลาคงที่และการจัดสรรคืนซึ่งจะทำให้เซ็กเมนต์หน่วยความจำสั้นที่สุดเท่าที่จะทำได้? (เป้าหมายสามารถติดตามบล็อกที่ไม่ได้รับการจัดสรรในปัจจุบันด้วยที่อยู่ที่เล็กที่สุด แต่ดูเหมือนจะไม่สามารถทำได้ในเวลาที่แน่นอน…)

4
ระบบปฏิบัติการสามารถทำงานบนชิปตัวเดียวกับที่ควรจะจัดการได้อย่างไร
จากการอ่านของฉันเกี่ยวกับระบบปฏิบัติการ (อ่านเนื้อหาพื้นฐานใน Wikipedia, เว็บไซต์เทคโนโลยี ฯลฯ ) ฉันได้เรียนรู้ว่าระบบปฏิบัติการเป็นโปรแกรมที่อนุญาตให้โปรแกรมและแอปพลิเคชันโต้ตอบกับฮาร์ดแวร์ได้อย่างมีประสิทธิภาพและปลอดภัย อย่างไรก็ตามฉันสับสนเกี่ยวกับวิธีที่ระบบปฏิบัติการกำกับดูแลการทำงานของคอมพิวเตอร์เมื่อจำเป็นต้องดำเนินการเอง ฉันหมายถึงอะไร วิธีที่ฉันจินตนาการถึงระบบปฏิบัติการให้ทำงานคือบนคอมพิวเตอร์จะมีซีพียูสองตัว หนึ่งที่รันระบบปฏิบัติการตลอดเวลาและอื่น ๆ ที่ใช้ระบบปฏิบัติการเพื่อเรียกใช้คอมพิวเตอร์ อย่างไรก็ตามปรากฎว่าระบบปฏิบัติการกำลังทำงานบน CPU เดียวกันกับที่กระบวนการอื่นเป็น นี่เป็นเหมือนผู้จัดการที่ต้องทำงานในสายการผลิตเดียวกับพนักงานของเขาและจะได้รับการใช้เครื่องมือไฟฟ้าเมื่อมีพนักงานคนอื่นทำกับพวกเขา เขาจะไม่เป็นผู้จัดการที่มีประสิทธิภาพมากเพราะเขาจะไม่มีความสามารถในการออกคำสั่งหากพนักงานของเขาไม่มีระเบียบวินัยเล็กน้อย ดังนั้นจะเป็นไปได้อย่างไรที่ระบบปฏิบัติการจะใช้เวลาส่วนหนึ่งของ CPU เดียวกันที่ต้องแชร์ระหว่างกระบวนการอื่นทั้งหมด ท้ายนี้การทำงานออกมาเป็นอย่างไร

3
สิ่งที่รับประกันทำให้ระบบปฏิบัติการแบบเรียลไทม์“ นุ่ม” นั้นมีให้
ฉันคิดว่าฉันรู้ว่าระบบปฏิบัติการแบบเรียลไทม์ "ยาก" คืออะไร เป็นระบบปฏิบัติการที่มีตัวกำหนดตารางเวลาที่จัดทำสัญญากับแอ็พพลิเคชันโปรแกรมเมอร์ แอปพลิเคชันให้กำหนดเวลากับแต่ละคำขอการจัดสรรทรัพยากร หากคำขอกำหนดเวลาเป็นไปได้ผู้จัดตารางเวลารับประกันว่าแต่ละทรัพยากรจะถูกจัดสรรให้กับแอปพลิเคชันที่ร้องขอก่อนกำหนดส่ง การรับประกันนั้นเพียงพอที่จะทำให้โปรแกรมเมอร์แอปพลิเคชันสามารถให้เหตุผลเกี่ยวกับเวลาแฝงสูงสุดและปริมาณงานขั้นต่ำของคำขอเฉพาะ คำจำกัดความทั้งหมดที่ฉันพบในระบบ "แบบเรียลไทม์" แบบนิ่ม "ดูเหมือนไม่มีความหมายสำหรับฉัน Wikipedia พูดว่า ประโยชน์ของผลลัพธ์จะลดลงหลังจากวันครบกำหนดดังนั้นจึงลดคุณภาพการบริการของระบบ uhhhh ตกลง. ตามเกณฑ์ที่ว่า Windows 95 นั้นเป็นระบบแบบเรียลไทม์และ 3BSD ก็เช่นกันและเป็น Linux Wikipedia ไม่ได้เป็นแหล่งที่มาที่ดี แต่ความนิยมของ Google ในอีกไม่กี่ครั้งที่ผ่านมานั้นไม่ค่อยดีนัก ตัวอย่างเช่นhttp://users.ece.cmu.edu/~koopman/des_s99/real_time/พูดว่า ในระบบแบบเรียลไทม์ที่อ่อนนุ่มสามารถยอมรับการดำเนินการที่ลดลงในการโหลดสูงสุดที่เกิดขึ้นน้อยมาก นั่นไม่ใช่สัญญานั่นเป็นวิธีแฟนซีที่จะไม่พูดอะไร ตัวอย่างของการรับประกัน / สัญญาแบบเรียลไทม์นุ่ม ๆ ที่เสนอโดยระบบปฏิบัติการจริงคืออะไร ฉันกำลังหาคำตอบของแบบฟอร์ม: ใน (ชื่อระบบปฏิบัติการ) หากโปรแกรมเมอร์ทำ (what-programmer-needs-to-do) ดังนั้นระบบปฏิบัติการรับประกัน (what-the-system-guarantee)

2
ข้อผิดพลาดที่อาจเกิดขึ้นกับการมีเคอร์เนลน้อยที่สุดที่เรียกใช้รหัสที่ได้รับการจัดการคืออะไร?
สมมติว่าฉันต้องการสร้างระบบปฏิบัติการโดยใช้เคอร์เนลตัวล่างที่เล็กมากซึ่งทำหน้าที่เป็นตัวแปลรหัสที่ได้รับการจัดการ / รันไทม์และเคอร์เนลส่วนบนขนาดใหญ่ที่คอมไพล์กับภาษาเครื่องที่ไม่ใช่เจ้าของภาษา (Java bytecode, CIL เป็นต้น) ตัวอย่างของระบบปฏิบัติการที่คล้ายกันจะเป็นเอกเทศและคอสมอส ข้อผิดพลาดและความท้าทายในการพัฒนาที่มีอยู่คือการเขียนระบบปฏิบัติการด้วยโครงสร้างพื้นฐานแบบนี้ซึ่งแตกต่างจากโซลูชั่นดั้งเดิม

2
ประสิทธิภาพของ microkernel เทียบกับ kernel แบบ monolithic
microkernel ใช้ไดรเวอร์ทั้งหมดเป็นโปรแกรมพื้นที่ผู้ใช้และใช้คุณสมบัติหลักเช่น IPC ในเคอร์เนลเอง เคอร์เนลเสาหินอย่างไรก็ตามใช้ไดรเวอร์เป็นส่วนหนึ่งของเคอร์เนล (เช่นทำงานในโหมดเคอร์เนล) ฉันได้อ่านการอ้างสิทธิ์บางอย่างว่า microkernels นั้นช้ากว่า monolithic kernels เนื่องจากพวกเขาจำเป็นต้องจัดการกับข้อความที่ส่งระหว่างไดรเวอร์ในพื้นที่ของผู้ใช้ มันเป็นเรื่องจริงเหรอ? เป็นเวลานานเมล็ดส่วนใหญ่เป็นเสาหินเนื่องจากฮาร์ดแวร์ช้าเกินกว่าที่จะเรียกใช้ไมโครเคอร์เนลได้อย่างรวดเร็ว อย่างไรก็ตามขณะนี้มีไมโครเคิลและไฮบริดหลายเมล็ดเช่น GNU / Hurd, Mac OS X, สาย Windows NT เป็นต้น แล้วมีอะไรเปลี่ยนแปลงเกี่ยวกับประสิทธิภาพของ microkernels บ้าง? คำติชมของ microkernels นี้ยังใช้ได้ในปัจจุบันหรือไม่?

6
การหาค่า XOR สูงสุดของตัวเลขสองตัวในช่วงเวลาหนึ่ง: เราจะทำได้ดีกว่าสมการกำลังสองหรือไม่?
สมมติว่าเรากำลังได้รับสองหมายเลขและและที่เราต้องการที่จะหาสำหรับL \ le i, \, J \ le Rlllrrrmax(i⊕j)max(i⊕j)\max{(i\oplus j)}l≤i,j≤rl≤i,j≤rl\le i,\,j\le r อัลกอริทึมnaïveเพียงตรวจสอบคู่ที่เป็นไปได้ทั้งหมด เช่นในทับทิมเรามี: def max_xor(l, r) max = 0 (l..r).each do |i| (i..r).each do |j| if (i ^ j > max) max = i ^ j end end end max end ฉันรู้สึกว่าเราสามารถทำได้ดีกว่าสมการกำลังสอง มีอัลกอริทึมที่ดีกว่าสำหรับปัญหานี้หรือไม่?

1
หน่วยความจำบอลลูนในระบบปฏิบัติการ
ไฮเปอร์ไวเซอร์บางตัวเพิ่มประสิทธิภาพการใช้หน่วยความจำโดยใช้วิธีการที่เรียกว่า ballooning (อย่างน้อยนั่นคือสิ่งที่ KVM เรียก) วิธีนี้จะลดความซ้ำซ้อนของหน่วยความจำระหว่าง VM และตั้งค่าหน้าเว็บทั่วไปให้อ่านได้อย่างเดียว นี่เป็นสิ่งที่ตรงกันข้ามกับการเรียกแยก เป็นไปได้หรือไม่ที่จะนำไปใช้งานในระดับ OS สำหรับกระบวนการ (ส่วนใหญ่ฉันคิดถึงการทำสำเนาหน่วยความจำเมื่อเรียกดูด้วย Chromium ที่มีหลายแท็บบนไซต์เดียวกัน) มีการนำไปใช้แล้วหรือไม่

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