Kernel Space
146 subscribers
181 photos
126 videos
11 files
249 links
از الکترون‌هایی که در سیم‌ها جاری‌اند تا بیت‌هایی که در قلب CPU نفس می‌کشند، و از آن‌جا تا الگوریتم‌هایی که
این دنیای عظیم کامپیوتر را می‌سازند

لینک گروه چت:
https://t.me/kernel_chats
Download Telegram
بریم leetcode بعد از یه ماه الگوریتم بزنیم


اگه توی گروه چالش ها هستید که می‌زارم لینک رو اونجا

اگه نیستید پیام بدید لینک گروه رو بدم
Forwarded from OpenPCB
فریمور آپدیت از نوع OTA وجود داشت، وقتی هنوز کسی نمی‌دونست OTA یعنی چی!

با اینکه در دهه ۸۰ میلادی خبری از وای‌فای، اینترنت یا سرور نبود، ولی رادیوهای FM تو هلند داشتن برای کامپیوترهای خونگی برنامه پخش کامپیوتری پخش می‌کردن، اونم فقط با صدای بوقی که تشکیل می‌شد از دو فرکانس ۱۲۰۰ و ۲۴۰۰ و مدولاسیونFSK روی رادیو FM که خودش هم یه بار مدوله شده بود!
اسم این ماجرا BASICODE بود! یه استاندارد عجیب و درخشان از اوایل دهه‌ی ۸۰ که می‌خواست همه‌ی کامپیوترهای خُرد اون دوران رو با یه زبان واحد به هم برسونه.

ماجرا از یه مهندس رادیویی به اسم Hessel de Vries شروع شد، کسی که برای شبکه‌ی ملی هلند (NOS) کار می‌کرد. اون فهمید که کامپیوترهای اون دوران از کومودور گرفته تا ZX Spectrum، BBC Micro و MSX هر کدوم زبان BASIC مختص به خودشون رو دارن و عملاً نمی‌تونن با هم حرف بزنن. نتیجه؟ BASICODE رو اختراع کرد، یا به قول خودشون «اسپرانتوی کامپیوترها». یه نسخه‌ی حداقلی و استاندارد از BASIC که روی هر دستگاهی اجرا می‌شد، فقط کافی بود یه «بیسکودر» مخصوص اون دستگاه رو لود می‌کردی.

بیسکودر یه جور محیط اجرایی بود، یه بوت‌لودر دست‌ساز که توش تابع‌های مشترک برای ورودی/خروجی، نمایش متن، ذخیره‌سازی روی کاست و بعدتر صدا و گرافیک ساده تعریف شده بود! برنامه‌ها از خط ۱۰۰۰ به بعد شروع می‌شدن و بقیه‌ی خطوط پایین‌تر مخصوص خود بیسکودر بودن. برای فراخوانی توابعش هم فقط یه GOSUB می‌زدی، درست مثل یه API ابتدایی برای ۸ بیتی‌ها.

حالا تصور کنید رادیو برنامه رو به صورت صدا پخش می‌کرد، تو ضبط می‌کردی روی نوار کاست، بعد اون رو به کامپیوترت می‌دادی تا کدها رو از توی صدا بخونه و اجرا کنه. به معنای واقعی کلمه «OTA»! فقط نه با پکت و فرکانس ۲.۴ گیگاهرتز، بلکه با بوق ۱۲۰۰ و ۲۴۰۰ هرتز! سرعت انتقالش؟ حدود ۶ کیلوبایت در دقیقه. بله، دقیقه. ولی برای اون دوران، همین هم مثل جادو بود.

در نسخه‌ی BASICODE 2 سال ۱۹۸۳، کارکردها گسترده‌تر شد مدیریت داده، ورودی از نوار، و یه کتابخونه‌ی کامل از حدود ۵۰ تابع مشترک. نسخه‌ی سوم (BASICODE 3) در ۱۹۸۶ حتی گرافیک تک‌رنگ و صدا هم اضافه کرد، و نسخه‌ی 3C در ۱۹۹۱ رنگی هم شد. برنامه‌ها از رادیو در سراسر آلمان شرقی و هلند پخش می‌شدن، حتی روی صفحه‌گِرامافون هم منتشر می‌کردن تا مردم بتونن کد رو از صدا بخونن!

