googleÔõÑùʹÓÃlinux£¨Äںˣ©
googleÔõÑùʹÓÃlinux£¨Äںˣ©
½ñÄêµÄlinuxÄں˿ª·¢´ó»áÉÏ£¬googleµÄ¿ª·¢ÈËÔ±Ò²ÉĮ̈×öÁËÃûΪ“how google use linux"µÄÑݽ²¡£ÎÒ¶·µ¨·Òë×¢½âÒ»·¬——À¨ºÅÄÚΪע½â£¬»¶Ó¶ÁÕ߸«Õý¡£
£¨Ç°Ã漸¶Î½²google¶Ôlinux kernel´úÂëµÄ¹ÜÀí¼°¸ú½ø£¬Æ«Ï¸Ë飬²»·ÒëÁË£©
ÔÚgoogleΪlinux¼ÓÈëµÄ´úÂëÖУ¬3/4ÊǶÔÄں˺ËÐĵĸ͝£¬É豸Çý¶¯´úÂëÖ»ÊÇÆäÖÐÏà¶Ô½ÏСµÄÒ»²¿·Ö¡£
£¨linux·¢Õ¹µ½ÏÖÔÚÕâ¸ö½×¶Î£¬ÐèÒª¼ÓÈëµÄеÄÉ豸Çý¶¯ÒѾԽÀ´Ô½ÉÙÁË£©
Èç¹ûgoogleÒªÓëlinuxÉçÇøµÄºÏ×÷¿ª·¢£¬Äǽ«ÃæÁÙһϵÁÐÎÊÌâ¡£¸úÉÏlinux´úÂëµÄÖ÷¸ÉÌ«ÄÑ——ËüµÄ´úÂë¸üеÄÌ«¿ìÁË¡£ÔÚÒ»¸ö´óÐÍÏîÄ¿ À¿ª·¢Õß¶Ô²¹¶¡µÄÌá½»¡¢ÖظÄȷʵÊǸöÎÊÌâ¡£Alan Cox¶Ô´ËµÄ»Ø´ðÊ®·Ö¼òµ¥£ºÈË×ÜÊÇ̰µÃÎÞÑáµÄ£¬µ«ÓÐʱºò¾ÍÓ¦¸Ã¼òµ¥µÄ¶ÔËûÃÇ˵”²»“¡£
£¨Alan CoxÊÇlinux kernelµÄ¶þºÅ¹¦³¼£¬ÏÖÒѼÓÈëIntel¹«Ë¾¡£ÎÒ¾õµÃIntelÕâÑùµÄCPU¹«Ë¾ºÜÊʺÏÄں˿ª·¢Õߣ©
ÔÚCPUµ÷¶ÈÉÏ£¬google·¢ÏÖÏë¸ÄÓÃеÄcfs£¨“ÍêÈ«¹«Æ½µ÷¶È”£¬ÓÉCon KolivasyÔÚ2.6.23ÖмÓÈëÄںˣ©·Ç³£Âé·³¡£ÓÉÓÚÌ«Âé·³£¬google²»µÃ²»µ¹»ØÈ¥°ÑO(1) sheduler£¨2.6.23ǰÄÚºËʹÓõĵ÷¶ÈËã·¨£¬ÏëÖªµÀÕâ¶Î¾ßÌåµÄÀúÊ·£¬¿ÉÒԲο¼ÁíһƪcfsÎÄÕ£©ÒÆÖ²µ½2.6.26ÉÏ£¬Ò»ÇвÅÄÜÔËתÆðÀ´¡£Äں˶Ôsched_yield()ÓïÒåµÄ¸ü¸ÄÒ²Ôì³ÉÁËÂé ·³£¬ÓÈÆäµ±googleʹÓÃÓû§Ì¬ËøÊ±¡£¸ßÓÅÏȼ¶µÄÏ̻߳á¶Ô·þÎñÆ÷µÄ¸ºÔؾùºâ£¨ÕâÀïµÄ¸ºÔؾùºâÖ¸µÄÊÇһ̨·þÎñÆ÷É϶à¸öCPU¶Ô¶àÈÎÎñµÄ·ÖÅä´¦Àí£¬²»ÊÇÖ¸·Ö²¼Ê½£©Ôì³ÉÓ°Ï죬ÄÄÅÂÕâЩÏß³ÌÖ»ÊÇÔËÐк̵ܶÄʱ¼ä¡£¶ø¸ºÔؾùºâºÜÖØÒª£ºgoogleͨ³£ÔÚ16-32ºËµÄ·þÎñÆ÷ÉÏÅÜ5000¸öỊ̈߳¨ºÃ¹îÚܵÄÓ÷¨£¡£©¡£
ÔÚÄÚ´æ¹ÜÀíÉÏ£¬ÐµÄlinuxÄں˸ıäÁ˶ÔÔàÊý¾ÝµÄ¹ÜÀí£¬µ¼Ö³öÏÖÁË´óÁ¿Ö÷¶¯µÄд»Ø²Ù×÷£¨ÔàÊý¾ÝҪд»ØÓ²ÅÌ£©¡£ÏµÍ³ºÜÈÝÒ׳öÏÖÕâÖÖ¾Ö Ãæ£ºkswaped£¨swap½ø³Ì£©»á²úÉú´óÁ¿Ð¡µÄI/O²Ù×÷£¬ÈûÂú¿éÉ豸µÄÇëÇó¶ÓÁУ¬½á¹ûÔì³É±ðµÄд»ØÎÞ·¨Íê³É£¨Ð´»Ø“¼¢¶ö”£©£»Õâ¸öÎÊÌâÒѾͨ¹ý “per-DBIд»Ø»úÖÆ”²¹¶¡ÔÚ2.6.32ÄÚºËÖнâ¾öÁË¡£
£¨per-DBIµÄÖ÷ÒªÔÀíÊÇ¿éÉ豸²»ÔÙÖ»ÓÐÒ»¸öµÈ´ý¶ÓÁУ¬¶øÊǶà¸ö£¬Ã¿¸ö“Ó²ÅÌÖá”Ò»¸ö¶ÓÁУ¬ÒòΪӲÅÌÖáÊÇÒ»¸öÓ²¼þÉϵÄÕæÕýµÄ¹¤×÷µ¥Î»¡£ÕâÑù£¬¶Ô×°Åä¶à¸öÓ²Å̵ķþÎñÆ÷»áÓкܺõÄI/OÐÔÄÜ¡£²»¹ýÎÒ¸öÈ˲²⣬Èç¹ûÄܰÑkswapedµÄСÇëÇóºÏ²¢£¬ÊÇ·ñÒ²ÄÜÌá¸ßÐÔÄÜÄØ£¿£©
ÈçÉÏËùÊö£¬googleÔÚϵͳÖÐÆô¶¯ºÜ¶àÏ̗߳—²»Ñ°³£µÄÓ÷¨¡£ËûÃÇ·¢ÏÖÈç¹ûÏòÒ»¸ö´óµÄÏß³Ì
Ïà¹ØÎĵµ£º
10.5.2 ¾«Í¨¶¨Ê±Æ÷ÉèÖÃ
º¯ÊýalarmÉèÖõĶ¨Ê±Æ÷Ö»Äܾ«È·µ½Ã룬¶øÒÔϺ¯ÊýÀíÂÛÉÏ¿ÉÒÔ¾«È·µ½Î¢Ã
#include <sys/select.h>
#include <sys/itimer.h>
int getitimer(int which, struct itimerval *value);
int setitimer(int which, const struct itimerval
*value, struct itimerval *ovalue ......
2.6µÄKernel LOGO
ËÆºõ±È2.4ÈÝÒס£2.6µÄlogoÊý¾ÝÔÚ/drivers/video/logoÀppmÎļþ¾ÍÊÇlogoͼÏñÁË¡£Ã¿¸öppm¶ÔÓ¦Ò»¸ö. cÎļþ£¬ÄÚÈÝ´ó¸Å¾ÍÊÇͼÏñ³ß´ç¡¢µ÷É«°å¡¢Î»Í¼Êý¾ÝµÈÐÅÏ¢¡£.cÎļþÎÞÐè×Ô¼º½¨Á¢£¬ÔÚmakeµÄʱºòÈç¹û²»´æÔÚij¸öppmÎļþ¶ÔÓ¦µÄ.cÎļþ£¬¾Í»á×Ô¶¯´Ó ppmÉú³ÉÒ»¸ö£¬È»ºó°ÑËü±àÒë³É.oÎļþ¡£ËùÒÔ¿´¿´Ä¿Â¼ÏÂÄÄЩ.ppmÎ ......
# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
# Otherwise we were called directly from the command
# line; invoke the kernel build system.
else
......
°üº¬3¸öÎļþ¼Ð£¬ºÍÒ»¸öÎļþMakefile
Ŀ¼×éÖ¯½á¹¹ÈçÏ£º
Makefile
inc/hello.h
main/main.c
src/hello.c
MakefileÎļþÔÚÍâÃæ£¬ÕâÑùÉú³ÉµÄ.oºÍ¿ÉÖ´ÐÐÎļþ¶¼ÔÚÍâÃæ£¬cleanÖ®ºó»áºÜ¸É¾»£¬½á¹¹ÇåÎú
ÎļþÄÚÈÝÈçÏ£º
Makefile(Ö®ËùÒÔÓôóд£¬ÒòΪmake¿ÉÒÔʶ±ðMakefileºÍmakefile£¬Óôóд¿ÉÒÔÏÊÃ÷һЩ)::
# String declar ......