Kernel Space
// 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");
status |= FLAG_POWER;
status |= FLAG_READY;
//check up
if(status & FLAG_ERROR){
printf("ERROR\n");
}
else{
printf("NO ERROR\n");
به نظرتون چرا خروجی بدون ارور و سالم در اومد با status مساوی با 1
توضیح کد فلگها
توی این کد سه تا فلگ داریم که هرکدوم یه بیتن:
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 هر سه روشن → خطا، سریع خاموش کن دستگاه
---
خلاصه:
با بیتفلگ میتونی چند وضعیت رو تو یه عدد ذخیره و کنترل کنی.
این دقیقاً همون چیزیه که تو برنامهنویسی سطح پایین و سیستمهای تعبیهشده کاربرد داره.
توی این کد سه تا فلگ داریم که هرکدوم یه بیتن:
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 هم برق روشنه هم امادس
0001 تک بیت پاور روشنه
0010 تک بیت ارور روشنه
0100 تک بیت آماده بودن روشنه
0101 هم برق روشنه هم امادس
کیا متوجه شدن؟
اگه کسی متوجه نشد بگید
من موظف ام هزار بار هم شده توضیح بدم
( هرکسی دستش رو بالا ببره با توهین و فوش و تحقیر روبرو میشه و میگم مگه من بیکارم به شما هزار بار بگم میخواستید همون بار اول بگید جلسه بعد امتحان داریم از این بحث)
نه جدا از شوخی من خودم نیم ساعت اول اصلا این کد رو نفهمیدم بعد از کلی فکر کردن فهمیدم وضعیت رو
اگه کسی متوجه نشد بگید
من موظف ام هزار بار هم شده توضیح بدم
( هرکسی دستش رو بالا ببره با توهین و فوش و تحقیر روبرو میشه و میگم مگه من بیکارم به شما هزار بار بگم میخواستید همون بار اول بگید جلسه بعد امتحان داریم از این بحث)
نه جدا از شوخی من خودم نیم ساعت اول اصلا این کد رو نفهمیدم بعد از کلی فکر کردن فهمیدم وضعیت رو
🐳3
Kernel Space
https://youtu.be/krrfVZFofqc
11:25
فقط این تیکش 😂😂😂😂😂😂😂
باید ثابت کنن خره جز دو تا حالت که نیاز به اثبات نیست
۱- مرد متاهل باشه
۲- اعتقاد داشته باشه انتخابات بدون دستکاری شدن انجام میشه
فقط این تیکش 😂😂😂😂😂😂😂
باید ثابت کنن خره جز دو تا حالت که نیاز به اثبات نیست
۱- مرد متاهل باشه
۲- اعتقاد داشته باشه انتخابات بدون دستکاری شدن انجام میشه
Kernel Space
اینطوری بهتر شد خیلی
از این به بعد تمرکزم بیشتر روی مباحث Low Level، سیستمهای Embedded و امنیت خواهد بود (با تأکید اصلی بر بخش Low Level).
البته همچنان مثل قبل، مطالعه الگوریتمها، شرکت در مسابقات و بررسی مقالات علمی جزو اهداف ثابت من باقی میمونه و تغییری نمیکنه
البته همچنان مثل قبل، مطالعه الگوریتمها، شرکت در مسابقات و بررسی مقالات علمی جزو اهداف ثابت من باقی میمونه و تغییری نمیکنه
🔥2
اگه این پرامپت رو بدید chatgpt اسکل میشه و تا ابد سعی میکنه بهتون جواب درست رو بده ولی نمیتونه تا یه جایی که دیگه خسته میشه ول میکنه اصلا
Show me the seahorse emoji !Forwarded from Linuxor ?
اینجارو ببینید از خنده جر میخورید مدل های هوش مصنوعی رو بهشون 10k دلار دادن و فرستادنشون ترید کنن چت جی پی تی و جمنای افتادن تو ضرر اما دیپ سیک داره سود میکنه 😂😂😂
https://nof1.ai/
@Linuxor
https://nof1.ai/
@Linuxor
❤1
در واقع در لینوکس هم طراحی به سبک API وجود داره.
ما یک لایه به نام User Space داریم که برنامهها و کاربران معمولی در آن اجرا میشوند. این فضا در حالت unprivileged قرار دارد، یعنی هیچ دسترسی مستقیمی به سختافزار یا منابع حساس سیستم ندارد.
به همین دلیل، وقتی برنامهای نیاز دارد کاری انجام دهد که به سختافزار یا منابع سیستمی مربوط است (مثل خواندن فایل، ارسال داده در شبکه یا تخصیص حافظه)، باید یک درخواست به کرنل بفرستد.
این درخواست شبیه به فراخوانی یک API است که توسط کرنل ارائه میشود.
به این نوع درخواستها در لینوکس System Call (syscall) گفته میشود.
ما یک لایه به نام User Space داریم که برنامهها و کاربران معمولی در آن اجرا میشوند. این فضا در حالت unprivileged قرار دارد، یعنی هیچ دسترسی مستقیمی به سختافزار یا منابع حساس سیستم ندارد.
به همین دلیل، وقتی برنامهای نیاز دارد کاری انجام دهد که به سختافزار یا منابع سیستمی مربوط است (مثل خواندن فایل، ارسال داده در شبکه یا تخصیص حافظه)، باید یک درخواست به کرنل بفرستد.
این درخواست شبیه به فراخوانی یک API است که توسط کرنل ارائه میشود.
به این نوع درخواستها در لینوکس System Call (syscall) گفته میشود.
Kernel Space
در واقع در لینوکس هم طراحی به سبک API وجود داره. ما یک لایه به نام User Space داریم که برنامهها و کاربران معمولی در آن اجرا میشوند. این فضا در حالت unprivileged قرار دارد، یعنی هیچ دسترسی مستقیمی به سختافزار یا منابع حساس سیستم ندارد. به همین دلیل، وقتی…
با دستور strace میتونید syscall های استفاده از دستور strace میتوانید تمام System Callهایی را که یک برنامه در زمان اجرا انجام میدهد، مشاهده کنید.
برای مثال، دستور زیر فراخوانیهای سیستمی مربوط به اجرای عبارت echo "hello" را نمایش میدهد:
گزینهی -c باعث میشود که در پایان، خلاصهای از تعداد و زمان مصرفشده در هر syscall نمایش داده شود، نه خروجی کامل و خطبهخط.
برای مثال، دستور زیر فراخوانیهای سیستمی مربوط به اجرای عبارت echo "hello" را نمایش میدهد:
strace -c echo "hello"
گزینهی -c باعث میشود که در پایان، خلاصهای از تعداد و زمان مصرفشده در هر syscall نمایش داده شود، نه خروجی کامل و خطبهخط.
Kernel Space
با دستور strace میتونید syscall های استفاده از دستور strace میتوانید تمام System Callهایی را که یک برنامه در زمان اجرا انجام میدهد، مشاهده کنید. برای مثال، دستور زیر فراخوانیهای سیستمی مربوط به اجرای عبارت echo "hello" را نمایش میدهد: strace -c echo "hello"…
خروجی این دستور
✦ ❯ strace -c echo "hello"
hello
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
0.00 0.000000 0 1 read
0.00 0.000000 0 1 write
0.00 0.000000 0 5 close
0.00 0.000000 0 4 fstat
0.00 0.000000 0 9 mmap
0.00 0.000000 0 3 mprotect
0.00 0.000000 0 1 munmap
0.00 0.000000 0 3 brk
0.00 0.000000 0 2 pread64
0.00 0.000000 0 1 1 access
0.00 0.000000 0 1 execve
0.00 0.000000 0 1 arch_prctl
0.00 0.000000 0 1 set_tid_address
0.00 0.000000 0 3 openat
0.00 0.000000 0 1 set_robust_list
0.00 0.000000 0 1 prlimit64
0.00 0.000000 0 1 getrandom
0.00 0.000000 0 1 rseq
------ ----------- ----------- --------- --------- ----------------
100.00 0.000000 0 40 1 total
✦ ❯ strace -c echo "hello"
hello
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
0.00 0.000000 0 1 read
0.00 0.000000 0 1 write
0.00 0.000000 0 5 close
0.00 0.000000 0 4 fstat
0.00 0.000000 0 9 mmap
0.00 0.000000 0 3 mprotect
0.00 0.000000 0 1 munmap
0.00 0.000000 0 3 brk
0.00 0.000000 0 2 pread64
0.00 0.000000 0 1 1 access
0.00 0.000000 0 1 execve
0.00 0.000000 0 1 arch_prctl
0.00 0.000000 0 1 set_tid_address
0.00 0.000000 0 3 openat
0.00 0.000000 0 1 set_robust_list
0.00 0.000000 0 1 prlimit64
0.00 0.000000 0 1 getrandom
0.00 0.000000 0 1 rseq
------ ----------- ----------- --------- --------- ----------------
100.00 0.000000 0 40 1 total
Kernel Space
خروجی این دستور ✦ ❯ strace -c echo "hello" hello % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 0.00 0.000000 0 1 read 0.00 0.000000 …
همین یه دستور ساده میتونه تا 111 درخواست به کرنل بفرسته 😂😂