উচ্চ তেজস্ক্রিয় পরিবেশে ব্যবহারের জন্য একটি অ্যাপ্লিকেশন সংকলন


1455

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

আমাদের কোডগুলিতে আমরা কী কী পরিবর্তন করতে পারি, বা একক ইভেন্টের আপসেটের কারণে নরম ত্রুটিগুলি এবং স্মৃতি-দুর্নীতি সনাক্ত / সংশোধন করার জন্য সংকলন-সময়ের উন্নতিগুলি করা যায় ? দীর্ঘদিন ধরে চলমান অ্যাপ্লিকেশনটিতে নরম ত্রুটির ক্ষতিকারক প্রভাবগুলি হ্রাস করতে অন্য কোনও বিকাশকারীদের সাফল্য আছে কি?


186
মেমোরিতে মানগুলি পরিবর্তন হচ্ছে বা প্রসেসরের মানগুলি পরিবর্তন হচ্ছে? হার্ডওয়্যারটি যদি পরিবেশের জন্য ডিজাইন করা থাকে তবে সফ্টওয়্যারটি এমনভাবে চালানো উচিত যেন একটি অ-তেজস্ক্রিয় পরিবেশে চলছে।
টমাস ম্যাথিউজ

3
যদি সম্ভব হয় তবে আপনার একটি লগিং সিস্টেম স্থাপন করা উচিত যা অ-উদ্বায়ী মেমরিতে ইভেন্টগুলি সঞ্চয় করে যা বিকিরণের প্রতিরোধী। পর্যাপ্ত তথ্য সংরক্ষণ করুন যাতে আপনি ইভেন্টটি সনাক্ত করতে এবং সহজেই মূল কারণটি সন্ধান করতে পারেন।
টমাস ম্যাথিউজ

2
@ থমাস ম্যাথিউস সমস্ত স্মৃতিতে একটি এফআইটি ত্রুটি হার রয়েছে এবং হার্ডওয়্যার উত্পাদন করে প্রচুর প্রতিশ্রুতি দেয়। বেশিরভাগ ইস্যুগুলি সম্ভবত এসইইউ দ্বারা রানটাইম সময়ে র‌্যাম সংশোধন করে।
রোপ

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

5
অপ্রয়োজনীয় মোটামুটি মোটরস, কিছু গিয়ারস, শ্যাফট এবং র‌্যাচেট! বার্ষিক বা আরও প্রায়শই ডোজ রেটের প্রয়োজন হিসাবে প্রতিস্থাপন করুন। আসলেই না, এই ধরণের সমস্যাগুলির সাথে আমার প্রথম প্রশ্নটি সবসময়ই ছিল, সেখানে আপনার কি সত্যিই এত বেশি সফ্টওয়্যার দরকার? আপনি সম্ভবত এড়াতে পারেন হিসাবে অ্যানালগ হিসাবে।
jwdonahue

উত্তর:


813

সফটওয়্যার / ফার্মওয়্যার ডেভলপমেন্ট এবং মিনিয়েচারাইজড উপগ্রহগুলির পরিবেশগত পরীক্ষার সাথে প্রায় 4-5 বছর ধরে কাজ করা , আমি আমার অভিজ্ঞতাটি এখানে ভাগ করে নিতে চাই।

* ( ছোট আকারের উপগ্রহগুলি তার বৈদ্যুতিন উপাদানগুলির জন্য অপেক্ষাকৃত ছোট, সীমিত আকারের কারণে বড় উপগ্রহগুলির তুলনায় একক ইভেন্ট আপসেটের ঝুঁকিতে বেশি )

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

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

  1. ... পুনরুদ্ধারের উদ্দেশ্যে ... । বাস্তব পরিবেশে আপনার সফ্টওয়্যার / ফার্মওয়্যারটি আপডেট / পুনরায় সংকলন / পুনরায় চাপ দেওয়ার ক্ষমতা সরবরাহ করুন। উচ্চ আয়নযুক্ত পরিবেশে এটি কোনও সফ্টওয়্যার / ফার্মওয়্যারটির জন্য প্রায় অবশ্যই একটি বৈশিষ্ট্য। এটি না করে আপনি যতটা চান রিডানড্যান্ট সফ্টওয়্যার / হার্ডওয়্যার রাখতে পারেন তবে এক পর্যায়ে, তারা সবগুলি ফুটিয়ে তুলবে। সুতরাং, এই বৈশিষ্ট্য প্রস্তুত!

  2. ... সর্বনিম্ন কার্যকরী সংস্করণ ... আপনার কোডটিতে প্রতিক্রিয়াশীল, একাধিক অনুলিপি, সফ্টওয়্যার / ফার্মওয়্যারের নূন্যতম সংস্করণ রয়েছে। এটি উইন্ডোজে নিরাপদ মোডের মতো। আপনার সফ্টওয়্যারটির কেবল একটির সম্পূর্ণ কার্যক্ষম সংস্করণ না রেখে আপনার সফ্টওয়্যার / ফার্মওয়্যারের সর্বনিম্ন সংস্করণটির একাধিক কপি রাখুন। সর্বনিম্ন অনুলিপিটিতে সাধারণত সম্পূর্ণ কপির চেয়ে অনেক কম আকার থাকে এবং প্রায় সবসময় কেবলমাত্র নিম্নলিখিত দুটি বা তিনটি বৈশিষ্ট্য থাকে:

    1. বাহ্যিক সিস্টেম থেকে আদেশ শোনার সক্ষম,
    2. বর্তমান সফ্টওয়্যার / ফার্মওয়্যার আপডেট করতে সক্ষম,
    3. বেসিক অপারেশনের গৃহকর্মের ডেটা পর্যবেক্ষণ করতে সক্ষম।
  3. ... অনুলিপি ... কোথাও ... কোথাও রিডানড্যান্ট সফটওয়্যার / ফার্মওয়্যার রয়েছে।

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

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

    2. তবে আপনি যদি এটি না করে থাকেন তবে আপনার বাহ্যিক সিস্টেমে কমপক্ষে একটি অনুলিপি থাকা উচিত যা ডিভাইসের সংস্পর্শে আসতে পারে এবং সফ্টওয়্যার / ফার্মওয়্যার আপডেট করতে পারে (স্যাটেলাইট ক্ষেত্রে এটি আবার মিশন নিয়ন্ত্রণ কেন্দ্র)।

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

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

একক ইভেন্টের বিপর্যয়ের কারণে ফার্মওয়্যারের ত্রুটি সম্পর্কে প্রত্যাশার জন্য পরামর্শ ছাড়াও, আমি আপনাকে এটির পরামর্শও দিতে চাই:

  1. আন্তঃ সাব-সিস্টেম সিস্টেম প্রোটোকলে ত্রুটি সনাক্তকরণ এবং / অথবা ত্রুটি সংশোধন অ্যালগরিদম। অন্যান্য সিস্টেম থেকে প্রাপ্ত অসম্পূর্ণ / ভুল সংকেত এড়ানোর জন্য এটি প্রায় অবশ্যই থাকতে হবে

  2. আপনার এডিসি পড়াতে ফিল্টার করুন। সরাসরি এডিসি পড়া ব্যবহার করবেন না । এটিকে মাঝারি ফিল্টার, মধ্যবর্তী ফিল্টার বা অন্য কোনও ফিল্টার দ্বারা ফিল্টার করুন - একক পড়ার মানটিকে কখনই বিশ্বাস করবেন না । আরও নমুনা, কম নয় - যুক্তিসঙ্গত।


401

রেডিয়েশন-কঠোর সফ্টওয়্যার সম্পর্কিত নাসার একটি কাগজ রয়েছে । এটি তিনটি প্রধান কার্য বর্ণনা করে:

  1. ত্রুটিগুলির জন্য মেমরির নিয়মিত পর্যবেক্ষণ করুন এবং সেই ত্রুটিগুলি স্ক্র্যাব করে,
  2. শক্তিশালী ত্রুটি পুনরুদ্ধার ব্যবস্থা, এবং
  3. কিছু যদি আর কাজ না করে তবে পুনরায় কনফিগার করার ক্ষমতা।

মনে রাখবেন যে মেমরি স্ক্যানের হারটি পর্যাপ্ত পরিমাণে হওয়া উচিত যা মাল্টি-বিট ত্রুটি খুব কমই ঘটে থাকে, কারণ বেশিরভাগ ইসিসি মেমরিটি একক-বিট ত্রুটিগুলি থেকে পুনরুদ্ধার করতে পারে, মাল্টি-বিট ত্রুটিগুলি থেকে নয়।

দৃ error় ত্রুটি পুনরুদ্ধারের মধ্যে নিয়ন্ত্রণ প্রবাহ স্থানান্তর (সাধারণত ত্রুটির আগে এক পর্যায়ে একটি প্রক্রিয়া পুনরায় চালু করা), রিসোর্স রিলিজ এবং ডেটা পুনরুদ্ধার অন্তর্ভুক্ত থাকে।

তথ্য পুনরুদ্ধারের জন্য তাদের প্রধান পরামর্শটি হ'ল মধ্যবর্তী তথ্য অস্থায়ী হিসাবে গণ্য করার মাধ্যমে এটির প্রয়োজনীয়তা এড়ানো, যাতে ত্রুটি হওয়ার আগে পুনরায় চালু করাও ডেটাটিকে একটি নির্ভরযোগ্য অবস্থায় ফিরিয়ে দেয়। এটি ডাটাবেসে "লেনদেন" ধারণার অনুরূপ বলে মনে হচ্ছে।

তারা সি ++ এর মতো অবজেক্ট-ভিত্তিক ভাষার জন্য বিশেষত উপযোগী কৌশলগুলি নিয়ে আলোচনা করেন। উদাহরণ স্বরূপ

  1. সুসংগত মেমরি অবজেক্টের জন্য সফ্টওয়্যার ভিত্তিক ইসিসি
  2. চুক্তি অনুসারে প্রোগ্রামিং : পূর্বশর্ত এবং পোস্টকন্ডিশনগুলি যাচাই করা, তারপরে এটি যাচাই করার জন্য বস্তুটি পরীক্ষা করা এখনও বৈধ অবস্থায় রয়েছে।

