லினக்ஸ் கணினி அழைப்பு என்றால் என்ன?

What Is Linux System Call



லினக்ஸ் சிஸ்டம் அழைப்பின் வரையறையை ஆராய்ந்து அதன் செயல்பாட்டின் விவரங்களை ஆராய்வதற்கு முன், ஒரு பொதுவான லினக்ஸ் அமைப்பின் பல்வேறு மென்பொருள் அடுக்குகளை வரையறுத்து தொடங்குவது சிறந்தது.

லினக்ஸ் கர்னல் என்பது ஒரு சிறப்பு நிரலாகும், இது உங்கள் வன்பொருளில் கிடைக்கக்கூடிய மிகக் குறைந்த மட்டத்தில் துவங்கி இயங்கும். பல வேலைத்திட்டங்களை இணையாகச் செயல்படுத்துவதற்கான நேரத் துண்டுகளை வழங்குவதற்காக, விசைப்பலகை, வட்டு மற்றும் நெட்வொர்க் நிகழ்வுகளைக் கையாளுதல் உட்பட கணினியில் இயங்கும் அனைத்தையும் ஒருங்கிணைக்கும் பணி இதில் உள்ளது.







கர்னல் ஒரு பயனர்-நிலை நிரலை செயல்படுத்தும்போது, ​​அது நினைவக இடத்தை மெய்நிகராக்குகிறது, இதனால் நிரல்கள் நினைவகத்தில் இயங்கும் ஒரே செயல்முறை என்று நம்புகின்றன. வன்பொருள் மற்றும் மென்பொருள் தனிமைப்படுத்தலின் இந்த பாதுகாப்பு குமிழி பாதுகாப்பு மற்றும் நம்பகத்தன்மையை அதிகரிக்கிறது. ஒரு சலுகை இல்லாத அப்ளிகேஷனால் மற்ற புரோகிராம்களுக்குச் சொந்தமான மெமரியை அணுக முடியாது, அந்த ப்ரோக்ராம் செயலிழந்தால், கர்னல் முடிவடைகிறது, அதனால் அது கணினியின் மற்ற பகுதிகளுக்கு தீங்கு விளைவிக்காது.



லினக்ஸ் சிஸ்டம் அழைப்புகள் மூலம் தடையை மீறுதல்

தனிமைப்படுத்தப்படாத பயன்பாடுகளுக்கு இடையிலான இந்த தனிமை அடுக்கு மற்ற பயன்பாடுகளையும் கணினியில் உள்ள பயனர்களையும் பாதுகாக்க ஒரு சிறந்த எல்லையை வழங்குகிறது. இருப்பினும், கணினி மற்றும் வெளி உலகில் உள்ள மற்ற உறுப்புகளுடன் இடைமுகம் செய்ய சில வழிகள் இல்லாமல், நிரல்கள் எதையும் அதிகம் சாதிக்க முடியாது.



தொடர்புகளை எளிதாக்க, கர்னல் ஒரு மென்பொருள் கேட்டை நியமிக்கிறது, இது இயங்கும் நிரலை அதன் சார்பாக செயல்படுமாறு கோர அனுமதிக்கிறது. இந்த இடைமுகம் ஒரு கணினி அழைப்பு என்று அழைக்கப்படுகிறது.





லினக்ஸ் எல்லாம் யுனிக்ஸ் தத்துவத்தைப் பின்பற்றுவது ஒரு கோப்பு என்பதால், பல செயல்பாடுகளை ஒரு கோப்பாகத் திறந்து படிப்பது அல்லது எழுதுவது ஒரு சாதனமாக இருக்கலாம். எடுத்துக்காட்டாக, விண்டோஸில், சீரற்ற பைட்டுகளை அணுக CryptGenRandom என்ற செயல்பாட்டை நீங்கள் பயன்படுத்தலாம். ஆனால் லினக்ஸில், கோப்பு/dev/urandom ஐத் திறப்பதன் மூலமும், நிலையான கோப்பு உள்ளீடு/வெளியீட்டு அமைப்பு அழைப்புகளைப் பயன்படுத்தி அதிலிருந்து பைட்டுகளைப் படிப்பதன் மூலமும் இதைச் செய்யலாம். இந்த முக்கியமான வேறுபாடு எளிமையான கணினி அழைப்பு இடைமுகத்தை அனுமதிக்கிறது.

வேஃபர்-மெல்லிய மடக்கு

பெரும்பாலான பயன்பாடுகளில், கணினி அழைப்புகள் நேரடியாக கர்னலுக்கு வரவில்லை. கிட்டத்தட்ட அனைத்து நிரல்களும் நிலையான சி நூலகத்தில் இணைக்கப்படுகின்றன, இது லினக்ஸ் சிஸ்டம் அழைப்புகளைச் சுற்றி ஒரு மெல்லிய ஆனால் முக்கியமான ரேப்பரை வழங்குகிறது. செயல்பாட்டு வாதங்கள் சரியான செயலி பதிவுகளில் நகலெடுக்கப்படுவதை நூலகம் உறுதிசெய்கிறது, பின்னர் தொடர்புடைய லினக்ஸ் கணினி அழைப்பை வெளியிடுகிறது. அழைப்பிலிருந்து தரவைப் பெறும்போது, ​​மடக்குதல் முடிவுகளை விளக்கி, அதை நிரல் முறையில் மீண்டும் நிரலுக்குத் திருப்பித் தருகிறது.



