ত্রুটিযুক্ত র‌্যাম নিয়ে উইন্ডোজ চালানো


25

ত্রুটিযুক্ত র‌্যাম মডিউল দিয়ে উইন্ডোজ (7, x64) চালানো কি সম্ভব? আরও স্পষ্টভাবে, উইন্ডোজকে কোনও জানা খারাপ ঠিকানা বা ঠিকানাগুলির ব্লক বরাদ্দ না করার কিছু উপায় আছে কি?

লিনাক্সের জন্য, ব্যাড্রাম রয়েছে । উইন্ডোজ জন্য বিদ্যমান বাস্তবায়ন আছে? উইন্ডোজ কার্নেল (এনটি 6.1) দিয়ে কি এটিও সম্ভব? কার্নেল মোড ড্রাইভার হতে পারে?


4
@ একাজ যদি কেনার মাত্র এক সপ্তাহ পরে, সম্ভবত ওয়ারেন্টির অধীনে এটি প্রতিস্থাপন করবেন? ;)
বব

3
প্রকৃতপক্ষে সবচেয়ে স্মার্ট ধারণাটি, এটির ভাঙ্গা, এটি ঠিক করার জন্য
ইমাম

উত্তর:


15

বব, আপনার প্রশ্নের তিনটি অংশ আছে। আমি একবারে সম্বোধন করব

খারাপ স্মৃতি নিয়ে উইন্ডোজ চালানো

একটি ত্রুটিযুক্ত মডিউল দিয়ে উইন্ডোজ 7 চালানো সত্যিই সম্ভব। খারাপ সেক্টরের অবস্থান এবং মডিউলটি যেখানে আপনার ডিআইএমএম ব্যাঙ্কগুলিতে থাকে তার উপর নির্ভর করে উইন্ডোজ চলবে যতক্ষণ না মেমরির খারাপ অংশগুলিকে স্পর্শ করার চেষ্টা না করে ততক্ষণ কিছুই নেই। সুতরাং, আদর্শভাবে আপনি ত্রুটিযুক্ত মডিউলটি যতদূর সম্ভব ব্যাংক 0 থেকে সরিয়ে নিয়েছেন। স্বাভাবিকভাবেই, এটি যদি আপনার একমাত্র মডিউল হয় তবে আপনার ভাগ্যের বাইরে।

উইন্ডোজ খারাপ মেমরি সেক্টর ব্লক করা

X86 (32 এবং 64 বিট) অপারেটিং সিস্টেমগুলিতে, মেমরিটি কার্নেল দ্বারা পরিচালিত হয়। আপনি উল্লেখ হিসাবে, BadMem লিনাক্স মধ্যে খারাপ মেমরি সেক্টর ব্লক করতে সক্ষম। এটি আপনার নির্দিষ্ট করা মেমরি ঠিকানাগুলি লক করার জন্য কার্নেলকে নির্দেশ দিয়ে কাজ করে। এটি কার্যকরভাবে মেমরি বরাদ্দ করার সময় লিনাক্সগুলিকে সেই ঠিকানাগুলিকে সম্বোধন করা থেকে বিরত রাখে। তবে এটি করার জন্য, ব্যাডেমকে কার্নেলটি প্যাচ করা দরকার। ব্যাডমেম আপনি প্রয়োগ করার আগে কনফিগার করা কার্নেল প্যাচ ছাড়া আর কিছু নয়।

এখন, আপনার উইন্ডোজে সেই ক্ষমতা নেই। আপনি কার্নেলটি প্যাচ করতে পারবেন না। কার্নেল মোড ড্রাইভার বিকাশ করা আপনার কোনও উপকারে আসবে না, কারণ উইন্ডোজ কার্নেলটি কখনই আপনার ড্রাইভারকে মেমরি পরিচালনার আর্কিটেকচারের (অগ্রাধিকারযোগ্য) হিসাবে প্রাধান্য দিতে দেয় না।

