Skip to main content

Process

Process

 

প্রসেসঃ “A process is basically a program in execution.”

বাংলায়ঃ আমাদের কম্পিউটারে অনেকগুলা সফটওয়্যার ইন্সটল আছে না? আমরা যখনই কোনো সফটওয়্যার রান করে দিলাম তখনই তার নাম পালটে প্রসেস হয়ে গেল ।

 

রানিং অবস্থায় যেকোনো প্রোগ্রামকে প্রসেস বলে, আর প্রসেস সবসময় RAM নামক যে প্রাইমারী মেমোরি আছে ওইখানে জায়গা নেয়।

RAM এ থাকা অবস্থায় প্রসেসের কোনো কাজ চলে না, তাহলে থাকে ক্যান? সবরকম Process এর  কাজ হয় প্রসেসর বা CPU তে, CPU ,  RAM থেকে প্রসেস গুলা নেয়, আবার RAM – এ পাঠায় এই যে লেনদেনের যে ব্যাপারটা এইটা RAM খুব দ্রুত করতে পারে এইজন্য এইখানে RAM ব্যবহার হচ্ছে। কথা কি ক্লিয়ার?

 

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

 

এইজন্যে এইখানে চলে আসে PCB এর আইডিয়াটা ।

 

PCB কি ভাই ?

কোনো একটা প্রসেসের পরিচয়পত্র, যেটা থেকে আমরা ঐ প্রসেস সম্পর্কে সব জানতে পারব।

ধরেন আপনাকে একটা ফর্ম ফিল আপ করতে দিলাম যেখানে আপনার নাম , ঠিকানা সবরকম তথ্য দিতে বলা হলো , একই ধরনের ফর্মটা যদি কোনো একটা প্রসেসকে দিই তখন ঐ প্রসেসের তথ্য সংবলিত ফর্মকে আমরা PCB বলব।

আপনার NID কার্ডে আপনার সবরকম তথ্য আছে না ? তেমনি PCB – তে প্রসেস এর তথ্য থাকে আর কি ।

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


কি কি থাকে ?

 



ছবিঃ সংগৃহীত

 

Process state: কোনো একটা প্রসেস কোন অবস্থায় আছে এটা এই অংশ থেকে জানতে পারবেন  ( new, ready,running,waiting etc etc )

Process id: প্রত্যেকটা প্রসেসের একটা আলাদা আইডি থাকে, আমাদের ভার্সিটির আইডি এর মতোই। এটাকে ছোট করে  pid বলে ।

Program counter: আমাদের কোডের মধ্যে তো লাইন নাম্বার দেয়াই থাকে, আমাদের সুবিধা হয়  কিন্তু এটা এক্সিকিউট হউয়ার সময়তো আর এভাবে থাকে না, তখন লাইন নাম্বার গুলাকে চেনা হয় মেমোরি লোকেশন দিয়ে, তো এরপরে কোন লাইনের কাজ করবে ঐ লাইনের মেমোরি লোকেশান থাকে Program counter এর ভিতরে। নামের সাথে কাজের মিল না থাকলে আমার কি দোষ ?

Registers: CPU এর  টেম্পরারি মেমোরিকে Register বলে , যেই প্রসেসের জন্য Register চেক করবেন ঐ প্রসেস CPU এর কোন Register ইউজ করছে এটা জানতে পারবেন এইখান থেকে ।

List of Open Files: যেই প্রসেসের জন্য এই অংশ চেক করবেন এই প্রসেসটা কোন কোন ফাইল ব্যবহার করছে সেই তথ্য এইখানে পাবেন ।

CPU Scheduling Information: Process এর queue থাকে না ? ঐখানে কোন প্রসেস আগে যাবে কোনটা পরে যাবে এইসব ঠিক করা হয় যেটার উপর ভিত্তি করে ঐসব তথ্য এইখানে থাকে , process queue এর পয়েন্টার , process এর  priority ইত্যাদি । মানে যেটার উপর ভিত্তি করে প্রসেসকে আগে পরে পাঠানো হয় ঐ তথ্য গুলা এইখানে পাওয়া যায় ।

