"এফএস" / "জিএস" নিবন্ধটি কীসের জন্য উদ্দিষ্ট?


105

সুতরাং আমি জানি যে নিবন্ধগুলি এবং সেগুলির ব্যবহারগুলি কী বলে মনে হচ্ছে:

  • সিএস = কোড বিভাগ (আইপি এর জন্য ব্যবহৃত)

  • ডিএস = ডেটা বিভাগ (এমওভির জন্য ব্যবহৃত)

  • ES = গন্তব্য বিভাগ (MOVS ইত্যাদির জন্য ব্যবহৃত)

  • এসএস = স্ট্যাক সেগমেন্ট (এসপির জন্য ব্যবহৃত)

তবে নিম্নলিখিত রেজিস্ট্রারগুলি কীসের জন্য ব্যবহার করা যেতে পারে?

  • এফএস = "ফাইল সেগমেন্ট"?

  • জিএস = ???

দ্রষ্টব্য: আমি কোনও নির্দিষ্ট অপারেটিং সিস্টেম সম্পর্কে জিজ্ঞাসা করছি না - আমি সিপিইউ দ্বারা তাদের কী ব্যবহার করার উদ্দেশ্যে ছিল তা সম্পর্কে জিজ্ঞাসা করছি, যদি কিছু থাকে।


25
আমি যতদূর জানি, এই দুটিতে F এবং G কোনও কিছুর জন্য দাঁড়ায় না। এটি ঠিক যে সিপিইউতে (এবং নির্দেশের সেটটিতে) ছয়জন ব্যবহারকারী-নির্দিষ্টযোগ্য বিভাগ রেজিস্টারগুলির জন্য জায়গা ছিল এবং কেউ লক্ষ্য করেছেন যে "এস" ট্যাক্স বিভাগের পাশাপাশি "সি" এবং "ডি" অক্ষরগুলি (কোড এবং ডেটা) ধারাবাহিকভাবে ছিল সুতরাং "E "টি ছিল" অতিরিক্ত "বিভাগ এবং তারপরে" F "এবং" G "কেবল সাজানো।
12 টায়ার

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

21
বিএস রেজিস্টার দিয়ে আমরা কতটা মজা করতে পারতাম তা একবার ভেবে দেখুন: -}
ইরা বাক্সটার

5
আমি সবসময় জিএসকে "গ্রাফিকস বিভাগ" হিসাবে ব্যবহার করি। :-)
ব্রায়ান নোব্লাচ

4
"জি" এনারাল "এস" উদাহরণ সম্পর্কে কীভাবে?
এসএস আন

উত্তর:


113

উইন্ডোজ এবং লিনাক্স তাদের কী উদ্দেশ্যে ব্যবহার করেছিল এবং সেগুলির জন্য কী ব্যবহার করা হয় তা রয়েছে।

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

আমাদের বর্তমান 2010 অপারেটিং সিস্টেমগুলি পিছনে পিছনে একটি বিশাল পদক্ষেপ, এ কারণেই তাদের "নপুংসক" বলা হয়। তথাকথিত "ফ্ল্যাট (আইএমএইচও নিস্তেজ) ঠিকানা স্থান" দিয়ে আপনি কেবল আপনার প্রক্রিয়া স্পেসের একক বিভাগকে সম্বোধন করতে পারেন। X86-32 মেশিনে বিভাগটি রেজিস্টারগুলি এখনও রিয়েল সেগমেন্টের রেজিস্টারগুলির জন্য ব্যবহার করা যেতে পারে, তবে কেউ বিরক্ত করেনি (অ্যানডি গ্রোভ, প্রাক্তন ইন্টেল প্রেসিডেন্ট, গত শতাব্দীতে তার সমস্ত বিখ্যাত ইনটেল ইঞ্জিনিয়াররা শক্তি ব্যয় করার পরে আবিষ্কার করেছিলেন এবং তার আগেই বিখ্যাত পাবলিক ফিট ছিলেন) এই অর্থটি কার্যকর করার জন্য তার অর্থ, যে এটি কেউ ব্যবহার করবে না Go যান, অ্যান্ডি!)

