কোড লাইন সিপিইউ দ্বারা কার্যকর করা হয়?


11

আমি কীভাবে উচ্চ-স্তরের ভাষাটিকে মেশিন কোডে রূপান্তরিত করে তারপরে সিপিইউ দ্বারা সম্পাদন করা হয় তা সত্যিই বুঝতে চেষ্টা করছি।

আমি বুঝতে পারি যে কোডটি মেশিন কোডে সংকলিত হয়েছে, এটি নিম্ন-স্তরের কোড যা কোনও সিপিইউ ব্যবহার করতে পারে। আমার কাছে যদি একটি এসাইনমেন্ট স্টেটমেন্ট থাকে তবে বলুন:

x = x + 5;
y = x - 3;

সিপিইউ কি একবারে প্রতিটি লাইন চালায়? সুতরাং এটি প্রথমে x = x + 5 কার্যকর করবে; নির্দেশনা এবং তারপরে সিপিইউ পরবর্তী নির্দেশনাটি y = x- 3; আমি কার্যকরভাবে বাস্তবায়ন প্রক্রিয়াটি বোঝার চেষ্টা করছি এবং আমি যে কোডটি লিখি তা আসলে সিপিইউ দ্বারা কার্যকর করা হয়।


আপনি ওপেন সোর্স সিপিইউগুলির একটির নকশা বোঝার চেষ্টা করতে চাইতে পারেন, এক্সামেরা ডটকম / স্পিনেক্স / ফাইপগা- j1.html এর মতো কিছু সাধারণ স্ট্যাক-ভিত্তিক বাস্তবায়ন রয়েছে - তারা 3-ঠিকানা আর্কিটেকচারের চেয়ে অনেক সাধারণ're আপনার উদাহরণ মত।
এসকে-যুক্তি

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

উত্তর:


12

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

এই কোডটি এমন কিছুতে সংকলন করতে পারে (একটি মেক-আপ সমাবেশ ভাষায়):

load R1, [x] ; meaning load the data stored at memory location x into register 1
add R1, 5
store [x], R1 ; store the modified value into the memory location x
sub R1, 3
store R1, [y]

তবে, যদি সংকলকটি জানে যে কোনও ভেরিয়েবলটি আবার ব্যবহার করা হয় না, তবে স্টোর অপারেশনটি নির্গত হতে পারে না।

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


কেন না? একটি 3-ঠিকানা আর্কিটেকচারের মতো নির্দেশাবলী থাকবে ADD Rx, Rx, $5এবং SUB Ry, Rx, $3(ধরে নেওয়া যে এক্স এবং y ভেরিয়েবলগুলি রেজিস্টারগুলিতে ম্যাপ করা হয়েছিল)। আপনি একটি লোড / স্টোর আরআইএসসি পদ্ধতির বর্ণনা দিচ্ছেন।
এসকে-যুক্তি

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

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

1
@ এসকে-লজিক: ওপি তার প্রশ্নটি শুরু করেছিল "আমি সত্যিই বোঝার চেষ্টা করছি যে উচ্চ-স্তরের ভাষা ঠিক কীভাবে [...]"
আন্দ্রেস এফ।

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

2

এটা নির্ভর করে.

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

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

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


এই ক্ষেত্রে পরবর্তী নির্দেশের ইনপুটটি প্রথম নির্দেশের ফলাফলের উপর নির্ভর করে, সুতরাং এটি অবশ্যই ক্রমান্বয়ে কার্যকর করা উচিত
এসকে-যুক্তি

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

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

আমি ভাবছি যদি প্রসেসরগুলি "অনুমান" করার চেষ্টা করে তবে এর মান xকী? এইভাবে এটি ইতিমধ্যে কোডটি কার্যকর করেছে এবং এটি ক্যাশে সঞ্চিত করেছে।
কলব ক্যানিয়ন

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

1

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

  1. একটি রেজিস্টার একটি নির্দিষ্ট মেমরি ঠিকানা থেকে একটি মান লোড করুন
  2. মানটি সংশোধন করুন
  3. স্মৃতিতে এটি আবার লিখুন

এই নির্দেশাবলীর প্রকৃত বিবরণ প্ল্যাটফর্মগুলির মধ্যে পৃথক হয়।

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


0

এটি কীভাবে কাজ করে সে সম্পর্কে আরও বিশদ, সম্ভবত একটি সংকলক শ্রেণীর পাশাপাশি আপনার আরও দুর্দান্ত বিবরণ দেখতে হবে।

মূলত, আপনার প্রশ্নটি 2 ভিন্ন দিকগুলিতে ফোকাস করছে।

1) কোডটি মেশিন কোডে অনুবাদ করা হয় কীভাবে?

২) কখন / কীভাবে সমান্তরাল ব্যবহার করে কোডটি গণনা করা হয়?

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

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

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