جلسه 11 Prefixes
تیتر: پیشوندها
پیشوند (Prefix) در زبان علمی و فنی به بخشی از کلمه یا نشانه گفته میشود که در ابتدای عبارت قرار میگیرد و معنا یا مقیاس آن را تغییر میدهد.
در کامپیوتر، پیشوندها معمولاً در دو دسته رایج ظاهر میشوند:
پیشوندهای SI (برای مقیاس واحدها، مثل k, M, G برای ۱۰ یا توانهای آن)
پیشوندهای دودویی/نمایشی (برای مقیاسهایی که در دنیای حافظه و ذخیرهسازی استفاده میشوند، مثل KiB، MiB و GiB)
پیشوندهای معنایی در نامگذاری مفاهیم (مثل
pre-در مفاهیم پردازش/الگوریتمها یاsub-در نامگذاری توابع و ماژولها)پیشوندها در شبکه و پروتکلها/کالبد دادهها (مثل
IP,MAC,HTTPکه بخشی از نامگذاری هستند و معمولاً به معنای خانواده یا نقش دارند)
نکته: در این سند بیشتر روی کاربرد پیشوندها در مقیاسها و نامگذاریهای رایج در کامپیوتر تمرکز میکنیم.
2) مثال: مثالهای کاربردی از پیشوندها در مباحث مختلف کامپیوتر
2.1) پیشوندهای SI در کامپیوتر (k, M, G, T)
در بسیاری از محیطهای فنی، پیشوندهای SI برای نمایش مقادیر استفاده میشوند:
پیشوندنمادمقدار (دهدهی)کیلوk(10^3)مگاM(10^6)گیگاG(10^9)تتراT(10^{12})پتاP(10^{15})
مثال 1: سرعت لینک شبکه
اگر سرعت یک لینک را 1.25 Gbps ببینید، یعنی:
[ 1.25 \times 10^9 \text{ بیت بر ثانیه} ]
مثال 2: فرکانس پردازنده
اگر فرکانس 3.2 GHz باشد:
[ 3.2 \times 10^9 \text{ هرتز} ]
2.2) پیشوندهای دودویی در حافظه (KiB, MiB, GiB)
در دنیای حافظه، بهویژه در سیستمعاملها و ابزارهای فنی، تفاوت مهمی وجود دارد:
SI: بر مبنای توانهای 10
دودویی: بر مبنای توانهای 2
پیشوندهای استاندارد دودویی (IEC) معمولاً اینها هستند:
پیشوند دودویینمادمقدارکیبیKi(2^{10})میبیMi(2^{20})گیبیGi(2^{30})تببیTi(2^{40})پبیPi(2^{50})
مثال 3: اندازه فایل در هارد/SSD
اگر بگویند فایل شما 512 MiB است، یعنی:
[ 512 \times 2^{20} \text{ بایت} ]
مثال 4: چرا confusion پیش میآید؟
ممکن است در برخی ابزارها به جای MiB از MB استفاده شود، درحالیکه کاربران انتظار (10^6) دارند. برای کاهش خطا:
اگر MiB دیدید، دودویی است.
اگر MB دیدید، معمولاً دهدهی (SI) است (اما بسته به منبع ممکن است مبهم باشد).
توصیه آموزشی: همیشه نماد دقیق (B، iB) را چک کنید.
2.3) پیشوندهای مربوط به واحدها در داده و ذخیرهسازی
پیشوندها در کنار واحدها ظاهر میشوند. چند نمونه:
KB / MB / GB (معمولاً SI)
KiB / MiB / GiB (دودویی)
مثال 5: محاسبه حجم
فرض کنید یک حافظه 8 GiB باشد. مقدار آن:
[ 8 \times 2^{30} \text{ بایت} ] و اگر بخواهید به GiB در ذهن تبدیل کنید، همان عدد 8 باقی میماند؛ اما در بایت باید ضرب انجام دهید.
2.4) پیشوندها در شبکه (Network Prefix)
در شبکه، prefix یکی از کلیدواژههای اصلی است و معمولاً منظور بخشی از آدرس یا ماسک شبکه است.
مثال 6: CIDR
در یادگیری آدرسدهی IP، معمولاً چیزی مثل زیر میبینید:
192.168.1.0/24
اینجا:
/24یعنی طول پیشوند (prefix length) = 24 بیت از آدرس که برای شبکه به کار میرود.
اگر IPv4 باشد، طول کل آدرس (32) بیت است و:
تعداد بیتهای میزبان = (32 - 24 = 8)
پس تعداد آدرسهای قابل استفاده در این شبکه:
[ 2^{8} = 256 ]
2.5) پیشوندهای معنایی در نامگذاری الگوریتمها و توابع
در نامگذاری فنی، پیشوندها گاهی معنای منطقی/ساختاری میدهند:
pre-: پیش از انجام (مانند
preprocessingدر تحلیل داده)sub-: زیربخش/زیرمسئله (مانند
subroutine،subarray)post-: پس از انجام (مانند
postorderدر درختها)min- / max-: کمینه/بیشینه
re-: تکرار یا بازگشت (مثل
recompute)
مثال 7: Preprocessing در دادهها
در بسیاری از مسائل، پیش از اجرای الگوریتم اصلی، دادهها استانداردسازی میشوند:
preprocess(data)یعنی دادهها برای مرحله بعد آماده میشوند.
مثال 8: Traversal با پیشوندهای post/pre
در درخت:
preorder: ابتدا ریشه، سپس فرزندانpostorder: فرزندان، سپس ریشه
2.6) پیشوندها در سیستمهای فایل و مسیرها
در مسیرهای فایل، برخی پیشوندها معنای ویژه دارند:
مسیر مطلق: معمولاً با
/شروع میشود (در سیستمهای یونیکس)مسیر نسبی: بدون
/یا با./و../
مثال 9: معنی و
./file.txtیعنی فایل را در همان پوشه فعلی پیدا کن.../data.csvیعنی یک سطح بالاتر برو و سپس در پوشه بعدی جستجو کن.
3) تمرین پایان فصل (تمرینهایی برای درک بهتر مطالب)
تمرین 1: تبدیل واحد با SI
(3.5\text{ k}\Omega) را به اهم درآورید.
(2.2\text{ GHz}) را به هرتز تبدیل کنید.
راهنما:
k یعنی (10^3)
G یعنی (10^9)
تمرین 2: تبدیل واحد دودویی
مقدار (768\text{ MiB}) را به بایت تبدیل کنید.
مقدار (4\text{ GiB}) را به MiB تبدیل کنید.
راهنما:
(1\text{ MiB} = 2^{20})
(1\text{ GiB} = 2^{30}) و بنابراین: [ 1\text{ GiB} = 1024\text{ MiB} ]
تمرین 3: ابهام MB vs MiB
یک حافظه 1TB خریداری میکنید. در سیستمعامل شما به صورت 931 GiB نمایش داده میشود.
دلیل اختلاف را توضیح دهید (دهدهی vs دودویی).
اگر سیستمعامل به جای GiB از TB دهدهی استفاده میکرد، چه عددی احتمالاً نمایش داده میشد؟
نکته: در بسیاری از فروشگاهها از نمادهای SI استفاده میشود، اما در سیستمعاملها معمولاً نمایش دودویی رایج است.
تمرین 4: شبکه با CIDR
برای آدرس 10.0.0.0/16:
تعداد بیتهای میزبان چند است؟
تعداد کل آدرسهای ممکن در این شبکه چند است؟
اگر فرض کنیم شبکه شامل آدرس شبکه و broadcast است، تعداد آدرسهای قابل استفاده برای hostها را حساب کنید.
تمرین 5: تحلیل نامگذاری در کد
فرض کنید در یک پروژه با این نامها برخورد میکنید:
preprocess()submodulepostorderTraverse()minHeapify()
برای هر مورد:
احتمالاً منظور از پیشوند در آن تابع/ماژول چیست؟
یک مثال ساده از کاری که آن تابع انجام میدهد بنویسید.
تمرین 6: تبدیل آدرس مسیرها
در یک سیستم یونیکس با پوشه فعلی:/home/student/projects/lab1
پاسخ دهید:
مسیر
./input.txtبه کدام فایل اشاره میکند؟مسیر
../data/train.csvدقیقاً کدام مسیر مطلق است؟
4) خلاصه نکات کلیدی
پیشوندها در کامپیوتر برای مقیاس دادن به مقادیر و نیز معنیدهی به نامها به کار میروند.
پیشوندهای SI بر مبنای توانهای 10 هستند:
(k=10^3)، (M=10^6)، (G=10^9)، (T=10^{12})پیشوندهای دودویی (IEC) بر مبنای توانهای 2 هستند:
(Ki=2^{10})، (Mi=2^{20})، (Gi=2^{30})در ذخیرهسازی، ممکن است اختلاف بین MB/GB و MiB/GiB باعث تفاوت در نمایش ظرفیتها شود.
در شبکه، prefix در CIDR با فرمی مثل
/24نشان میدهد چه تعداد بیت برای بخش شبکه استفاده میشود.در نامگذاری توابع و مفاهیم، پیشوندهایی مثل
pre-،sub-،post-معمولاً ترتیب زمانی یا نوع ساختار/زیرمسئله را مشخص میکنند.در سیستم فایل، پیشوندهای مسیر مثل
./و../مشخص میکنند مسیر نسبی است یا با یک سطح بالا حرکت میکند.