এএমডি b৪ বিটে যাওয়ার সিদ্ধান্ত নিয়েছে যে তারা মাল্টিক্সকে পছন্দ হিসাবে বাদ দিয়েছে কিনা তাদের পাত্তা দিচ্ছে না (এটি দাতব্য ব্যাখ্যার; অকারণযোগ্য এটি হ'ল তারা মাল্টিক্স সম্পর্কে নিখরচায় ছিলেন) এবং তাই bit৪ বিট মোডে বিভাগের রেজিস্টারগুলির সাধারণ ক্ষমতা অক্ষম করে। থ্রেড লোকাল স্টোরটিতে অ্যাক্সেস পাওয়ার জন্য এখনও থ্রেডের প্রয়োজন ছিল এবং প্রতিটি থ্রেডের এএ পয়েন্টার দরকার ছিল ... তত্ক্ষণাত অ্যাক্সেসযোগ্য থ্রেড স্টেটে (যেমন, রেজিস্টারে) ... স্থানীয় স্টোরের থ্রেড করার জন্য। যেহেতু উইন্ডোজ এবং লিনাক্স উভয়ই 32 বিট সংস্করণে এফএস এবং জিএস (স্পষ্টকরণের জন্য নিককে ধন্যবাদ) ব্যবহার করেছে, এএমডি সিদ্ধান্ত নিয়েছে যে কেবলমাত্র এই উদ্দেশ্যে 64 বিট সেগমেন্টের রেজিস্টারগুলি (জিএস এবং এফএস) ব্যবহার করা উচিত (আমি মনে করি আপনি আপনার প্রসেস স্পেসের যে কোনও জায়গায় এগুলিকে নির্দেশ করতে পারে; অ্যাপ্লিকেশন কোড এগুলি লোড করতে পারে বা না করতে পারলে) no

প্রতিটি থ্রেডের মেমরির মানচিত্রের একটি নিখুঁত ভার্চুয়াল ঠিকানা (উদাহরণস্বরূপ, 0-এফএফএফ বলুন) তৈরি করার জন্য এটি স্থাপত্যগতভাবে সুন্দর আইএমএইচও হতে পারে যে এটির থ্রেড ছিল স্থানীয় স্টোরেজ (কোনও [বিভাগ]] নিবন্ধের পয়েন্টার প্রয়োজন নেই!); আমি এটি ১৯ bit০ এর দশকে 8 বিট ওএসে করেছি এবং এটি নিখরচায় কাজ ছিল যেমন রেজিস্ট্রিগুলিতে কাজ করার জন্য আরও একটি বড় স্ট্যাক রাখার মতো।

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

যাঁরা ইতিহাস জানেন না তারা এর পুনরাবৃত্তি করবেন না; তারা কিছু কিছু ঘনঘন করতে ডুবে গেছে।


11
@ সুপের্যাট: একটি সহজ, আরও উজ্জ্বল স্কিম যা তাদের storage৫৫3636 গুণ বেশি স্টোরেজ হিসাবে সম্বোধন করতে পারত, সেগমেন্টের রেজিস্টারগুলিকে নিম্ন 16 বিটগুলির সম্পূর্ণ উপরের 16 বিট এক্সটেনশন হিসাবে বিবেচনা করা উচিত, যা সংক্ষেপে 286, 386 এবং মাল্টিক্স করেছে।
ইরা

5
@ ইরাক্যাক্সটার: এই পদ্ধতির সমস্যাটি হ'ল 80286-স্টাইলের বিভাগগুলিতে প্রতিটি সেগমেন্টে অনেকগুলি অবজেক্ট রাখার চেয়ে পর্যাপ্ত পরিমাণে ওভারহেড থাকে এবং এইভাবে প্রতিটি পয়েন্টারে সেগমেন্ট এবং অফসেট উভয়ই সংরক্ষণ করে। বিপরীতে, যদি কেউ 16 বাইটের গুণক পর্যন্ত মেমরির বরাদ্দকে রাউন্ড করতে ইচ্ছুক থাকে, 8086-স্টাইলের বিভাজনটি কোনও একটি বিষয়টিকে চিহ্নিত করার উপায় হিসাবে এককভাবে সেগমেন্টটি ব্যবহার করার অনুমতি দেয় । ১ 16 বাইট অবধি রাউন্ডিং বরাদ্দগুলি ১৯৮০ সালে কিছুটা অস্বস্তিকর হতে পারে তবে এটি যদি আজ প্রতিটি বিজয়ের রেফারেন্সের আকারটি 8 বাইট থেকে চারকে কমিয়ে দেয় তবে একটি জয়কে উপস্থাপন করতে পারে।
সুপারক্যাট