এবং, ঠিক তাই ঘটে, নাসা মার্স রোভারের মতো বড় প্রকল্পগুলির জন্য সি ++ ব্যবহার করেছে ।

সি ++ শ্রেণীর বিমূর্ততা এবং এনক্যাপসুলেশন একাধিক প্রকল্প এবং বিকাশকারীদের মধ্যে দ্রুত বিকাশ এবং পরীক্ষা সক্ষম করে।

তারা নির্দিষ্ট সি ++ বৈশিষ্ট্যগুলি এড়িয়ে গিয়েছিল যা সমস্যা তৈরি করতে পারে:

  1. ব্যতিক্রমসমূহ
  2. টেমপ্লেট
  3. আইস্ট্রিম (কোনও কনসোল নেই)
  4. একাধিক উত্তরাধিকার
  5. অপারেটর ওভারলোডিং ( newএবং অন্যান্য delete)
  6. গতিশীল বরাদ্দ ( newসিস্টেম হিপ দুর্নীতির সম্ভাবনা এড়াতে একটি উত্সর্গীকৃত মেমরি পুল এবং প্লেসমেন্ট ব্যবহার করে )।

28
এটি প্রকৃতপক্ষে এমন কিছু বলে মনে হচ্ছে যা একটি খাঁটি ভাষা ভাল। যেহেতু মানগুলি কখনই পরিবর্তিত হয় না, যদি সেগুলি ক্ষতিগ্রস্ত হয় তবে আপনি কেবলমাত্র মূল সংজ্ঞাটিতে ফিরে যেতে পারেন (যা এটি বলে মনে করা হয়) এবং আপনি ঘটনাক্রমে দু'বার একই জিনিস করতে পারবেন না (পার্শ্ব প্রতিক্রিয়াগুলির অভাবে)।
পাইরুলেজ

20
RAII হ'ল একটি খারাপ ধারণা, কারণ আপনি এটি সঠিকভাবে বা এমনকি আদৌ সম্পাদন করতে পারবেন না। এটি এলোমেলোভাবে আপনার ডেটা ক্ষতিগ্রস্থ করতে পারে You কোনওভাবে চেষ্টা ও মেরামত করার চেয়ে ভাঙা জিনিস ফেলে দেওয়া অনেক সহজ (সঠিক পুরানো অবস্থায় ফিরে যাওয়ার জন্য আপনি কীভাবে যথেষ্ট জানেন?) আপনি সম্ভবত এটির জন্য বরং একটি বোকা ভাষা ব্যবহার করতে চান, যদিও - অনুকূলকরণগুলি তাদের সাহায্যের চেয়ে আরও বেশি ক্ষতি করতে পারে।
লুয়ান

67
@ পাইরুলেজ: খাঁটি ভাষা একটি বিমূর্ততা, হার্ডওয়্যার খাঁটি নয়। কম্পাইলাররা পার্থক্যটি আড়াল করতে বেশ ভাল। আপনার প্রোগ্রামটির যদি মান থাকে তবে এটি ধাপে X ধাপের পরে আর ব্যবহার করা উচিত নয়, সংকলকটি এটি এমন একটি মান দিয়ে ওভাররাইট করতে পারে যা ধাপ X + 1 তে গণনা করা হয়। তবে এর অর্থ আপনি আর ফিরে যেতে পারবেন না। আরও আনুষ্ঠানিকভাবে, খাঁটি ভাষায় কোনও প্রোগ্রামের সম্ভাব্য রাজ্যগুলি অ্যাসাইক্লিক গ্রাফ গঠন করে, যার অর্থ দুটি রাষ্ট্র সমতুল্য হয় এবং যখন উভয় থেকে প্রাপ্ত রাজ্যগুলি সমতুল্য হয় তখন মিশে যায়। এই সংযুক্তি those রাজ্যগুলির দিকে পরিচালিত পথে পার্থক্যকে ধ্বংস করে।
এমএসএলটাররা

2
@ ভোরাক - উপস্থাপনা অনুযায়ী সি ++ টেমপ্লেটগুলির সাথে উদ্বেগ হ'ল কোড ব্লাট।
jww

3
@ ডিয়ারস্পোটার এর চেয়ে সঠিক সমস্যাটি আরও অনেক বড়। আয়নায়ন আপনার চলমান প্রহরী প্রোগ্রামের বিটগুলিকে ক্ষতি করতে পারে। তারপরে আপনার
কোনও প্রহরীর

116

এখানে কিছু চিন্তাভাবনা এবং ধারণা রয়েছে:

আরও সৃজনশীলভাবে রম ব্যবহার করুন।

রমে আপনি যা কিছু করতে পারেন সঞ্চয় করুন। জিনিসগুলি গণনা করার পরিবর্তে, রমে লুক-আপ টেবিলগুলি সঞ্চয় করুন। (নিশ্চিত করুন যে আপনার সংকলকটি কেবলমাত্র পঠনযোগ্য বিভাগে আপনার চেহারা-সারণীগুলি আউটপুট দিচ্ছে! যাচাই করার জন্য রানটাইমের সময় মেমরির ঠিকানাগুলি মুদ্রণ করুন!) আপনার বাধা ভেক্টর টেবিলটি রমে সংরক্ষণ করুন। অবশ্যই, আপনার র‌্যামের সাথে আপনার রমের তুলনা কতটা নির্ভরযোগ্য তা দেখতে কয়েকটি পরীক্ষা চালান।

স্ট্যাকের জন্য আপনার সেরা র‌্যাম ব্যবহার করুন।

স্ট্যাকের এসইইউগুলি সম্ভবত ক্র্যাশগুলির সর্বাধিক সম্ভাব্য উত্স, কারণ এটি হ'ল সূচক ভেরিয়েবল, স্ট্যাটাস ভেরিয়েবল, রিটার্ন ঠিকানা এবং বিভিন্ন ধরণের পয়েন্টারগুলির মতো জিনিস সাধারণত বাস করে live

টাইমার-টিক এবং ওয়াচডগ টাইমার রুটিন প্রয়োগ করুন।

আপনি প্রতিটি টাইমার টিকের একটি "স্যানিটি চেক" রুটিন চালাতে পারেন, পাশাপাশি সিস্টেম লকআপটি পরিচালনা করতে একটি ওয়াচডগ রুটিনও চালাতে পারেন। আপনার প্রধান কোডটি পর্যায়ক্রমে অগ্রগতি নির্দেশ করার জন্য একটি কাউন্টারকে বাড়িয়ে তুলতে পারে এবং বিচক্ষণতা-চেকের রুটিন নিশ্চিত করে যে এটি ঘটেছে।

সফ্টওয়্যারটিতে ত্রুটি-সংশোধন-কোডগুলি প্রয়োগ করুন ।

ত্রুটিগুলি সনাক্ত করতে এবং / অথবা সঠিক করতে আপনি নিজের ডেটাতে রিডানডেন্সি যুক্ত করতে পারেন। এটি প্রসেসিংয়ের সময় যুক্ত করবে, প্রসেসরটিকে দীর্ঘ সময়ের জন্য রেডিয়েশনের সংস্পর্শে রেখে, ত্রুটির সম্ভাবনা বাড়িয়ে তুলবে, সুতরাং আপনাকে অবশ্যই বাণিজ্য বন্ধ বিবেচনা করতে হবে।

ক্যাশে মনে রাখবেন।

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

পৃষ্ঠা-ফল্ট হ্যান্ডলারগুলি চতুরতার সাথে ব্যবহার করুন।

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

সমালোচনামূলক জিনিসগুলির জন্য সমাবেশ ভাষা ব্যবহার করুন (যা সব কিছু হতে পারে)।

সমাবেশ ভাষার সাথে, আপনি জানেন যে নিবন্ধগুলিতে কী আছে এবং র‌্যামে কী রয়েছে; আপনি কী জানেন যে সিপিইউ কী বিশেষ র‌্যাম টেবিল ব্যবহার করছে এবং আপনি আপনার ঝুঁকি কমিয়ে আনার জন্য কোনও চক্রাকার উপায়ে জিনিস ডিজাইন করতে পারেন।

objdumpউত্পন্ন সমাবেশের ভাষাটি দেখার জন্য ব্যবহার করুন এবং আপনার প্রতিটি রুটিনে কত কোড গ্রহণ করবে তা নিয়ে কাজ করুন।

আপনি যদি লিনাক্সের মতো কোনও বড় ওএস ব্যবহার করেন তবে আপনি সমস্যার জন্য জিজ্ঞাসা করছেন; এখানে অনেক জটিলতা এবং অনেক কিছু ভুল হতে আছে।

মনে রাখবেন এটি সম্ভাবনার একটি খেলা।

একজন মন্তব্যকারী মো

ত্রুটিগুলি ধরতে আপনি যে প্রতিটি রুটিন লিখেছেন তা একই কারণ থেকে নিজেকে ব্যর্থ করতে পারে।

এটি সত্য হলেও, অন্য কোথাও ত্রুটির সম্ভাবনার চেয়ে চেক রুটিনটি সঠিকভাবে কাজ করতে প্রয়োজনীয় কোডের 100 বাইটের কোড এবং ডেটাতে ত্রুটির সম্ভাবনা অনেক কম। যদি আপনার রমটি বেশ নির্ভরযোগ্য এবং প্রায় সমস্ত কোড / ডেটা আসলে রমে থাকে তবে আপনার প্রতিক্রিয়া আরও ভাল।

অপ্রয়োজনীয় হার্ডওয়্যার ব্যবহার করুন।

অভিন্ন কোড সহ 2 বা ততোধিক অভিন্ন হার্ডওয়্যার সেটআপ ব্যবহার করুন। ফলাফলগুলি পৃথক হলে, একটি রিসেট ট্রিগার করা উচিত। 3 বা ততোধিক ডিভাইসের সাহায্যে আপনি কোন "ভোটদান" সিস্টেমটি ব্যবহার করতে পারেন এটি চিহ্নিত করার চেষ্টা করার জন্য কোনটি আপস করা হয়েছে।