এই কারণে, আপনি কোনও নির্দিষ্ট মেমরি ঠিকানা ব্যবহার না করার জন্য উইন্ডোজকে কোনওভাবে নির্দেশ দিতে পারবেন না। একমাত্র উপায় হ'ল মাইক্রোসফ্ট বিশেষত আপনার ক্ষেত্রে কার্নেলটি প্যাচ করবে। অসম্ভাব্য।

খারাপ স্মৃতির ঠিকানা ছড়িয়ে দেওয়া

মেমরি মডিউলে খারাপ ঠিকানা থাকতে পারে এমন অনেকগুলি কারণ নেই। পরিণামে এটি সমস্তই উত্পাদন লাইনে একটি ত্রুটির দিকে ফোটে, ধরে নিলে এটি আপনার কম্পিউটারে প্রবেশের আগে ক্ষতি ক্ষতি করে না। হার্ড ড্রাইভের বিপরীতে মেমোরি মডিউলগুলির কোন চলমান অংশ নেই, আপনি জানেন you সুতরাং, হার্ড ড্রাইভ সেক্টরের ক্ষেত্রে যেমন খারাপ খাতগুলি ছড়িয়ে পড়ার ঝোঁক থাকে না।

যাইহোক, মেমরি পরীক্ষার সফ্টওয়্যারটি নির্বোধ নয়। এটির পক্ষে (এবং সাধারণ) কিছু ঠিকানাগুলি পাস করা সম্ভব হয় যা আসলে খারাপ। আরও খারাপ ঠিকানা প্রকাশিত হওয়ার সাথে সাথে খারাপ স্মৃতি "ছড়িয়ে পড়ার" ধারণা দিতে পারে। এই কারণে ব্যাডমেমের মতো সরঞ্জামগুলি তাদের দুর্বলতা প্রকাশ করে, কারণ স্বাভাবিকভাবেই তারা কেবলমাত্র সেই ঠিকানাগুলি পরিচালনা করতে পারে যেগুলি আপনি তাদেরকে নির্দেশ দিয়েছেন।

এটি অসম্ভাব্য যে কেউ মেমোরির মডিউলটির পুরো পরীক্ষা করতে পারে এবং সমস্ত খারাপ মেমরির ঠিকানা সনাক্ত করতে পারে, তারপরে সেগুলি লক করে একটি "ভাল" মেমরি মডিউলটি দিয়ে শেষ করতে পারে। সবচেয়ে সহজ কাজটি হ'ল খারাপ ঠিকানাগুলির একটি মডিউলটিকে একটি ত্রুটিযুক্ত মডিউল হিসাবে বিবেচনা করা এবং ফলস্বরূপ বিশ্বাস করা উচিত নয়।

এর অর্থ কী, ব্যাডেমেম যতটা আকর্ষণীয় প্রস্তাব, বাস্তবে এটি খারাপ স্মৃতি সমস্যার সমাধান নয়। সম্ভবত এর পরেও আপনি অপারেটিং সিস্টেমটি শেষ করবেন না যা খারাপ সেক্টর পড়ার চেষ্টা করে এবং স্টপ ত্রুটির সাথে ক্র্যাশ হয়। একটি খারাপ মডিউল একটি খারাপ মডিউল একটি খারাপ মডিউল।


বেশ কয়েকটি ভাল উত্তর রয়েছে, তবে কেন এটি না করার কোনও ভাল কারণ দেওয়ার জন্য আমি এটি গ্রহণ করব । উইন্ডোজ কার্নেলটিকে নির্দিষ্ট ঠিকানার আগে ব্যবহার না করার জন্য বলা যেতে পারে, যেমন অন্যরা উল্লেখ করেছেন, তবে ত্রুটি ঠিকানার জায়গার মাঝামাঝি সময়ে হলে এটি যখন আপনি একটি স্কেলেল চান তখন একটি কুড়াল ব্যবহার করার মতো ... সূক্ষ্ম নিয়ন্ত্রণের প্রয়োজন হয় তবে, স্পষ্টতই, অসম্ভব। দুঃখের বিষয়
বব