4
সেই রেজিস্টার করছে অধুনিক অপারেটিং সিস্টেম ব্যবহার করা হয়। তারা বেশিরভাগ x86 চিপের জন্য এখন উপলভ্য দুটি বড় ওএসে, টাস্ক কন্ট্রোল ব্লক সম্পর্কে তথ্য নির্দেশ করতে উত্সর্গীকৃত। এবং, যেহেতু তারা এমনকি তাদের মূল অভিপ্রায় জন্য "সাধারণ উদ্দেশ্য" নয়, আপনি এগুলিকে খুব বেশি ব্যবহার করতে পারবেন না। X86-64 সিস্টেমে ভান করা আরও ভাল যে আপনার থ্রেড কন্ট্রোল ব্লকগুলিতে অ্যাক্সেস করতে দেওয়া তথ্যের প্রয়োজন না হওয়া অবধি কেবল তাদের অস্তিত্ব নেই।
ইরা

5
পুরানো বিজ্ঞানের উপর ভিত্তি করে পরিশিষ্টের সাদৃশ্যটি সত্যই খারাপ; এটা ইমিউন সিস্টেম এর সাথে সম্পর্কিত, তাই স্পষ্টভাবে না "বিলুপ্তপ্রায় অঙ্গের"। এটি প্রকৃত পোস্ট থেকে বিচ্ছিন্ন করে। তা ছাড়া, এটি একটি ভাল প্রতিক্রিয়া।
কোড_ড্রেড

5
ফ্ল্যাট মেমরির বিভাজনযুক্ত বিনোদনের জন্য বিনোদনের জন্য ধন্যবাদ 6৮০৯ (পেজড মেমরি সহ এবং ছাড়াই), 50 z০২, জেড ৮০,]? কে এবং ৮০ [১২৩]? 86 86-তেও আমার লিখিত কোড রয়েছে স্মৃতি হ'ল হরর শো এবং এটি আমি ইতিহাসের ডাস্টবিনে মিশে গিয়ে আনন্দিত। থ্রেড_লোকাল ডেটাতে দক্ষ অ্যাক্সেসের জন্য এফএস এবং জিএস ব্যবহার anতিহাসিক ত্রুটির একটি সুখী অনিচ্ছাকৃত পরিণতি।
রিচার্ড হজেস

46

নিবন্ধগুলি FSএবং GSসেগমেন্ট রেজিস্টারগুলি। তাদের কোনও প্রসেসর-সংজ্ঞায়িত উদ্দেশ্য নেই, তবে পরিবর্তে ওএসগুলি চালনার মাধ্যমে তাদের উদ্দেশ্য দেওয়া হয়। উইন্ডোজ -৪-বিটে GSরেজিস্টারটি অপারেটিং সিস্টেমের সংজ্ঞায়িত কাঠামোর দিকে নির্দেশ করতে ব্যবহৃত হয়। FSএবং GSসাধারণত থ্রেড-নির্দিষ্ট মেমরি অ্যাক্সেস করতে ওএস কার্নেল দ্বারা ব্যবহৃত হয়। উইন্ডোগুলিতে, GSনিবন্ধটি থ্রেড-নির্দিষ্ট মেমরি পরিচালনা করতে ব্যবহৃত হয়। লিনাক্স কার্নেল GSসিপিই-নির্দিষ্ট মেমরি ব্যবহার করতে ব্যবহার করে।


4
তারা কি ওএস-সংজ্ঞায়িত উদ্দেশ্যে, বা কোডটির সুবিধার্থে কিছু করার দরকার ছিল এমন কোডের সুবিধার্থে ব্যবহার করার ইচ্ছা ছিল *dest++ = lookup[*src++];, যদি না ভাগ্য, অনুসন্ধান, এবং এসসিআর তিনটি অপ্রাসঙ্গিক স্থানে থাকত তবে তার চেয়ে বরং বিশ্রী হত।
সুপারক্যাট