14
আজকাল, হার্ডওয়ারের মাধ্যমে ইসিসি পাওয়া যায় যা প্রক্রিয়াকরণের সময় সাশ্রয় করে। প্রথম পদক্ষেপটি হ'ল বিল্ট-ইন ইসিসি সহ একটি মাইক্রোকন্ট্রোলার বাছাই করা।
লন্ডিন

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

8
@ পিটারএম: এএফাইক বোয়িং 77 777 এর জন্য বিমান সফটওয়্যারটির জন্যও দাবি করেছে: তিনটি প্রোগ্রামিং ভাষায় তিনটি দল তিনটি সংস্করণ।
মনিকা পুনরায় ইনস্টল করুন - এম। শ্রাইডার

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

7
@ ডানস্প্পারজা: একাধিক ধরণের রম স্মৃতি রয়েছে। যদি "আরওএম" ইপি্রাম বা ফ্ল্যাশ রিডনলি-এ-5 ভি কিন্তু প্রোগ্রামেবল-এ-10 ভি দ্বারা অনুকরণ করা হয় তবে অবশ্যই "রম" এখনও আয়নকরণের প্রবণ pr অন্যের চেয়ে হয়তো কম। যাইহোক, মাস্ক রম বা ফিউজ-ভিত্তিক পিএমএম এর মতো ভাল ওল 'শক্তিশালী জিনিস রয়েছে যা আমি মনে করি ব্যর্থতা শুরু করতে সত্যিকারের গুরুতর পরিমাণে রেডিয়েশনের প্রয়োজন হবে। আমি এখনও জানি না যদি এখনও উত্পাদিত হয়।
কোয়েটজলকোটল

104

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

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

সেই কাগজের আরও সাম্প্রতিক বংশধর হলেন বোসিলকা, ডেলমাস, দোঙ্গারা এবং ল্যাঙ্গুর " অ্যালগোরিদম-ভিত্তিক ফল্ট সহনশীলতা উচ্চ পারফরম্যান্সের কম্পিউটিংয়ে প্রয়োগ হয়েছে "।


5
আমি আপনার প্রতিক্রিয়া সত্যিই পছন্দ। এটি ডেটা অখণ্ডতার জন্য আরও জেনেরিক সফ্টওয়্যার পদ্ধতি এবং আমাদের চূড়ান্ত পণ্যটিতে একটি অ্যালগোরিদমিক ভিত্তিক ফল্ট সহনশীলতা সমাধান ব্যবহার করা হবে। ধন্যবাদ!
রোক

40

তেজস্ক্রিয় পরিবেশের জন্য লিখিত কোড কোনও মিশন-সমালোচনামূলক অ্যাপ্লিকেশনটির জন্য লিখিত কোডের চেয়ে আসলে আলাদা নয়।

ইতিমধ্যে যা উল্লেখ করা হয়েছে তা ছাড়াও এখানে কয়েকটি বিবিধ টিপস দেওয়া হয়েছে:

  • যে কোনও আধা-পেশাদার এম্বেডড সিস্টেমে উপস্থিত থাকা উচিত প্রতিদিনের "ব্রেড এবং মাখন" সুরক্ষা ব্যবস্থাগুলি ব্যবহার করুন: অভ্যন্তরীণ নজরদারি, অভ্যন্তরীণ কম-ভোল্টেজ সনাক্তকরণ, অভ্যন্তরীণ ক্লক মনিটর। এই জিনিসগুলি এমনকি ২০১ 2016 সালে উল্লেখ করার দরকার নেই এবং এগুলি প্রতিটি আধুনিক মাইক্রোকন্ট্রোলারের তুলনায় বেশ মানক।
  • আপনার যদি সুরক্ষা এবং / অথবা স্বয়ংচালিতমুখী এমসিইউ থাকে তবে এতে নির্দিষ্ট ওয়াচডগ বৈশিষ্ট্য থাকবে যেমন একটি নির্দিষ্ট সময় উইন্ডো, যার ভিতরে আপনাকে ওয়াচডগটি রিফ্রেশ করতে হবে। যদি আপনার কাছে একটি মিশন-সমালোচনামূলক রিয়েল-টাইম সিস্টেম থাকে তবে এটি পছন্দ করা হয়।
  • সাধারণভাবে, এই জাতীয় সিস্টেমগুলির জন্য উপযুক্ত একটি এমসিইউ ব্যবহার করুন, এবং কোনও জেনেরিক মূলধারার ফ্লাফ নয় যা আপনি ভুট্টা ফ্লেকের প্যাকেটে পেয়েছেন। আজকাল প্রায় প্রতিটি এমসিইউ প্রস্তুতকারকের কাছে সুরক্ষা অ্যাপ্লিকেশনগুলির জন্য নকশাকৃত এমসিইউ রয়েছে (টিআই, ফ্রিস্কেল, রেনেসাস, এসটি, ইনফিনিয়ন ইত্যাদি)। এগুলিতে লক-স্টেপ কোর সহ প্রচুর অন্তর্নির্মিত সুরক্ষা বৈশিষ্ট্য রয়েছে: এর অর্থ হ'ল একই কোডটি সম্পাদনকারী 2 সিপিইউ কোর রয়েছে এবং তাদের অবশ্যই একে অপরের সাথে একমত হতে হবে।
  • গুরুত্বপূর্ণ: আপনাকে অবশ্যই অভ্যন্তরীণ এমসিইউ রেজিস্টারের নিখরচায়তা নিশ্চিত করতে হবে। রচনাযোগ্য এমন হার্ডওয়্যার পেরিফেরিয়ালগুলির সমস্ত নিয়ন্ত্রণ এবং স্থিতি রেজিস্ট্রিগুলি র্যাম মেমরিতে থাকতে পারে এবং তাই তারা দুর্বল।

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

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

  • র‌্যাম বা এনভিএম-তে ত্রুটিগুলি যাচাই করার জন্য সমস্ত ধরণের পদ্ধতি রয়েছে: চেকসামস, "ওয়াকিং প্যাটার্নগুলি", সফটওয়্যার ইসিসি ইত্যাদি ইত্যাদি etc. আজকাল সর্বোত্তম সমাধান হ'ল এর কোনওটি ব্যবহার না করা, বিল্ট-ইন ইসিসি সহ একটি এমসিইউ ব্যবহার করা এবং অনুরূপ চেক। কারণ সফ্টওয়্যারটিতে এটি করা জটিল এবং নিজেই ত্রুটি পরীক্ষা করা ত্রুটি এবং অপ্রত্যাশিত সমস্যার পরিচয় দিতে পারে।

  • অপ্রয়োজনীয়তা ব্যবহার করুন। আপনি দুটি অভিন্ন "আয়না" বিভাগে উদ্বায়ী এবং অ-উদ্বায়ী মেমরি উভয় সঞ্চয় করতে পারেন, এটি সর্বদা সমতুল্য হতে হবে। প্রতিটি বিভাগে একটি সিআরসি চেকসাম সংযুক্ত থাকতে পারে।
  • MCU এর বাইরে বাহ্যিক স্মৃতি ব্যবহার করা এড়িয়ে চলুন।
  • সমস্ত সম্ভাব্য বাধা / ব্যতিক্রমগুলির জন্য একটি ডিফল্ট বিঘ্নিত পরিষেবা রুটিন / ডিফল্ট ব্যতিক্রম হ্যান্ডলারটি প্রয়োগ করুন। এমনকি আপনি যেগুলি ব্যবহার করছেন না ডিফল্ট রুটিনটির নিজস্ব বাধা উত্সটি বন্ধ করা ছাড়া আর কিছুই করা উচিত নয়।
  • ডিফেন্সিভ প্রোগ্রামিংয়ের ধারণাটি বুঝতে এবং গ্রহণ করুন। এর অর্থ হল যে আপনার প্রোগ্রামটি সমস্ত সম্ভাব্য কেসগুলি পরিচালনা করতে হবে, এমনকি তাত্ত্বিকভাবে ঘটতে পারে না। উদাহরণ

    উচ্চমানের মিশন-সমালোচনামূলক ফার্মওয়্যার যথাসম্ভব ত্রুটি সনাক্ত করে এবং তারপরে সেগুলি নিরাপদে উপেক্ষা করে।

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

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

    একইভাবে সি ++ এ, স্ট্যাটিক স্টোরেজ সময়কাল ভেরিয়েবলগুলির জন্য কনস্ট্রাক্টরের উপর নির্ভর করবেন না। কনস্ট্রাক্টরকে একটি সর্বজনীন "সেট-আপ" রুটিন কল করুন, যা আপনি পরে কল করার পরে সরাসরি কলার অ্যাপ্লিকেশন থেকে কল করতে পারেন।

    যদি সম্ভব হয় তবে "কপিরাইট-ডাউন" স্টার্ট-আপ কোডটি সরিয়ে দিন যা পুরোপুরি আরম্ভ করে .dataএবং .bss(এবং সি ++ কনস্ট্রাক্টরকে কল করে), যাতে আপনি যদি এর উপর নির্ভর করে কোড লিখেন তবে আপনি লিঙ্কারের ত্রুটি পেতে পারেন। অনেক সংকলককে এড়িয়ে যাওয়ার বিকল্প রয়েছে, সাধারণত "মিনিমাল / ফাস্ট স্টার্ট-আপ" বা অনুরূপ called

    এর অর্থ হ'ল যে কোনও বাহ্যিক গ্রন্থাগারগুলি পরীক্ষা করতে হবে যাতে সেগুলিতে এ জাতীয় কোনও নির্ভরতা না থাকে।

  • প্রোগ্রামটির জন্য একটি নিরাপদ রাষ্ট্র প্রয়োগ করুন এবং সংজ্ঞা দিন, যেখানে আপনি গুরুতর ত্রুটির ক্ষেত্রে ফিরে যাবেন।

  • ত্রুটি প্রতিবেদন / ত্রুটি লগ সিস্টেম কার্যকর করা সর্বদা সহায়ক।

