প্রধান, গৌণ সংখ্যাটি অনন্য


11

হয় major, minorসংখ্যা একটি স্বতন্ত্র?

আমাদের কাছে এর কোনও উদ্ধৃতি এবং রেফারেন্স রয়েছে?

NAME   MAJ:MIN RM   SIZE RO MOUNTPOINT
sda      8:0    0 465.8G  0 
├─sda1   8:1    0 298.2M  0 
├─sda2   8:2    0     3G  0 
├─sda3   8:3    0 458.7G  0 /
├─sda4   8:4    0     1K  0 
└─sda5   8:5    0   3.8G  0 
sr0     11:0    1  1024M  0 

মাজ হল হার্ডওয়্যার, মাইনর বড়
ডিভাইসগুলির

উত্তর:


20

থেকে লিনাক্স প্রোগ্রামিং ইন্টারফেস , §14.1

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

[...]

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

এই পুরাতন (2001) লিনাক্স ডিভাইস ড্রাইভার (2 ই) অধ্যায়টিও দেখুন

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

# ls -l /dev/ram1 /dev/mem
crw-r----- 1 root kmem 1, 1 Jan  1  1970 /dev/mem
brw-rw---- 1 root disk 1, 1 Jan  1  1970 /dev/ram1

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

Icallyতিহাসিকভাবে ডিভাইস মেজরগুলি (বেশিরভাগ) স্ট্যাটিক্যালি একটি রেজিস্ট্রি দিয়ে বরাদ্দ করা হয়েছিল ( কার্নেলের উত্সে এখনও অবিকৃত হলেও এটি উপস্থিত রয়েছে Documentation/devices.txt)। এই দিনগুলিতে অনেকগুলি ডিভাইস গতিশীলভাবে বরাদ্দ করা হয় , এটি উদেব দ্বারা পরিচালিত হয় এবং ম্যাপিংগুলি এর মধ্যে দেখতে পাওয়া যায় /proc/devices। স্থির ডিভাইসগুলি এখনও বিদ্যমান incude/uapi/linux/major.h(সম্প্রতি থেকে সরানো হয়েছে include/major.h)

এখন যদিও প্রধান: গৌণ সংমিশ্রণটি নির্দিষ্ট ডিভাইসের উদাহরণগুলি স্বতন্ত্রভাবে সনাক্ত করে, আপনাকে একই ডিভাইসে উল্লেখ করা একাধিক ডিভাইস নোড (ফাইল) তৈরি করা বাধা দেওয়ার কিছুই নেই। এমনকি /devএগুলিতে তৈরি করতে হবে না (তবে তাদের এমন একটি ফাইল সিস্টেমে থাকতে হবে যা ডিভাইস নোডগুলি তৈরি করতে সহায়তা করে এবং nodevবিকল্পটি মাউন্ট করে না )।

একটি সাধারণ ব্যবহার ক্রুটে নকল শূন্য, নাল এবং এলোমেলো ডিভাইস তৈরি করছে:

# find /dev /var/chroot -regextype posix-extended -regex ".*/(zero|null|random)" -type c | 
xargs ls -l
crwxrwxrwx 1 root root 1, 3 2012-11-21 03:22 /dev/null
crw-rw-r-- 1 root root 1, 8 2012-05-07 10:35 /dev/random
crw-rw-rw- 1 root root 1, 5 2012-11-21 03:22 /dev/zero
crwxrwxrwx 1 root root 1, 3 2012-11-21 03:22 /var/chroot/sendmail/dev/null
crw-rw-r-- 1 root root 1, 8 2012-05-07 10:35 /var/chroot/sendmail/dev/random
crw-rw-rw- 1 root root 1, 5 2012-11-21 03:22 /var/chroot/sendmail/dev/zero

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

বেশিরভাগ নামগুলি সাধারণভাবে কনভেনশন হয় (যদিও কিছু পসিক্স দ্বারা সংজ্ঞায়িত করা হয় )। আরও মনে রাখবেন যে একটি ডিভাইস একাধিক বড় সংখ্যার জন্য নিবন্ধন করতে পারে, sdড্রাইভারটি পরীক্ষা করতে পারে /proc/devices; একটি ড্রাইভার মডিউল নাম ( .ko) ডিভাইসের নামের মতো হতে হবে না এবং ডিভাইস নোডের মতো হওয়া উচিত নয় /devএবং একক ড্রাইভার মডিউল একাধিক লজিকাল / শারীরিক ডিভাইস বা ডিভাইসের নাম পরিচালনা করতে পারে।


পুনরুদ্ধার করার জন্য: আপনার কাছে দুটি বা ততোধিক ডিভাইস নোড থাকতে পারে ( /dev/বা অন্য কোথাও) যা একই মেজর: সংখ্যালঘু সংখ্যা রয়েছে তবে তারা যদি একই ধরণের হয় তবে তারা একই ডিভাইসকে উল্লেখ করে। আপনার এক ড্রাইভার থাকতে পারে যা একাধিক বড় উদাহরণগুলি পরিচালনা করতে পারে তবে কার্নেলের মধ্যে এবং ড্রাইভারের মধ্যে প্রতিটি প্রকারের জন্য (চর বা ব্লক) বড়: ছোট ডিভাইসটি নির্দিষ্ট ডিভাইস (মেজর) এবং একটি নির্দিষ্ট উদাহরণকে বোঝার জন্য নেওয়া হয় ( ডিভাইসের গৌণ)।

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


