X86 এবং x86_64 এ লিনাক্স সিস্টেম কল নম্বরগুলি কেন পৃথক?


35

আমি জানি যে সিস্টেম কল ইন্টারফেসটি নিম্ন স্তরে প্রয়োগ করা হয় এবং তাই আর্কিটেকচার / প্ল্যাটফর্ম নির্ভর, "জেনেরিক" কোড নয়।

তবুও, লিনাক্স 32-বিট x86 কার্নেলগুলিতে সিস্টেম কলগুলির অনুরূপ আর্কিটেকচার লিনাক্স 64৪-বিট x86_64 তে একই নম্বর রাখার কারণগুলি আমি কেন পরিষ্কারভাবে দেখতে পাচ্ছি না? এই সিদ্ধান্তের পিছনে অনুপ্রেরণা / কারণ কী?

আমার প্রথম অনুমানটি হ'ল ব্যাকগ্রাউন্ডিং কারণটি ছিল একটি x86_64 সিস্টেমে 32-বিট অ্যাপ্লিকেশনগুলি চলমান রাখা, যাতে সিস্টেম কল নম্বরটিতে যুক্তিসঙ্গত অফসেটের মাধ্যমে সিস্টেমটি জানতে পারে যে ব্যবহারকারী-স্থানটি 32-বিট বা 64-বিট যথাক্রমে। এটি অবশ্য ঘটনা নয়। কমপক্ষে আমার কাছে মনে হয়েছে যে x86_64 তে সিস্টেম কল নম্বর 0 হওয়া () এই চিন্তার সাথে একত্রিত করা যায় না।

আরেকটি অনুমান করা হয়েছে যে সিস্টেম কল নম্বরগুলি পরিবর্তনের ক্ষেত্রে কোনও সুরক্ষা / কঠোর পটভূমি থাকতে পারে, এমন কিছু যা আমি নিজেকে নিশ্চিত করতে সক্ষম হইনি।

আর্কিটেকচার নির্ভর কোড কোড অংশ বাস্তবায়নের চ্যালেঞ্জ সম্পর্কে অজ্ঞ থাকায় আমি এখনও অবাক হই যে সিস্টেম কল নম্বরগুলি কীভাবে পরিবর্তন করতে হবে , যখন কোনও প্রয়োজন নেই বলে মনে হচ্ছে (এমনকি কোনও 16-বিট রেজিস্টারও এখন আরও বেশি পরিমাণে জমা রাখবে তবে সমস্ত প্রতিনিধিত্ব করার জন্য 346 ডলার নম্বর রয়েছে) কল), ব্রেক সামঞ্জস্যতা ব্যতীত অন্য কিছু অর্জনে সহায়তা করবে (যদিও লাইব্রেরির মাধ্যমে সিস্টেম কলগুলি ব্যবহার করে, libc, এটি প্রশমিত করে)।


3
আমি মনে করি আপনি ভুল প্রশ্ন জিজ্ঞাসা করছেন। সঠিক প্রশ্ন হ'ল কেন তাদের একই রাখুন: উত্তরের সামঞ্জস্যতা। সুতরাং x86 এবং x86_64 যদি বেমানান হয় তবে তাদের পরিবর্তন থেকে রক্ষা করার জন্য কোনও বাহিনী নেই। এখন গত ২০ বছর যাবত সমস্ত বাহিনী যে পরিবর্তন চেয়েছিল, আধিপত্য অর্জন করবে (আমরা তাদের পরিবর্তনের সুযোগ পাই)। [নোট করুন এটি কেবলমাত্র মতামত এবং নতুন সিস্টেমের ডিজাইনারদের অভ্যন্তরীণ মনের ভিত্তিতে নয়]]
সিটিআরটিএল-ওল্টর

উত্তর:


34

