অনিরাপদ রাষ্ট্র সর্বদা অচলাবস্থার কারণ হয় না কেন?


10

আমি গ্যালভিনের অপারেটিং সিস্টেমগুলি পড়ছিলাম এবং নীচের লাইনটি পেরিয়ে এসেছি,

সমস্ত অনিরাপদ রাজ্যগুলি অবশ্য অচলাবস্থার নয়। একটি অনিরাপদ রাষ্ট্র অচলাবস্থার দিকে নিয়ে যেতে পারে

কেউ দয়া করে কীভাবে অচল অবস্থায় ব্যাখ্যা করতে পারেন ! = অনিরাপদ অবস্থা? আমিও এখানে একই লাইনটি ধরলাম

যদি কোনও নিরাপদ অনুক্রম উপস্থিত না থাকে, তবে সিস্টেমটি অনিরাপদ অবস্থায় রয়েছে, যা ম্যাক অচল করে দিতে পারে। (সমস্ত নিরাপদ রাজ্যগুলি অচলাবস্থা মুক্ত, তবে সমস্ত অনিরাপদ রাজ্যগুলি অচলাবস্থার দিকে পরিচালিত করে না))


1
অচলাবস্থার সাথে সাথে ঘটে যাওয়া দৌড়ের অবস্থার মতো অচলাবস্থা একই ধারণা হতে পারে । যখন কোনও নির্দিষ্ট সিকোয়েন্স লাইন আপ হয় তখনই অনিরাপদ কোডটি অচলাবস্থার সৃষ্টি করে। সেই ধারাটি "যে কোনও সময় ঘটতে পারে" ওরফে "দুর্ঘটনা ঘটতে অপেক্ষা করেছিল" ...
ভিজেএন

অনিরাপদ রাষ্ট্রের অর্থ, তাত্ত্বিকভাবে অচলাবস্থা হওয়ার সম্ভাবনা রয়েছে। নির্দিষ্ট কিছু ঘটে গেলে অচলাবস্থা দেখা দিতে পারে। নিরাপদ অবস্থার জন্য, যাই ঘটুক না কেন, অচলাবস্থা থাকতে পারে না।
নিশান্তভারদ্বাজ ২০০২

1
ঠিক একই কারণে যে কোনও বিপজ্জনক পরিস্থিতি (বাস্তব জীবনে) সর্বদা খারাপ জিনিস ঘটায় না।
ডেভিড রিচার্বি

উত্তর:


14

ডেডলকের অর্থ নির্দিষ্ট কিছু: এখানে দুটি (বা আরও) প্রক্রিয়া রয়েছে যা বর্তমানে একে অপরের জন্য অপেক্ষা করে অবরুদ্ধ।

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

নিম্নলিখিত উদাহরণ বিবেচনা করুন:

Process A                  Process B
lock X                     lock Y           # state is "unsafe"
                           unlock Y
lock Y                                      # state is back to "safe" (no deadlock this time.  We got lucky.)

আপনি যে লিঙ্কটি দিয়েছেন তার বিভাগ 7.5.1 এ আরও আকর্ষণীয় উদাহরণ রয়েছে :

12 টি টেপ ড্রাইভ সহ একটি সিস্টেম বিবেচনা করুন:

Process       Max Need       Current
P0:             10              5
P2:              9              3

এটি একটি অনিরাপদ রাজ্য। তবে আমরা কোনও অচলাবস্থায় নেই। এখানে কেবলমাত্র 4 টি বিনামূল্যে ড্রাইভ রয়েছে, উদাহরণস্বরূপ, যদি P0 অতিরিক্ত 5 টির জন্য অনুরোধ করে এবং পি 2 অতিরিক্ত 1 টির জন্য অনুরোধ করে তবে আমরা অচল করে দেব, তবে এটি এখনও ঘটেনি। এবং পি0 হয়ত আর কোনও ড্রাইভের জন্য অনুরোধ না করে, তবে এর পরিবর্তে এটি ইতিমধ্যে চালিত ড্রাইভগুলি মুক্ত করতে পারে। Max needপ্রোগ্রামের সকল সম্ভাব্য মৃত্যুদণ্ড কার্যকর শেষ হয়ে গেছে, এবং এই শক্তি মৃত্যুদণ্ড কার্যকর যেখানে আমরা P0 সমস্ত 10 ড্রাইভ প্রয়োজন এক না।


