بسیاری از قابلیتها و عملکردهای مدل CPN بر اساس توابع نوشته شده توسط کاربر به زبان تابعی ML صورت میگیرد (Paulson, 1996)، (Harper, Rothwell, and Mitchell, 1989)، (Gilmore, 1997) و (Harper, 2001). در این بخش، همهی توابع مدل و عملیات آنها توصیف شده است.
شرح توابع مشترک بین مدلهای ۲PL، WW و WD
توابع بیان شده در زیر در هر سه مدلِ طراحی شده استفاده شدهاند.
-
- تابع getTransIndex
تابع getTransIndex یک شناسه تراکنش را از نوع colset TRANSACTION به عنوان پارامتر اول دریافت میکند و یک لیست از تراکنشها را از نوع colset TRANSLIST به عنوان پارامتر دوم میگیرد و شاخص موقعیت تراکنش در لیست را برمیگرداند، توجه شود که شمارش از صفر است. اگر لیست شامل این تراکنش نباشد، آنگاه تابع ‘۱-’ را به عنوان نتیجه برمیگرداند.
-
- تابع eliminateTrans
تابع eliminateTrans یک شناسه تراکنش را با نام T، از نوع colset TRANSACTION به عنوان پارامتر اول میگیرد و یک لیست از شناسههای تراکنشها را به نام L از نوع colset TRANSLIST به عنوان پارامتر دوم میگیرد. اگر تراکنشِ پارامتر اول در لیست تراکنشهای پارامتر دوم وجود داشت، پس از آن تابع یک لیستی را باز میگرداند که با از بین بردن تراکنش T از لیست اولیه ایجاد میشود؛ در غیر این صورت، لیست بدون تغییرِ تراکنشها را برمیگرداند. به عبارت دیگر تابع eliminateTrans همان لیست تراکنشها را بدون تراکنش T بر میگرداند، یعنی تراکنش T را از لیست حذف میکند و لیست را برمیگرداند.
-
- تابع isExists
تابع isExists یک شناسه تراکنش را از نوع colset TRANSACTION به عنوان پارامتر اول میگیرد و یک لیست از شناسههای تراکنشها را از نوع colset TRANSLIST به عنوان پارامتر دوم میگیرد. اگر پارامتر اول، در لیست پارامتر دوم وجود داشته باشد، این تابع مقدار true را برمیگرداند؛ در غیر این صورت این تابع false را باز میگرداند.
شرح توابع مدل ۲PL
توابع بیان شده در زیر فقط در مدل ۲PL استفاده شدهاند.
تابع checklock مهمترین تابع مدل ۲PL است که در شکل ۵-۱ دیده میشود.
تابع checklock عملیات اصلی مدل ۲PL را انجام میدهد. ۲PL دارای دو مرحله است، مراحل قفل کردن و باز کردن قفل. تابع checklock در زمانبندی کردن ۲PL نقش اصلی را دارد. تمام عملیات قفل کردن تراکنشها باید قبل از اولین عمل باز کردن قفل درهمان تراکنش باشد. قفلگذاری روی دادهها به تدریج که نیاز به دستیابی به آنها پیش میآید صورت میگیرد و قفلگشایی از آنها پس از دریافت تمام قفلهای تراکنش رخ خواهد داد. اما ۲PL به تنهایی ممکن است باعث بروز بنبست شود.
در جدول ۵-۳، پارامترهای ورودی تابع checklock برای مدل ۲PL را مشاهده مینمایید.
جدول ۵-۳- پارامترهای ورودی تابع checklock برای مدل ۲PL
پارامتر ورودی | نوع colset | عملکرد |
RAcc | ACCESS | عملیات مورد نیاز دستور جاری بر روی یک منبع را نشان میدهد. |
ELock | LOCK | قفل موجود جاری بر روی منبعی که دستور جاری میخواهد عملیات RAcc روی آن داشته باشد را نمایش میدهد. |
CurT | TRANSACTION | شناسه تراکنشی که دستور جاری متعلق به آن است را نمایش میدهد. |