تعلم تجميع x86-64 من خلال كتابة واجهة رسومية من الصفر

2025-09-16

تتناول هذه المقالة رحلة الكاتب في تعلم لغة التجميع x86-64 من خلال إنشاء برنامج واجهة رسومية بسيط. بدءًا من برنامج إنهاء أساسي، يشرح الكاتب تدريجيًا عمليات النظام، وعمليات المكدس، وبروتوكول X11، وأكثر من ذلك، ليحقق في النهاية نافذة تعرض "مرحباً بالعالم!" في ملف ثنائي يقل حجمه عن 1 كيلوبايت. المقالة منظمة بشكل جيد ومناسبة للقراء الذين لديهم بعض الخبرة في البرمجة.

اقرأ المزيد

جعل عملية بناء التصحيح الخاصة بي أسرع بمقدار 100 مرة: SIMD والسيليكون المخصص لإنقاذ الموقف

2025-02-18

أثناء تطوير تطبيق تورنت قائم على لغة البرمجة سي، واجه المؤلف مشكلة في بطء وقت بدء تشغيل بناء التصحيح (20-30 ثانية). كان هذا يرجع أساسًا إلى التحقق من قيم هاش SHA1 لكل جزء من الملف الذي تم تنزيله عند بدء تشغيل البرنامج، مما تباطأ بشكل كبير بسبب Address Sanitizer في وضع التصحيح. يستكشف المقال عدة تقنيات لتحسين الأداء، بما في ذلك استخدام تعليمات SIMD وأجهزة تسريع SHA المخصصة لوحدة المعالجة المركزية. في النهاية، باستخدام مجموعة تعليمات توسيع SHA من إنتل، تم تقليل وقت بدء التشغيل إلى 866.9 مللي ثانية، مما حقق تحسنًا في الأداء بمقدار 100 مرة. يفصل المقال تفاصيل تنفيذ ومقارنة الأداء للعديد من أساليب التحسين، ويناقش تحسين المُجمِّع وتأثير مدخلات/مخرجات القرص.

اقرأ المزيد
التطوير

واجهة برمجة التطبيقات (API) غير قابلة للاكتشاف للعدادات عبر الأنظمة الأساسية: رحلة عبر واجهات برمجة التطبيقات لنظام التشغيل

2025-02-06

يتناول هذا المقال التحديات التي تواجه واجهات برمجة التطبيقات (APIs) للعدادات عبر الأنظمة الأساسية في برمجة لغة C. يكتشف المؤلف أن أنظمة يونكس المختلفة (بما في ذلك لينكس و FreeBSD و NetBSD وما إلى ذلك) تتعامل مع العدادات بطرق مختلفة جدًا. وظيفة POSIX timer_create، القائمة على الإشارات، تُظهر العديد من المشكلات، مثل ضعف التشغيل البيني مع بدائيات نظام التشغيل الأخرى وتداخل قناع الإشارة. يناقش المقال إيجابيات وسلبيات العديد من الحلول، بما في ذلك timerfd_create و kqueue و port_create و io_uring، ويخلص إلى أنه بالنسبة للتطبيقات عبر الأنظمة الأساسية، فإن تنفيذ العدادات في مساحة المستخدم، كما يفعل libuv، هو نهج أكثر كفاءة وموثوقية. يستخدم libuv بنية بيانات كومة صغيرة لإدارة العدادات ويستخدم مكالمات النظام مثل poll/epoll/kqueue للربط المتعدد.

اقرأ المزيد