আপডেট কিছু আকর্ষণীয় ইতিহাস এবং কিছু * বিএসডি দৃষ্টিকোণটি পল-হেনিং কাম্পের 2002 বিএসডিসনের উপস্থাপনায় পাওয়া যাবে: https://www.usenix.org/legacy/events/bsdcon/ful_papers/kamp/kamp_html/

আপনি 1978 (আলকাটেল-লুসেনের সৌজন্যে, বেল সিস্টেম টেকনিক্যাল জার্নাল জুলাই-আগস্ট 1978) -র সময়টি পিছনে ফিরে এলে ' ইউনিক্স টাইম শেয়ারিং সিস্টেম ' এটিকে পরিষ্কারভাবে নির্ধারণ করেছে (p1937):

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


সুতরাং আমাদের একই জুড়ি বা MAJ:Minসংখ্যা সহ দুটি ডিভাইস থাকতে পারে
দিপাক ইনগোলে

1
হ্যাঁ, সীমাবদ্ধতার সাথে। আপডেট করা হয়েছে।
মিঃ স্পুর্যাটিক

2

যখন কোনও ডিভাইস ফাইল তৈরি করা হয় mknode, তখন majorএবং minorসংখ্যা সরবরাহ করা হয়। লিনাক্স এইভাবে কোনও ডিভাইস ফাইলের সাথে সম্পর্কিত অন্তর্নিহিত হার্ডওয়্যার ডিভাইস সনাক্ত করে। বেশিরভাগ ক্ষেত্রেই তারা majorনম্বরটি চালককে সনাক্ত করে minorএবং ড্রাইভার নিয়ন্ত্রণ করে এমন বিভিন্ন ডিভাইসকে আলাদা করে।

যেমন নম্বরগুলি অবশ্যই প্রতিটি ডিভাইসের জন্য স্বতন্ত্র বা তাদের সকলের জন্য সঠিক ডিভাইস ফাইল তৈরি করা সম্ভব হবে না।


0

না, লিনাক্সে এগুলি সর্বদা অনন্য নয়।

লিনাক্স devptsসিউডোটারমিনালগুলি সরবরাহ করার জন্য একটি ভার্চুয়াল ফাইল সিস্টেম ব্যবহার করছে (ptys), এবং ভার্চুয়াল ফাইল সিস্টেমটি একাধিকবার এবং বিভিন্ন স্থানে মাউন্ট করা যেতে পারে, যা ক্রুট বা নেমস্পেস কনটেইনার স্থাপন করার সময় ব্যবহারিক। major:minorএকটি devptsফাইল সিস্টেমের উদাহরণে একটি টিপল অনন্য হলেও চলমান সিস্টেমে এটি অনন্য নয়:

# mount -t devpts devpts /dev/pts
# script -q /dev/null
# stat -c '%n %t:%T   %d:%i' `tty`
/dev/pts/0 88:0   34:3
# mount -t devpts devpts /dev/pts
# script -q /dev/null
# stat -c '%n %t:%T   %d:%i' `tty`
/dev/pts/0 88:0   35:3

উপরের উদাহরণে script(1)কমান্ডটি সিউডো-টার্মিনাল তৈরি করে এবং এর ভিতরে একটি শেল চালায়। এটি স্পষ্টতই স্পষ্ট যে প্রথম scriptপ্রক্রিয়াটি দ্বারা তৈরি সিউডো-টার্মিনাল দ্বিতীয়টির তৈরির মতো নয়, তবুও তাদের একই নাম এবং বড়, সংখ্যালঘু সংখ্যা রয়েছে।

সিউডোটার্মিনালটি স্বতন্ত্ররূপে সনাক্ত করতে আপনাকে তাদের device:inodeটিউপলটি ব্যবহার করতে হবে , বা ডিভাইস নম্বরটি (ডিভ্যাপ্টস ফাইল সিস্টেমের) সাথে তাদের সংযুক্ত করতে হবে major:minor। সমস্যাটি হ'ল "টিটিটি" ক্ষেত্রটি /proc/PID/stat(7th তম, proc(5)ম্যানপেজটি দেখুন; সেখান থেকে সরঞ্জামগুলি তাদের তথ্যগুলি পছন্দ করে lsofবা psএনে দেয়) কেবলমাত্র st_rdevটিটি (প্যাকড major:minor) রয়েছে; যদি এটি একজন পাইটি দাস হয় তবে devptsফাইল সিস্টেমটিতে এটি সরবরাহ করার কোনও ইঙ্গিত নেই । একই সমস্যাগুলি TIOCGDEVআইওএসটিএল দিয়ে প্রাপ্ত ডিভাইস নম্বরকে প্রভাবিত করে ।

আফ্রিকার লিনাক্সে কোনও প্রক্রিয়ার নিয়ন্ত্রণকারী টার্মিনাল সনাক্ত করার কোনও নির্ভরযোগ্য উপায় নেই। সংশোধন এবং পরামর্শ অন্যথায় স্বাগত!

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