LinuxʹÓõĻº´æ
6.7.1 LinuxʹÓõĻº´æ
²»¹ÜÔÚÓ²¼þÉè¼Æ»¹ÊÇÈí¼þÉè¼ÆÖУ¬¸ßËÙ»º´æÊÇ»ñµÃ¸ßÐÔÄܵij£ÓÃÊֶΡ£Linux ʹÓÃÁ˶àÖÖºÍÄÚ´æ¹ÜÀíÏà¹ØµÄ¸ßËÙ»º´æ¡£
1£® »º³åÇø¸ßËÙ»º´æ£º
»º³åÇø¸ßËÙ»º´æÖаüº¬ÁËÓÉ¿éÉ豸ʹÓõÄÊý¾Ý»º³åÇø¡£ÕâЩ»º³åÇøÖаüº¬ÁË´ÓÉ豸ÖжÁÈ¡µÄÊý¾Ý¿é»òдÈëÉ豸µÄÊý¾Ý¿é¡£»º³åÇø¸ßËÙ»º´æÓÉÉ豸±êʶºÅºÍ¿é±êºÅË÷Òý£¬Òò´Ë¿ÉÒÔ¿ìËÙÕÒ³öÊý¾Ý¿é¡£Èç¹ûÊý¾ÝÄܹ»ÔÚ»º³åÇø¸ßËÙ»º´æÖÐÕÒµ½£¬Ôòϵͳ¾ÍûÓбØÒªÔÚÎïÀí¿éÉ豸ÉϽøÐÐʵ¼ÊµÄ¶Á²Ù×÷¡£
ÄÚºËΪÿ¸ö»º³åÇøÎ¬»¤ºÜ¶àÐÅÏ¢ÒÔÓÐÖúÓÚ»ººÍд²Ù×÷£¬ÕâЩÐÅÏ¢°üÀ¨Ò»¸ö“Ôࣨdirty£©”룬±íʾÄÚ´æÖеĻº³åÇøÒѱ»Ð޸쬱ØÐëдµ½´ÅÅÌ£»»¹°üÀ¨Ò»¸öʱ¼ä±êÖ¾£¬±íʾ»º³åÇø±»Ë¢Ðµ½´ÅÅÌ֮ǰÒѾÔÚÄÚ´æÖÐÍ£ÁôÁ˶೤ʱ¼ä¡£ÒòΪ»º³åÇøµÄÓйØÐÅÏ¢±»±£´æÔÚ»º³åÇøÊײ¿£¬ËùÒÔ£¬ÕâЩÊý¾Ý½á¹¹Á¬Í¬Óû§Êý¾Ý±¾ÉíµÄ»º³åÇø¶¼ÐèҪά»¤¡£
»º³åÇø¸ßËÙ»º´æµÄ´óС¿ÉÒԱ仯¡£µ±ÐèҪлº³åÇø¶øÏÖÔÚÓÖûÓпÉÓõĻº³åÇøÊ±£¬¾Í°´Ðè·ÖÅäÒ³Ãæ¡£µ±¿ÕÏÐÄÚ´æ±äµÃ²»×ãʱ£¬ÀýÈçÉÏÒ»½Ú¿´µ½µÄÇé¿ö£¬¾ÍÊÍ·Å»º³åÇø²¢·´¸´Ê¹ÓÃÏàÓ¦µÄÒ³Ãæ¡£
2£® Ò³Ãæ¸ßËÙ»º´æ
Ò³Ãæ¸ßËÙ»º´æÊÇÒ³ÃæI/O²Ù×÷·ÃÎÊÊý¾ÝËùʹÓõĴÅÅ̸ßËÙ»º´æ¡£ÎÒÃÇÔÚÎļþϵͳ»á¿´µ½£¬read( )¡¢write( )ºÍmmap( )ϵͳµ÷ÓöԳ£¹æÎļþµÄ·ÃÎʶ¼ÊÇͨ¹ýÒ³Ãæ¸ßËÙ»º´æÀ´Íê³ÉµÄ¡£ÒòÎªÒ³ÃæI/O²Ù×÷Òª´«ÊäÕûÒ³Êý¾Ý£¬Òò´Ë¸ßËÙ»º´æÖÐËù±£ÁôµÄÐÅÏ¢µ¥ÔªÊÇÒ»¸öÕûÒ³Ãæ¡£Ò»¸öÒ³Ãæ°üº¬µÄÊý¾Ýδ±ØÊÇÎïÀíÉÏÏàÁڵĴÅÅ̿飬Òò´Ë¾Í²»ÄÜʹÓÃÉ豸ºÅºÍ¿éºÅÀ´±êÊ¶Ò³Ãæ¡£Ïà·´£¬Ò³Ãæ¸ßËÙ»º´æÖÐÒ»¸öÒ³ÃæµÄ±êʶÊÇͨ¹ýÎļþµÄË÷Òý½ÚµãºÍÎļþÖÐµÄÆ«ÒÆÁ¿´ïµ½µÄ¡£
ÓëÒ³Ãæ¸ßËÙ»º´æÓйصIJÙ×÷Ö÷ÒªÓÐÈýÖÖ£ºµ±·ÃÎʵÄÎļþ²¿·Ö²»ÔÚ¸ßËÙ»º´æÖÐʱÔö¼ÓÒ»Ò³Ãæ£¬µ±¸ßËÙ»º´æ±äµÃÌ«´óʱɾ³ýÒ»Ò³Ãæ£¬ÒÔ¼°²éÕÒÒ»¸ö¸ø¶¨ÎļþÆ«ÒÆÁ¿ËùÔÚµÄÒ³Ãæ¡£
3£®½»»»¸ßËÙ»º´æ
Ö»ÓÐÐ޸ĺóµÄ£¨Ôà£©Ò³Ãæ²Å±£´æÔÚ½»»»ÎļþÖС£Ð޸ĺóµÄÒ³ÃæÐ´Èë½»»»Îļþºó£¬Èç¹û¸ÃÒ³ÃæÔٴα»½»»»µ«Î´±»ÐÞ¸Äʱ£¬¾ÍûÓбØÒªÐ´Èë½»»»Îļþ£¬Ïà·´£¬Ö»Ð趪Æú¸ÃÒ³Ãæ¡£½»»»¸ßËÙ»º´æÊµ¼Ê°üº¬ÁËÒ»¸öÒ³Ãæ±íÏîÁ´±í£¬ÏµÍ³µÄÿ¸öÎïÀíÒ³Ãæ¶ÔÓ¦Ò»¸öÒ³Ãæ±íÏî¡£¶Ô½»»»³öµÄÒ³Ãæ£¬¸ÃÒ³Ãæ±íÏî°üº¬±£´æ¸ÃÒ³ÃæµÄ½»»»ÎļþÐÅÏ¢£¬ÒÔ¼°¸ÃÒ³ÃæÔÚ½»»»ÎļþÖеÄλÖÃÐÅÏ¢¡£Èç¹ûij¸ö½»»»Ò³Ãæ±íÏî·ÇÁ㣬Ôò±íÃ÷±£´æÔÚ½»»»ÎļþÖеĶÔÓ¦ÎïÀíÒ³ÃæÃ»Óб»Ð޸ġ£Èç¹ûÕâÒ»Ò³ÃæÔÚºóÐøµÄ²Ù×÷Öб»Ð޸ģ¬Ôò´¦ÓÚ½»»»»º´æÖеÄÒ³Ãæ±íÏî±»ÇåÁã¡£ Linux ÐèÒª´ÓÎïÀíÄÚ´æÖн»»»³öij¸öÒ³ÃæÊ±£¬ËüÊ×ÏÈ·ÖÎö½»»»»º´æÖеÄÐÅÏ¢£¬Èç
Ïà¹ØÎĵµ£º
±¾ÎĽ«ÃèÊöÏ̵߳ÄÒ»¸ö±È½ÏÖØÒªµÄÒ»·½Ã棺Ïß³Ì˽ÓÐÊý¾Ý£¬ÈçÏ´úÂ룺
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
pthread_key_t kKey = 0;
void * ThreadProc(void* arg)
{
char* a = (char*)(arg);
sleep(2);
pthread_setspecific(kKey, a);
......
LinuxÌṩÁË´óÁ¿µÄÃüÁÀûÓÃËü¿ÉÒÔÓÐЧµØÍê³É´óÁ¿µÄ¹¤×÷£¬Èç´ÅÅ̲Ù×÷¡¢Îļþ´æÈ¡¡¢Ä¿Â¼²Ù×÷¡¢½ø³Ì¹ÜÀí¡¢ÎļþȨÏÞÉ趨µÈ¡£ËùÒÔ£¬ÔÚLinuxϵͳÉϹ¤×÷Àë²»¿ªÊ¹ÓÃϵͳÌṩµÄÃüÁî¡£ÒªÏëÕæÕýÀí½âLinuxϵͳ£¬¾Í±ØÐë´ÓLinuxÃüÁîѧÆð£¬Í¨¹ý»ù´¡µÄÃüÁîѧϰ¿ÉÒÔ½øÒ»²½Àí½âLinuxϵͳ¡£
²»Í¬Linux·¢ÐаæµÄÃüÁîÊýÁ¿²»Ò»Ñù£¬µ«Linux·¢ÐÐ°æ± ......
/*
socket selectÄ£ÐÍ£¬·þÎñ¶Ë
¾ø´ó¶àÊý×¢ÊÍ×Ô¼ºÐ´µÄ£¬²Î¿¼man
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/un.h>
#include &l ......
ʲôÊÇÔËÐм¶±ð
ÔËÐм¶¾ÍÊDzÙ×÷ϵͳµ±Ç°ÕýÔÚÔËÐеŦÄܼ¶±ð¡£
Õâ¸ö¼¶±ð´Ó1µ½6 £¬
¾ßÓв»Í¬µÄ¹¦ÄÜ¡£
ÕâЩ¼¶±ðÔÚ/etc/inittabÎļþÀïÖ¸¶¨¡£
Õâ¸öÎļþÊÇinit³ÌÐòѰÕÒµÄÖ÷ÒªÎļþ£¬×îÏÈÔËÐеķþÎñÊÇÄÇЩ·ÅÔÚ/etc/rc.d Ŀ¼ÏµÄÎļþ¡£
²»Í¬µÄÔËÐм¶¶¨ÒåÈçÏ£º(¿ÉÒԲο¼LinuxÀïÃæµÄ/etc/inittab) ¡¡¡¡
# ȱʡµÄÔËÐм¶£¬RHSÓ ......
´ÓLinux 2.6ÆðÒýÈëÁËÒ»Ì×еÄÇý¶¯¹ÜÀíºÍ×¢²á»úÖÆ:Platform_deviceºÍPlatform_driver¡£
LinuxÖд󲿷ֵÄÉ豸Çý¶¯£¬¶¼¿ÉÒÔʹÓÃÕâÌ×»úÖÆ, É豸ÓÃPlatform_device±íʾ£¬Çý¶¯ÓÃPlatform_driver½øÐÐ×¢²á¡£
Linux platform driver»úÖÆºÍ´«Í³µÄdevice driver »úÖÆ(ͨ¹ýdriver_registerº¯Êý½øÐÐ×¢²á)Ïà±È£¬Ò»¸öÊ®·ÖÃ÷ÏÔµÄÓ ......