8
উইন্ডোজ এফএসে প্রকৃতপক্ষে থ্রেড নির্দিষ্ট স্টোরেজ জন্য। এফএস দ্বারা নির্দেশিত ব্লকের নথিভুক্ত মানচিত্রটি এখানে দেখুন en.wikedia.org/wiki/Win32_Thread_Inifications_Block
নেডকো

4
এটি কেবল উইন্ডোজ নয়। জিএস ওএস এক্স-তে টিএলএসের জন্যও ব্যবহৃত হয় context৪ বিট কার্নেলগুলি জিএসকে কনটেক্সট সুইচগুলির সময় সিস্টেমের কাঠামোর উপর নজর রাখতে ব্যবহার করে। ওএস SWAPGS ব্যবহার করতে পারে।
ইটি

14

এফএস উইন্ডোজ প্রক্রিয়াগুলিতে থ্রেড তথ্য ব্লক (টিআইবি) নির্দেশ করতে ব্যবহৃত হয়।

একটি সাধারণ উদাহরণ হ'ল ( এসইএইচ ) যা একটি কলব্যাক ফাংশনে পয়েন্টার সঞ্চয় করে FS:[0x00]

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

mov    eax,gs:0x14
mov    DWORD PTR [ebp-0xc],eax

4
এটি আসলে প্রশ্নের উত্তর দেয় না। প্রশ্নটিতে নোট: আমি কোনও নির্দিষ্ট অপারেটিং সিস্টেম সম্পর্কে জিজ্ঞাসা করছি না - আমি সিপিইউ দ্বারা তাদের কী ব্যবহার করার উদ্দেশ্যে ছিল তা সম্পর্কে জিজ্ঞাসা করছি, যদি কিছু থাকে।
মাইকেল পেচ 25'18


3

ইন্টেল ম্যানুয়াল অনুসারে, -৪-বিট মোডে এই রেজিস্টারগুলিকে কিছু লিনিয়ার অ্যাড্রেস গণনাতে অতিরিক্ত বেস রেজিস্টার হিসাবে ব্যবহার করার উদ্দেশ্যে করা হয়। আমি এটি বিভাগ 3..7.৪.১ (4 ভলিউমের সেটে পৃষ্ঠা 86) থেকে টানছি। সাধারণত যখন সিপিইউ এই মোডে থাকে, লিনিয়ার ঠিকানা কার্যকর ঠিকানা হিসাবে একই, কারণ বিভাগটি প্রায়শই এই মোডে ব্যবহৃত হয় না।

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

32 এবং 64-বিট উভয় মোডে ওভাররাইড ব্যবহার করার সময় কিছু আকর্ষণীয় কৌশল রয়েছে তবে এতে সুবিধাযুক্ত সফ্টওয়্যার জড়িত।

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


2

টিএল; ডিআর;

"এফএস" / "জিএস" নিবন্ধটি কীসের জন্য উদ্দিষ্ট?

কেবলমাত্র ডিফল্ট ডেটা বিভাগ (ডিএস) এর বাইরে ডেটা অ্যাক্সেস করতে। হ'ল ES এর মতো like


দ্য লং রিড:

সুতরাং আমি জানি যে নিবন্ধগুলি এবং সেগুলির ব্যবহারগুলি কী বলে মনে হচ্ছে:

[...]

ঠিক আছে, প্রায় তবে ডিএস 'কিছু' ডেটা বিভাগ নয়, তবে এটি ডিফল্ট। সমস্ত অপারেশন ডিফল্টরূপে করা হয়েছিল (* 1)। এটি হ'ল সমস্ত ডিফল্ট ভেরিয়েবলগুলি অবস্থিত - মূলত dataএবং bss। X86 কোডটি বরং কমপ্যাক্ট হওয়ার কারণ এটি কোনওভাবেই। সমস্ত প্রয়োজনীয় ডেটা, যা প্রায়শই অ্যাক্সেস করা হয়, (প্লাস কোড এবং স্ট্যাক) 16 বিট শর্টহ্যান্ড দূরত্বের মধ্যে।

