LinuxÐźÅÁ¿ ¹²ÏíÄÚ´æºÍÏûÏ¢¶ÓÁÐ
1. ÐźÅÁ¿
ʹÓÃÐźÅÁ¿¿ÉÒÔʵÏÖ½ø³Ì¼äͬ²½¡£Ö÷Òªº¯Êý¶¨Ò壺
#include <sys/sem.h>
int semctl(int sem_id, int sem_num, int command, …);
int semget(key_t key, int num_sems, int sem_flags);
int semop(int sem_id, struct sembuf *sem_ops, size_t num_sem_ops);
semgetº¯Êý¸ù¾ÝÌṩµÄkeyÉú³ÉÐźÅÁ¿±êʶ·û£»
semctlº¯Êý³õʼ»¯»òÕßɾ³ýÐźÅÁ¿±êʶ·û£»
semopº¯Êý¸Ä±äÐźÅÁ¿´óС
2. ¹²ÏíÄÚ´æ
¹²ÏíÄÚ´æ»úÖÆÊ¹µÃÁ½¸ö²»Ïà¹Ø½ø³Ì¿ÉÒÔ¶ÁÈ¡ºÍÐÞ¸Äͬһ¶ÎÄÚ´æ´Ó¶øÊµÏÖÊý¾Ý¹²Ïí¡£Ö÷Òªº¯Êý¶¨Òå:
#include <sys/shm.h>
void *shmat(int shm_id, const void *shm_addr, int shmflg);
int shmctl(int shm_id, int cmd, struct shmid_ds *buf);
int shmdt(const void *shm_addr);
int shmget(key_t key, size_t size, int shmflag);
shmgetº¯Êý¸ù¾ÝkeyÉú³ÉÓÐЧµÄ¹²ÏíÄÚ´æ¶ÎÃû£¬¸ù¾Ý²ÎÊýsize²úÉú¹²ÏíµÄÄÚ´æÈÝÁ¿¡£
shmatº¯Êý½«´´½¨µÄ¹²ÏíÄÚ´æ¶ÎÁ¬½Óµ½Ò»¸ö½ø³ÌµÄÄÚ´æ¿Õ¼äÖУ¬ÕâÑù²Å¿ÉÒÔʹÓøöÎÄÚ´æ¡£
shmdtº¯Êý½«¹²ÏíÄÚ´æ´Óµ±Ç°ÄÚ´æÖзÖÀë¡£
shmctlº¯Êý¿ÉÒÔɾ³ý¹²ÏíÄÚ´æ¶Î¡£
3. ÏûÏ ......
1.н¨Îļþ
Ö¸Áî:¢Ù> ÎļþÃû
¢Útouch ÎļþÃû
2.ɾ³ýÎļþ
Ö¸Áî:rm
²ÎÊý:-d Ö±½Ó°ÑÓûɾ³ýµÄĿ¼µÄÓ²Á¬½ÓÊý¾Ýɾ³É0,ɾ³ýĿ¼
-f Ç¿ÖÆÉ¾³ýÎļþ»òĿ¼
-i ɾ³ý¼ÈÓÐÎļþ»òĿ¼֮ǰÏÈѯÎÊÓû§
-r µÝ¹é´¦Àí,½«Ö¸¶¨Ä¿Â¼ÏµÄËùÓÐÎļþ¼°×ÓĿ¼һ²¢´¦Àí
-v ÏÔʾָÁîÖ´Ðйý³Ì
......
Á·ÊÖ, µÚÒ»¸ö×Ö·ûÇý¶¯.
ÓÃÄ£¿é¼ÓÔØ·½·¨
»ªÇåÔ¶¼û<ǶÈëʽlinuxÉ豸Çý¶¯¿ª·¢Ïê½â>µÄ´úÂëÄÃÀ´¸ÄµÄ.
±àÒë¹ý³Ì·¢Ïֺܶà´íÎó.
×îºó·¢ÏÖ Õâ±¾Êé´øµÄÇý¶¯´úÂë¶¼ÊÇ»ùÓÚlinux2.4µÄ...ĿǰÎÒÓõÄlinux2.6, ´úÂ벿·ÖÐèÒª×öÐÞ¸Ä.
Îҵİå×ÓÊÇ ÓÑÉÆÖ®±ÛµÄ 2410. vmware+ubuntu nfs½»²æ±àÒë
Ê×ÏÈ
linux2.6Äں˱àÒëÀïÃæÒª´ò¿ªloadable modules, ÒÔ¼° unload µÄÑ¡ÏîҲҪѡÉÏ ·ñÔòÓò»µ½rmmodÃüÁî ºÇºÇ.
µÚ¶þ (ºÍÉÏÃæµÚÒ»ÌõÒ»Ñù,½ñºóдÇý¶¯¶¼»áÒªÓõ½Õâ¸ö)
ÒªÖÆ×÷linux ÄÚºËÊ÷(linux2.6±ØÐë)
ÔÚlinux2.6.14.1µÄ´úÂëĿ¼
make bzImage
»áÉú³ÉÒ»¸öÐÂÎļþ vmlinux
È»ºó make modules //±àÒëÄ£¿é
make modules install //°²×°Ä£¿é
½áÊøÖ®ºó»áÔÚ/lib/modulesÏÂÉú³É2.6.14.1Îļþ¼Ð, Õâ¸ö¾ÍÊÇÄÚºËÊ÷ÁË. Ö÷ÒªÓõ½µÄ¾ÍÊÇÀïÃæµÄÍ·Îļþ.
µÚÈý
ÐÞ¸ÄÊéÉÏ´øµÄ´úÂë, Ö÷ÒªÊǸĶ˿ںÅ, ÒÔ¼°²¿·Ö´úÂë»ùÓÚlinux2.6»á²»Í¬, , Çë¼ûÎÒÌṩµÄÏÂÔØ, ÀïÃæ°üÀ¨ÁË makefile, Çý¶¯Ô´´úÂë, ²âÊÔ³ÌÐòÔ´´úÂë.
×¢Òâ»áÓõ½ioremap()º¯Êý, ¾ø¶ÔµØÖ·µ½ÐéÄâµØÖ·µÄת»», È»ºóÓÃÖ¸ÕëÀ´ ......
<1> ÈÎÎñ0µÄ¶ÑÕ»ÎÊÌâ
Ò»Ö±²»Ã÷°×schedule.cÀïµÄtask_unionµÄstackºÍuser_stackÊÇʲô¹ØÏµ£¬head.sÀï¾ÍÉèÖÃÁËespÖ¸Ïòuser_stack, ȴһֱûÓÐÓõ½task_union£¬Ö±µ½¿´µ½INIT_TASK²ÅÃ÷°×£¬´Ó½øÈë±£»¤Ä£Ê½µ½Ìø×ª½øÓû§Ì¬¶¼ÊÇÓõÄuser_stackÕâ¸öÕ»£¬¶øÈÎÎñ0µÄtssÖеÄesp0Ö¸Ïòtask_unionµÄstack, Ò²¾ÍÊǵ±ÈÎÎñ0ÔÙÌø×ª½øÄÚºË̬ʱ²ÅÓÃtask_unionµÄÕ»¡£×ܽáÆðÀ´¾ÍÊÇ´Ó½øÈë±£»¤Ä£Ê½µ½³õʼ»¯Íê³É£¬user_stackÓÃ×÷ÄÚºË̬ջ£¬½øÈëÓû§Ì¬ºóuser_stackÓÃ×öÓû§Ì¬Õ»£¬task_unionµÄstackÓÃ×öÄÚºË̬ջ¡£
<2> ÄÚºË̬ѰַÎÊÌâ
Äں˴úÂë¶ÎºÍÊý¾Ý¶Î»ùַΪ0, ¶ÎÏÞ³¤Îª16M£¬¶øÇÒÔÚhead.sÖÐËùÉèÖõÄǰËĸöÒ³±íÓëÎïÀíÄÚ´æÒ³ÊÇÒ»Ò»¶ÔÓ¦µÄ£¬ËùÒÔÔÚÄÚºË̬¿ÉÒÔÖ±½ÓѰַ16MÄڴ棨0.11°æÖ»Ö§³Ö16MÄڴ棩£¬Ò²¼´ÏßÐÔµØÖ·ºÍÎïÀíµØÖ·ÏàµÈ¡£
<3>ÎïÀíµØÖ··ÖÅä
<4>ÏßÐÔµØÖ··ÖÅä
ÿ¸öÈÎÎñÕ¼64MµÄÏßÐÔµØÖ·¿Õ¼ä£¬ÈÎÎñ0ʵ¼ÊÖ»ÓÃÁË0-64MµÄǰ640KB£¬ÒòΪ¶ÎÏÞ³¤±»Éè³ÉÁË640KB¡£ÒòΪ×î¶àÖ§³Ö64¸öÈÎÎñ£¬ËùÒÔ×ܹ²Ê¹ÓÃÁË4GµÄÏßÐÔµØÖ·¿Õ¼ä¡£ ......
Covtool
ÊÇÒ»¸öÓöÔ
C++
´úÂë½øÐÐÔËÐÐʱ¸²¸ÇÂʼì²éµÄ¹¤¾ß£¬¿ÉÒÔÒÔÐÐΪµ¥Î»¼ì²é³öÄÇЩ´úÂëÔÚÔËÐÐÖб»Ê¹Óã¬ÄÇЩûÓÐʹÓá£
1.
°²×°
make
make tests
make install
½«
/usr/local/covtool
Ìí¼Óµ½
PATH
½«
/usr/local/covtools
Ìí¼Óµ½
MANPATH£¨´Ë²½ºÜÖØÒª£¬ËüµÄman±ÈÎĵµ¿¿Æ×µÃ¶à£©
ÎÒÒ»°ãÊÇÌí¼ÓÔÚ/etc/profileÖÐ
2.
ʹÓÃ
Èç¹ûÊÇʹÓÃ
makefile
£º
(1).
½«
g++
Ìæ»»Îª
cov++
¼´¿É¡£
(2).
ÖØÐÂ
build
(3).
ÔËÐÐËùÓеIJâÊÔ£¨Ç뾡Á¿È«µÄ²âÊÔ¸÷ÖÖÇé¿ö£©
(4).
ºÏ²¢
*.covexp
Îļþ£¨
cov++
ϵͳÉè¼ÆÎª¿ÉÒÔÔËÐжà´Î²âÊÔ³ÌÐòµÄ¸÷ÖÖÇé¿öÉú³É¶à¸ö
*.covexp
£¬È»ºó½«¶à´Î½á¹ûͳºÏÆðÀ´ÐγÉÒ»¸ö±¨¸æ£©£º
covmerge.exe find * -name ‘*.covexp’ –print
‘\
>merged.db
Í˳ö¡£
(5).
ÓÃ
*.db
ÎļþÉú³É
html
Îĵµ¡£
gen_html merged.db
(6).
Éú³ÉµÄÎĵµÔÚ
coverage_html
Ŀ¼ ......
¡¾ÊµÏÖ¹¦ÄÜ¡¿£ºLinuxϵÄC±à³Ì£º±àдһ¸ö³ÌÐò£¨¿â£©£¬ÊµÏÖ¶¨Ê±Æ÷£¨¼ÆÊ±Æ÷£©µÄ¹¦ÄÜ£¬ËüÄÜΪÓû§ÌṩÔÚͬһ½ø³ÌÖжà´ÎʹÓõĶ¨Ê±Æ÷¡£ÕâÀïÒªÇóÓÃÐźÅÀ´ÊµÏÖ¡£
¡¾½âÌâ˼·¡¿£º±àдһ¸ö½á¹¹ÌåTimer´ú±íÒ»¸ö¼ÆÊ±Æ÷£¬È»ºóÔÙ¶¨ÒåTimerÀàÐ͵ÄÊý×émyTimer[N]£¬ÓÃÀ´±£´æÎÒÃÇÉèÖõĶ¨Ê±Æ÷£»ÔÙ¶¨Ò庯ÊýsetTimer£¨£©Éú³É¼ÆÊ±Æ÷£¬²¢½«Éú³ÉµÄ¼ÆÊ±Æ÷±£´æµ½myTimerÖУ¬ÕâÑùͨ¹ý¶à´Îµ÷Ó㬾ͿÉÒÔÔÚͬһ¸ö½ø³ÌÖÐÉú³É¶à¸ö¼ÆÊ±Æ÷£»¶¨Òåtimeout()ÐźŴ¦Àíº¯Êý£¬Ã¿¸ôÒ»Ãë²úÉúÒ»¸öÐźţ¬Í¨¹ýµ÷ÓÃtimeout()¶ÔËùÓеĶ¨Ê±Æ÷ɨÃèÒ»±é£¬¼ì²éÄÄЩ¼ÆÊ±Æ÷³¬Ê±¡£
¡¾³ÌÐò´úÂë¡¿£ºÈçÏÂ
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<time.h>
#include<sys/time.h>
#define N 100 //ÉèÖÃ×î´óµÄ¶¨Ê±Æ÷¸öÊý
int i=0,t=1; //i´ú±í¶¨Ê±Æ÷µÄ¸öÊý£»t±íʾʱ¼ä£¬ÖðÃëµÝÔö
struct Timer //Timer½á¹¹Ì壬ÓÃÀ´±£´æÒ»¸ö¶¨Ê±Æ÷µÄÐÅÏ¢
{
int total_time; //ÿ¸ôtotal_timeÃë
int left_time; //»¹Ê£left_timeÃë
int func; ......
¡¾ÊµÏÖ¹¦ÄÜ¡¿£ºLinuxϵÄC±à³Ì£º±àдһ¸ö³ÌÐò£¨¿â£©£¬ÊµÏÖ¶¨Ê±Æ÷£¨¼ÆÊ±Æ÷£©µÄ¹¦ÄÜ£¬ËüÄÜΪÓû§ÌṩÔÚͬһ½ø³ÌÖжà´ÎʹÓõĶ¨Ê±Æ÷¡£ÕâÀïÒªÇóÓÃÐźÅÀ´ÊµÏÖ¡£
¡¾½âÌâ˼·¡¿£º±àдһ¸ö½á¹¹ÌåTimer´ú±íÒ»¸ö¼ÆÊ±Æ÷£¬È»ºóÔÙ¶¨ÒåTimerÀàÐ͵ÄÊý×émyTimer[N]£¬ÓÃÀ´±£´æÎÒÃÇÉèÖõĶ¨Ê±Æ÷£»ÔÙ¶¨Ò庯ÊýsetTimer£¨£©Éú³É¼ÆÊ±Æ÷£¬²¢½«Éú³ÉµÄ¼ÆÊ±Æ÷±£´æµ½myTimerÖУ¬ÕâÑùͨ¹ý¶à´Îµ÷Ó㬾ͿÉÒÔÔÚͬһ¸ö½ø³ÌÖÐÉú³É¶à¸ö¼ÆÊ±Æ÷£»¶¨Òåtimeout()ÐźŴ¦Àíº¯Êý£¬Ã¿¸ôÒ»Ãë²úÉúÒ»¸öÐźţ¬Í¨¹ýµ÷ÓÃtimeout()¶ÔËùÓеĶ¨Ê±Æ÷ɨÃèÒ»±é£¬¼ì²éÄÄЩ¼ÆÊ±Æ÷³¬Ê±¡£
¡¾³ÌÐò´úÂë¡¿£ºÈçÏÂ
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<time.h>
#include<sys/time.h>
#define N 100 //ÉèÖÃ×î´óµÄ¶¨Ê±Æ÷¸öÊý
int i=0,t=1; //i´ú±í¶¨Ê±Æ÷µÄ¸öÊý£»t±íʾʱ¼ä£¬ÖðÃëµÝÔö
struct Timer //Timer½á¹¹Ì壬ÓÃÀ´±£´æÒ»¸ö¶¨Ê±Æ÷µÄÐÅÏ¢
{
int total_time; //ÿ¸ôtotal_timeÃë
int left_time; //»¹Ê£left_timeÃë
int func; ......