ת×Ô£º
http://www.ibm.com/developerworks/cn/linux/kernel/syscall/part1/appendix.html
±¾ÎÄÁгöÁ˴󲿷ֳ£¼ûµÄLinuxϵͳµ÷Ó㬲¢¸½ÓмòÒªÖÐÎÄ˵Ã÷¡£
ÒÔÏÂÊÇLinuxϵͳµ÷ÓõÄÒ»¸öÁÐ±í£¬°üº¬Á˴󲿷ֳ£ÓÃϵͳµ÷ÓúÍÓÉϵͳµ÷ÓÃÅÉÉú³öµÄµÄº¯Êý¡£Õâ¿ÉÄÜÊÇÄãÔÚ»¥ÁªÍøÉÏËùÄÜ¿´µ½µÄΨһһƪÖÐÎÄ×¢Ê͵ÄLinuxϵͳµ÷ÓÃÁÐ±í£¬¼´Ê¹ÊǼòµ¥µÄ×ÖĸÐòÓ¢ÎÄÁÐ±í£¬ÄÜ×öµ½ÕâôÍêÈ«Ò²ÊǺܺ±¼ûµÄ¡£
°´ÕÕ¹ßÀý£¬Õâ¸öÁбíÒÔman
pagesµÚ2½Ú£¬¼´ÏµÍ³µ÷ÓýÚΪÀ¶±¾¡£°´ÕÕ±ÊÕßµÄÀí½â£¬¶ÔÆä×÷ÁË´óÖµķÖÀ࣬ͬʱҲ×÷ÁËһЩССµÄÐ޸ģ¬É¾È¥Á˼¸¸ö½ö¹©ÄÚºËʹÓ㬲»ÔÊÐíÓû§µ÷ÓõÄϵͳµ÷Ó㬶Ըö±ð±¾ÈËÉÔ¾õ²»Í׵ĵط½×÷ÁËһЩСµÄÐ޸ģ¬²¢¶ÔËùÓÐÁгöµÄϵͳµ÷Óø½ÉϼòҪעÊÍ¡£
ÆäÖÐÓÐһЩº¯ÊýµÄ×÷ÓÃÍêÈ«Ïàͬ£¬Ö»ÊDzÎÊý²»Í¬¡££¨¿ÉÄܺܶàÊìϤC++ÅóÓÑÂíÉϾÍÄÜÁªÏëÆðº¯ÊýÖØÔØ£¬µ«ÊDZðÍüÁËLinuxºËÐÄÊÇÓÃCÓïÑÔдµÄ£¬ËùÒÔÖ»ÄÜÈ¡³É
²»Í¬µÄº¯ÊýÃû£©¡£»¹ÓÐһЩº¯ÊýÒѾ¹ýʱ£¬±»ÐµĸüºÃµÄº¯ÊýËù´úÌæÁË£¨gccÔÚÁ´½ÓÕâЩº¯Êýʱ»á·¢³ö¾¯¸æ£©£¬µ«ÒòΪ¼æÈݵÄÔÒò»¹±£Áô×Å£¬ÕâЩº¯ÊýÎÒ»áÔÚÇ°Ãæ
±êÉÏ“*”ºÅÒÔʾÇø±ð¡£
Ò»¡¢½ø³Ì¿ØÖÆ£º
fork
´´½¨Ò»¸öнø³Ì
clone
°´Ö¸¶¨Ìõ¼þ´´½¨×Ó½ø³Ì
execve
ÔËÐпÉÖ´Ð ......
LinuxÆô¶¯Ê±£¬µÚÒ»¸ö±ØÐë¹ÒÔصÄÊǸùÎļþϵͳ£»Èôϵͳ²»ÄÜ´ÓÖ¸¶¨É豸ÉϹÒÔظùÎļþϵͳ£¬Ôòϵͳ»á³ö´í¶øÍ˳öÆô¶¯¡£Ö®ºó¿ÉÒÔ×Ô¶¯»òÊÖ¶¯¹ÒÔØÆäËûµÄÎļþϵͳ¡£Òò´Ë£¬Ò»¸öϵͳÖпÉÒÔͬʱ´æÔÚ²»Í¬µÄÎļþϵͳ¡£²»Í¬µÄÎļþϵͳÀàÐÍÓв»Í¬µÄÌص㣬Òò¶ø¸ù¾Ý´æ´¢É豸µÄÓ²¼þÌØÐÔ¡¢ÏµÍ³ÐèÇóµÈÓв»Í¬µÄÓ¦Óó¡ºÏ¡£ÔÚǶÈëʽLinuxÓ¦ÓÃÖУ¬Ö÷ÒªµÄ´æ´¢É豸ΪRAM(DRAM, SDRAM)ºÍROM(³£²ÉÓÃFLASH´æ´¢Æ÷)£¬³£ÓõĻùÓÚ´æ´¢É豸µÄÎļþϵͳÀàÐÍ°üÀ¨£ºjffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfsµÈ¡£
1£¬»ùÓÚFLASHµÄÎļþϵͳ£ºÒ»°ãÇé¿öÏ£¬ÏòFlashдÈëÄÚÈÝʱ£¬ÐèÒªÏȲÁ³ý¶ÔÓ¦µÄ´æ´¢Çø¼ä£¨²Á³ý¸úдÈëÊÇ·Ö¿ªµÄ£©£¬ÕâÖÖ²Á³ýÊÇÒÔ¿é(block)Ϊµ¥Î»½øÐеġ£Òò´Ë£¬±ØÐëÕë¶ÔFlashµÄÓ²¼þÌØÐÔÉè¼Æ·ûºÏÓ¦ÓÃÒªÇóµÄÎļþϵͳ£»´«Í³µÄÎļþϵͳÈçext2µÈ£¬ÓÃ×÷FlashµÄÎļþϵͳ»áÓÐÖî¶à±×¶Ë¡£ÔÚǶÈëʽLinuxÏ£¬MTD(Memory Technology Device,´æ´¢¼¼ÊõÉ豸)Ϊµ×²ãÓ²¼þ(ÉÁ´æ)ºÍÉϲã(Îļþϵͳ)Ö®¼äÌṩһ¸öͳһµÄ³éÏó½Ó¿Ú£¬¼´FlashµÄÎļþϵͳ¶¼ÊÇ»ùÓÚMTDÇý¶¯²ãµÄ£¬Ê¹ÓÃMTDÇý¶¯³ÌÐòµÄÖ÷ÒªÓŵãÔÚÓÚËü¶ÔFlashÓиüºÃµÄÖ§³Ö¡¢¹ÜÀíºÍ»ùÓÚÉÈÇøµÄ²Á³ý¡¢¶Á/д²Ù×÷½Ó¿Ú¡ ......
Linuxϸ߲¢·¢µÄSquid·þÎñÆ÷£¬TCP TIME_WAITÌ×½Ó×ÖÊýÁ¿¾³£´ïµ½Á½¡¢ÈýÍò£¬·þÎñÆ÷ºÜÈÝÒ×±»ÍÏËÀ¡£Í¨¹ýÐÞ¸ÄLinuxÄں˲ÎÊý£¬¿ÉÒÔ¼õÉÙSquid·þÎñÆ÷µÄTIME_WAITÌ×½Ó×ÖÊýÁ¿¡£
¡¡¡¡
vi /etc/sysctl.conf
¡¡¡¡Ôö¼ÓÒÔϼ¸ÐУº
ÒýÓÃ
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
¡¡¡¡ËµÃ÷£º
¡¡¡¡net.ipv4.tcp_syncookies = 1 ±íʾ¿ªÆôSYN Cookies¡£µ±³öÏÖSYNµÈ´ý¶ÓÁÐÒç³öʱ£¬ÆôÓÃcookiesÀ´´¦Àí£¬¿É·À·¶ÉÙÁ¿SYN¹¥»÷£¬Ä¬ÈÏΪ0£¬±íʾ¹Ø±Õ£»
¡¡¡¡net.ipv4.tcp_tw_reuse = 1 ±íʾ¿ªÆôÖØÓá£ÔÊÐí½«TIME-WAIT socketsÖØÐÂÓÃÓÚеÄTCPÁ¬½Ó£¬Ä¬ÈÏΪ0£¬±íʾ¹Ø±Õ£»
¡¡¡¡net.ipv4.tcp_tw_recycle = 1 ±íʾ¿ªÆôTCPÁ¬½ÓÖÐTIME-WAIT socketsµÄ¿ìËÙ»ØÊÕ£¬Ä¬ÈÏΪ0£¬±íʾ¹Ø±Õ¡£
¡¡¡¡net.ipv4.tcp_fin_timeout = 30 ±íʾÈç¹ûÌ×½Ó×ÖÓɱ¾¶ËÒªÇó¹Ø±Õ£¬Õâ¸ö²ÎÊý¾ö¶¨ÁËËü±£³ÖÔÚFIN-WAIT-2״̬µÄʱ¼ä¡£
¡¡¡¡net.ipv4.tcp_keepalive_time = 1200 ±í ......
O.S ʹÓÃGnu gprof½øÐÐLinuxƽ̨ϵijÌÐò·ÖÎö
¹Ø ¼ü ´Ê£ºgprof callgraph º¯ÊýÏûºÄµÄʱ¼ä LinuxÓ¦Ó÷ÖÎö
ÔĶÁÌáʾ£º±¾ÎĽéÉÜÁËÈçºÎʹÓÃGnu gprof ¶ÔLinuxƽ̨ϵÄÏÖÓгÌÐò½øÐÐÓÅ»¯·ÖÎöºÍÉú³É³ÌÐòµ÷ÓÃͼ¡£Ö÷ҪƫÖØÓÚ¶ÔÉú³ÉºÍʹÓÃÁ÷³Ìͼ×÷½éÉÜ¡£
Gprof ¼ò½é:
Gprof¹¦ÄÜ£º´òÓ¡³ö³ÌÐòÔËÐÐÖи÷¸öº¯ÊýÏûºÄµÄʱ¼ä£¬¿ÉÒÔ°ïÖú³ÌÐòÔ±ÕÒ³öÖڶຯÊýÖкÄʱ×î¶àµÄº¯Êý¡£²úÉú³ÌÐòÔËÐÐʱºòµÄº¯Êýµ÷ÓùØϵ£¬°üÀ¨µ÷ÓôÎÊý£¬¿ÉÒÔ°ïÖú³ÌÐòÔ±·ÖÎö³ÌÐòµÄÔËÐÐÁ÷³Ì¡£
ÓÐÁ˺¯ÊýµÄµ÷ÓùØϵ£¬Õâ»áÈÿª·¢ÈËÔ±´ó´óÌá¸ß¹¤×÷ЧÂÊ£¬²»Ó÷ÑÐĵØÈ¥Ò»µãµãÕÒ³ö³ÌÐòµÄÔËÐÐÁ÷³Ì£¬Õâ¶ÔС³ÌÐòÀ´Ëµ¿ÉÄÜЧ¹û²»ÊǺÜÃ÷ÏÔ£¬µ«¶ÔÓÚÓм¸Íò£¬¼¸Ê®Íò´ú ÂëÁ¿µÄ¹¤³ÌÀ´Ëµ£¬Ð§ÂÊÊÇÎãÓ¹ÖÃÒɵģ¡¶øÇÒÕâ¸ö¹¦ÄܶÔÓÚά»¤¾É´úÂë»òÕßÊÇ·ÖÎöOpen SourceÀ´ËµÄÇÊÇÏ൱ÓÕÈ˵ģ¬ÓÐÁ˵÷ÓÃͼ£¬¶Ô³ÌÐòµÄÔËÐпò¼ÜÒ²¾ÍÓÐÁËÒ»¸ö´óÌåÁ˽⣬֪µÀÁ˳ÌÐòµÄ“¹Ç¼Ü“£¬·ÖÎöËüÒ²¾Í²»»áÔÙÄÇôãȻ£¬ÓÈÆäÊǶÔ×Ô¼º²» ÊìϤµÄ´úÂëºÍOpen Source¡£·Ñ»°²»¶à˵ÁË£¬ÈÃÎÒÃÇ¿ªÊ¼ÎÒÃǵķÖÎöÖ®Âðɣ¡
Gprof ʵÏÖÔÀí£º
ͨ¹ýÔÚ±àÒëºÍ Á´½ÓÄãµÄ³ÌÐòµÄʱºò£¨Ê¹Óà -pg ±àÒëºÍÁ´½ÓÑ¡Ï£¬gcc ÔÚÄãÓ¦ ......
NFSÍøÂçÎļþϵͳÊÇͨ¹ýÎļþϵͳʵÏÖ×ÊÔ´¹²ÏíµÄÒ»ÖÖ×îÖØÒªµÄ·½Ê½¡£
c/s ¿Í»§»ú ·þÎñÆ÷
B/S ä¯ÀÀÆ÷ ·þÎñÆ÷
NFS·þÎñ¶ËÅäÖãº
±à¼/etc/exportsÎļþÒÔÅäÖÿª·Å·¾¶¡£/home/share 192.168.0.123£¨ro£©/(rw).
/etc/init.d/portmap restart
/etc/init.d/nfs restart
·þÎñ¶ËʹÓÃnfs£¬ÐèÒª¼ì²é£º
1.portmap·þÎñÊÇ·ñÒÑ´ò¿ª¡£
2.·À»ðǽÊÇ·ñÒѹرա£
3.¿ª·ÅµÄ¹²ÏíĿ¼£¬±¾ÉíÊÇ·ñÔÊÐíÆäËûÓû§Ê¹Óã¨chmod o+rwx Ŀ¼£©
¶Ô·½Ëù×÷£º
//showmount -e 192.168.0.23
smbclient -L //192.168.4.69
mount -t nfs -o rw 192.168.4.69£º/home/share /mnt/share
жÔØĿ¼·½·¨£º
umount /mnt/share ......
ÔÚlinuxÄÚºËÖÐÓÃÓÚÉêÇëÖжϵĺ¯ÊýÊÇrequest_irq£¨£©£¬º¯ÊýÔÐÍÔÚKernel/irq/manage.cÖж¨Ò壺
int request_irq(unsigned int irq, irq_handler_t handler,
unsigned long irqflags, const char *devname, void *dev_id)
irq
ÊÇÒªÉêÇëµÄÓ²¼þÖжϺš£
handler
ÊÇÏòϵͳע²áµÄÖжϴ¦Àíº¯Êý£¬ÊÇÒ»¸ö»Øµ÷º¯Êý£¬ÖжϷ¢Éúʱ£¬ÏµÍ³µ÷ÓÃÕâ¸öº¯Êý£¬dev_id²ÎÊý½«±»´«µÝ¸øËü¡£
irqflags
ÊÇÖжϴ¦ÀíµÄÊôÐÔ£¬ÈôÉèÖÃÁËIRQF_DISABLED
£¨ÀÏ°æ±¾ÖеÄSA_INTERRUPT£¬±¾°æzhonÒѾ²»Ö§³ÖÁË£©£¬Ôò±íʾÖжϴ¦Àí³ÌÐòÊÇ¿ìËÙ´¦Àí³ÌÐò£¬¿ìËÙ´¦Àí³ÌÐò±»µ÷ÓÃʱÆÁ±ÎËùÓÐÖжϣ¬ÂýËÙ´¦Àí³Ì
Ðò²»ÆÁ±Î£»ÈôÉèÖÃÁËIRQF_SHARED
£¨ÀÏ°æ±¾ÖеÄSA_SHIRQ£©£¬Ôò±íʾ¶à¸öÉ豸¹²ÏíÖжϣ¬ÈôÉèÖÃÁËIRQF_SAMPLE_RANDOM£¨ÀÏ°æ±¾ÖеÄ
SA_SAMPLE_RANDOM£©£¬±íʾ¶ÔϵͳìØÓй±Ï×£¬¶Ôϵͳ»ñÈ¡Ëæ»úÊýÓкô¦¡££¨Õ⼸¸öflagÊÇ¿ÉÒÔͨ¹ý»òµÄ·½Ê½Í¬Ê±Ê¹Óõģ©
dev_id
ÔÚÖжϹ²Ïíʱ»áÓõ½£¬Ò»°ãÉèÖÃΪÕâ¸öÉ豸µÄÉ豸½á¹¹Ìå»òÕßNULL¡£
......