প্যাকম্যানের গেমের "স্তরের 256 বাগ" কে কি একটি অপ্রত্যাশিত সেগফল্ট হিসাবে বিবেচনা করা যেতে পারে?


51

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

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

আমি এটি সন্ধান করার চেষ্টা করেছি, তবে আমি যা পাচ্ছি তা হ'ল বাগের নথী, পাশাপাশি হিপস্টার তিমি এবং নমকোর মধ্যে যে কোলাব।

সুতরাং, আপনি কি প্যাকম্যানের 256 স্তরের আচরণটি নিয়ন্ত্রণহীন বিভাজন লঙ্ঘনের উদাহরণ হিসাবে বিবেচনা করবেন?


3
এখানে বাগ একটি সঠিক বর্ণনা এটি ঠিক করার আছে, একসঙ্গে একটি প্যাচ সঙ্গে donhodges.com/how_high_can_you_get2.htm
abligh

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

3
উইকিপিডিয়া অনুসারে প্যাকম্যান একটি জেড 80 ব্যবহার করেছেন। জেড 80 এর অবশ্যই মেমরির সুরক্ষা নেই।
রোবট

এটি কোনও সেগফল্ট নয় — সিস্টেমে মেমরির সুরক্ষার কোনও রূপ নেই। দোষ প্যাক ম্যান স্তর 256 এ অভিজ্ঞতা কেবল একটি পূর্ণসংখ্যা ওভারফ্লো যে সঠিকভাবে খেলা এর কোড দ্বারা পরিচালিত নয়।
বিডব্লুড্রাকো

3
এফওয়াইআই, আমি মনে করি না এটি এটিকে বাগ হিসাবে যোগ্য করে তোলে। একটি বাগ একটি কম্পিউটার প্রোগ্রাম বা সিস্টেমে ব্যর্থতা বা ত্রুটি যার ফলে এটি একটি ভুল বা অপ্রত্যাশিত ফলাফল তৈরি করে বা অনিচ্ছাকৃতভাবে আচরণ করে। এটি ইচ্ছাকৃতভাবে প্রোগ্রাম করা হয়েছিল , যেহেতু অনুভূত হয়েছিল যে কেউ সেই স্তরে পৌঁছাবে না। বাস্তবে, এটির স্রেফ সফটওয়্যার ডিজাইন design
Keltari

উত্তর:


113

অবশ্যই না.

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

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


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

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

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

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

8
@ স্নোমান একটি প্যাক ম্যান মেশিনে এরকম কোনও স্তর নেই। কোনও লোডার নেই - গেমটি এক্সিকিউটিভ-ইন-প্লেস রোমে রয়েছে। কোনও মেমরি পরিচালনা নেই - সবকিছু অচল। কোনও "পরিষেবা" নেই; গেমটি হার্ডওয়্যারটি সরাসরি অ্যাক্সেস করে এবং সিস্টেমে কোনও কোডের বাইট নেই যা গেমের অংশ নয় এবং গেমটির জন্য লিখিত নেই।
hobbs

38

দেখে মনে হচ্ছে আপনি "অপরিজ্ঞাত আচরণ" এবং "বিভাগকরণ ত্রুটি" বিভ্রান্ত করছেন।

আনহ্যান্ডলড সেগফোল্টের মতো কোনও জিনিস নেই। একটি সেগমেন্টেশন ফল্ট হয় সংজ্ঞা দ্বারা, ত্রুটি পরিচালনা।

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

যদি কিছু থাকে তবে, এটি ইউবি কীভাবে সর্বদা সেগফাল্টে আসে না তার একটি দুর্দান্ত উদাহরণ ।


2
সুনির্দিষ্ট অপারেটিং সিস্টেম হতে পারে হত্যা করার (অর্থাত irrecoverably) প্রক্রিয়া ঠিক। আধুনিক ওএসগুলি পরিবর্তে এটিকে সমাপ্ত করতে পছন্দ করে, যা ধরা এবং পরিচালনা করা হতে পারে, এফডাব্লুআইডাব্লু।
edmz

@ ব্ল্যাক: আমি যা বলেছিলাম তা কি তাই না?
মনিকার সাথে লাইটনেস রেস

15
এটি এমনকি "অপরিজ্ঞাত আচরণ" নাও হতে পারে। যদি প্যাকম্যান খাঁটি সমাবেশে লেখা হয়, তবে কোডটি পুরোপুরি নির্ধারিত উপায়ে যা করতে বলা হয়েছিল ঠিক তাই করেছিল। অপরিবর্তিত আচরণ নয়, কেবল একটি বাগ। এর মতো, কোডটি কোনও সিস্টেমের অন্তর্নিহিত চিপসেটের নিখুঁত বন্দর ছিল এমন একই পথে চলমান।
রোবট

@ স্টিভেন বার্নাপ: এটি সত্য।
মনিকার সাথে লাইটনেস রেস

@ ব্ল্যাক 'কিল' এবং 'টার্মিনেট' এর মধ্যে পার্থক্য কী? 'কিল' সাধারণভাবে ইউনিক্সের শব্দভাণ্ডার এবং 'উইন্ডোজ-ওয়াই' বেশি 'উইন্ডোজ-ওয়াই' ছাড়া কী?
ব্র্যান্ডিন

