LinuxÌṩÁËÄÚ´æÓ³É亯Êýmmap, Ëü°ÑÎļþÄÚÈÝÓ³Éäµ½Ò»¶ÎÄÚ´æÉÏ(׼ȷ˵ÊÇÐéÄâÄÚ´æÉÏ), ͨ¹ý¶ÔÕâ¶ÎÄÚ´æµÄ¶ÁÈ¡ºÍÐÞ¸Ä, ʵÏÖ¶ÔÎļþµÄ¶ÁÈ¡ºÍÐÞ¸Ä, ÏÈÀ´¿´Ò»ÏÂmmapµÄº¯ÊýÉùÃ÷: Í·Îļþ: ÔÐÍ: void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offsize); ·µ»ØÖµ: ³É¹¦Ôò·µ»ØÓ³ÉäÇøÆðʼµØÖ·, ʧ°ÜÔò·µ»ØMAP_FAILED(-1). ²ÎÊý: addr: Ö¸¶¨Ó³ÉäµÄÆðʼµØÖ·, ͨ³£ÉèΪNULL, ÓÉϵͳָ¶¨. length: ½«ÎļþµÄ¶à´ó³¤¶ÈÓ³Éäµ½ÄÚ´æ. prot: Ó³ÉäÇøµÄ±£»¤·½Ê½, ¿ÉÒÔÊÇ: PROT_EXEC: Ó³ÉäÇø¿É±»Ö´ÐÐ. PROT_READ: Ó³ÉäÇø¿É±»¶ÁÈ¡. PROT_WRITE: Ó³ÉäÇø¿É±»Ð´Èë. PROT_NONE: Ó³ÉäÇø²»ÄÜ´æÈ¡. flags: Ó³ÉäÇøµÄÌØÐÔ, ¿ÉÒÔÊÇ: MAP_SHARED: ¶ÔÓ³ÉäÇøÓòµÄдÈëÊý¾Ý»á¸´ÖÆ»ØÎļþ, ÇÒÔÊÐíÆäËûÓ³Éä¸ÃÎļþµÄ½ø³Ì¹²Ïí. MAP_PRIVATE: ¶ÔÓ³ÉäÇøÓòµÄдÈë²Ù×÷»á²úÉúÒ»¸öÓ³ÉäµÄ¸´ÖÆ(copy-on-write), ¶Ô´ËÇøÓòËù×öµÄÐ޸IJ»»áд»ØÔÎļþ. ´ËÍ⻹ÓÐÆäËû¼¸¸öflags²»ºÜ³£ÓÃ, ¾ßÌå²é¿´li ......
Ò»°ãÇé¿öÏ£¬½ø³Ì²»ÄÜ´æÈ¡ÏµÍ³Äں˵ģ¬Ö»ÓÐϵͳµ÷ÓÃÊÇÒ»¸öÀýÍ⣬ÔÚintel½á¹¹µÄ¼ÆËã»úÖУ¬ÊÇͨ¹ýÖжÏ0x80ʵÏÖµÄ
½ø³Ì¿ÉÒÔ¿ÉÒÔÌø×ªµ½ÄÚºËÖеÄλÖÃÊÇsystem_call¡£Ôڴ˼ì²éϵͳµ÷Óúţ¬Ëü¸æËßÄں˽ø³ÌÇëÇóºÎÖÖ·þÎñ£¬È»ºó²éÕÒϵͳµ÷Óñísys_call_table£¬ÕÒµ½Ï£Íûµ÷ÓõÄÄں˵ØÖ·º¯Êý£¬µ÷Óô˺¯Êý£¬È»ºó·µ»Ø¡£
1¡¢ ºê¶¨Òå(unistd.h)
_syscallN(type,name,x…)£¬NÊÇϵͳµ÷ÓÃËùÐè²ÎÊýÊýÄ¿£¬typeÊÇ·µ»ØÀàÐÍ,nameÊÇÃæÏòÓû§µÄϵͳµ÷Óú¯ÊýÃû,x…ÊDzÎÊý£¬¸öÊýΪN
È磺#define _syscall1(type,name,type1,arg1) \
type name(type1 arg1) \
{ \
long __res; \
__asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \
: "=a" (__res) \
: "0" (__NR_##name),"ri" ((long)(arg1)) : "memory"); \
__syscall_return(type,__res); \
}
·ÖÎö£º
ouput£º _res 0% __NR##name “=a”±íʾ´æ·ÅÔÚeax¼Ä´æÆ÷
Ò²¾ÍÊDZíʾ°Ñ±äÁ¿_res´æ·ÅÔÚeaxÖУ¬“0”±íʾ°Ñ_NR##name¹ØÁªµ½0%¼´_res£®·µ»ØÖµÒ²´æ·ÅÔÚeaxÖУ®
& ......
Ò»¡¢´ÓÄÄÀïµ½ÄÄÀï
±¾ÎÄÖ¼ÔÚÃèÊölinuxÖÐÄÚºËÈçºÎµ÷ÓÃÆô¶¯£¬È»ºóÈçºÎ´ÓimgµÄÎļþϵͳÇл»µ½Ó²Å̵Ĺý³Ì¡£
ÃèÊöÆðÓÚ£ºlinux-2.6.11/init/main.cÖк¯Êý static int init(void * unused)
ÃèÊöÖ¹ÓÚ£º/etc/rc.d/rc.sysinitÎļþµÄ±»µ÷ÓÃ
¶þ¡¢ÃèдÁ÷³Ì
ÔÚlinux´úÂëlinux-2.6.11/init/main.cÖÐinitÕâ¸öº¯Êý±»µ÷ÓÃʱ£¬³õʼÆô¶¯µÄÎļþ
ϵͳ¾µÏñ£º/boot/initrd-2.6.11.12.img£¨ÒÔ2.6.11.12ÄÚºËΪÀý£©Òѱ»grub¼ÓÔØµ½
ÄÚ´æÖУ¬²¢ÒѹÒÔØµ½¸ùĿ¼ÉÏ£¨"/"£©¡£
1¡¢ÎÒÃÇÏÈÀ´¿´¿´initrd-2.6.11.12.imgµ½µ×ÊǸöʲô¶«Î÷£º
[root@wj-server1 tmp]# cd /tmp
[root@wj-server1 tmp]# cp /boot/initrd-2.6.11.12.img /tmp/initrd-2.6.11.12.gz
[root@wj-server1 tmp]# gunzip initrd-2.6.11.12.gz
½âѹËõºóµÄÎļþΪ£º
[root@wj-server1 tmp]# ls -l initrd-2.6.11.12
-rw-r--r-- 1 root root 846848 7ÔÂ 31 17:01 initrd-2.6.11.12
ÊÇÒ»¸öCPIO¸ñʽµÄÎļþ£¬¸ÃÎļþ¸ñʽÊÇÖÖÎļþ¾µÏñÈÃÎÒÃǽ«Ëü½â¿ªµ½Ò»¸öĿ¼Öп´¿´
ÆäÖеľßÌåÄÚÈÝ£º
[root@wj-server1 tmp]# mkdir initrd
[root@wj-server1 tmp]# cd initrd
[root@wj-server1 initrd]# cpio -i < ../initrd- ......
×î½ü£¬ÓиöÅóÓÑÀÏÊÇÎÊVPNµÄÊÂÇé¡£½áºÏÎÒµÄÌå»á£¬ËãÊǸøËû×¼±¸Ò»¸öרÌâÎÄÕ°ɡ£ 1.µ½µ×ʲôÊÇVPN
VPNµÄÓ¢ÎÄÈ«³ÆÊÇ¡°Virtual Private Network¡±£¬·Òë¹ýÀ´¾ÍÊÇ¡°ÐéÄâרÓÃÍøÂ硱¡£¹ËÃû˼Ò壬ÐéÄâרÓÃÍøÂçÎÒÃÇ¿ÉÒÔ°ÑËüÀí½â³ÉÊÇÐéÄâ³öÀ´µÄÆóÒµÄÚ²¿×¨Ïß¡£Ëü¿ÉÒÔͨ¹ýÌØÊâµÄ¼ÓÃܵÄͨѶÐÒéÔÚÁ¬½ÓÔÚInternetÉϵÄλÓÚ²»Í¬µØ·½µÄÁ½¸ö»ò¶à¸öÆóÒµÄÚ²¿ÍøÖ®¼ä½¨Á¢Ò»ÌõרÓеÄͨѶÏß·£¬¾ÍºÃ±ÈÊǼÜÉèÁËÒ»ÌõרÏßÒ»Ñù£¬µ«ÊÇËü²¢²»ÐèÒªÕæÕýµÄÈ¥ÆÌÉè¹âÀÂÖ®ÀàµÄÎïÀíÏß·¡£Õâ¾ÍºÃ±ÈÈ¥µçОÖÉêÇëרÏߣ¬µ«ÊDz»ÓøøÆÌÉèÏß·µÄ·ÑÓã¬Ò²²»ÓùºÂò·ÓÉÆ÷µÈÓ²¼þÉ豸¡£VPN¼¼ÊõÔÊÇ·ÓÉÆ÷¾ßÓеÄÖØÒª¼¼ÊõÖ®Ò»£¬Ä¿Ç°ÔÚ½»»»»ú£¬·À»ðǽÉ豸»òWindows 2000/XP/VistaµÈÈí¼þÀïÒ²¶¼Ö§³ÖVPN¹¦ÄÜ£¬Ò»¾ä»°£¬VPNµÄºËÐľÍÊÇÔÚÀûÓù«¹²ÍøÂ罨Á¢ÐéÄâ˽ÓÐÍø¡£ ÐéÄâרÓÃÍø£¨VPN£©±»¶¨ÒåΪͨ¹ýÒ»¸ö¹«ÓÃÍøÂ磨ͨ³£ÊÇÒòÌØÍø£©½¨Á¢Ò»¸öÁÙʱµÄ¡¢°²È«µÄÁ¬½Ó£¬ÊÇÒ»Ìõ´©¹ý»ìÂҵĹ«ÓÃÍøÂçµÄ°²È«¡¢Îȶ¨µÄËíµÀ¡£ÐéÄâרÓÃÍøÊÇ¶ÔÆóÒµÄÚ²¿ÍøµÄÀ©Õ¹¡£ÐéÄâרÓÃÍø¿ÉÒÔ°ïÖúÔ¶³ÌÓû§¡¢¹«Ë¾·ÖÖ§»ú¹¹¡¢ÉÌÒµ»ï°é¼°¹©Ó¦ÉÌͬ¹«Ë¾µÄÄÚ²¿Íø½¨Á¢¿ÉÐŵݲȫÁ¬½Ó£¬²¢±£Ö¤Êý¾ÝµÄ°²È«´«Êä¡£ÐéÄâרÓÃÍø¿ÉÓÃÓÚ²»¶ÏÔö³¤µÄÒÆ¶¯Óû§µÄÈ«ÇòÒ ......
ÔÚÇ°ÃæµÄÎÄÕÂÖÐÌá¼°µ½£¬Ò»¸ö½ø³ÌÖеĶà¸öÏß³ÌÊǹ²Ïíͬһ¶Î×ÊÔ´µÄ£¬ÓÉÓÚÏ̶߳Ô×ÊÔ´µÄ¾ºÕùÒý³öÁËËø¡£ÆäÖÐmutexÊÇÒ»ÖÖ¼òµ¥µÄ¼ÓËø·½·¨£¬Õâ¸ö»¥³âËøÖ»ÓÐÁ½ÖÖ״̬£¬ÄǾÍÊÇÉÏËøºÍ½âËø£¬¿ÉÒÔ°Ñ»¥³âËø¿´×÷ÊÇijÖÖÒâÒåÉϵÄÈ«¾Ö±äÁ¿¡£ÔÚijһʱ¿Ì£¬Ö»ÄÜÓÐÒ»¸öÏß³ÌÈ¡µÃÕâ¸ö»¥³âÉϵÄËø£¬ÓµÓÐÉÏËø×´Ì¬µÄÏ߳̿ÉÒÔ¶Ô¹²Ïí×ÊÔ´½øÐвÙ×÷£¬¶øÆäËûÏß³ÌÔÚ¸ÃÏß³Ìδ½âËøÖ®Ç°£¬¹»»á±»¹ÒÆð£¬Ö±µ½ÉÏËøµÄÏß³Ì½â¿ªËø¡£¿ÉÒÔÕâô˵£¬»¥³âËøÊ¹µÃ¹²Ïí×ÊÔ´°´ÐòµÄÔÚ¸÷¸öÏß³ÌÉϲÙ×÷¡£
»¥³âËøµÄ²Ù×÷Ö÷Òª°üÀ¨»¥³âËø³õʼ»¯¡¢ÉÏËø¡¢ÅжÏÉÏËø¡¢½âËø¡¢´Ý»Ù»¥³âËø¡£ÆäÖл¥³âËø¿ÉÒÔ·ÖΪ¿ìËÙ»¥³âËø¡¢µÝ¹é»¥³âËøÕâ¼ì´í»¥³âËø¡£ÕâÈýÖÖËøµÄÇø±ðÖ÷ÒªÔÚÓÚÆäËûδռÓл¥³âËøµÄÏß³ÌÔÚÏ£ÍûµÃµ½»¥³âËøÊ±ÊÇ·ñÐèÒªµÈ´ý¹ÒÆð¡£¿ìËÙËøÊÇÖ¸µ÷ÓÃÏ̻߳á×èÈûÖ±µ½Ïß³ÌËøµÃµ½½âËøÎªÖ¹¡£µÝ¹éËøÄܹ»³É¹¦µØ·µ»Ø²¢ÇÒÔö¼Óµ÷ÓÃÏß³ÌÔÚ»¥³âÉϵļÓËø´ÎÊý£¬±ÈÈçÒ»¸öÁ´±íÔÚ½øÐвåÈëµÄ²Ù×÷ʱ£¬¿ÉÒÔ½øÐвéÕҵIJÙ×÷¡£¼ì´íËøÔòΪ¿ìËÙ»¥³âËøµÄ·Ç×èÈû°æ±¾£¬Ëü»áÁ¢¼´·µ»Ø²¢·µ»ØÒ»¸ö´íÎóµÄÐÅÏ¢¡£
1¡¢º¯Êý¼òÒå¡£
£¨1£©pthread_mutex_init
Í·Îļþ£º &l ......
ÔÚÉÏһƪÎÄÕÂÖУ¬½²ÊöÁËÏß³ÌÖл¥³âËøµÄʹÓ㬴ﵽ¶Ô¹²Ïí×ÊÔ´»¥³âʹÓᣳýÁËʹÓû¥³âËø£¬ÐźÅÁ¿£¬Ò²¾ÍÊDzÙ×÷ϵͳÖÐËùÌáµ½µÄPVÔÓÄÜ´ïµ½»¥³âºÍͬ²½µÄЧ¹û£¬Õâ¾ÍÊǽñÌìÎÒÃÇËùÒª½²ÊöµÄÐźÅÁ¿Ï߳̿ØÖÆ¡£
PVÔÓïÊǶÔÕûÊý¼ÆÊýÆ÷ÐźÅÁ¿semµÄ²Ù×÷£¬Ò»´ÎP²Ù×÷¿Éʹsem¼õÒ»£¬¶øÒ»´ÎV²Ù×÷¿ÉÊÇsem¼ÓÒ»¡£½ø³Ì£¨»òỊ̈߳©¸ù¾ÝÐźÅÁ¿µÄÖµÀ´ÅжÏÊÇ·ñ¶Ô¹«¹²×ÊÔ´¾ßÓзÃÎÊȨÏÞ¡£µ±ÐźÅÁ¿µÄÖµ´óÓÚÁã»òµÈÓÚÁãµÄʱºò£¬¸Ã½ø³Ì£¨»òỊ̈߳©¾ßÓжԹ«¹²×ÊÔ´·ÃÎʵÄȨÏÞ£¬·ñÔò£¬µ±ÐźÅÁ¿µÄֵСÓÚʱ£¬¸Ã½ø³Ì£¨»òỊ̈߳©¾Í»á±»×èÈû£¬Ö±µ½ÐźÅÁ¿µÄÖµ´óÓÚ»òµÈÓÚÒ»¡£
1¡¢ÔÚLINUXÖУ¬ÊµÏÖÁËPOSIXµÄÎÞÃûÐźÅÁ¿£¬Ö÷ÒªÓÃÓÚÏ̼߳äµÄ»¥³âͬ²½£¬ÏÂÃæ½«¼òµ¥½éÉÜһЩº¯Êý½Ó¿Ú£º
£¨1£©¡¢sem_init
¹¦ÄÜ£º ÓÃÓÚ´´½¨Ò»¸öÐźÅÁ¿£¬²¢³õʼ»¯ÐźÅÁ¿µÄÖµ¡£
Í·Îļþ£º <semaphore.h>
º¯ÊýÔÐÍ£º int sem_init (sem_t* sem, int pshared, unsigned int value);
º¯Êý´«ÈëÖµ£º sem:ÐźÅÁ¿¡£
& ......