اما مثل همه‌ی پروژه‌های قهرمانانه‌ی دهه‌ی ۸۰، پایانش با ظهور ۱۶ و ۳۲ بیتی‌ها رقم خورد. وقتی آمیگا، آتاری ST و PCها با سیستم‌عامل‌های گرافیکی اومدن، BASICODE دیگه زیادی ساده به نظر می‌رسید. نسخه‌ی چهارمی هم برنامه‌ریزی شده بود، ولی هیچ‌وقت ساخته نشد.

با این حال، BASICODE هنوز یه میراث زنده‌ست. خیلی از مفاهیمی که امروز تو جاوا، PDF یا حتی پلتفرم‌های کراس‌پلتفرم مدرن می‌بینیم، ریشه در همون ایده داره: یه استاندارد زبانی مشترک + یه مفسر مخصوص هر سیستم. همون کاری که JVM برای جاوا می‌کنه، بیسکودر برای کامپیوترهای ۸ بیتی می‌کرد.

و شاید قشنگ‌ترین بخش ماجرا این بود که کل سیستم، فقط با یه رادیو، یه نوار کاست، و چند خط BASIC کار می‌کرد.
جالب اینه که هنوزم هستن کسایی که به عنوان سرگرمی از این شیوه و زبان و ... استفاده می‌کنند.

تو این لینک می‌تونید در موردش بخونید.

📡openpcb
Forwarded from Linuxor ?
وایب کدینگ :
@Linuxor
🔥1🐳1
Kernel Space
http://youtube.com/post/Ugkx9CMUjHzIQVZ34dUZKw9AwxQrx3aWmzcD
در حال حاضر هیچ کلمه ای به اندازه کلمات ، هوش مصنوعی ، علوم داده , دیتا ساینتیست گندش در نیومده


توی دانشگاه ما یه استاد زردی هست میگفت به یکی از دخترای دانشگاه که ریاضی داغونی داشت که برو دیتا ساینستیست شو سال دیگه میلیاردی چون همه خارجی ها اینو میخوان و پول کلان بابتش میدن


😐😐😐😐😐
🌚1
دارم فکر میکنم از اسمبلی و معماری کامپیوتر x86-64 سوییچ کنم روی arm
بعد ها برای کارای تحقیقاتی شاید سراغش بیام ولی الان که بازار کار و کاربرد اولویتم شده به نظرم خوندن arm خیلی منطقی تره برای من
Kernel Space
https://youtu.be/iSiyDHobXHA
دوره ی جالبی عه
ولی بعد از این دوره می‌خوام برم سراغ منابع تخصصی تر و حرفه ای تر

کسی دوره یی خفن درباره Linux development یا Linux internal می‌شناسه یا حتی کتاب که بهم معرفی کنه؟
❤1
چه سیستم عامل هایی برای دستگاه های IOT استفاده میشه؟
این آمار برای سال ۲۰۱۸ میباشد
Kernel Space
چه سیستم عامل هایی برای دستگاه های IOT استفاده میشه؟ این آمار برای سال ۲۰۱۸ میباشد
چه توزیع های لینوکسی در IOT استفاده میشود ؟

آمار برای ۲۰۱۸ می‌باشد
Kernel Space
چه توزیع های لینوکسی در IOT استفاده میشود ؟ آمار برای ۲۰۱۸ می‌باشد
خودم توقع نداشتم ابونتو بیشتر از دبیان باشه 😂

امیدوارم توی ابونتو ها Kali جزشون نباشه
خیلی سمه کالی لینوکس روی دستگاه های IOT
چند وقتی است دارم Embedded می‌خونم و تجربه‌ای که داشتم اینه که یه محدودیت بزرگ وجود داره: شما حتما به یک برد میکروکنترلر یا رزبری پای و چند تجهیزات دیگه نیاز دارید.

این یعنی برای شروع، سرمایه اولیه‌ای بین ۲ تا ۴۰ میلیون تومن لازم دارید (بسته به وسایل و پکیج‌هایی که انتخاب می‌کنید). جدا از این، معمولاً به یک پروژه نیاز دارید که یک نفر یا کارفرما بهتون بده.