24

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

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

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

এরই মধ্যে 256 স্তরের বাগটি ম্যাপবিহীন মেমরি অ্যাক্সেস করতে পারে না , সুতরাং এটি চালিত।

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

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

নোট করুন যে প্যাক-ম্যান রমসকে খাওয়ানোর সময় কোনও এমুলেটর বিশ্বাসের সাথে কিল স্ক্রিনটি পুনরুত্পাদন করে না তারা গেমের হার্ডওয়্যারটি সঠিকভাবে অনুকরণ করে না।


"অপরিজ্ঞাত আচরণ" বাক্যাংশটি 1989 এর আগে ঠিক সেই পদ্ধতিতে মুদ্রণে ব্যবহৃত হয়নি, তবে এই বাক্যাংশটি যে ধারণাটি বর্ণনা করে তা প্রোগ্রামিংয়ের মতোই পুরানো। কমন লিস্প: ল্যাঙ্গুয়েজ (ডিজিটাল প্রেস, 1984; আইএসবিএন 0-932376-41-এক্স) একই জিনিসটির অর্থ বোঝাতে "এটি একটি ত্রুটি" শব্দটি ব্যবহার করেছে। উদাহরণস্বরূপ, "x <0" দিয়ে এই ফাংশনটি কল করা এটি একটি ত্রুটি ছিল এর অর্থ হ'ল প্রোগ্রামারটিকে x <0 দিয়ে ফাংশনটি কল করার অনুমতি দেওয়া উচিত নয় এবং প্রয়োগকারীরা আক্ষরিকভাবে কিছু করার অনুমতি দেয় যদি প্রয়োগকারীরা এটি করতে চায় তবে অ্যাপ্লিকেশন প্রোগ্রামার মেনে চলেনি।
সলোমন স্লো

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

1
এটি সেরা উত্তর। "অপরিজ্ঞাত আচরণ" এর অর্থ কোডার কোডটি লিখেছিল যার জন্য ফলাফলটি মানের উপর ভিত্তি করে ভবিষ্যদ্বাণী করা যায় না। যদি প্যাকম্যান জেড 80 অ্যাসেমব্লিতে লেখা থাকে (এবং আমি বিশ্বাস করি এটি ছিল) তবে কোড কোডটির উদ্দেশ্য না করে প্রোগ্রামটি কিছু করেছিল কিনা তা নির্বিশেষে লিখিত কোডটির একটি সম্পূর্ণ সংজ্ঞায়িত অর্থ ছিল meaning
রোবট

8

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

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


1
আপনি যখন 256 স্তরে নিজেকে হত্যা করবেন, তখন বিন্দুগুলি পুনরায় শুকিয়ে যায়, তবে আপনি কোনওটিই হারাবেন না।
এভেন

@ ফারডোজকাল: স্তর-আঁকানো রুটিনটি 100 টিরও বেশি বিন্দুগুলি মুছে ফেলে এবং কয়েকটি অঙ্কন করে। যদি কোনও খেলোয়াড়ের পর্যাপ্ত জীবন থাকে তবে অবশেষে একটি স্তরকে বাড়ানোর জন্য পর্যাপ্ত বিন্দুগুলি খাওয়া সম্ভব হত, তবে এর জন্য 30 টিরও বেশি জীবন প্রয়োজন।
সুপারক্যাট

আমার মনে আছে এমন একটি ভিডিও দেখছিলাম যেখানে প্লেয়ারের যথেষ্ট জীবন ছিল এবং তিনি এটি পরিচালনা করেছিলেন ... এবং আমি এটি সন্ধান করেছি
এভেন

@ এরদোজকাল: স্তরটি সাফ করার জন্য কতজনের জীবন প্রয়োজন, এবং কোনও খেলোয়াড় একটি অশোধিত মেশিনে কত জীবন পেতে পারে ?
সুপারক্যাট

আপনি কোনও অশোধিত মেশিনে 256 স্তরেও যেতে পারবেন না।
এভেন

1

না হিসাবে আগেই বলা হয়েছে এটি কোনও সেগ দোষ নয়। সমস্যাটি কেন ঘটে তা আমি যুক্ত করব: এটি একটি ওভারফ্লো

স্তরের সংখ্যাটি বাইটে সঞ্চয় করা হয় তাই পরিসীমা 0-255। প্রতিবার আপনি যখন একটি স্তর সম্পূর্ণ করেন তখন কাউন্টারটি বাড়ানো হয়। 256 স্তরে ওভারফ্লোর কারণে কাউন্টারটি আসলে 0 টি।

তবে গেমটি স্তরের নীচে কিছু ফল প্রদর্শন করার চেষ্টা করে। ফলের নম্বর / প্রকার স্তরের উপর নির্ভর করে। সূত্রটি 8 টি স্তরের সমাপ্ত স্তর অনুসারে একটি ফল প্রদর্শন করে the যা অসম্ভব এবং এই চটকদার পর্দা দেয়।

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