নির্দিষ্ট সংখ্যার পিছনে যুক্তি হিসাবে, যা অন্য কোনও আর্কিটেকচারের সাথে মেলে না [[x32 "যা সত্যই x86_64 আর্কিটেকচারের অংশ মাত্র]]: লিনাক্স কার্নেলে x86_64 সমর্থনের প্রথম দিকের কোনও দিন আগে পিছনে গুরুতর সামঞ্জস্যতা সীমাবদ্ধতা, সমস্ত সিস্টেম কলগুলি ক্যাচলাইন ব্যবহারের স্তরে এটি অনুকূলকরণের জন্য পুনরায় নামকরণ করা হয়েছিল ।

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

একই পদ্ধতিতে একই ক্যাশে লাইনের সাথে একসাথে ব্যবহৃত সিস্টেম কলগুলি রাখার বিষয়েও কিছু চলতে পারে (এই মানগুলি কেবল পূর্ণসংখ্যা হয় তবে কার্নেলের মধ্যে একটি টেবিল রয়েছে যার প্রতিটি ফাংশন পয়েন্টার রয়েছে, সুতরাং 8 টি সিস্টেম কলের প্রতিটি গ্রুপ দখল করে এই টেবিলের জন্য একটি 64-বাইট ক্যাশে লাইন)


1
fork may seem "fundamental", but [...] called only once per process.আহ, কি? আমি বুঝতে পেরেছি আপনি একবার কলটি প্রস্থান করার আশা করতে পারেন, তবে আপনি fork()কলটির পিতামাতা এবং সন্তানের ভিতরে কাঁটাচামচ করতে পারেন
বিড়াল

5
@ কেট যদি আপনি forkসন্তানের প্রক্রিয়া হিসাবে গণ্য হচ্ছে (যেমন এটি প্রক্রিয়া তৈরির কল হিসাবে দেখুন) দেখুন তবে র‌্যান্ডম 832 এর বক্তব্যটি সঠিক।
আইক্রাস

4
@ কেট ঠিক আছে, আপনি কাঁটাচামচ কল করতে পারেন () দুটি বা তিনবার, সম্ভবত আরও কিছু। তবে আপনি পড়তে () কয়েক মিলিয়ন বা বিলিয়ন বার কল করতে পারেন।
মাইকেল হ্যাম্পটন

1
হ্যাঁ, এটাই আমি বোঝাতে চাইছিলাম সিস্টেমের জীবদ্দশায় কাঁটাচামচ কল এবং প্রক্রিয়া সংখ্যা অভিন্ন হতে চলেছে, init, ক্লোন [যা প্রক্রিয়া বা থ্রেড তৈরি করতে পারে] ইত্যাদির মতো বিবরণ উপেক্ষা করে
র্যান্ডম 832

15

"এমডি 64 লিনাক্সে সিস্টেম কল নম্বরগুলি কেন পৃথক?" এই প্রশ্নের উত্তরটি দেখুন ? স্ট্যাক ওভারফ্লো

সংক্ষেপে এটি: সামঞ্জস্যের জন্য, সিস্টেম কল তালিকা স্থিতিশীল এবং কেবল বৃদ্ধি পেতে পারে grow যখন x86 64 আর্কিটেকচারটি উপস্থিত হয়েছিল, তখন এবিআই (আর্গুমেন্ট পাসিং, রিটার্ন করা মান) আলাদা ছিল, সুতরাং কার্নেল বিকাশকারীরা দীর্ঘ প্রতীক্ষিত পরিবর্তন আনার সুযোগ নিয়েছিল।


আমার অনুমান সঠিক ছিল।
ctrl-alt-delor

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

-3

সংক্ষেপে, কারণ কেউ ভেবেছিলেন " N+1কৃতজ্ঞভাবে এটি করার অসঙ্গতিগুলি উপায়গুলির চেয়ে ভাল N"। .তিহাসিক খিলানগুলির জন্য, সিস্কল নম্বরগুলি সাধারণত কিছু লিগ্যাসি মালিকানাধীন ইউনিক্সের সাথে মেলে বেছে নেওয়া হয়েছিল। তবে x86_64 এর জন্য কার্নেল বিকাশকারীরা তাদের পছন্দ অনুযায়ী যে কোনও নম্বর বেছে নিতে পারে। সাধারণ পছন্দটি করার পরিবর্তে এবং বিদ্যমান নম্বরটিকে পুনরায় ব্যবহার করার পরিবর্তে তারা একটি নতুন মান আবিষ্কার করার জন্য পছন্দটি করেছিল। তারপরে তারা আবার এআরচ 64 এবং অন্যদের একগুচ্ছের জন্য তা করেছে। এটি লিনাক্স কার্নেল বিকাশের একটি পুনরাবৃত্তি প্যাটার্ন।


3
পরিবর্তনটি কৃত্রিম ছিল না । এর শক্ত প্রযুক্তিগত কারণ রয়েছে। যদি এটি পিছনের দিকে সামঞ্জস্যের প্রয়োজনীয়তার জন্য না হয় তবে বিদ্যমান আর্কিটেকচারগুলিতেও একই রকম পরিবর্তনগুলি প্রয়োগ করা যেত।
জার্গ ডব্লু মিট্টাগ

সংখ্যায় পার্থক্য 100% কৃতজ্ঞ। কোনও নির্দিষ্ট নম্বর দেওয়ার কোনও প্রযুক্তিগত সুবিধা নেই।
আর ..

2
যেহেতু এই অন্য উত্তর ব্যাখ্যা করে, syscalls যেমন যে syscalls যা সাধারণভাবে একসঙ্গে ব্যবহার করা হয় প্রাপ্ত syscall টেবিলে একই cacheline ভাগ গোষ্ঠীবদ্ধ করে। এবং সিস্কেল নম্বরগুলি এমনভাবে বেছে নেওয়া হয় যে সেগুলি সেই টেবিলটিতে সাধারণ সূচক। তাত্ত্বিকভাবে, আমরা সিস্কাল নম্বর থেকে সিস্কল টেবিলের মধ্যে সিস্কলের অবস্থানটি ডিক্লোল করতে ইন্ডিয়ারেশনের একটি স্তর ব্যবহার করতে পারি, তবে এটি সম্ভবত একই ক্যাচলিনে গরম সিস্কলগুলি রাখার ফলে প্রাপ্ত পারফরম্যান্স লাভের একটি অংশ খেয়ে ফেলতে পারে।
Jörg ডব্লু মিট্টাগ

@ জার্গডব্লিউমিত্যাগ: এবং এটি স্পষ্টতই অকালীন অপটিমাইজেশন এবং একটি পরিমাপযোগ্য উন্নতি নয়। কতগুলি চক্র সাইকাল নেয় এবং কতগুলি ক্যাশে লাইনগুলি উচ্ছেদ করে তা কেবল দেখুন। সারণির ক্রম থেকে সেরা এক ক্যাশে লাইনটি সংরক্ষণ করা কোনও তাত্পর্য বোধ করে না।
আর .. 15

2
@ আর .. "আমি জনপ্রিয় ডিবিএমএস এবং কিছু নেটওয়ার্ক এবং ডেস্কটপ অ্যাপ্লিকেশনটির স্ট্রেস আউটপুট সহ টিপিসিসি কার্নেল প্রোফাইলিং তথ্যের ফাংশনে নম্বরটি বেছে নিয়েছি।" পরিমাপ ছিল অবশ্যই শোনায়। তবে লেখক কোনও সংখ্যা সরবরাহ করেন নি বা পদ্ধতিটি পর্যাপ্তভাবে ব্যাখ্যা করেছেন।
ব্যবহারকারী 45891
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.