I/O Status Information: যেই প্রসেসের জন্য এই স্ট্যাটাস চেক করছেন সেই প্রসেস কোন কোন I/O Device ইউজ করছে সেটা এইখানে জানা যাবে ।

 

আপনার NID কার্ডে নাম , ঠিকানা এগুলা থাকে, কিন্তু একটা Process এর পরিচয়পত্র যেটাকে আমরা PCB (Process Control Block) বলি সেখানে উপরের ইনফরমেশন গুলা থাকে ।

বাংলাদেশের ১৮ কোটি+ জনগণের ভিতর থেকে আপনাকে আলাদা ভাবে চেনার জন্য NID কার্ড আপনাকে কে দেয় ? সরকার থেকে দেয় না ? তেমনভাবে প্রত্যেকটা প্রসেসকে আলাদাভাবে চেনার জন্যে প্রসেসকে PCB দেয় Operating System । যাতে অপারেটিং সিস্টেম প্রত্যেকটা প্রসেসকে আলাদাভাবে চিনতে পারে, সবার তথ্য আলাদাভাবে রাখতে পারে । এখন পর্যন্ত কথা কি ক্লিয়ার ?

 

Context Switching:  CPU যখন অনেকগুলা প্রসেস নিয়ে কাজ করে তখন মাল্টিপ্রোগ্রমিং হউয়ার কারণে সেখানে কন্টেক্সট সুইচিং হয় , Context Switching মানে হইতেসে কিছুক্ষন Process1 এর কাজ চলবে , কিছুক্ষন Process2 এর কাজ চলবে, এভাবে , , , সবগুলা প্রসেসের কাজ চলে ,

 এখানে একটা প্রশ্ন

ধরেন CPU কিছুক্ষন Process1 এর উপ্রে কাজ করল তারপর Process2 এর কাজ করবে, তাই CPU-তে Process2 কে নিয়ে আসা হলো , প্রথম প্রসেস যেটা Process1 এর কতটুক কাজ করেছে এটা কিভাবে মনে রাখবে ? এর পরে যখন Process1 এর কাজ করবে তখন কি আবার প্রথম থেকে শুরু করবে ?  এমন হইলেতো কোনো একটা গান প্লে করলে সারাদিন শুধু ঐ গানের প্রথম লাইন ই  শুনতে পারবেন । এইরকম যাতে না হয় সেইজন্য CPU কি করে , প্রত্যেকটা প্রসেসের জন্য আলদা আলদা PCB আছে না ? PCB তে তো কোনো একটা প্রসেসের Details থাকে,

তাই CPU কোনো প্রসেসের কাজ করার পর ঐ প্রসেসের যেই PCB ঐটাতে এটাও আপডেট করে দেয় যে এই প্রসেসের কতটুক কাজ হইসে, তাহলে এরপর যখন আবার এই প্রসেসের কাজ শুরু করবে তখন যতটুক কাজ হইসিলো তারপর থেকে শুরু করবে

 

কোনো একটা প্রসেস CPU তে এলো এক্সিকিউট হউয়ার জন্য , এখন CPU কিভাবে বুঝবে এই প্রসেসের কাজ কোথা থেকে শুরু করতে হবে ? এইজন্যে কাজ শুরুর আগে CPU ঐ Process এর PCB কে রেজিস্টারে( CPU এর temporary memory )  লোড করে নিবে যাতে সে দেখতে পারে এই প্রসেসের অবস্থা কি, id কত, কতটুক কাজ হইসে,  এবার কাজ শেষ করার পর কতটুক কাজ হইলো এটা ঐ PCB তে  আবার আপডেট করে দিবে, যাতে পরবর্তীতে আবার ঐখান থেকে কাজ শুরু করতে পারে

এভাবে আরেকটা প্রসেস যখন CPU তে  আসবে তখন কাজ শুরু করার আগে আবার তার PCB কে রেজিস্টারে লোড করবে, কাজ শেষে আবার আপডেট করবে এভাবে চলতে থাকবে ।

 

আচ্ছা এগুলাতো হইলো জাতীয় পরিচয় টাইপ আলোচনা ছিল , এখন একটু পার্সোনাল হউয়া যাক , কেমন?

 

আমরাতো জেনে গেছি একটা প্রোগ্রামকে যখন রান করা হয় তখন সেটাকে প্রসেস বলি ।

 