8
একদম সঠিক নয়; এটা হল নির্দিষ্ট ঠিকানা (আরো সঠিকভাবে, নির্দিষ্ট পৃষ্ঠা ফ্রেম নম্বর) এড়াতে উইন্ডোজ নির্দেশ সম্ভব। কার্যকারিতা ইসিসি মেমরি, যা দিয়ে উইন্ডোজ সম্ভব ফল্ট সনাক্ত করতে এবং খারাপ হিসাবে যারা PFNs চিহ্নিত করতে পারেন জন্য ডিজাইন করা হয়েছে, কিন্তু এটি নিজে লিস্টে PFNs যোগ করা সম্ভব হল: superuser.com/a/490522/117590 - শুধু খুব ব্যবহারিক নয়। সুতরাং, হ্যাঁ, প্রতিস্থাপন সেরা বিকল্প হিসাবে রয়ে গেছে: পি
বব

17

উইন্ডোজ বিসিডির (বুট কনফিগারেশন ডেটা) আসলে একটি {badmemory}অবজেক্ট থাকে। মনে হচ্ছে ইসিসি মেমরির দ্বারা "ব্যর্থ হওয়ার পূর্বাভাস" থাকা মেমরি ঠিকানাগুলি এখানে তালিকাভুক্ত হবে, এবং অপারেটিং সিস্টেম দ্বারা ব্যবহৃত হবে না।

{badmemory}বস্তুর একটি গ্রহণ BadMemoryList(স্কুবা BCD টাইপ 0x1700000a) উপাদান, যা হেক্স হিসাবে প্রবেশ করা যাবে স্পেস দিয়ে পৃথক করা পূর্ণসংখ্যার একটি তালিকা রয়েছে। আমি অনুমান করি যে এই উপাদানটিতে স্মৃতিযুক্ত 86। দ্বারা পাওয়া মেমোরি ঠিকানাগুলি ম্যানুয়ালি sertোকানো সম্ভব হবে - তবে আমি এটি পরীক্ষা করে দেখিনি। স্পষ্টতই, এটি 'পৃষ্ঠা ফ্রেম নম্বরগুলি গ্রহণ করে, যা আসল ঠিকানাটি 4096 দ্বারা বিভক্ত। দুর্ভাগ্যক্রমে, এই ঠিকানাগুলি / পিএফএনগুলি মেমরি ডায়াগনস্টিকস দ্বারা উল্লিখিতগুলির সাথে মেলে না। ম্যানুয়াল সম্পাদনা ভিজ্যুয়াল বিসিডি এডিটর দিয়ে করা যেতে পারে ।

যে কোনও ক্ষেত্রে, ত্রুটিযুক্ত মেমরির লাঠিগুলি অন্য উত্তরগুলির দ্বারা নির্দেশিত হিসাবে প্রতিস্থাপন করা উচিত। এটি কেবলমাত্র সমস্যাটি (অস্থায়ীভাবে?) কাজ করার সম্ভাব্য উপায়ের একটি নোট।


আপনার বলা সমস্ত কিছুর আরও ভাল ফর্ম্যাট টিউটোরিয়াল এখানে উপলভ্য । নির্বিশেষে দুর্দান্ত কাজ।
মির্হু

13

উইন্ডোজ বিসিডির রয়েছে {badmemorylist}এবং {badmemoryaccess}অবজেক্টগুলি। আপনার প্রথমে খারাপ মেমরি পৃষ্ঠাগুলি স্পেস (যেমন। bcdedit /set badmemorylist 1499543 1434007) এবং দ্বিতীয়টি No( bcdedit /set badmemoryaccess No) দ্বারা পৃথক করা উচিত

সাধারণত উইন্ডোতে মেমরি পৃষ্ঠার আকার মনে রাখবেন 4KB

উইন্ডোজ 7 এ পরীক্ষিত এবং এটি ভাল কাজ করে

আপনি সিস্টেটার্নালস দ্বারা র‌্যামপ দ্বারা আপনার সেটিংস পরীক্ষা করতে পারেন

পিএস আমি এই তথ্য পেয়েছি "Windows Internals Book" chapter 10


13

এসসির সাথে ট্যাবলেটে আমার র‌্যামের সমস্যা হয়েছিল। মেমরিটি ঝালাই বা এসওসি তে সংহত করা হয় এবং প্রতিস্থাপন করা যায় না।