به همین دلیل توصیه می‌کنم اول فقط مبانی و نکات اولیه رو یاد بگیرید، روی زبان C، برنامه‌نویسی ARM و STM32 و لینوکس internal مسلط بشید و با شبیه‌ساز تمرین کنید. بعداً وقتی وارد پروژه و شغل و کار واقعی شدید، سراغ خرید تجهیزات و کار عملی با Embedded برید.
🌚1
lkmpg.pdf
1.2 MB
یک کتاب خیلی خلاصه و روون برای اموزش برنامه نویسی ماژول و درایور لینوکس
❤1
#include <stdio.h>

#define FLAG_POWER 0x1
#define FLAG_ERROR 0x2
#define FLAG_READY 0x4

int main(){

int status = 0;

// set up power and ready
status |= FLAG_POWER;
status |= FLAG_READY;

//check up
if(status & FLAG_ERROR){
printf("ERROR\n");
}
else{
printf("NO ERROR\n");
}

// set off ready
status &= ~FLAG_READY;
printf("status = %d\n", status);
return 0;
}
توضیح کد فلگ‌ها

توی این کد سه تا فلگ داریم که هرکدوم یه بیتن:

FLAG_POWER → بیت اول، مربوط به برق (0x1)

FLAG_ERROR → بیت دوم، مربوط به ارور (0x2)

FLAG_READY → بیت سوم، مربوط به آماده بودن (0x4)


با |= فلگ‌ها رو روشن می‌کنیم، با & چک می‌کنیم، و با ~ خاموششون می‌کنیم.
مثلاً این تیکه:

status |= FLAG_POWER;
status |= FLAG_READY;

یعنی پاور و حالت آماده روشن شدن.

بعد چک می‌کنیم اگه بیت ارور روشن بود بنویسه ERROR،
اگه خاموش بود بنویسه NO ERROR.

در آخر هم:

status &= ~FLAG_READY;

حالت آماده رو خاموش می‌کنه.


---

معنی مقدارهای ممکن status:

مقدار توضیح

0 همه خاموش
1 فقط پاور روشن
2 فقط ارور روشن
3 پاور و ارور روشن → باید خاموش شه
4 فقط Ready فعاله
5 پاور و Ready روشن
6 Ready و ارور روشن
7 هر سه روشن → خطا، سریع خاموش کن دستگاه



---

خلاصه:
با بیت‌فلگ می‌تونی چند وضعیت رو تو یه عدد ذخیره و کنترل کنی.
این دقیقاً همون چیزیه که تو برنامه‌نویسی سطح پایین و سیستم‌های تعبیه‌شده کاربرد داره.
👍1
Kernel Space
توضیح کد فلگ‌ها توی این کد سه تا فلگ داریم که هرکدوم یه بیتن: FLAG_POWER → بیت اول، مربوط به برق (0x1) FLAG_ERROR → بیت دوم، مربوط به ارور (0x2) FLAG_READY → بیت سوم، مربوط به آماده بودن (0x4) با |= فلگ‌ها رو روشن می‌کنیم، با & چک می‌کنیم، و با ~ خاموششون…
برای کسایی که متوجه نشدن چرا اون مقدار بیت رو دادیم به فلگ ها به این ساختار نگاه کنید

0001 تک بیت پاور روشنه
0010 تک بیت ارور روشنه
0100 تک بیت آماده بودن روشنه
0101 هم برق روشنه هم امادس
کیا متوجه شدن؟
اگه کسی متوجه نشد بگید
من موظف ام هزار بار هم شده توضیح بدم

( هرکسی دستش رو بالا ببره با توهین و فوش و تحقیر روبرو میشه و میگم مگه من بیکارم به شما هزار بار بگم میخواستید همون بار اول بگید جلسه بعد امتحان داریم از این بحث)


نه جدا از شوخی من خودم نیم ساعت اول اصلا این کد رو نفهمیدم بعد از کلی فکر کردن فهمیدم وضعیت رو
🐳3