একটি রানটাইম পরিবেশ কি একটি অসীম লুপ সনাক্ত করতে পারে?


19

রানটাইম পরিবেশের পক্ষে কি অসীম লুপগুলি সনাক্ত করা এবং পরবর্তীকালে সম্পর্কিত প্রক্রিয়াটি বন্ধ করা সম্ভব হবে, বা এই জাতীয় যুক্তি বাস্তবায়ন থামানো সমস্যা সমাধানের সমতুল্য হবে?

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

( Https://stackoverflow.com/q/16250472/1858225 থেকে পোর্ট করা )



আমি তাই মনে করি না; ইনপুটটিতে কোনও বাধা নেই।
কাইল স্ট্র্যান্ড

আপনার প্রশ্নটি কি আসল রানটাইম পরিবেশ (জেভিএমের মতো) সম্পর্কে, বা এই জাতীয় লুপ সনাক্ত করার কোনও প্রোগ্রামগত-জেনেরিক পদ্ধতি সম্পর্কে?
বেঞ্জ

@Benj stackoverflow.com/q/16249785/1858225 মূল প্রশ্ন (যা আমার নয় হয়েছিল) বাস্তব রানটাইম এনভায়রনমেন্ট (অথবা বরং অপারেটিং সিস্টেমের সম্বন্ধে) প্রায় দুপুর। এটি বন্ধ হয়ে গেছে, যদিও, তাই আমি এটি পুনরায় লিখলাম, আমি ফোকাসটি তাত্ত্বিক দিকে সরিয়ে নিয়েছি।
কাইল স্ট্র্যান্ড

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

উত্তর:


11

রানটাইম পরিবেশের জন্য নীচের পদ্ধতিটি ব্যবহার করে এই ধরনের লুপগুলি পরীক্ষা করা তাত্ত্বিকভাবে সম্ভব হতে পারে :

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

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

দ্রষ্টব্য, অবশ্যই, এটি থামানো সমস্যার সমাধান নয় ; পার্থক্য এখানে আলোচনা করা হয়

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

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


8
এটি সম্ভব (কমপক্ষে ট্যুরিং মেশিনের আদর্শিক বিশ্বে এবং এরকম) যে কোনও প্রোগ্রাম কোনও রাষ্ট্রের পুনরাবৃত্তি না করে একটি অসীম লুপে প্রবেশ করে । সি লুপের মতো কিছু ভাবুনfor(i = 0; ; i++) ;
ভনব্র্যান্ড

nn<nn+1

@ ভনব্র্যান্ড, এই নির্দিষ্ট প্রশ্নের উদ্দেশ্যে "লুপ" এর সংজ্ঞাটি সেই নির্দিষ্ট লুপের সাথে খাপ খায় না (এ কারণেই আমি নিজের সংজ্ঞাটি প্রশ্নটিতেই স্পষ্ট করে দিয়েছি)।
কাইল স্ট্র্যান্ড

এন

আপনার প্রশ্নটি আমি বুঝতে পারি না। আমি ভেবেছিলাম আপনি যে কোনও প্রোগ্রামের রাষ্ট্রের পুনরাবৃত্তি করে কিনা তা সিদ্ধান্ত নেওয়া সম্ভব কিনা তা আপনি জানতে চেয়েছিলেন । আপনি কি কেবল জিজ্ঞাসা করছেন যে কিছু প্রোগ্রামের রাষ্ট্র পুনরাবৃত্তি হয়েছে কিনা তা সিদ্ধান্ত নেওয়া সম্ভব ছিল কিনা ?
হ্যাক বেনেট

6

আসুন ধরে নেওয়া যাক যে প্রোগ্রামটি বাইরের বিশ্বের সাথে ইন্টারঅ্যাক্ট করে না, সুতরাং প্রোগ্রামের পুরো রাজ্যটিকে আবৃত করা সত্যিই সম্ভব। (এর অর্থ এটি কোনও ইনপুট, কমপক্ষে না করে means নির্ধারিতভাবে একটি ক্রম হ্রাস করা যেতে পারে।

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

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

এখন আমরা (তাত্ত্বিকভাবে) কচ্ছপ রানটাইমের প্রতিটি ধাপের পরে রাজ্যগুলির তুলনা করতে পারি। প্রোগ্রামটি একটি অন্তহীন লুপে পৌঁছায়npknkknp

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

আমি যে শর্তাদি ব্যবহার করেছি সেগুলি হিসাবে, এটি কেবল রবার্ট ফ্লয়েডের বিখ্যাত টরটোইজ এবং হেয়ার চক্র-সনাক্তকরণ অ্যালগরিদম।


3

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

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

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

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

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


2

AProVE পরিসমাপ্তি টুল সঞ্চালিত লেখা সিস্টেমে স্ট্যাটিক বিশ্লেষণ (Haskell, প্রোগ্রাম উপশ্রেণী সহ) যা যা করতে পারেন প্রমাণ অ পরিসমাপ্তি, অ-সসীম প্রোগ্রাম একটি প্রকৃত উদাহরণ দেয়। কৌশলটি বেশ শক্তিশালী এবং সংকীর্ণকরণের কৌশলটির বৈকল্পিক ব্যবহার করে কাজ করে ।

আমি যতদূর জানি, সাধারণ ভাষার জন্য প্রকৃত অবসন্নকরণ সনাক্তকরণের জন্য খুব বেশি কাজ হয়নি।

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