காட்சிகளுக்கு பின்னால்

கணினியுடன் தொடர்பு கொள்ளும் ஒரு நிரலில் உள்ள ஒவ்வொரு செயல்பாடும் இறுதியில் கணினி அழைப்பாக மொழிபெயர்க்கப்படுகிறது. இதை செயலில் பார்க்க, ஒரு அடிப்படை உதாரணத்துடன் ஆரம்பிக்கலாம்.

வெற்றிடம்முக்கிய() {
}

இது நீங்கள் பார்க்கும் மிகச்சிறிய சி நிரலாகும். இது பிரதான நுழைவுப் புள்ளி வழியாக கட்டுப்பாட்டைப் பெற்று பின்னர் வெளியேறுகிறது. மெயின் வெற்றிடமாக வரையறுக்கப்பட்டுள்ளதால் அது ஒரு மதிப்பை கூட வழங்காது. கோப்பை ctest.c ஆக சேமித்து அதை தொகுக்கலாம்:

gcc ctest.c -ctest

அது தொகுக்கப்பட்டவுடன், கோப்பின் அளவை 8664 பைட்டுகளாக நாம் பார்க்கலாம். இது உங்கள் கணினியில் சற்று மாறுபடலாம், ஆனால் அது சுமார் 8k இருக்க வேண்டும். நுழைய மற்றும் வெளியேற இது நிறைய குறியீடு! இது 8k க்கு காரணம், libc இயக்க நேரம் சேர்க்கப்பட்டுள்ளது. நாம் சின்னங்களை அகற்றினாலும், அது இன்னும் 6k க்கு மேல் உள்ளது.

இன்னும் எளிமையான உதாரணத்தில், லினக்ஸ் சிஸ்டத்தை நாம் செய்ய சி இயக்க நேரத்தைப் பொறுத்து வெளியேறுவதற்கு பதிலாக அழைக்கலாம்.

வெற்றிடம்_தொடங்கு() {
asm('movl $ 1,%eax;'
'xorl %ebx, %ebx;'
'int $ 0x80');
}

இங்கே நாம் 1 ஐ EAX பதிவேட்டில் நகர்த்துகிறோம், EBX பதிவேட்டை அழிக்கவும் (இல்லையெனில் திரும்பும் மதிப்பு இருக்கும்) பின்னர் லினக்ஸ் கணினி அழைப்பு குறுக்கீடு 0x80 (அல்லது தசமத்தில் 128). இந்த குறுக்கீடு எங்கள் அழைப்பைச் செயல்படுத்த கர்னலைத் தூண்டுகிறது.

Asmtest.c எனப்படும் எங்கள் புதிய உதாரணத்தை தொகுத்து, சின்னங்களை அகற்றி, நிலையான நூலகத்தை விலக்கினால்:

gcc-கள்-nostdlib asmtest.c -o asmtest

நாங்கள் 1k க்கும் குறைவான பைனரியை உற்பத்தி செய்வோம் (எனது கணினியில், இது 984 பைட்டுகள் அளிக்கிறது). இந்த குறியீட்டின் பெரும்பகுதி இயங்கக்கூடிய தலைப்புகள். நாங்கள் இப்போது நேரடி லினக்ஸ் கணினி அழைப்பை அழைக்கிறோம்.

அனைத்து நடைமுறை நோக்கங்களுக்காகவும்

கிட்டத்தட்ட எல்லா நிகழ்வுகளிலும், உங்கள் சி புரோகிராம்களில் நீங்கள் நேரடியாக கணினி அழைப்புகளைச் செய்ய வேண்டியதில்லை. நீங்கள் சட்டசபை மொழியைப் பயன்படுத்தினால், தேவை ஏற்படலாம். இருப்பினும், தேர்வுமுறையில், சி லைப்ரரி செயல்பாடுகளை கணினி அழைப்புகள் செய்ய அனுமதிப்பது மற்றும் உங்கள் செயல்திறன்-முக்கியமான குறியீட்டை மட்டும் சட்டசபை உத்தரவுகளில் உட்பொதிப்பது நல்லது.

கணினி அழைப்பு பயிற்சிகளை எவ்வாறு நிரல் செய்வது

அனைத்து கணினி அழைப்புகளின் பட்டியல்

லினக்ஸிற்கான அனைத்து கணினி அழைப்புகளின் பட்டியலையும் நீங்கள் பார்க்க விரும்பினால், இந்த குறிப்பு பக்கங்களை நீங்கள் பார்க்கலாம்: LinuxHint.com இல் கணினி அழைப்புகளின் முழு பட்டியல், filippo.io/linux-syscall-table/ மற்றும் அல்லது syscalls.kernelgrok.com