বুলিয়ানদের দুর্নীতিগ্রস্থ হওয়ার সাথে মোকাবিলা করার একটি উপায় (যেমন আপনার উদাহরণের লিঙ্কে) একটি থ্রেশহোল্ড দিয়ে ব্যবহারের TRUEসমান করা সম্ভব । 0xffffffffPOPCNT
wizzwizz4

@ wizzwizz4 প্রদত্ত যে 0xff মান হ'ল নন-প্রোগ্রামড ফ্ল্যাশ সেলের ডিফল্ট মান, এটি একটি খারাপ ধারণা বলে মনে হচ্ছে।
লন্ডিন

%01010101010101010101010101010101, এক্সওআর তখন পপসিএনটি?
wizzwizz4

1
@ wizzwizz4 বা সি মানক দ্বারা প্রয়োজনীয় মাত্র 0x1 মান।
লন্ডিন

1
@ wizzwizz4 আপনি উপরে উল্লিখিত কয়েকটি পদ্ধতি (ইসিসি, সিআরসি ইত্যাদি) কেন ব্যবহার করেন। অন্যথায় মহাজাগতিক রশ্মি পাশাপাশি আপনার .textবিভাগে একটি বিট ফ্লিপ করতে পারে , একটি বিকল্প কোড বা অনুরূপ পরিবর্তন করে।
লন্ডিন

34

এই জাতীয় পরিবেশে দৃ rob় আচরণ করে এমন প্রোগ্রাম লিখতে সি ব্যবহার করা সম্ভব হতে পারে তবে কেবলমাত্র সংকলক অপ্টিমাইজেশনের বেশিরভাগ ফর্ম অক্ষম থাকলেই। অপ্টিমাইজিং সংকলকগুলি "আরও দক্ষ" এর সাথে অনেকগুলি আপাতদৃষ্টিতে-অপ্রয়োজনীয় কোডিং নিদর্শনগুলি প্রতিস্থাপনের জন্য ডিজাইন করা হয়েছে এবং এতে কোনও ধারণা নেই যে প্রোগ্রামার x==42যখন পরীক্ষা করছিল তখন কম্পাইলার জানে xযে অন্য কোনও উপায় থাকতে পারে না কারণ প্রোগ্রামার প্রতিরোধ করতে চায় xকিছু অন্যান্য মান ধরে রাখার সাথে নির্দিষ্ট কোডের সম্পাদন - এমনকি এমন কিছু ক্ষেত্রেও যদি সিস্টেমটি কোনও ধরণের বৈদ্যুতিক ত্রুটি পেয়ে থাকে তবে সেই মানটি ধরে রাখতে পারে way

পরিবর্তনশীল হিসাবে ঘোষিত volatileকরা প্রায়শই সহায়ক, তবে প্যানেসিয়া নাও হতে পারে। বিশেষ গুরুত্ব সহকারে নোট করুন, নিরাপদ কোডিংয়ে প্রায়শই প্রয়োজন হয় যে বিপজ্জনক ক্রিয়াকলাপগুলিতে হার্ডওয়্যার ইন্টারলক থাকে যা সক্রিয় করার জন্য একাধিক পদক্ষেপের প্রয়োজন হয় এবং সেই কোডটি প্যাটার্ন ব্যবহার করে লেখা উচিত:

... code that checks system state
if (system_state_favors_activation)
{
  prepare_for_activation();
  ... code that checks system state again
  if (system_state_is_valid)
  {
    if (system_state_favors_activation)
      trigger_activation();
  }
  else
    perform_safety_shutdown_and_restart();
}
cancel_preparations();