আমি আর্জেন্টিনায় আছি এবং বিক্রেতা চিনে রয়েছেন, এবং শিপিংয়ের ব্যয় এবং সময়টি, ওয়ারেন্টি প্রেরণে কোনও অর্থ হয় না।

আমি কয়েকটি হিট পরিচালনা করেছিলাম।

ক্ষতিগ্রস্থ মেমরি পরামিতিগুলি পাস করার মূল চাবিকাঠিটি হ'ল:

  1. উইন্ডোতে ব্যবহৃত স্মৃতিযুক্ত ম্যাচের ঠিকানার ঠিকানা
  2. 4KBytes এর সম্পূর্ণ পৃষ্ঠাগুলি চিহ্নিত করতে হবে।
  3. স্মরণে 0x10000000উইন্ডোজে 0x10000 এর সাথে সম্পর্কিত
  4. স্মরণে 0x00001000উইন্ডোজ 0x1 এর সাথে সম্পর্কিত
  5. অর্থ: উইন্ডোজের পৃষ্ঠা নম্বরটি সর্বশেষ 3 স্মৃতিযুক্ত হেক্সাডেসিমাল সংখ্যাগুলি সরিয়ে দেয়।
  6. এর অর্থ: উইন্ডোজগুলি বামে শূন্যগুলি সরিয়ে দেয়।
  7. পৃষ্ঠা সংখ্যাটিতে ত্রুটি এড়াতে 5 এবং 6 বিবেচনা করুন।
  8. সঠিক বিবৃতিটি হ'ল: bcdedit /set {badmemory} badmemorylist 0xB7 0xB8 0xB9 0xBA0x000B7000 থেকে 0x000BAFFF থেকে স্মৃতিতে ত্রুটি। মনে রাখবেন যে আপনি বিভিন্ন স্মৃতি রেখে দিতে পারবেন না, তবে সমস্ত পৃষ্ঠাগুলি একের পর এক করুন
  9. পৃষ্ঠা যুক্ত করতে পারে না, সমস্ত পৃষ্ঠাগুলি একই কমান্ডে চিহ্নিত করা উচিত। যদি কোনও নতুন পৃষ্ঠা হয় তবে পুরানো ওভাররাইটগুলি যুক্ত করে। আমি একমাত্র কমান্ডে 4096 পৃষ্ঠা যুক্ত করতে পেরেছি। আমি এর চেয়ে বেশি চেষ্টা করিনি।
  10. bcdedit /enum {badmemory}চিহ্নিত চিহ্নযুক্ত পৃষ্ঠাগুলির তালিকা প্রদর্শন করে।
  11. bcdedit /set badmemoryaccess no চিহ্নিত পৃষ্ঠাগুলি ব্যবহার করা বন্ধ করুন
  12. পৃষ্ঠাগুলি চিহ্নিত করার পরে পুনরায় বুট করা এবং অ্যাক্সেস সরিয়ে ফেলা প্রয়োজন।

1
/এটির কাজ করার জন্য এবং কমান্ডের মধ্যে থাকা শ্বেত স্থানটি আমাকে সরিয়ে ফেলতে হয়েছিল , সুতরাং bcdedit / enum {badmemory}এটির পরিবর্তে এটি bcdedit /enum {badmemory}অন্যদের জন্য সমান হবে
ফ্ল্যাগ 19