ES অন্য সমস্ত কিছুর (* 2), ডিএস-এর 64 কিবি ছাড়িয়ে সমস্ত কিছুতে অ্যাক্সেস করতে ব্যবহৃত হয়। ওয়ার্ড প্রসেসরের পাঠকের মতো, স্প্রেড শিটের সেলগুলি বা গ্রাফিক্স প্রোগ্রামের চিত্রের ডেটা এবং আরও কিছু। প্রায়শই ধরে নেওয়া যায় না this

অনুরূপ এটি কেবলমাত্র একটি সামান্য বিরক্তি যা ডিএস এবং ইএস স্ট্রিং অপারেশনগুলি করার সময় লোড (এবং পুনরায় লোড) করতে হতে পারে - এটি অন্ততপক্ষে তার সময়ের সেরা চরিত্র পরিচালনা করার নির্দেশগুলির মধ্যে একটি অফসেট।

ব্যবহারকারী ডেটা Ki৪ কিবি ছাড়িয়ে গেলে এবং ক্রিয়াকলাপ শুরু করতে হলে সত্যই ব্যথা হয়। কিছু ক্রিয়াকলাপ একসাথে একক উপাত্ত আইটেমের মাধ্যমে (চিন্তা করুন A=A*2) বেশিরভাগ ক্ষেত্রে দুটি ( A=A*B) বা তিনটি ডেটা আইটেম ( A=B*C) প্রয়োজন হয় ( যদি এই আইটেমগুলি বিভিন্ন বিভাগে থাকে, তবে বেশ কয়েকটি ওভারহেড যুক্ত করে, অপারেশন প্রতি কয়েকবার ES পুনরায় লোড করা হবে।

শুরুতে, 8 বিট ওয়ার্ল্ড (* 3) এবং সমানভাবে ছোট ডেটা সেটগুলি থেকে ছোট প্রোগ্রামগুলি দিয়ে, এটি কোনও বড় বিষয় ছিল না, তবে শীঘ্রই এটি একটি বড় পারফরম্যান্স বোতলের ঘাড়ে পরিণত হয়েছে - এবং আরও বেশি গাধাটির জন্য সত্যিকারের ব্যথা প্রোগ্রামার (এবং সংকলক)। 386 ইন্টেল অবশেষে আরও দুটি বিভাগ যুক্ত করে ত্রাণ বিতরণ করেছে, সুতরাং মেমরির মধ্যে ছড়িয়ে থাকা উপাদানগুলির সাথে কোনও সিরিজ অ্যানারি , বাইনারি বা ত্রৈমাসিক ক্রিয়াকলাপ, ES কে পুরো সময় লোড না করেই ঘটতে পারে।

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

নামকরণ অনুসারে F / G বর্ণগুলি হ'ল E এর পরে কেবল বর্ণানুক্রমিক ধারাবাহিকতা। কমপক্ষে সিপিইউ ডিজাইনের দিক থেকে কিছুই জড়িত না।


* 1 - স্ট্রিং গন্তব্যের জন্য ES এর ব্যবহার একটি ব্যতিক্রম, কেবলমাত্র দুটি বিভাগ রেজিস্টার প্রয়োজন। এগুলি ছাড়া খুব বেশি কার্যকর হবে না - বা সর্বদা একটি বিভাগ উপসর্গের প্রয়োজন। যা আশ্চর্যজনক বৈশিষ্ট্যগুলির মধ্যে একটির (মারপিটবিহীন) স্ট্রিং নির্দেশাবলীর ব্যবহারের ফলে তাদের একক বাইট এনকোডিংয়ের ফলে চরম কার্যকারিতা দেখা দিতে পারে in

* 2 - সুতরাং অন্ধকারে 'এভারিথ সেগমেন্ট' এর চেয়ে 'সমস্ত কিছু অন্য বিভাগ' নামকরণের উপায় ভাল হত।

* 3 - এটা মনে রাখা সর্বদা গুরুত্বপূর্ণ যে ৮৮০০ শেষ না হওয়া অবধি 8086 কেবল স্টপ ফাঁক পরিমাপ হিসাবে বোঝানো হয়েছিল এবং মূলত এম্বেডড ওয়ার্ল্ডের জন্য 8080/85 গ্রাহকদের বোর্ডে রাখার উদ্দেশ্যে করা হয়েছিল।


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