যদি কোনও সংকলক কোডটি তুলনামূলক আক্ষরিক ফ্যাশনে অনুবাদ করে এবং সিস্টেমের স্থিতির জন্য সমস্ত চেক যদি এর পরে পুনরাবৃত্তি করা হয় prepare_for_activation()তবে সিস্টেমটি প্রায় কোনও প্রশংসনীয় একক ত্রুটির ঘটনার বিরুদ্ধে, এমনকি যেগুলি নির্বিচারে প্রোগ্রামের কাউন্টার এবং স্ট্যাককে দুর্নীতিগ্রস্থ করবে তার বিরুদ্ধেও দৃ .় হতে পারে। যদি কোনও কল করার পরেও কোনও ত্রুটি ঘটে থাকে তবে এটি prepare_for_activation()বোঝাবে যে সক্রিয়করণটি যথাযথ হবে (যেহেতু অন্য কোনও কারণেই prepare_for_activation()এই সমস্যাটির আগে ডাকা হত না)। যদি এই ভুলটি কোডটিকে prepare_for_activation()অনুপযুক্তভাবে পৌঁছায় , তবে পরবর্তী কোনও ত্রুটির ঘটনা না ঘটে তবে কোডের পরে trigger_activation()বৈধতা যাচাই বা ক্যান্সেল_প্রিপারেশনগুলি কল না করে পৌঁছানোর কোনও উপায় থাকবে না [যদি স্ট্যাক গ্লিটস থাকে তবে মৃত্যুদণ্ড কার্যকর হতে পারে ঠিক আগেtrigger_activation()সেই প্রসঙ্গের পরে যা prepare_for_activation()প্রত্যাবর্তন ডেকেছিল , কিন্তু কল করার cancel_preparations()সময় কলগুলির মধ্যে উপস্থিত হত prepare_for_activation()এবং trigger_activation()এভাবে পরের কলটি ক্ষতিহীন nd

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


6
বাস্তবিকভাবে বলতে গেলে, এমন কত আধুনিক সংকলক রয়েছে যা প্রস্তাব দেয় না -O0বা সমমানের সুইচ দেয় না? আপনি যদি অনুমতিটি দেন তবে জিসিসি প্রচুর অদ্ভুত কাজ করবে , তবে আপনি যদি এটি না করার কথা বলেন তবে এটি সাধারণত মোটামুটি আক্ষরিক হয়ে উঠতেও সক্ষম।
লুশেনকো

24
দুঃখিত, তবে এই ধারণাটি মূলত বিপজ্জনক। অপ্টিমাইজেশান অক্ষম করা একটি ধীর প্রোগ্রাম তৈরি করে। অথবা, অন্য কথায়, আপনার একটি দ্রুত সিপিইউ দরকার। এটি যেমন ঘটে থাকে তত দ্রুত সিপিইউ দ্রুত হয় কারণ তাদের ট্রানজিস্টর গেটের চার্জ আরও কম। এটি তাদের বিকিরণের চেয়ে অনেক বেশি সংবেদনশীল করে তোলে। আরও ভাল কৌশলটি হ'ল ধীর, বড় চিপ ব্যবহার করা যেখানে একক ফোটন কিছুটা কম ছিটকে যাওয়ার সম্ভাবনা কম রাখে এবং এর সাথে গতি ফিরে পায় -O2
এমসাল্টাররা

27
-O0এটি একটি খারাপ ধারণা হবার একটি দ্বিতীয় কারণ হ'ল এটি অনেক বেশি বেহুদা নির্দেশিকা নির্গত করে। উদাহরণ: একটি অন্তর্হিত কলটিতে নিবন্ধগুলি সংরক্ষণ করতে, কল করতে, রেজিস্টারগুলি পুনঃস্থাপনের জন্য নির্দেশাবলী রয়েছে। এই সমস্ত ব্যর্থ হতে পারে। যে নির্দেশ নেই সেখানে ব্যর্থ হতে পারে না।
এমসাল্টাররা

15
তবুও অন্য কারণটি -O0একটি খারাপ ধারণা: এটি কোনও রেজিস্টারের পরিবর্তে মেমরিতে ভেরিয়েবলগুলি সংরক্ষণ করে। এখন এটি নিশ্চিত নয় যে এসইইউর জন্য মেমরিটি বেশি সংবেদনশীল তবে বিমানের ডেটা বিশ্রামের ডেটার চেয়ে বেশি সংবেদনশীল। অকেজো ডেটা চলাচল এড়ানো উচিত এবং -O2সেখানে সহায়তা করা উচিত।
এমএসএলটাররা

9
@ এসএমএলটার্স: গুরুত্বপূর্ণ বিষয়টি হ'ল ডেটা ব্যত্যয় ঘটানোর প্রতিরোধী নয়, বরং সিস্টেম প্রয়োজনীয়তা পূরণের পদ্ধতিতে বাধাগুলি পরিচালনা করতে সক্ষম হবে। অনেক সংকলকগুলিতে সমস্ত অপ্টিমাইজেশনের ফলন কোড অক্ষম করে যা একটি অতিরিক্ত সংখ্যক নিবন্ধভুক্ত-নিবন্ধক পদক্ষেপগুলি সম্পাদন করে যা খারাপ, কিন্তু মেমরিতে ভেরিয়েবলগুলি সংরক্ষণ করা নিবন্ধগুলিতে রাখার চেয়ে পুনরুদ্ধারের দিক থেকে নিরাপদ। স্মৃতিতে যদি দুটি ভেরিয়েবল থাকে যা কিছু শর্ত মেনে চলবে বলে মনে করা হয় (উদাহরণস্বরূপ v1=v2+0xCAFEBABEএবং দুটি ভেরিয়েবলের সমস্ত আপডেট হয়ে গেছে ...
সুপারক্যাট

28

এটি একটি অত্যন্ত বিস্তৃত বিষয়। মূলত, আপনি মেমরির দুর্নীতি থেকে সত্যিই পুনরুদ্ধার করতে পারবেন না, তবে আপনি অন্তত তাড়াতাড়ি ব্যর্থ হওয়ার চেষ্টা করতে পারেন । আপনি ব্যবহার করতে পারেন কয়েকটি কৌশল এখানে:

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

  • অপ্রয়োজনীয় সাথে স্টোর ভেরিয়েবল । আপনাকে একটা জরুরী পরিবর্তনশীল থাকে x, তার মান লিখুন x1, x2এবং x3এবং এটি পড়া (x1 == x2) ? x2 : x3

  • প্রোগ্রাম প্রবাহ পর্যবেক্ষণ বাস্তবায়ন । মূল লুপ থেকে ডাকা গুরুত্বপূর্ণ ফাংশন / শাখায় একটি অনন্য মান সহ একটি গ্লোবাল পতাকা XOR X কাছাকাছি -100% পরীক্ষার কভারেজ সহ বিকিরণ-মুক্ত পরিবেশে প্রোগ্রামটি চালানো আপনাকে চক্রের শেষে পতাকাটির গ্রহণযোগ্য মানগুলির তালিকা দেয়। আপনি যদি বিচ্যুতি দেখেন তবে পুনরায় সেট করুন।

  • স্ট্যাক পয়েন্টার নিরীক্ষণ । মূল লুপের শুরুতে, স্ট্যাক পয়েন্টারটিকে তার প্রত্যাশিত মানের সাথে তুলনা করুন। বিচ্যুতির উপর পুনরায় সেট করুন।


27

আপনাকে কী সাহায্য করতে পারে তা হ'ল একটি নজরদারি । ১৯৮০-এর দশকে ওয়াচডোগগুলি শিল্পকৌশলটিতে ব্যাপকভাবে ব্যবহৃত হত। হার্ডওয়্যার ব্যর্থতা তখন অনেক বেশি সাধারণ ছিল - অন্য একটি উত্তরও সেই সময়টিকে বোঝায়।

একটি ওয়াচডগ হ'ল একটি সমন্বিত হার্ডওয়্যার / সফ্টওয়্যার বৈশিষ্ট্য। হার্ডওয়্যারটি এমন একটি সাধারণ কাউন্টার যা একটি সংখ্যা থেকে শূন্যের নিচে গণনা করা (1023 বলুন)। টিটিএল বা অন্যান্য যুক্তি ব্যবহার করা যেতে পারে।

সফ্টওয়্যারটি এমনভাবে তৈরি করা হয়েছে যাতে একটি রুটিন সমস্ত প্রয়োজনীয় সিস্টেমের সঠিক পরিচালনা পরিচালনা করে। যদি এই রুটিনটি সঠিকভাবে সম্পূর্ণ করে = কম্পিউটারটি সূক্ষ্মভাবে চলতে দেখেছে, তবে এটি কাউন্টারটিকে 1023 এ সেট করে।

সামগ্রিক নকশাটি যাতে সাধারণ পরিস্থিতিতে সফ্টওয়্যারটি হার্ডওয়ার কাউন্টারে শূন্যে পৌঁছায় তা প্রতিরোধ করে। যদি কাউন্টার শূন্যে পৌঁছে যায় তবে কাউন্টারটির হার্ডওয়ারগুলি তার একমাত্র একমাত্র কাজ সম্পাদন করে এবং পুরো সিস্টেমটিকে পুনরায় সেট করে। একটি পাল্টা দৃষ্টিকোণ থেকে শূন্য 1024 সমান এবং কাউন্টারটি আবার গণনা অব্যাহত রাখে।

এই ওয়াচডগটি নিশ্চিত করে যে সংযুক্ত কম্পিউটারটি ব্যর্থতার অনেকগুলি ক্ষেত্রে পুনরায় চালু হয়েছে। আমাকে অবশ্যই স্বীকার করতে হবে যে আমি আজকের কম্পিউটারগুলিতে এমন একটি ফাংশন সম্পাদন করতে সক্ষম এমন হার্ডওয়ারের সাথে পরিচিত নই। বাহ্যিক হার্ডওয়্যারের সাথে ইন্টারফেসগুলি এখন আগের চেয়ে অনেক জটিল।

ওয়াচডগের অন্তর্নিহিত অসুবিধা হ'ল ওয়াচডগ কাউন্টারের শূন্য + রিবুটের সময় না পাওয়া পর্যন্ত সিস্টেমটি ব্যর্থ হওয়ার সময় থেকে পাওয়া যায় না। যদিও সেই সময়টি যে কোনও বাহ্যিক বা মানবিক হস্তক্ষেপের তুলনায় সাধারণত অনেক কম থাকে, সমর্থিত সরঞ্জামগুলি সেই সময়সীমার জন্য কম্পিউটার নিয়ন্ত্রণ ছাড়াই এগিয়ে যেতে সক্ষম হতে হবে।


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


2
তবু ঘটনাক্রমে এম্বেড হওয়া প্রসেসরের ব্যাপক ব্যবহার।
গ্রাহাম

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

জ্যাক গ্যানসেলের ওয়াচডোগগুলি সম্পর্কে একটি ভাল নিবন্ধ রয়েছে: ganssle.com/watchdogs.htm
ইগোর স্কোচিনস্কি

23

এই উত্তরটি ধরে নিয়েছে যে আপনি এমন একটি সিস্টেম যা সঠিকভাবে কাজ করে, ন্যূনতম ব্যয় বা দ্রুত এমন একটি সিস্টেম রাখার সাথে আপনি উদ্বিগ্ন; বেশিরভাগ মানুষ তেজস্ক্রিয় জিনিস নিয়ে গতি / ব্যয়ের তুলনায় নির্ভুলতা / সুরক্ষাকে গুরুত্ব দেয়

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

এখানে কিছু ধারনা:

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

  • নিশ্চিত করুন যে আপনার আবেদনের অবস্থা একক স্থানে রয়েছে, যেমন একটি সীমাবদ্ধ রাষ্ট্রের মেশিনে। এটি পুরোপুরি র্যাম ভিত্তিক হতে পারে, যদিও এটি স্থিতিশীল স্টোরেজকে আবদ্ধ করে না। এটি বেশ কয়েকটি জায়গায় সংরক্ষণ করা হবে।

  • রাষ্ট্রের পরিবর্তনের জন্য একটি কোরাম প্রোটোকল গ্রহণ করুন। উদাহরণস্বরূপ RAFT দেখুন । আপনি যেহেতু সি ++ এ কাজ করছেন, এর জন্য সুপরিচিত গ্রন্থাগার রয়েছে। বেশিরভাগ নোড সম্মত হলে FSM এ পরিবর্তনগুলি ঘটে। প্রোটোকল স্ট্যাকের জন্য একটি পরিচিত ভাল গ্রন্থাগার এবং কোরাম প্রোটোকলটি নিজেকে রোল করার পরিবর্তে ব্যবহার করুন, বা কোরিয়াম প্রোটোকল স্তব্ধ হয়ে গেলে রিডানডেন্সিতে আপনার সমস্ত ভাল কাজ নষ্ট হবে।

  • আপনার চেকসাম নিশ্চিত করুন (যেমন সিআরসি / এসএএ) আপনার এফএসএম, এবং সিআরসি / এসএইচএ নিজেই এফএসএমে সংরক্ষণ করুন (পাশাপাশি বার্তায় প্রেরণ এবং মেসেজগুলি নিজেরাই চেকসামিং)। এই চেকসাম, চেকসাম আগত বার্তাগুলির বিরুদ্ধে নিয়মিত তাদের এফএসএম পরীক্ষা করার জন্য নোডগুলি পান এবং তাদের চেকসামটি কোরামের চেকসামের সাথে মিলে যায়।

  • আপনার সিস্টেমে যথাসম্ভব অন্যান্য অভ্যন্তরীণ চেকগুলি তৈরি করুন, নোডগুলি তৈরি করুন যা তাদের নিজস্ব ব্যর্থতা পুনরায় বুট সনাক্ত করে (আপনার পর্যাপ্ত নোড রয়েছে তবে এটি অর্ধেক কাজ চালিয়ে যাওয়ার চেয়ে ভাল)। পুনরায় বুট করার সময় তাদের আবার সামনে না আসার কারণে তাদের পরিষ্কারভাবে কোরাম থেকে নিজেকে সরিয়ে দেওয়ার চেষ্টা করুন। পুনরায় বুট করার সময় তাদের সফ্টওয়্যার চিত্রটি চেকসাম করুন (এবং তারা লোড করুন এমন কিছু) এবং কোরামটিতে নিজেকে পুনঃপ্রণয়ন করার আগে একটি সম্পূর্ণ র্যাম পরীক্ষা করুন।

  • আপনাকে সমর্থন করার জন্য হার্ডওয়্যার ব্যবহার করুন, তবে সাবধানতার সাথে এটি করুন। উদাহরণস্বরূপ, আপনি ইসিসি র‌্যাম পাবেন এবং ইসিসি ত্রুটিগুলি সংশোধন করার জন্য নিয়মিত এটির মাধ্যমে পড়তে / লিখতে পারেন (এবং ত্রুটিটি যদি সংশোধনযোগ্য না হয় তবে আতঙ্কিত হন)। তবে (মেমরি থেকে) স্ট্যাটিক র্যাম বিকিরণ ionizing চেয়ে ডির্যাম প্রথম স্থানে, তাই এটি এর অনেক বেশী সহনশীল হতে পারে ভাল ব্যবহার স্ট্যাটিক ডির্যাম পরিবর্তে হও। পাশাপাশি 'প্রথম জিনিসগুলি আমি করব না' এর অধীনে দেখুন।

ধরা যাক যে আপনার একদিনের মধ্যে প্রদত্ত কোনও নোডের ব্যর্থতা হওয়ার 1% সম্ভাবনা রয়েছে এবং আসুন আমরা ভেবে দেখি যে আপনি ব্যর্থতা সম্পূর্ণ স্বাধীন করতে পারেন। ৫ টি নোডের সাহায্যে আপনার এক দিনের মধ্যে তিনটি ব্যর্থ হতে হবে, এটি একটি .00001% সুযোগ। আরও, ভাল, আপনি ধারণা পেতে।

জিনিষ আমি চাই না করুন:

  • আরম্ভ না করতে সমস্যা না হওয়ার মানটিকে অবমূল্যায়ন করুন। ওজন কোনও উদ্বেগ না থাকলে আপনার ডিভাইসের চারপাশে ধাতবগুলির একটি বৃহত ব্লক প্রোগ্রামারদের একটি দল যে তুলনায় আসতে পারে তার চেয়ে অনেক সস্তা এবং আরও নির্ভরযোগ্য সমাধান হতে চলেছে। ইএমআইয়ের ইনপুটগুলির ডিট্টো অপটিক্যাল কাপলিং হ'ল একটি সমস্যা ইত্যাদি, যা কিছু হোক না কেন, আপনার উপাদানগুলিকে সোর্স করার সময় চেষ্টা করুন যা আয়নাইজিং রেডিয়েশনের বিরুদ্ধে সেরা রেট দেওয়া হয়।

  • আপনার নিজস্ব অ্যালগরিদমগুলি রোল করুন । লোকেরা এই জিনিসগুলি আগেও করে ফেলেছে। তাদের কাজ ব্যবহার করুন। ফল্ট সহনশীলতা এবং বিতরণ করা অ্যালগরিদমগুলি শক্ত। যেখানে সম্ভব সেখানে অন্য ব্যক্তির কাজ ব্যবহার করুন।

  • নিষ্পাপে জটিল সংকলক সেটিংস ব্যবহার করুন আশা করি আপনি আরও ব্যর্থতা সনাক্ত করতে পারেন। আপনি যদি ভাগ্যবান হন তবে আপনি আরও ব্যর্থতা সনাক্ত করতে পারেন। সম্ভবত, আপনি কমপাইলারের মধ্যে একটি কোড-পাথ ব্যবহার করবেন যা কম পরীক্ষা করা হয়েছে, বিশেষত যদি আপনি নিজেই এটি ঘূর্ণিত করেন।

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


2
ইথারনেট সম্ভবত মিশন-সমালোচনামূলক অ্যাপ্লিকেশনগুলিতে ব্যবহার করার জন্য দুর্দান্ত ধারণা নয়। দুটোই আইসিসি নয়, পিসিবি নিজেই বাইরে। CAN এর মতো কিছু শক্ত কাঠামো আরও উপযুক্ত হবে।
লন্ডিন

1
@ লন্ডিন ফেয়ার পয়েন্ট, যদিও অপটিকভাবে সংযুক্ত কিছু রয়েছে (Incl। ইথারনেট) ঠিক আছে should
এবলিগ করুন ab

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

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

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

23

যেহেতু আপনি বিশেষত সফ্টওয়্যার সমাধানের জন্য জিজ্ঞাসা করেছেন, এবং আপনি সি ++ ব্যবহার করছেন তাই আপনার নিজের, নিরাপদ ডেটাটাইপগুলি তৈরি করতে অপারেটর ওভারলোডিং কেন ব্যবহার করবেন না? উদাহরণ স্বরূপ:

uint32_t(এবং double, int64_tইত্যাদি) ব্যবহারের পরিবর্তে , আপনার নিজের তৈরি করুন SAFE_uint32_tযা uint32_t এর একাধিক (সর্বনিম্ন 3) থাকে। আপনি যে সমস্ত ক্রিয়াকলাপ চান তা ওভারলোড (* + - / << >> = ==! = ইত্যাদি) ওভারলোড হওয়া ক্রিয়াকলাপগুলি প্রতিটি অভ্যন্তরীণ মানের উপর স্বাধীনভাবে সঞ্চালন করুন, অর্থাৎ এটি একবার না করে ফলাফলটি অনুলিপি করুন। উভয় আগে এবং পরে, সমস্ত অভ্যন্তরীণ মান মেলে তা পরীক্ষা করে দেখুন। মানগুলি যদি মেলে না, তবে আপনি সবচেয়ে সাধারণের সাথে মানটিকে ভুলটিতে আপডেট করতে পারেন। যদি কোনও সর্বাধিক সাধারণ মান না থাকে তবে আপনি নিরাপদে জানাতে পারেন যে একটি ত্রুটি রয়েছে।

এএলইউ, রেজিস্টারস, র‌্যাম, বা কোনও বাসে দুর্নীতি ঘটে কিনা তাতে কিছু যায় আসে না, তবুও আপনার একাধিক প্রচেষ্টা এবং ত্রুটি ধরা দেওয়ার খুব ভাল সম্ভাবনা রয়েছে। তবে নোট করুন যদিও এটি কেবল পরিবর্তিত পরিবর্তনের জন্য কাজ করে - উদাহরণস্বরূপ আপনার স্ট্যাক পয়েন্টারটি এখনও সংবেদনশীল হবে।

পাশের গল্প: আমি পুরানো এআরএম চিপেও একইরকম ইস্যুতে দৌড়েছি। এটি এমন একটি সরঞ্জামচেইন হিসাবে দেখা গেল যা জিসিসির একটি পুরানো সংস্করণ ব্যবহার করেছিল যা আমরা নির্দিষ্ট চিপগুলির সাথে একসাথে কিছু প্রান্ত ক্ষেত্রে একটি বাগ উদ্দীপিত করে যা (কখনও কখনও) দূষিত মানগুলি ফাংশনে রূপান্তরিত করে। আপনার ডিভাইসে রেডিও-ক্রিয়াকলাপটিকে দোষ দেওয়ার আগে কোনও সমস্যা না হওয়ার বিষয়টি নিশ্চিত করুন এবং হ্যাঁ, কখনও কখনও এটি একটি সংকলক বাগ =)