তাই আপনাকে অনেক ধন্যবাদ স্যার! এবং আমি আমার অস্পষ্ট পাঠ্যপুস্তকে ঘৃণা করি ...
নিং

তবে আমার আরও কিছু প্রশ্ন রয়েছে: (১) আপনি বলেছিলেন ["] প্রোগ্রামটির সমস্ত সম্ভাব্য মৃত্যুর চেয়ে বেশি প্রয়োজন [[" "] , তবে আপনি আরও বলেছেন ["] যদি পি 0 অতিরিক্ত 5 অনুরোধ করে, এবং পি 2 অনুরোধ না করে একটি অতিরিক্ত 1, আমরা হবে অচলাবস্থা [। "] যদি ম্যাক্স প্রয়োজনের এটা যদি না পাওয়া যায়, যেখানে (1) মানে সম্ভব , অচলাবস্থা আছে যখন (2) মানে অবশ্যই অচলাবস্থা আছে যখন এটি অর্জন না?
নিং

আমার যুক্তি কি সঠিক ?: যদি পি 2 অতিরিক্ত 1 টির জন্য অনুরোধ করে এবং এটি শেষ হয় , তবে ফ্রি টেপগুলি হয়ে যায় (4 + 3 = 7), এবং পি 1 অতিরিক্ত 5 অনুরোধ করে তাই এটি অর্জন করা যায়, তাই কোনও অচলাবস্থা নেই। তবে পি 2 যদি শেষ না করে , তবে অচলাবস্থা দেখা দেয় যেহেতু পি 1 শেষ করার জন্য কেবল 5 প্রয়োজন, এখনও 4 <5।
নিং

শেষ উদাহরণের জন্য: পি 0 অতিরিক্ত 5 অনুরোধ করুন, তারপরে 5 + 5 + 3 = 13> 12, সুতরাং পি 0 কে পি 2 অপেক্ষা করতে হবে, অচলাবস্থা তৈরি করতে কেবল পি 2কে একটি অতিরিক্ত অনুরোধ করুন।
বিট_এইচসি অ্যালগোরিদম

7

ভ্যান্ডারিং লজিক কী বলছিল তা ব্যাখ্যা করার জন্য।

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

Thread 1                    Thread 2
Lock X                      
Lock Y
OS Interrupts Thread 1 and passes control to Thread 2
                            Unable to lock needed resources.
OS Interrupts Thread 2 and passes control to Thread 1
Unlock X                    
Unlock Y                    
                            Lock Y
                            Lock X
 ....

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

Thread 1                    Thread 2
Lock X        
OS Interrupts Thread 1 and passes control to Thread 2
                            Lock Y              
DEADLOCK Thread 1 needs Y, Thread 2 needs X. Neither knows to back down and simply waits.

1

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

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

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


0

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

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


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

0

একটি তুচ্ছ অনিরাপদ অবস্থা: থ্রেড 1 লক এ লাগে, তারপরে বি লক করে, তারপর উভয়কে আনলক করে। থ্রেড 2 লক বি লাগে, তারপরে এটিকে লক করুন, তারপরে উভয়কে আনলক করুন।

এটি কেবলমাত্র একটি অচলাবস্থা হতে হবে যদি থ্রেড 2 লক বি লাগে মাত্র মধ্যে থ্রেড 1 গ্রহণ লক A এবং লক বি নেওয়া, অথবা 1 থ্রেড বের করার চেষ্টা লক একজন লাগে মাত্র মধ্যে থ্রেড 2 গ্রহণ লক বি এবং লক উ নিতে চেষ্টা

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

চোখ বন্ধ করে কোনও রাস্তায় হাঁটুন। এটি অনিরাপদ। তবে আপনি সর্বদা খুন হন না।

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