Astro Terminal
GNU/Linux خلاصه تاریخچه #Linux
ریچارد استالمن در سال 1971 داخل ازمایشگاه هوش مصنوعی MIT به مشکلاتی برخورده بود که نیاز داشت به source code برنامه دسترسی داشته باشه و در اون زمان اجازه دسترسی به کد به منظور تغییر و شخصی سازی داده نمی شد.
در پی ادامه خصوصی سازی نرم افزار ها و مشکلاتی که ازین بابت پیش اومده بود ریچارد استالمن از شغلی که توی MIT داشت کنار کشید و شروع به Develop کردن سیستم عامل خودش یعنی GNU کرد.
GNU = GNU's Not Unix!
به گفته خود استالمن این مخفف بازگشتی! به معنی اینه که جدا از شباهت های سیستم عامل گنو به UNIX این سیستم عامل جایگزینی بود که از صفر توسط استالمن طراحی میشد ولی اینبار به صورت آزاد و متن باز.(چون UNIX نرم افزار خصوصی بود)
اما برای داشتن یک سیستم عامل که جایگزین UNIX باشه چه برنامه هایی لازم بود؟
1.هسته یا kernel که منابع سیستم رو به همه ی برنامه های دیگه تخصیص میده
2.کامپایلر که دستورات یک برنامه نوشته شده رو از syntax نزدیک به زبان ما به زبان ماشین تبدیل میکنه
و در نهایت debugger, text editor و برنامه های دیگه.
کامپایلر و ابزار های دیگه ساخته شد و زمانی که استالمن و تیمش درگیر ساخت هسته ای به نام GNU HURD برای سیستم عامل GNU بودن شخصی به نام لینوس هسته ای به روشی متفاوت به نام Linux رو ساخته بود.
لینوس توروالدز (Linus Torvalds) که در اون زمان دانشجوی علوم کامپیوتر دانشگاه هلسینکی بود به گفته خودش با هدف اینکه بتونه روی کامپیوتر خونگیش محیطی شبیه کامپیوتر دانشگاه داشته باشه این کرنل رو طراحی کرده بود.
تفاوت GNU-HURD و LINUX در معماری هسته بود: هسته LINUX یکپارچه (Monolithic) بود ولی HURD به گفته استالمن قرار بود از بخش های زیادی تشکیل بشه که با هم ارتباط دارن و سر همین قضیه که دیباگ کردن در این روش برنامه نویسی کار خیلی سخت و زمان بری شده بود از هسته LINUX استفاده شد و سیستم عاملی به نام GNU/Linux شکل گرفت.
ولی خب امروزه همه بهش میگن Linux😂
لینوس توروالدز توی مصاحبه ای که داخل مستند Revolutionary OS هست میگه: (مردم استالمن رو به عنوان فیلسوف بزرگ و من رو به عنوان مهندس میبینن)
@Astro_Terminal
در پی ادامه خصوصی سازی نرم افزار ها و مشکلاتی که ازین بابت پیش اومده بود ریچارد استالمن از شغلی که توی MIT داشت کنار کشید و شروع به Develop کردن سیستم عامل خودش یعنی GNU کرد.
GNU = GNU's Not Unix!
به گفته خود استالمن این مخفف بازگشتی! به معنی اینه که جدا از شباهت های سیستم عامل گنو به UNIX این سیستم عامل جایگزینی بود که از صفر توسط استالمن طراحی میشد ولی اینبار به صورت آزاد و متن باز.(چون UNIX نرم افزار خصوصی بود)
اما برای داشتن یک سیستم عامل که جایگزین UNIX باشه چه برنامه هایی لازم بود؟
1.هسته یا kernel که منابع سیستم رو به همه ی برنامه های دیگه تخصیص میده
2.کامپایلر که دستورات یک برنامه نوشته شده رو از syntax نزدیک به زبان ما به زبان ماشین تبدیل میکنه
و در نهایت debugger, text editor و برنامه های دیگه.
کامپایلر و ابزار های دیگه ساخته شد و زمانی که استالمن و تیمش درگیر ساخت هسته ای به نام GNU HURD برای سیستم عامل GNU بودن شخصی به نام لینوس هسته ای به روشی متفاوت به نام Linux رو ساخته بود.
لینوس توروالدز (Linus Torvalds) که در اون زمان دانشجوی علوم کامپیوتر دانشگاه هلسینکی بود به گفته خودش با هدف اینکه بتونه روی کامپیوتر خونگیش محیطی شبیه کامپیوتر دانشگاه داشته باشه این کرنل رو طراحی کرده بود.
تفاوت GNU-HURD و LINUX در معماری هسته بود: هسته LINUX یکپارچه (Monolithic) بود ولی HURD به گفته استالمن قرار بود از بخش های زیادی تشکیل بشه که با هم ارتباط دارن و سر همین قضیه که دیباگ کردن در این روش برنامه نویسی کار خیلی سخت و زمان بری شده بود از هسته LINUX استفاده شد و سیستم عاملی به نام GNU/Linux شکل گرفت.
ولی خب امروزه همه بهش میگن Linux😂
لینوس توروالدز توی مصاحبه ای که داخل مستند Revolutionary OS هست میگه: (مردم استالمن رو به عنوان فیلسوف بزرگ و من رو به عنوان مهندس میبینن)
@Astro_Terminal
🔥1
☑️به پروسه تبدیل اطلاعات ورودی به رشته ای از کاراکتر ها با سایز ثابت hashing گفته میشود.
ما میتونیم از توابع مختلف با الگوریتم های مختلف به این منظور استفاده کنیم و باید توجه داشت که توابع یکسویه هستند یعنی اگر مقدار ijewoifi2!ue4 برای ورودی داده شده باشد هیچ روشی نیست که بتوان از روی ijewoifi2!ue4 ورودی را فهمید و اگر تابع ما deterministic باشد میتونیم مقداری که تابع hash به ما داده است رو به عنوان یک امضا برای ورودی در نظر بگیریم.
☑️به دو تعریف زیر توجه کنید🤓:
deterministic hash function:
اگر حتی یک بیت از فایل(ورودی) تغییر کند hash-value هم تغییر میکند.
hash collisions:
اگر هش فانکشن ما به دو یا چند ورودی مقدار مشابه ای را نسبت دهد به اصطلاح میگوییم کالیژن یا برخورد رخ داده است.
عدم برخورد در تابع هش در زمینه امنیت🥷 بسیار هائز اهمیت هست چون در غیر اینصورت میتوان با ارسال فایل های مختلف که هش یکسانی دارند درخواست های مشابه ای رو ثبت کرد: برای مثال فرض کنید یک فایل تحت عنوان اجازه برای شلیک موشک به مکان x داریم! اگر در سیستم هش که مشخص میکند موشک به مکان x شلیک کند کالیژن رخ دهد میتوان به مکان y هم شلیک کرد!
⁉️فرق رمزنگاری(encryption) با هش کردن(hashing) چیه؟
❕هدف از استفاده: hashing برای verify کردن اطلاعات و اهراز هویت با استفاده از مشخصه یکتا عمل میکند ولی رمزنگاری برای محافظت از اطلاعات و محرمانه ساختن آنها استفاده میشود
❕بازگشت پذیری: گفتیم که تابع های hash یک سویه هستند همچنین ما با داشتن hash-value میتوانیم بدون داشتن اصل دیتا وجود آن دیتا را verify کنیم ولی در رمزنگاری ما به اصل دیتا نیاز داریم پس باید به این منظور تابع دوسویه داشته باشیم.
❕سایز خروجی: در hashing با توجه به method و تابعی که استفاده میکنیم سایز خروجی در آن method خاص بدون در نظر گرفتن ورودی همیشه یکسان است (fixed-size output) ولی در رمزنگاری سایز خروجی وابسته به سایز ورودی است.
@Astro_Terminal
ما میتونیم از توابع مختلف با الگوریتم های مختلف به این منظور استفاده کنیم و باید توجه داشت که توابع یکسویه هستند یعنی اگر مقدار ijewoifi2!ue4 برای ورودی داده شده باشد هیچ روشی نیست که بتوان از روی ijewoifi2!ue4 ورودی را فهمید و اگر تابع ما deterministic باشد میتونیم مقداری که تابع hash به ما داده است رو به عنوان یک امضا برای ورودی در نظر بگیریم.
☑️به دو تعریف زیر توجه کنید🤓:
deterministic hash function:
اگر حتی یک بیت از فایل(ورودی) تغییر کند hash-value هم تغییر میکند.
hash collisions:
اگر هش فانکشن ما به دو یا چند ورودی مقدار مشابه ای را نسبت دهد به اصطلاح میگوییم کالیژن یا برخورد رخ داده است.
عدم برخورد در تابع هش در زمینه امنیت🥷 بسیار هائز اهمیت هست چون در غیر اینصورت میتوان با ارسال فایل های مختلف که هش یکسانی دارند درخواست های مشابه ای رو ثبت کرد: برای مثال فرض کنید یک فایل تحت عنوان اجازه برای شلیک موشک به مکان x داریم! اگر در سیستم هش که مشخص میکند موشک به مکان x شلیک کند کالیژن رخ دهد میتوان به مکان y هم شلیک کرد!
⁉️فرق رمزنگاری(encryption) با هش کردن(hashing) چیه؟
❕هدف از استفاده: hashing برای verify کردن اطلاعات و اهراز هویت با استفاده از مشخصه یکتا عمل میکند ولی رمزنگاری برای محافظت از اطلاعات و محرمانه ساختن آنها استفاده میشود
❕بازگشت پذیری: گفتیم که تابع های hash یک سویه هستند همچنین ما با داشتن hash-value میتوانیم بدون داشتن اصل دیتا وجود آن دیتا را verify کنیم ولی در رمزنگاری ما به اصل دیتا نیاز داریم پس باید به این منظور تابع دوسویه داشته باشیم.
❕سایز خروجی: در hashing با توجه به method و تابعی که استفاده میکنیم سایز خروجی در آن method خاص بدون در نظر گرفتن ورودی همیشه یکسان است (fixed-size output) ولی در رمزنگاری سایز خروجی وابسته به سایز ورودی است.
@Astro_Terminal
Astro Terminal
معرفی خلاصه ای از hashing و کاربرد اون توی bloom filter #DSA #Hash
یکی از کاربرد های hashing در bloom filter هاست که یک ساختار تشخیص وجود یا عدم وجود یک آیتم در آرایهس:
🤔فرض کنید شما مسئول تحویل کتاب یک کتابخانه اید. به همین دلیل روزانه افرادی به سراغ کتاب های مختلف می آیند و شما در بد ترین حالت مجبور هستید هر بار برای اطمینان از موجودی یا عدم موجودی کتاب خواسته شده به تمام قفسه ها سر بزنید.
☑️یک آرایه از بیت های یک تا n درست کنید که هر بیت میتواند روشن باشد یا خاموش. در نظر داشته باشید که n مقدار ماکسیممی است که خودمان انتخاب میکنیم. همچنین به یک hash function هم نیازمندیم که نام هر کتاب را به یک عدد (در بازه 1 تا n) نسبت دهد.
- محاسبات داخل هش فانکشن برای ما مهم نیست صرفا هش فانکشن باید Deterministic باشد یعنی برای هر کتاب فقط یک عدد را نسبت دهد. همچنین تا جایی که ممکن است برای کتاب های مختلف عدد های(hash-value های) مختلفی نسبت دهد.
☑️هر کتاب داخل کتابخانه را از hash function تعریف شده عبور می دهیم و سپس مقدار یک را در آرایه در نظر گرفته شده به m امین ارایه نسبت میدهیم (m = hash-value).
☑️حال اگر یک مراجعه کننده کتابی را درخواست بکند ابتدا نام آن کتاب را به هش فانکشن داده و سپس در آرایه مان دنبال آن عدد میگردیم:اگر بیت متناظر با آن عدد دارای مقدار یک بود آنگاه احتمال وجود آن کتاب در کتابخانه هست. (گفتیم که hash function ما صرفا برای هر کتاب مقداری را نسبت میدهد و امکانش هست که دو کتاب مقداری یکسان داشته باشند میتوان گفت برای هر کتاب در بار اول مقدار رندومی را نسبت میدهد که ممکن است با مقدار کتابی دیگر یکی باشد)
⁉️حال این سوال پیش می آید که چگونه میتوان احتمال درست بودن اطلاعات bloom filter مان را افزایش دهیم؟
1️⃣ یک روش این است که تعداد هش فانکشن ها را بیشتر کنیم: یعنی مثلا قبلا اطلاعات هر کتاب به صورت زیر بود:
ولی اینبار بیش از یکی هش فانکشن داریم که برای بار اول مقدار رندوم به کتاب نسبت میدهند :
اینبار اگر مراجعه کننده کتابی را درخواست کند پس از به دست اوردن سه مقدار هش برای آن کتاب اگر در بلوم فیلتر ما هر سه مقدار برابر یک بود حال میتوانیم با خیال راحت تر از موجودیت آن کتاب صحبت کنیم.
2️⃣ روش دیگر این است که تعداد بیت های موجود در bloom filter مان را افزایش دهیم. اگر n را افزایش دهیم درواقع جامعه آماری افزایش یافته و اعدادی که توسط hash function به صورت رندوم برای بار اول برای کتاب تولید میشوند به احتمال بیشتری یکتا میباشند.
@Astro_Terminal
☑️یک آرایه از بیت های یک تا n درست کنید که هر بیت میتواند روشن باشد یا خاموش. در نظر داشته باشید که n مقدار ماکسیممی است که خودمان انتخاب میکنیم. همچنین به یک hash function هم نیازمندیم که نام هر کتاب را به یک عدد (در بازه 1 تا n) نسبت دهد.
- محاسبات داخل هش فانکشن برای ما مهم نیست صرفا هش فانکشن باید Deterministic باشد یعنی برای هر کتاب فقط یک عدد را نسبت دهد. همچنین تا جایی که ممکن است برای کتاب های مختلف عدد های(hash-value های) مختلفی نسبت دهد.
☑️هر کتاب داخل کتابخانه را از hash function تعریف شده عبور می دهیم و سپس مقدار یک را در آرایه در نظر گرفته شده به m امین ارایه نسبت میدهیم (m = hash-value).
☑️حال اگر یک مراجعه کننده کتابی را درخواست بکند ابتدا نام آن کتاب را به هش فانکشن داده و سپس در آرایه مان دنبال آن عدد میگردیم:اگر بیت متناظر با آن عدد دارای مقدار یک بود آنگاه احتمال وجود آن کتاب در کتابخانه هست. (گفتیم که hash function ما صرفا برای هر کتاب مقداری را نسبت میدهد و امکانش هست که دو کتاب مقداری یکسان داشته باشند میتوان گفت برای هر کتاب در بار اول مقدار رندومی را نسبت میدهد که ممکن است با مقدار کتابی دیگر یکی باشد)
به همین دلیل به این ساختار که به bloom filter معروف است probabilistic data structure میگویند. (ساختار داده احتمالی)
⁉️حال این سوال پیش می آید که چگونه میتوان احتمال درست بودن اطلاعات bloom filter مان را افزایش دهیم؟
1️⃣ یک روش این است که تعداد هش فانکشن ها را بیشتر کنیم: یعنی مثلا قبلا اطلاعات هر کتاب به صورت زیر بود:
{book : hash-value} ولی اینبار بیش از یکی هش فانکشن داریم که برای بار اول مقدار رندوم به کتاب نسبت میدهند :
{book : hv1, hv2, hv3 } اینبار اگر مراجعه کننده کتابی را درخواست کند پس از به دست اوردن سه مقدار هش برای آن کتاب اگر در بلوم فیلتر ما هر سه مقدار برابر یک بود حال میتوانیم با خیال راحت تر از موجودیت آن کتاب صحبت کنیم.
2️⃣ روش دیگر این است که تعداد بیت های موجود در bloom filter مان را افزایش دهیم. اگر n را افزایش دهیم درواقع جامعه آماری افزایش یافته و اعدادی که توسط hash function به صورت رندوم برای بار اول برای کتاب تولید میشوند به احتمال بیشتری یکتا میباشند.
@Astro_Terminal
وقتی بحث پردازش کامپیوتری وسط میاد، دوتا از اصلی ترین قطعات CPU و GPU هستن ولی تفاوت این دوتا چیه؟
واحد پردازش مرکزی یا همون CPU به عنوان مغز کامپیوتر وظیفه اصلی پردازش رو به دوش میکشه، مدار مجتمعی از ترانزیستور ها و گیت های منطقی که دستور العمل ها رو به فرم صفر و یک پشت سر هم به نوبت اجرا میکنند.
برای پردازش های پشت سر هم و دنباله ای (sequential) CPU مناسبه ولی وقتی به دنیای گرافیک و انیمیشن کامپیوتری وارد میشیم با حجم زیادی از محاسبات موازی (Parallel) مواجهیم که با CPU قابل انجام نیست برای مثال برای نمایش انیمیشن های بازی ویدیویی مورد علاقتون نیازه به دستور العمل هایی که اطلاعات رو برای نمایش در هزاران پیکسل به صورت موازی و مکرر پردازش میکنن.
ازونجا که GPU برای محاسبات ماتریسی به صورت موازی بهینه شده نه تنها برای پردازش گرافیکی بلکه برای آموزش دادن مدل های هوش مصنوعی هم به کار میره و همین باعث شده که سهام شرکت NVIDIA در این چند سال اخیر به شدت بالا بره!
@Astro_Terminal
واحد پردازش مرکزی یا همون CPU به عنوان مغز کامپیوتر وظیفه اصلی پردازش رو به دوش میکشه، مدار مجتمعی از ترانزیستور ها و گیت های منطقی که دستور العمل ها رو به فرم صفر و یک پشت سر هم به نوبت اجرا میکنند.
برای پردازش های پشت سر هم و دنباله ای (sequential) CPU مناسبه ولی وقتی به دنیای گرافیک و انیمیشن کامپیوتری وارد میشیم با حجم زیادی از محاسبات موازی (Parallel) مواجهیم که با CPU قابل انجام نیست برای مثال برای نمایش انیمیشن های بازی ویدیویی مورد علاقتون نیازه به دستور العمل هایی که اطلاعات رو برای نمایش در هزاران پیکسل به صورت موازی و مکرر پردازش میکنن.
ازونجا که GPU برای محاسبات ماتریسی به صورت موازی بهینه شده نه تنها برای پردازش گرافیکی بلکه برای آموزش دادن مدل های هوش مصنوعی هم به کار میره و همین باعث شده که سهام شرکت NVIDIA در این چند سال اخیر به شدت بالا بره!
@Astro_Terminal