1
এই পরামর্শগুলির মধ্যে
কয়েকটিতে

2
বিশ্বে এমন সিস্টেম রয়েছে যেখানে প্রতিটি অপ্রয়োজনীয় নোড বিভিন্ন টিম দ্বারা ডিজাইন করে তৈরি করা হয়েছিল, যাতে সালিসের সাথে তা নিশ্চিত হয়ে যায় যে তারা দুর্ঘটনাক্রমে একই সমাধানগুলিতে স্থায়ী হয়নি। এইভাবে আপনারা সমস্তগুলি একই বাগের জন্য নেমে যাবেন না এবং অনুরূপ স্থানান্তরগুলি অনুরূপ ব্যর্থতা মোডগুলি প্রকাশ করে না।
jwdonahue

16

দাবি অস্বীকার: আমি তেজস্ক্রিয় পেশাদার নই বা এই জাতীয় প্রয়োগের জন্য কাজ করি না। তবে আমি সমালোচনামূলক ডেটার দীর্ঘমেয়াদী সংরক্ষণাগারটির জন্য নরম ত্রুটি এবং রিডানডেন্সি নিয়ে কাজ করেছি, যা কিছুটা সংযুক্ত (একই সমস্যা, বিভিন্ন লক্ষ্য)।

আমার মতে তেজস্ক্রিয়তার মূল সমস্যাটি হ'ল তেজস্ক্রিয়তা বিটগুলি স্যুইচ করতে পারে, সুতরাং তেজস্ক্রিয়তা যে কোনও ডিজিটাল স্মৃতিকে বাধাগ্রস্থ করতে পারে / করবে । এই ত্রুটিগুলি সাধারণত নরম ত্রুটি , বিট পচা ইত্যাদি বলা হয় etc.

প্রশ্নটি তখন: যখন আপনার স্মৃতি অবিশ্বস্ত হয় তখন কীভাবে নির্ভরযোগ্যভাবে গণনা করা যায়?

নরম ত্রুটির হার উল্লেখযোগ্যভাবে হ্রাস করার জন্য (এটি বেশিরভাগ সফ্টওয়্যার ভিত্তিক সমাধান হিসাবে গণ্য ওভারহেড ব্যয়ে), আপনি নিম্নলিখিতটি করতে পারেন:

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

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

আপনি যদি স্থিতিস্থাপক ডেটা স্ট্রাকচারগুলিতে আগ্রহী হন (যা সাম্প্রতিক, তবে উত্তেজনাপূর্ণ, অ্যালগোরিদমিক্স এবং রিডানডেন্সি ইঞ্জিনিয়ারিংয়ে নতুন ক্ষেত্র), আমি আপনাকে নিম্নলিখিত ডকুমেন্টগুলি পড়তে পরামর্শ দিচ্ছি:

  • জিউসেপ এফ.ইটালিয়ানো, ইউনিভার্সিটি ডি রোমা "টোর ভারগাটা" দ্বারা সংক্ষিপ্ততর অ্যালগরিদম ডেটা স্ট্রাকচারের ভূমিকা

  • ক্রিশ্চিয়ানো, পি।, ডেইমাইন, ইডি, এবং কিশোর, এস (২০১১)। অ্যাডিটিভ ওভারহেড সহ লসলেস ফল্ট-সহনশীল ডেটা স্ট্রাকচার। অ্যালগরিদম এবং ডেটা স্ট্রাকচারগুলিতে (পৃষ্ঠা 243-254)। স্প্রিঞ্জার বার্লিন হাইডেলবার্গ।

  • ফেরারো-পেট্রিলো, মার্কিন যুক্তরাষ্ট্র, গ্রানডোনি, এফ, এবং ইটালিয়ানো, জিএফ (2013)। মেমরি ত্রুটিগুলির সাথে স্থিতিশীল ডেটা স্ট্রাকচারগুলি: অভিধানগুলির পরীক্ষামূলক অধ্যয়ন। পরীক্ষামূলক আলগোরিদিমিক্স জার্নাল (জেএএ), 18, 1-6।

  • ইটালিয়ানো, জিএফ (২০১০) স্থিতিস্থাপক আলগোরিদিম এবং ডেটা স্ট্রাকচার। অ্যালগরিদম এবং জটিলতায় (পৃষ্ঠা 13-24)। স্প্রিঞ্জার বার্লিন হাইডেলবার্গ।

আপনি যদি স্থিতিস্থাপক ডেটা স্ট্রাকচারের ক্ষেত্র সম্পর্কে আরও জানতে আগ্রহী হন তবে আপনি জিউসেপ এফ ইতালীয়ানো (এবং রেফগুলির মাধ্যমে আপনার কাজটি চালিয়ে যেতে পারেন) এবং ফাল্টি-র‌্যাম মডেল (ফিনোচি এট আল। 2005 সালে প্রবর্তিত; ফিনোচি এবং ইতালিয়ানো 2008)।

