linux tcʵÏÖipÁ÷Á¿ÏÞÖÆ
tcÊǸöÅäÖÃLinuxÄÚºËÁ÷Á¿¿ØÖƵŤ¾ß Ãû×Ö tc - ÏÔʾ£¯Î¬»¤Á÷Á¿¿ØÖÆÅäÖà ժҪ tc qdisc [ add | change | replace | link ] dev DEV [ parent qdisc-id | root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ] tc class [ add | change | replace ] dev DEV parent qdisc-id [ classid class-id ] qdisc [ qdisc specific parameters ] tc filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ] protocol protocol prio priority filtertype [ filtertype specific parameters ] flowid flow-id tc [-s | -d ] qdisc show [ dev DEV ] tc [-s | -d ] class show dev DEV tc filter show dev DEV ¼ò½é TcÓÃÓÚLinuxÄں˵ÄÁ÷Á¿¿ØÖÆ¡£Á÷Á¿¿ØÖưüÀ¨ÒÔϼ¸ÖÖ·½Ê½£º SHAPING(ÏÞÖÆ) µ±Á÷Á¿±»ÏÞÖÆ£¬ËûµÄ´«ÊäËÙÂʾͱ»¿ØÖÆÔÚij¸öÖµÒÔÏ¡£ÏÞÖÆÖµÄܹ»´ó´óСÓÚÓÐЧ´ø¿í£¬ÕâÑùÄܹ»Æ½»¬Í»·¢Êý¾ÝÁ÷Á¿£¬Ê¹ÍøÂç¸üΪÎȶ¨¡£shaping£¨ÏÞÖÆ£©Ö»ÊÊÓÃÓÚÏòÍâµÄÁ÷Á¿¡£ SCHEDULING(µ÷¶È) bitsCN.Com ͨ¹ýµ÷¶ÈÊý¾Ý°üµÄ´«Ê䣬Äܹ»ÔÚ´ø¿í·¶Î§ÄÚ£¬°´ÕÕÓÅÏȼ¶·ÖÅä´ø¿í¡£SCHEDULING(µ÷¶È)Ò²Ö»ÊÊÓÚÏòÍâµÄÁ÷Á¿¡£ POLICING(²ßÂÔ) SHAPINGÓÃÓÚ´¦ÀíÏòÍâµÄÁ÷Á¿£¬¶øPOLICIING(²ßÂÔ)ÓÃÓÚ´¦Àí½ÓÊÕµ½µÄÊý¾Ý¡£ DROPPING(¶ªÆú) ¼ÙÈçÁ÷Á¿³¬¹ýij¸öÉ趨µÄ´ø¿í£¬¾Í¶ªÆúÊý¾Ý°ü£¬²»¹ÜÊÇÏòÄÚ»¹ÊÇÏòÍâ¡£ Á÷Á¿µÄ´¦ÀíÓÉÈýÖÖ¶ÔÏó¿ØÖÆ£¬ËûÃÇÊÇ£ºqdisc(ÅŶӹæÔò)¡¢class(Àà±ð)ºÍfilter(¹ýÂËÆ÷)¡£ QDISC(ÅŶӹæÔò) QDisc(ÅŶӹæÔò)ÊÇqueueing disciplineµÄ¼òд£¬ËûÊÇÀí½âÁ÷Á¿¿ØÖÆ(traffic control)µÄ»ù´¡¡£ÎÞÂÛºÎʱ£¬Äں˼ÙÈçÐèҪͨ¹ýij¸öÍøÂç½Ó¿Ú·¢ËÍÊý¾Ý°ü£¬Ëû¶¼ÐèÒª°´ÕÕΪÕâ¸ö½Ó¿ÚÅäÖõÄqdisc(ÅŶӹæÔò)°ÑÊý¾Ý°ü¼ÓÈë¶ÓÁС£È»ºó£¬Äں˻ᾡ¿ÉÄÜ¶àµØ´ÓqdiscÀïÃæÈ¡³öÊý¾Ý°ü£¬°ÑËûÃǽ»¸øÍøÂçÊÊÅäÆ÷Çý¶¯Ä£¿é¡£ ×î¼òµ¥µÄQDiscÊÇpfifoËû²»¶Ô½øÈëµÄÊý¾Ý°ü×öÈκεĴ¦Àí£¬Êý¾Ý°ü²ÉÓÃÏÈÈëÏȳöµÄ·½Ê½Í¨¹ý¶ÓÁС£µ«ÊÇ£¬Ëû»á±£´æÍøÂç½Ó¿ÚһʱÎÞ·¨´¦ÀíµÄÊý¾Ý°ü¡£ CLASS(Àà) ijЩQDisc(ÅŶӹæÔò)Äܹ»°üº¬Ò»Ð©Àà±ð£¬²»Í¬µÄÀà±ðÖÐÄܹ»°üº¬¸üÉîÈëµÄQDisc(ÅŶӹæÔò)£¬Í¨¹ýÕâЩϸ·ÖµÄQDisc»¹Äܹ»Îª½øÈëµÄ¶ÓÁеÄÊý¾Ý°üÅŶӡ£Í¨¹ýÅäÖø÷ÖÖÀà±ðÊý¾Ý°üµÄÀë¶Ó´ÎÐò£¬QDiscÄܹ»ÎªÅäÖÃÍøÂçÊý¾ÝÁ÷Á¿µÄÓÅÏȼ¶¡£ ÖйúÍø¹ÜÂÛ̳ FILTER(¹ýÂËÆ÷) filter(¹ýÂËÆ÷)ÓÃÓÚΪÊý¾Ý°ü·ÖÀ࣬¾ö¶¨ËûÃǰ´ÕÕºÎÖÖQDisc½øÈë¶ÓÁС£ÎÞÂÛºÎʱÊý¾Ý°ü½øÈëÒ»¸ö»®·Ö×ÓÀàµÄÀà±ðÖУ¬¶¼ÐèÒª½ø
Ïà¹ØÎĵµ£º
¶ÔÓÚÕâ¸öº¯Êý£¬ÆäʵÊǺܶàºê¶¨Òåµ÷Óõĺ¯Êý£¬ÆäÖÐalloc_bootmem_low_pages(x)ÊÇÆäÖÐÒ»¸öµ÷ÓÃËüµÄºê£¬´ó¼Ò¿ÉÒÔÈÏΪÕâЩºêÖ»ÊǰÑÕâ¸ö__alloc_bootmemʵÖÊÐԵĺ¯Êý½øÐÐÁË·â×°¡£#define alloc_bootmem_low_pages(x)Ï൱ÓÚ__alloc_bootmem((x), PAGE_SIZE, 0)£¬¾ÍÊÇ´Ó0µØÖ·¿ªÊ¼µÄµÍ¶ËÄÚ´æ·ÖÅä°´Ò³´óС¶ÔÆëµÄÄÚ´æ¡£ºÃÁË£¬Îª ......
¡ð
¡¢ËµÃ÷
±Ê¼ÇÊÊÓÃÓÚ
Linux
µÄ
2.6.10
ÒÔºóµÄÄںˡ£
±Ê¼ÇÒÔ
Linux
Device
Driver3
ÌṩµÄ
scull
³ÌÐò
(scull
Ŀ¼ÖеÄ
main.c
ºÍ
scull.h)
Ϊ¼Ç¼Ö÷Ïߣ¬²¢ÒÔ¸ÃÇý¶¯³ÌÐòÖеĸ÷ÖÖϵͳµ÷Óúͺ¯Êýµ÷ÓÃÁ÷³ÌΪ¼Ç
¼˳Ðò¡£±ÈÈ磬
module_init( )
ºÍ
module_exit(
)
ΪÏà¶ÔÓ¦µÄÒ»¶Ôϵͳµ÷Óã¬Ò»°ãÊé¼®Öж ......
1. ѧ»áд¼òµ¥µÄmakefile
2. ±àÒ»Ó¦ÓóÌÐò£¬¿ÉÒÔÓÃmakefileÅÜÆðÀ´
3. ѧ»áдÇý¶¯µÄmakefile
4. дһ¼òµ¥charÇý¶¯£¬makefile±àÒëͨ¹ý£¬¿ÉÒÔinsmod£¬ lsmod£¬ rmmod. ÔÚÇý¶¯µÄinitº¯ÊýÀï´òÓ¡hello world£¬ insmodºóÓ¦¸ÃÄܹ»Í¨¹ýdmesg¿´µ½Êä³ö¡£
&n ......
main.c
//³õʼ»¯¶ÓÁÐ
void InitQueue(LiQueue *q)
{
q=(LiQueue*)malloc(sizeof(LiQueue));
q->front=q->rear=NULL;
}
//ÅжÏÊÇ·ñΪ¿Õ
int QueueEmpty(LiQueue *q)
{
if(q->rear==NULL)
{
return 1;
}
else
{
......
linux϶¨Ê±Ö´Ðмƻ®ÈÎÎñ
²é¿´/etc/crontabÎļþ
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cr ......