প্রসেস যাতে ভালমতো কাজ করতে পারে এইজন্যে এটার মেমোরিকে চারভাগে ভাগ করা হয় ।

চারভাগ কি কি ?


 

Text: আমরা কোড লিখি বিভিন্ন ভাষায়, ঐটাকে কম্পাইল করার পর কম্পাইল্ড কোডটা Text Section এ জমা থাকে ।

Data: আমাদের কোডে যদি গ্লোবাল অথবা স্ট্যাটিক ভ্যারিয়েবল ব্যবহার করে থাকি তাহলে তারা Data Section এ জমা থাকে।

Heap: Dynamic Memory Allocation এটা আমরা সবাই জানি, আমরা যদি এটা ইউজ করি আমাদের প্রোগ্রামে তখন এটা Heap Part থেকে জায়গা নিবে।

Stack: আমাদের প্রোগ্রামের যতরকম লোকাল ভ্যারিয়েবল, ফাংশন ব্যবহার করব তারা stack পার্ট থেকে জায়গা নিবে।

 

এইখানে stack আর heap মেমোরির দুইটা টাইপ আর কি ।

উপরের ছবিতে stack আর heap এর ঐখানে Arrow sign দেয়া আছে, কারণ আমরা এই দুই পার্টের ফিক্সড সাইজ বলতে পারি না, আমাদের প্রোগ্রামে যদি Local Variable বেশি ইউজ করি তাহলে stack এর জায়গা বড় হবে, Dynamic Memory বেশি ইউজ করলে Heap এর জায়গা বড় হবে, it depends. এইজন্য Arrow দিয়ে বুঝাইসে আর কি যে কম বেশি হইতারে।

 

প্রসেসের জীবনকাল , 

·        New: - প্রসেস মাত্র তৈরী হইলো এই অবস্থায় নতুন।

·        Ready: প্রসেস RAM এ অবস্থান করছে, CPU তে যেয়ে কাজ শুরু করার জন্য রেডি।

·        Running: প্রসেস CPU তে আছে , কাজ চলতেছে

·        Waiting: প্রসেস I/O device, Interrupt অথবা যেকোনো কিছুর জন্য অপেক্ষা করছে

·        Terminate: প্রসেসের খেলা শেষ। চির বিদায় বন্ধু ।

 


 


Comments

Popular posts from this blog

IELTS Spoken Class Adminssion Scenario - 01

.......  Student: Hello, May I come in, sir ? Optional (student): May I sit ? Sir:  Please have a seat. Sir: How may I help you, Sir ? Student: I would like to admit in your spoken course. Sir: Oh sure. Student: How many days are there in a week ? Sir: There are three classes in a week. Student: What time do you offer class ? Sir: We have class at 11am / 4pm / 6pm / 8pm

Php Learning Time

 Differences of explode( ) and implode( ) in php: explode: একটা স্ট্রিংকে কোনো একটা সেপারেটরের বেসিসে অ্যারেতে কনভার্ট করে, যেমন  <?php $text="Hello How are you?"; print_r(explode(" ",$text)); ?> This will give output of  Array (     [0] => Hello     [1] => How     [2] => are     [3] => you? ) Differences of array_splice( ) and array_slice( ) ধরেন আসল অ্যারে হচ্ছে    $arr =[ "Hello" , "this" , "is" , "test" , "text" ];    এখন এটাকে স্লাইসিং করার জন্য আমরা উপরের দুইটা মেথড ই ব্যবহার করতে পারি , কিন্তু array_splice এটা ইউজ করলে অরজিনাল array ও চেঞ্জ হয়ে যাবে, মানে যদি আমরা এভাবে লিখি  $var2 = array_splice ( $arr , 0 , 2 );   তাইলে $var2 এর ভিতরে থাকবে ["Hello" , "this"] ,  আর অরজিনাল array তে বাকি থাকবে ["is", "test", "text"] কিন্তু যদি আমরা ইউজ করি তাহলে অরজিনাল array আগের মতোই থাকবে পাশাপাশি $var2 এর মধ্যে ভ্যালু গুলা এসে পড়বে  Array (     [0] => ...