এটি কাজ করে, তবে দুর্ভাগ্যক্রমে উইন্ডোজে সিএমডি সীমাটি 8191 এর মধ্যে সীমাবদ্ধ এবং আমি সমস্ত খারাপ মেমরি পৃষ্ঠাগুলি ব্লক করতে পারিনি। এটি সমাধানের জন্য আমি কোনও ভাল কাজ খুঁজে পাইনি। পৃষ্ঠাগুলির সীমা রেকর্ড করার কোনও উপায় আছে? আমার 0x714bc8 থেকে 0x71cbd0 পর্যন্ত সমস্ত পৃষ্ঠা ব্লক করা উচিত যা খুব বেশি পৃষ্ঠা! আমি কী করেছিলাম, তাই না? আমি সবচেয়ে সাধারণ পরীক্ষা চালিয়েছি (# 0 এবং # 1) এবং এটি মেমরির ত্রুটির আরও সীমিত পরিসীমা পেয়েছে। এটি এতদূর ভাল চলছে, নীল পর্দা আর নেই। তবে আমি জানি যে প্রয়োজনীয় সমস্ত কিছু আমি অবরুদ্ধ করিনি।
ফিলিপ

3

আমি যতদূর অবগত আছি, এটি করার একমাত্র উপায় হ'ল বার্নমেম কমান্ডটি যা কৃত্রিমভাবে র‌্যাম উইন্ডোজ ব্যবহারের পরিমাণ সীমিত করতে পারে using


2
হুম .. এটি একটি আকর্ষণীয় বিকল্প। সম্ভবত maxmem, দৃশ্যত যেহেতু burnmemসর্বোচ্চ প্রকৃত ঠিকানা সীমিত নেই যখন maxmemআছে। ভিস্তা এবং 7 সমতুল্য হবে truncatememory। যদিও এটি একটি সম্ভাব্য সমাধান, ত্রুটিযুক্ত মেমরি ঠিকানার জায়গার মাঝখানে বা প্রারম্ভিক অবস্থার মধ্যে রয়েছে এবং কাঙ্ক্ষিত না হওয়ার পরে সমস্ত কিছু অবরুদ্ধ করে দেওয়ার ক্ষেত্রে কি আরও সঠিক পদ্ধতি রয়েছে?
বব

@ Bob - আপনি কেবলমাত্র খারাপ মেমরির মডেল প্রতিস্থাপন করতে পারবেন না কেন?
রামহাউন্ড

@ রাহাউন্ড আমি চাইলে পারতাম। তবে এতে সময় লাগবে। এখনই, আমি আমার মূল স্মৃতি অর্ধেক নিয়ে চলছি, আমার ভিএমদের পক্ষে দুর্দান্ত নয়। একটি নতুন বা প্রতিস্থাপন মডিউল পাওয়া যা আসলে কাজ করবে কয়েক সপ্তাহ সময় নিতে পারে। যদি কোনও সফ্টওয়্যার সমাধান আমাকে দুই ঘন্টা বা তারও কম সময়ে এটি করতে দেয় তবে আমি এটি ভালভাবে ব্যয় করা এবং নতুন কিছু শেখার বিষয়টি বিবেচনা করব। আমি এই উত্তরটি গ্রহণ করব (ঠিকানার জায়গার শেষে আমার স্মৃতিটি ব্যর্থ হয়ে গেছে) তবে কারও কাছে যদি আরও বহুমুখী সমাধান থাকে তবে আমি এটিকে ভবিষ্যতের রেফারেন্সের জন্য পছন্দ করব।
বব

@ বোবি - সবেমাত্র এটি বেশ বিস্তৃতভাবে পড়ে, দেখা যাচ্ছে যে এটি সম্ভব নয়। এটি কারণ, বুডলোডার থেকে খারাপ ঠিকানাগুলি বাদ দেওয়ার জন্য কার্নেলকে নির্দেশ দেওয়ার জন্য বাড্রাম স্মৃতিশক্তি ব্যবহার করে, উইন্ডোজ এটি করতে অক্ষম কারণ বর্তমানে কোনও খারাপ অ্যাড্রেসগুলি বাদ দেওয়ার জন্য কোনও খারাপ অ্যাড্রেস একইভাবে বাদ দেওয়া যায় না কারণ কোনও BadRam প্যাচ করা কার্নেল পারে ।
অলিভার জি

3

এই ব্যবহারটি দেখুন: https://github.com/prsyahmi/BadMemory

এটি ব্যবহার করা খুব সহজ এবং অ্যাড্রেস রেঞ্জকে ব্লক করা সমর্থন করে। এবং আপনি শেষ তিনটি সংখ্যা না সরিয়ে মেমস্টেস্ট 86 থেকে প্রাপ্ত সম্পূর্ণ ঠিকানা ব্যবহার করতে পারেন।


2

সতর্কতা বিশেষ !!! উইন্ডোজ বুট করতে ব্যর্থ হতে পারে, বিসিডি পুনর্নির্মাণের জন্য প্রস্তুত থাকুন। সে ক্ষেত্রে কমান্ড প্রম্পটে অ্যাডভান্সড স্টার্টআপ অপশন ব্যবহার করুন। আমি জানি না কেন এটি আর বুট করবে না, এলোমেলোভাবে ঘটবে বলে মনে হচ্ছে বা আপনি যদি খুব বেশি অ্যাড্রেসগুলি ব্যাডমেরিলিস্টে রাখেন।

bootrec /rebuild bcd
bcdedit /export c:\bcdbackup
attrib c:\boot\bcd -h -r -s
ren c:\boot\bcd bcd.old
bootrec /rebuild bcd

Heres একটি সি ++ কমান্ড প্রম্পট প্রোগ্রাম যা একটি .txt ফাইলের জন্য প্রস্তুত bcdedit /set badmemorylistবা bcdedit /set {badmemory} badmemorylist(আমার জন্য উইন 7 এ কাজ করে না) একটি ক্রমাগত মেমরি অ্যাড্রেস তালিকা পায় me

ব্যবহার করুন bcdedit /set badmemoryaccess 0অ্যাক্সেস অস্বীকার করতে।

আপনি উইজেটিং সেটিংস -> বিশদতে ইজিবিসিডি দিয়ে পরীক্ষা করতে পারেন। ফিজিকাল অ্যাড্রেস স্পেস নিখোঁজ হয়ে গেলে রামম্যাপের সাথে চেক দিয়ে পুনঃসূচনা করার পরে।

#include <cstdlib>
#include <iostream>
#include <fstream>

//converts hex into base10
unsigned long convertHexToIntBase10(char* inputHex)
{
    unsigned long hexValue = std::strtoul(inputHex, 0, 16);
    return hexValue;
}

int main(int argc, char* argv[])
{
    if(argc < 3){
        std::cerr << "Usage: MemoryPageListHex [Low Memory Adress] [High Memory Adress] in 4k Pages i.e. MemoryPageListHex 1bae50 1bb0e7 for 0x1bae50148 to 0x1bb0e7fe8" << std::endl;
        return 0;
    }
    auto lowAdr = convertHexToIntBase10(argv[1]);
    auto highAdr = convertHexToIntBase10(argv[2]);
    std::ofstream myfile;
    myfile.open ("MemoryAdress4k.txt");
    for (auto i=lowAdr; i<highAdr; i++){
        myfile << std::hex << "0x" << i << " ";
    }
    myfile.close();
    return 0;
}

1

হ্যাঁ। উইন্ডোজ যে পরিমাণ মেমরি ব্যবহার করতে পারে তা নিয়ন্ত্রণ করতে বুট প্যারামিটার রয়েছে। আপনি কেবল মেমরি স্পেসের শেষ থেকে সরাতে পারেন। বুট প্যারামিটারগুলি নিয়ন্ত্রণ করতে এই এমএসডিএন নিবন্ধটি দেখুন । আগ্রহের পরামিতিগুলি হ'ল truncatememoryএবং removememory


মেমোরি কেটে ফেলা এবং মুছে ফেলা কেবল র‌্যাম অ্যাক্সেস কেটে ফেলা বলে মনে হচ্ছে (প্রদত্ত থ্রিজল্ড থেকে শুরু করে, বা শেষ থেকে পিছনে কাজ করা)। এই প্রশ্নটি ব্যাপ্তি প্রদান সম্পর্কে আরও ছিল।
মির্হ

0

আপনি উইন্ডোজ in এ এই বৈশিষ্ট্যটি ব্যবহার করে দেখতে পারেন , তবে আমি নিশ্চিত নই যে এটি কোন চিপটি কার্যকর করবে, বা যদি এটি প্রতিটি পরিমাণের সমান পরিমাণে স্কিম করে। আমি এটি খুঁজে পেতে চারপাশে দেখতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.