เป็นไปได้หรือไม่ที่จะบอกใบ้ Windows ให้นำกระบวนการออกมาแลกเปลี่ยนอย่างสมบูรณ์


13

เป็นไปได้หรือไม่ที่จะบอกใบ้ให้ผู้จัดการหน่วยความจำเสมือนของ Windows เป็นผู้นำกระบวนการออกจากการสลับ?

สถานการณ์ที่ฉันมักจะพบว่าตัวเองมักจะใช้ RAM ประมาณ 50% สำหรับโปรแกรมปกติทั้งหมดโดยเฉพาะอย่างยิ่ง IDE สำหรับเป้าหมายฝังตัวพร้อมกับดีบักเกอร์ที่เกี่ยวข้อง

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

จากนั้น sporadic หยุดชั่วคราวเพื่อสลับกระบวนการกลับไปทำให้เกิดปัญหากับดีบักเกอร์น่าจะเนื่องมาจากปัญหาการจับเวลาใน comms ระหว่าง IDE และดีบักเกอร์ฮาร์ดแวร์ ดังนั้นการควบคุมอุปกรณ์เป้าหมายสามารถเป็นระยะ ๆ จนกระทั่งมีความพยายามมากพอที่จะนำข้อมูลการดีบักใน IDE กลับออกจากการสลับ


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

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

1
ฉันเคยมีคำถามที่คล้ายกันและเขียนโปรแกรมตามคำตอบที่ฉันได้ใน Stack Overflow
Kerrek SB

@ Kerrek ฉันพยายามรวบรวมรหัสของคุณภายใต้ MinGW และมีข้อผิดพลาดในการอ่านแต่ละครั้ง "ไม่สามารถอ่านหนึ่งไบต์จาก 0x161000 ข้อผิดพลาด 299 (อ่าน 0 ไบต์)" เนื่องจากฉันมี Windows ในที่ทำงานเท่านั้นฉันจึงไม่กล้าที่จะใช้ไบนารีสุ่มที่คุณแนบมาดังนั้นปัญหาอาจเกิดจากการรวบรวมของฉัน
เกร็ก

1
@ KerrekSB ดูเหมือนว่าจะมีปัญหาเล็กน้อย บางทีคุณกำลังสัมผัสพื้นที่หน่วยความจำที่ไม่ได้แมป อย่างไรก็ตามฉันคิดว่าคำตอบของคุณสมควรได้รับความโปรดปราน :) PS: unswap ดูเหมือนจะช้ากว่าเมื่อเทียบกับความเร็วของ HDD ดูเหมือนว่าคอขวดอยู่ที่อื่น แต่ที่ไหน
โทมัส

คำตอบ:


1

KerrekSB พัฒนาเครื่องมือพิเศษสำหรับจุดประสงค์นี้:

/programming//a/2940209/684229

มีให้ใน GiTHUB พร้อมไบนารี: https://github.com/louisdx/unpage

ในระหว่างการรันคุณจะได้รับข้อผิดพลาดมากมาย "ไม่สามารถอ่านหนึ่งไบต์จาก 0x .... 000, ข้อผิดพลาด 299 (อ่าน 0 ไบต์)" แต่ก็ไม่ใช่ปัญหาเครื่องมือทำงานได้ดี


"แต่มันเป็นปัญหา"? ฉันไม่คิดว่ามันเป็นปัญหา
Kerrek SB

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

@harrymc After the big process is finished, most processes are left in swap.อ้างจากคำถาม: ดังนั้นจึงสันนิษฐานได้ว่าเขาสิ้นสุด "กระบวนการหิวความจำ" แล้ว
Rik

@ KerrekSB แน่นอนนั่นเป็นคำที่สะกดผิด ขอบคุณ :-)
โทมัส

@Tomas ฉันพบนี้ ด้วยความรู้ที่ จำกัด มากของฉันเกี่ยวกับ c ++ ฉันยืนยันว่าสำหรับทุกการเข้าถึงที่ล้มเหลวหน้านั้นได้รับการคุ้มครองโดย PAGE_GUARD-bit ฉันใช้if (meminfo.Protect > 50) { std::cerr << meminfo.Protect << " - " << PAGE_GUARD << std::endl; }ก่อนReadProcessMemory-line PAGE_GUARD คือ 256 และฉันได้ 260 กับเพจที่ล้มเหลว ดังนั้นจึงเป็นไปได้ที่จะกำจัดข้อผิดพลาด บางคนที่มี c ++ และ Paging knowledge ต้องอ่านบิต PAGE_GUARD
Rik

1

คุณสามารถใช้Process Lassoเพื่อกำหนดลำดับความสำคัญของหน้าหน่วยความจำได้ :

เริ่มต้นด้วย Windows Vista หน้าหน่วยความจำแต่ละหน้ามีระดับความสำคัญอยู่ระหว่าง 0 ถึง 7 รายการสแตนด์บายแบ่งออกเป็นแปดรายการซึ่งแต่ละหน้าจัดการมีความสำคัญต่างกัน เมื่อตัวจัดการหน่วยความจำต้องการนำหน้าจากรายการสแตนด์บายจะใช้หน้าจากรายการที่มีลำดับความสำคัญต่ำก่อน "

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

กระบวนการ Lasso มีสองรุ่น: ฟรีและเชิงพาณิชย์ ($ 18.95 พร้อมทดลอง)


ฉันกลัวว่าคุณกำลังตอบคำถามที่แตกต่างอย่างสิ้นเชิง การทำให้กระบวนการมีความสำคัญหน่วยความจำเป็นงานที่แตกต่างกันอาจจะไร้ประโยชน์ในบริบท OP และฉันร่างออก: เมื่อคุณมีกระบวนการที่อยู่ในการแลกเปลี่ยนและต้องการยกเลิกการสลับ คุณไม่ต้องการป้องกันไม่ให้มันเปลี่ยน
โทมัส

@ โทมัส: นั่นไม่ใช่ความเข้าใจของฉัน การร้องขอคือการป้องกันไม่ให้กระบวนการที่กำหนดถูกแลกเปลี่ยน หากกระบวนการนั้นไม่ได้ตั้งโปรแกรมให้ล็อกหน้าในหน่วยความจำทางออกที่ดีที่สุดถัดไปคือให้ความสำคัญกับหน่วยความจำสูงสุดเพื่อทำให้มีโอกาสน้อยที่จะถูกสลับ
harrymc

3
@harrymc, OP บอกว่าเมื่อหมูหน่วยความจำทำงาน "ทุกอย่างกลับกลายเป็นไปตามที่ควร" ดังนั้นนั่นคือสิ่งที่ OP ต้องการ เพียงว่าในเช้าวันจันทร์เขาต้องการให้ชุดการทำงานของกระบวนการที่สำคัญถูกนำมาใช้พร้อมกันไม่ใช่ใน dribs และ drabs โดยมีข้อบกพร่องของหน้าเว็บเมื่อเวลาผ่านไป
mgkrebbs

@ mgkrebbs: นั่นเป็นวิธีการแก้ปัญหาที่แตกต่างซึ่งฉันเชื่อว่าเป็นไปไม่ได้ที่จะทำ วิธีแก้ปัญหาของฉันคือถ้า IDE ไม่เคยสลับกันดังนั้นไม่จำเป็นต้องสลับกลับมาอีก "กระบวนการหิวของหน่วยความจำ" จะมี RAM น้อยกว่าสักสองสามเมกะไบต์ซึ่งจะไม่ส่งผลกระทบต่อประสิทธิภาพการทำงานของมันมากเกินไป
harrymc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.