system call در گنو/لینوکس چیست؟

در سیستم‌عامل گنو/لینوکس، لینوکس در «فضای هسته» و کاربران در «فضای کاربر» قرار دارند. «فضای کاربر» همان ابزارها و بستر سیستم‌عامل گنو است که شما به عنوان کاربر با آن کار می‌کنید یا به عنوان برنامه‌نویس برای آن برنامه می‌نویسید. پس لینوکس به عنوان هستهٔ سیستم‌عامل گنو، رابطی به نام system call را برای پشتیبانی از «فضای کاربر» در «فضای هسته» پیاده‌سازی کرده است. در نتیجه نقش system call رابطی بین «فضای هسته» و «فضای کاربر» است تا برنامه‌نویس در گنو/لینوکس بتواند با استفاده از system call با هسته (لینوکس) رابطه برقرار کند.

اما برویم بر سر بحث اصلی! system call چطور کار می‌کند؟

لیست تمام توابع سطح پائینی که توسط هسته ارائه‌شده در جدولی به نام «جدول system call» نگهداری می‌شود، بر اساس ترتیب قرارگیری نام توابع در این جدول، یک شماره به هر یک از آنها اختصاص می‌یابد که به آن، شمارهٔ system call گفته می‌شود. برنامه‌نویس می‌تواند هر یک از این توابع را بر اساس شمارهٔ آنها توسط تابع syscall (به عنوان رابط) از درون هسته صدا بزند. البته نیازی به حفظ کردن این شماره‌ها نیست، زیرا به ازای هر یک از این توابع، یک ماکروی هم‌نام برای نگهداری شمارهٔ تخصیص‌یافته وجود دارد و برنامه‌نویس برای خوانایی بیشتر از این ماکروها استفاده می‌کند. به عنوان مثال برای دریافت ID پردازش فعلی از طریق system call بصورت زیر می‌نویسیم:

syscall(__NR_getpid);

مقدار ماکروی ‪__NR_getpid‬ برابر 20 خواهد بود که این عدد، همان شماره تخصیص‌یافته یا شمارهٔ system call برای تابع مورد نظر در هسته است. به دستور قبل، یک system call گفته می‌شود. چون این system call کاری مشابه تابع getpid در POSIX را انجام می‌دهد، پس می‌توان گفت که تابع getpid بعنوان لایه‌ای بر روی این system call عمل می‌کند.

این مطلب، ساده‌سازی خلاصه‌ای برگرفته‌شده از محتویات این لینک است، اطلاعات تکمیلی را می‌توانید در آن مطالعه کنید که چطور می‌توان یک system call را درون هسته (لینوکس) ایجاد نمود.

دنبال‌کردن

هر نوشتهٔ تازه‌ای را در نامه‌دان خود دریافت نمایید.