/ সম্পাদনা: আমি র‌্যাম মেমরি এবং ডেটা সঞ্চয় করার জন্য মূলত নরম-ত্রুটিগুলি থেকে রোধ / পুনরুদ্ধারের চিত্রিত করেছি, তবে আমি গণনা (সিপিইউ) ত্রুটি সম্পর্কে কথা বলিনি । অন্যান্য উত্তরগুলি ইতিমধ্যে ডাটাবেসে যেমন পারমাণবিক লেনদেন ব্যবহার করার দিকে ইঙ্গিত করেছে, তাই আমি আরেকটি সহজ সরল স্কিমের প্রস্তাব করব: অপ্রয়োজন এবং সংখ্যাগরিষ্ঠ ভোট

ধারণাটি হ'ল আপনি যে প্রতিটি গণনাটি করতে হবে তার জন্য আপনি কেবল x বার একই গণনা করতে পারেন এবং ফলাফলটি x বিভিন্ন ভেরিয়েবলগুলিতে (x> = 3 দিয়ে) সংরক্ষণ করেন। তারপরে আপনি আপনার এক্স ভেরিয়েবলগুলি তুলনা করতে পারেন :

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

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

সুতরাং সংখ্যাগরিষ্ঠ ভোটের সাহায্যে আপনি দূষিত আউটপুট থেকে নিরাপদ এবং অপ্রয়োজনীয় x == 3 এর সাহায্যে আপনি 1 টি ত্রুটি পুনরুদ্ধার করতে পারবেন (x == 4 দিয়ে এটি 2 ত্রুটি পুনরুদ্ধারযোগ্য হবে ইত্যাদি ইত্যাদি) - সঠিক সমীকরণটি nb_error_recoverable == (x-2)যেখানে x সংখ্যাটি গণনার পুনরাবৃত্তির কারণ আপনার সংখ্যাগরিষ্ঠ ভোট ব্যবহার করে পুনরুদ্ধার করতে কমপক্ষে 2 টি সম্মত গণনার দরকার পড়ে)।

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

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


9

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

উত্তরটি সাধারণত স্বয়ংক্রিয় ইউনিট পরীক্ষার হয়। উন্নয়ন ব্যবস্থায় কোডটি প্রয়োগ করে এমন পরীক্ষার জোতা লিখুন, তারপরে লক্ষ্য সিস্টেমে একই পরীক্ষার জোতাগুলি চালান। পার্থক্য সন্ধান করুন!

আপনার এম্বেড থাকা ডিভাইসে ত্রুটি-বিচ্যুতি পরীক্ষা করুন আপনি "এটি করবেন না কারণ এটি ক্র্যাশ হয়ে যাবে" এমন কিছু আছে এরকম কিছু আবিষ্কার করতে পারেন, সুতরাং সেই সংকলক বিকল্পটি সক্ষম করুন এবং সংকলক এটির চারপাশে কাজ করবে "।

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


1
প্রকৃতপক্ষে, প্রশ্নের পরীক্ষায় কোথাও লেখক উল্লেখ করেননি যে অ্যাপ্লিকেশনটি তেজস্ক্রিয় পরিবেশের ঠিক বাইরে চালিত হয়েছিল।
২৩7777

9

আপনি বিকিরণের পরিবেশের বাইরে মাস্টার সহ 3+ স্লেভ মেশিনগুলি চান। সমস্ত I / O মাস্টারটির মধ্য দিয়ে যায় যার মধ্যে একটি ভোট এবং / অথবা পুনরায় চেষ্টা করার পদ্ধতি রয়েছে। ক্রীতদাসদের অবশ্যই একটি হার্ডওয়ার ওয়াচডগ থাকতে হবে এবং তাদেরকে ঘায়েল করার কলটি সিআরসি দ্বারা ঘিরে রাখা উচিত বা অনৈতিক অনিয়মের সম্ভাবনা হ্রাস করার মতো। বাম্পিং মাস্টারের দ্বারা নিয়ন্ত্রণ করা উচিত, সুতরাং মাস্টারটির সাথে হারিয়ে যাওয়া সংযোগটি কয়েক সেকেন্ডের মধ্যেই রিবুটের সমান হয়।

এই সমাধানটির একটি সুবিধা হ'ল আপনি দাসদের মতো মাস্টার হিসাবে একই API ব্যবহার করতে পারেন, তাই অপ্রয়োজনীয়তা একটি স্বচ্ছ বৈশিষ্ট্য হয়ে ওঠে।

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


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

1
@ ফ্রস্ট্যান্ডি: দাসগণ হয় এমন একটি সরঞ্জাম ব্যবহার করে পরিমাপ বা নিয়ন্ত্রণ করছেন যা একটি নিয়ামকের প্রয়োজন। একটি জিগার কাউন্টার বলুন। দাস অতিরিক্ত কাজ করার কারণে মাস্টারের নির্ভরযোগ্য যোগাযোগের প্রয়োজন নেই।
জোনাস বাইস্টর্ম

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

5
বলা হচ্ছে, আপনার কাছে যদি বিকল্প থাকে তবে অবশ্যই তেজস্ক্রিয় পরিবেশের অভ্যন্তরে ইলেকট্রনিক্সকে যতটা সম্ভব সরল রাখার সাথে সাথে প্রোগ্রামটি যতটা না কোথাও কম উন্মোচিত হয়েছে "আউটসোর্স" করা ভাল হবে।
লন্ডিন

7

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


2
অবশ্যই একটি এম্বেড থাকা সিস্টেম বেশ কয়েকটি দৃances় প্রয়োগের জন্য হার্ডওয়ারের প্রয়োজনীয়তাগুলিকে সাফল্য না দিয়ে এবং কিছুটা অন্ধ ভাগ্য নিয়ে আশা করার চেয়ে দৃ application় প্রয়োগের এক উদাহরণে সুরক্ষা সমালোচনামূলক ক্যাচগুলিকে পছন্দ করবে যে কমপক্ষে একটি উদাহরণ ঠিক আছে? আমি ধারণাটি পেয়েছি এবং এটি বৈধ, তবে পরামর্শের দিকে আরও
ঝুঁকুন

7

আপনি যা জিজ্ঞাসা করছেন তা বেশ জটিল বিষয় - সহজে উত্তরযোগ্য নয়। অন্যান্য উত্তরগুলি ঠিক আছে, তবে আপনার যা করতে হবে সেগুলির কেবলমাত্র একটি ছোট অংশ এগুলি coveredেকে দিয়েছে।

মন্তব্যে দেখা গেছে , হার্ডওয়্যার সমস্যাগুলি 100% সমাধান করা সম্ভব নয়, তবে উচ্চ কৌশল দ্বারা এটি বিভিন্ন কৌশল ব্যবহার করে হ্রাস করা বা ধরা সম্ভব।

আমি যদি আপনি হয়ে থাকি তবে আমি সর্বোচ্চ সুরক্ষা সততা স্তরের স্তরের (এসআইএল -4) সফ্টওয়্যার তৈরি করতাম । আইসিসি 61513 নথিটি (পারমাণবিক শিল্পের জন্য) পান এবং এটি অনুসরণ করুন।


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

7

আয়নগুলি সহজেই বিটগুলি ফ্লিপ করা থেকে রোধ করতে ধীর চিপগুলি ব্যবহার করার কথা কেউ উল্লেখ করেছেন mentioned অনুরূপ ফ্যাশনে সম্ভবত একটি বিশেষায়িত সিপিইউ / র‌্যাম ব্যবহার করুন যা একক বিট সংরক্ষণ করতে একাধিক বিট ব্যবহার করে। সুতরাং একটি হার্ডওয়্যার ত্রুটি সহনশীলতা সরবরাহ করা কারণ এটি সমস্ত বিটগুলি উল্টে যাওয়ার সম্ভাবনা খুব কম। সুতরাং 1 = 1111 তবে 4 বার আঘাত করতে হবে বাস্তবে উল্টাতে। (4 টি যদি ইতিমধ্যে অস্পষ্ট হয়ে যায় তবে এটি 4 বাজে সংখ্যা হতে পারে)। সুতরাং আপনি যদি 8 এর সাথে যান তবে আপনি 8 গুণ কম র‌্যাম এবং কিছু ভগ্নাংশ ধীর অ্যাক্সেস সময় পাবেন তবে অনেক বেশি নির্ভরযোগ্য ডেটা উপস্থাপনা। আপনি সম্ভবত কোনও বিশেষায়িত সংকলক (সমস্ত কিছুর জন্য x পরিমাণ আরও বেশি পরিমাণ বরাদ্দ) বা ভাষা প্রয়োগকরণ (এমনভাবে ডেটা স্ট্রাকচারের জন্য মোড়কে লিখুন যা এইভাবে জিনিস বরাদ্দ করে) দিয়ে সফ্টওয়্যার পর্যায়ে উভয়ই এটি করতে পারেন।


7

সম্ভবত এটির সাহায্যে হার্ডওয়্যারটির "এই পরিবেশের জন্য ডিজাইন করা" অর্থ কী তা বোঝাতে সহায়তা করবে। এটি কীভাবে সংশোধন করে এবং / অথবা এসইউ ত্রুটির উপস্থিতি নির্দেশ করে?

একটি মহাকাশ অনুসন্ধান সম্পর্কিত প্রকল্পে, আমাদের একটি কাস্টম এমসিইউ ছিল, যা এসইউ ত্রুটিগুলিতে ব্যতিক্রম বা বাধাগ্রস্ত করবে, তবে কিছুটা বিলম্বের সাথে, অর্থাত্ কিছু চক্র এসইউ ব্যতিক্রম ঘটায় এমন একটি ইনসানের পরে পাস / নির্দেশাবলী কার্যকর করতে পারে।

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

আমরা বিপজ্জনক (পুনরায় আরম্ভযোগ্য নয়) সিকোয়েন্সগুলি সনাক্ত করেছি (যেমন lw $3, 0x0($2), একটি ইনসান অনুসরণ করে, যা সংশোধন করে $2এবং ডেটা নির্ভর করে না $3), এবং আমি জিসিসিতে পরিবর্তন করেছি, যাতে এই ধরণের ক্রমগুলি ঘটে না (যেমন একটি শেষ রিসোর্ট হিসাবে পৃথক করে পৃথক করে) two insns by a nop)।

কিছু বিবেচনা করার জন্য ...


7

যদি আপনার হার্ডওয়্যার ব্যর্থ হয় তবে আপনি এটি পুনরুদ্ধার করতে যান্ত্রিক স্টোরেজ ব্যবহার করতে পারেন। যদি আপনার কোড বেসটি ছোট হয় এবং কিছু শারীরিক জায়গা থাকে তবে আপনি একটি যান্ত্রিক ডেটা স্টোর ব্যবহার করতে পারেন।

এখানে চিত্র বিবরণ লিখুন

উপাদানগুলির একটি পৃষ্ঠ থাকবে যা বিকিরণের দ্বারা প্রভাবিত হবে না। একাধিক গিয়ার থাকবে। একটি যান্ত্রিক পাঠক সমস্ত গিয়ারে চলবে এবং উপরের দিকে নিচে নমনীয় হবে। ডাউন মানে এটি 0 এবং আপ এর অর্থ এটি 1। 0 এবং 1 থেকে আপনি আপনার কোড বেস তৈরি করতে পারেন।


2
সম্ভবত একটি অপটিকাল মাধ্যম যেমন একটি সিডি-রম এই সংজ্ঞাটি পূরণ করবে। এটিতে একটি বিশাল ক্ষমতার যুক্ত বোনাস থাকবে।
Wossname

2
হ্যাঁ এটি একই রকম হবে তবে সিডি রোম কম ব্যবহার করবে তবে এটি পুরোপুরি যান্ত্রিক সিস্টেম হবে।
হিটুল

7
আমি অবাক হয়েছি যে তারা কেন স্পেসে পাঞ্চ কার্ড পাঠকদের ব্যবহার না করার কোনও কারণ আছে?
সোরেন

3
@ সোরেন গতি এবং শারীরিক স্থান একটি কারণ হতে পারে।
হিটুল

5

একটি চক্রাকার শিডিয়ুলার ব্যবহার করুন । এটি আপনাকে সমালোচনামূলক ডেটার যথার্থতা পরীক্ষা করতে নিয়মিত রক্ষণাবেক্ষণের সময় যুক্ত করার সক্ষমতা দেয়। বেশিরভাগ সমস্যার মুখোমুখি হ'ল স্ট্যাকের দুর্নীতি। যদি আপনার সফ্টওয়্যারটি চক্রীয় হয় তবে আপনি চক্রের মধ্যে স্ট্যাকটিকে পুনরায় পুনরায় করতে পারেন। বাধা কলগুলির জন্য স্ট্যাকগুলি পুনরায় ব্যবহার করবেন না, প্রতিটি গুরুত্বপূর্ণ বিঘ্নিত কলের জন্য আলাদা স্ট্যাক সেটআপ করুন।

ওয়াচডগ ধারণার অনুরূপ সময়সীমা টাইমার। একটি ফাংশন কল করার আগে একটি হার্ডওয়্যার টাইমার শুরু করুন। সময়সীমা টাইমার বিঘ্নিত হওয়ার আগে যদি ফাংশনটি না ফিরে আসে তবে স্ট্যাকটি পুনরায় লোড করুন এবং আবার চেষ্টা করুন। 3/5 চেষ্টা করার পরেও যদি এটি ব্যর্থ হয় তবে আপনাকে রম থেকে পুনরায় লোড করা দরকার।

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

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


4

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

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

তৃতীয়ত, পরীক্ষায় ব্যর্থতাপুনরাবৃত্তযোগ্য পরীক্ষার পরিবেশ সেট আপ করুন যা স্মৃতিতে বিটস এলোমেলোভাবে এড়ায়। এটি আপনাকে দুর্নীতির পরিস্থিতিগুলি প্রতিলিপি করতে এবং চারপাশে আপনার অ্যাপ্লিকেশনটি ডিজাইনে সহায়তা করতে সহায়তা করবে।


3

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


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

এর তুলনায় ভারসাম্য বজায় রাখতে হবে এমন উচ্চতর ঝুঁকি সংকলকটিকে আপগ্রেড করা আপনাকে অপ্রত্যাশিত পরিবর্তন সহ ছেড়ে দিতে পারে।
জোশুয়া

1

এখানে প্রচুর পরিমাণে জবাব দেওয়া হয়েছে তবে আমি এই সম্পর্কে আমার ধারণাগুলি সংক্ষেপে চেষ্টা করব।

কিছু ক্র্যাশ হয়েছে বা সঠিকভাবে কাজ না করা আপনার নিজের ভুলের ফলস্বরূপ হতে পারে - তবে আপনি যখন সমস্যাটি সনাক্ত করেন তখন তা সহজেই ঠিক করা উচিত। তবে হার্ডওয়্যার ব্যর্থতার সম্ভাবনাও রয়েছে - এবং সামগ্রিকভাবে ঠিক করা যদি অসম্ভব না হয় তবে এটি কঠিন।

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

এ জাতীয় ত্রুটি পরিস্থিতি থেকে পুনরুদ্ধার হয় পুনরায় বুট করা (যদি সফ্টওয়্যারটি এখনও বেঁচে থাকে এবং লাথি মারছে) বা হার্ডওয়্যার রিসেট (যেমন এইচডাব্লু ওয়াচডগস)। প্রথমটি থেকে শুরু করা সহজ।

যদি সমস্যাটি হার্ডওয়্যার সম্পর্কিত হয় - তবে লগিংয়ের সাহায্যে আপনাকে কোন ফাংশন কল সমস্যা দেখা দেয় এবং এটি আপনাকে কী কাজ করছে না এবং কোথায় চলছে তার ভিতরে জ্ঞান দিতে পারে identify

এছাড়াও কোডটি তুলনামূলকভাবে জটিল হলে - এটি "বিভাজন এবং বিজয়" করার অর্থ তোলে - এর অর্থ আপনি কোনও ফাংশন কলগুলি সরিয়ে / নিষ্ক্রিয় করেন যেখানে আপনার সমস্যা হওয়ার আশঙ্কা রয়েছে - সাধারণত কোডের অর্ধেক অক্ষম করা এবং অন্য অর্ধটি সক্ষম করে - আপনি "কাজ করে" / পেতে পারেন "কাজ করে না" এমন ধরণের সিদ্ধান্তের পরে আপনি কোডের আরও অর্ধেকের দিকে ফোকাস করতে পারেন। (যেখানে সমস্যা)

যদি কিছু সময়ের পরে সমস্যা দেখা দেয় - তবে স্ট্যাকের ওভারফ্লো সন্দেহ করা যেতে পারে - তবে স্ট্যাক পয়েন্ট রেজিস্টারগুলি নিরীক্ষণ করা ভাল - যদি তারা ক্রমাগত বৃদ্ধি পায়।

এবং যদি আপনি "হ্যালো ওয়ার্ল্ড" ধরণের অ্যাপ্লিকেশন না হওয়া পর্যন্ত আপনার কোডটি সম্পূর্ণভাবে ছোট করে পরিচালনা করেন - এবং এটি এখনও এলোমেলোভাবে ব্যর্থ হয় - তবে হার্ডওয়্যার সমস্যাগুলি প্রত্যাশিত - এবং সেখানে "হার্ডওয়্যার আপগ্রেড" হওয়া দরকার - যার অর্থ এই জাতীয় সিপিইউ / রাম / আবিষ্কার করা ... -হার্ডওয়ার সংমিশ্রণ যা আরও ভাল বিকিরণ সহ্য করবে।

সবচেয়ে গুরুত্বপূর্ণ বিষয় সম্ভবত মেশিন পুরোপুরি বন্ধ হয়ে গেলে / পুনরায় সেট করা / কাজ না করে আপনি কীভাবে আপনার লগগুলি ফিরে পাবেন - সম্ভবত বুটস্ট্যাপের প্রথম জিনিসটি করা উচিত - সমস্যাযুক্ত পরিস্থিতিটি আটকানো থাকলে বাড়িতে ফিরে আসা is

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


দুঃখিত, তবে প্রশ্নটি তেজস্ক্রিয় পরিবেশ সম্পর্কে যেখানে হার্ডওয়্যার ব্যর্থতা দেখা দেবে। আপনার উত্তরটি সাধারণ সফ্টওয়্যার অপ্টিমাইজেশন এবং কীভাবে বাগগুলি সন্ধান করতে হয় সে সম্পর্কে। তবে এই পরিস্থিতিতে, ব্যর্থতাগুলি বাগ দ্বারা উত্পাদিত হয় না
jeb

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

0

আমি সত্যিই অনেক দুর্দান্ত উত্তর পড়েছি!

এখানে আমার 2 শতাংশ: মেমরিটির একটি পরিসংখ্যানের মডেল তৈরি করুন / অস্বাভাবিকতা নিবন্ধ করুন, মেমরিটি যাচাই করতে বা ঘন ঘন নিবন্ধকের তুলনা সম্পাদনের জন্য একটি সফ্টওয়্যার লিখে। এরপরে, ভার্চুয়াল মেশিনের স্টাইলে একটি এমুলেটর তৈরি করুন যেখানে আপনি সমস্যাটি নিয়ে পরীক্ষা করতে পারবেন। আমার ধারণা আপনি যদি জংশনের আকার, ঘড়ির ফ্রিকোয়েন্সি, বিক্রেতার, কেসিং ইত্যাদির পরিবর্তিত হন তবে এটি আলাদা আচরণ পর্যবেক্ষণ করবে।

এমনকি আমাদের ডেস্কটপ পিসি মেমরির একটি ব্যর্থতার একটি নির্দিষ্ট হার রয়েছে, যা তবে প্রতিদিনের কাজকে ক্ষতিগ্রস্ত করে না।

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