Ò׽ؽØÍ¼Èí¼þ¡¢µ¥Îļþ¡¢Ãâ°²×°¡¢´¿ÂÌÉ«¡¢½ö160KB

linux 2.6Ô´´úÂëÇé¾°·ÖÎö±Ê¼ÇÖ®ÖжÏÓëÒì³£3

³õʼ»¯ÖжÏÃèÊö·û±í
ÄÚºËÆôÓÃÖжÏÒÔǰ£¬±ØÐë°Ñidt±íµÄ³õʼµØÖ·×°µ½idtr¼Ä´æÆ÷£¬²¢³õʼ»¯±íÖеÄÿһÏî¡£ÕâÏ×÷ÊÇÔÚ³õʼ»¯ÏµÍ³Ê±Íê³É¡£
intÖ¸ÁîÔÊÐíÓû§Ì¬½ø³Ì·¢³öÒ»¸öÖжÏÐźţ¬ÆäÖµ¿ÉÒÔÊÇ0-255µÄÈÎÒâÒ»¸öÏòÁ¿¡£Òò´Ë¡£ÎªÁË·ÀÖ¹Óû§Í¨¹ýintÖ¸ÁîÄ£Äâ·Ç·¨µÄÖжϺÍÒì³££¬idtµÄ³õʼ»¯±ØÐë·Ç³£Ð¡ÐÄ¡£Õâ¿ÉÒÔͨ¹ý°ÑÖжϻòÕßÏÝÚåÃÅÃèÊö·ûµÄdpl×Ö¶ÎÉèÖóÉ0À´ÊµÏÖ¡£Èç¹û½ø³ÌÊÔͼ·¢³öÆäÖеÄÒ»¸öÖжÏÐźţ¬¿ØÖƵ¥Ôª½«¼ì²é³öcplµÄÊýÖµÓëdplµÄ×Ö¶ÎÓгåÍ»£¬²¢ÇÒ²úÉúÒ»¸ögeneral protectionÒì³£¡£
intelÌṩÁËÈýÖÖÀàÐ͵ÄÖжÏÃèÊö·û£ºÈÎÎñÃÅ£¬ÖжÏÃÅ£¬ÒÔ¼°ÏÝÚåÃÅÃèÊö·û¡£linuxʹÓÃÓëinetl²»Í¬µÄϸĿ·ÖÀàºÍÊõÓ
ÖжÏÃÅ£¨interrupt gate£©ËùÓÐlinuxÖжϴ¦Àí³ÌÐò¶¼Í¨¹ýÖжÏÃż¤»î£¬È«²¿ÏÞÖÆÔÚÄÚºË̬¡£
ϵͳÃÅ£¨system gate£©Óû§Ì¬µÄ½ø³Ì¿ÉÒÔ·ÃÎÊÒ»¸öintelÏÝÚåÃÅdpl×Ö¶ÎΪ3.ͨ¹ýϵͳÃÅÀ´¼¤»îÈý¸ölinuxÒì³£´¦Àí³ÌÐò£¬ÏòÁ¿ÊÇ4,5,128.ÔÚÓû§Ì¬Ï£¬¿ÉÒÔ·¢²¼into,bound,int $0x80ÈýÌõ»ã±àÓïÑÔÖ¸Áî¡£
ϵͳÖжÏÃÅ£¨system interrtup gate£©Äܹ»±»Óû§Ì¬½ø³Ì·ÃÎʵÄintelÖжÏÃÅ£¨ÃŵÄdpl×Ö¶ÎΪ3£©¡£ÓëÏòÁ¿3Ïà¹ØµÄÒì³£´¦Àí³ÌÐòÊÇÓÉϵͳÃÅÖжÏÃż¤»îµÄ£¬ÔÚÓû§Ì¬Ï£¬¿ÉÒÔʹÓûã±àÓïÑÔÖ¸Áîint3.
ÏÝÚåÃÅ£¨trap gate£©Óû§Ì¬µÄ½ø³Ì²»ÄÜ·ÃÎÊÒ»¸öintelÏÝÚåÃÅ£¨ÃŵÄdpl×Ö¶ÎΪ0£©¡£´ó²¿·ÖlinuxÒì³£´¦Àí³ÌÐò¶¼Í¨¹ýÏÝÚåÃÅÀ´¼¤»î¡£
ÈÎÎñÃÅ£¨task gate£©²»Äܱ»Óû§Ì¬½ø³Ì·ÃÎʵÄintelÈÎÎñÃÅ£¨ÃŵÄdpl×Ö¶ÎΪ0£©¡£linux¶Ô“double fault”Òì³£´¦Àí³ÌÐòÊÇÓÉÈÎÎñÃż¤»îµÄ¡£
ÏÂÁÐÌåϵ½á¹¹Ïà¹ØµÄº¯ÊýÓÃÀ´ÔÚidtÖвåÈëÃÅ¡£
ÔÚidtµÄµÚn¸ö±íÏîÖвåÈëÒ»¸öÖжÏÃÅ¡£ÃÅÖеĶÎÑ¡Ôñ·ûÉèÖóÉÄں˴úÂëµÄ¶ÎÑ¡Ôñ·û£¬Æ«ÒÆÁ¿ÉèÖÃΪÖжϴ¦Àí³ÌÐòµÄµØÖ·addr,dpl×Ö¶ÎÉèÖÃΪ0.
void set_intr_gate(unsigned int n, void *addr)
{
        _set_gate(idt_table+n,14,0,addr,__KERNEL_CS);
}
ÔÚidtµÄµÚn¸ö±íÏîÖвåÈëÒ»¸öÏÝÚåÃÅ¡£ÃÅÖеĶÎÑ¡Ôñ·ûÉèÖóÉΪÄں˴úÂëµÄ¶ÎÑ¡Ôñ·û£¬Æ«ÒÆÁ¿ÉèÖÃΪÒì³£´¦Àí³ÌÐòµÄµØÖ·addr,dpl×Ö¶ÎÉèÖÃΪ3.
static void __init set_system_gate(unsigned int n, void *addr)
{
        _set_gate(idt_table+n,15,3,addr,__KERNEL_CS);
}
ÔÚidtµÄµÚn¸ö±íÏî²åÈëÒ»¸öÖжÏÃÅ¡£ÃÅÖеĶÎÑ¡Ôñ·ûÉèÖóÉÄں˴úÂëµÄ¶ÎÑ¡Ôñ·û£¬Æ«ÒÆÁ¿ÉèÖÃΪÒì³£´¦Àí³ÌÐòµÄµØÖ·addr,dpl×Ö¶ÎÉèÖÃΪ3.
static inline void set_s


Ïà¹ØÎĵµ£º

Éî¶È½éÉÜLinuxÄÚºËÊÇÈçºÎ¹¤×÷µÄ


Å£½ò×ÖµäÖжÔ"kernel"Ò»´ÊµÄ¶¨ÒåÊÇ£º"½ÏÈíµÄ¡¢Í¨³£ÊÇÒ»¸ö¼á¹û¿ÉʳÓõIJ¿·Ö¡£"µ±È»»¹ÓеڶþÖÖ¶¨Ò壺"ij¸ö¶«Î÷ºËÐÄ»òÕß×îÖØÒªµÄ²¿·Ö¡£"¶ÔLinuxÀ´Ëµ£¬ËüµÄKernelÎÞÒÉÊôÓÚµÚ¶þÖÖ½âÊÍ¡£ÈÃÎÒÃÇÀ´¿´¿´Õâ¸öÖØÒªµÄ¶«Î÷ÊÇÈçºÎ¹¤×÷µÄ£¬ÏÈ´ÓÒ»µãÀíÂÛ˵Æð¡£
¹ãÒ嵨À´Ëµkernel¾ÍÊÇÒ»¸öÈí¼þ£¬ËüÔÚÓ²¼þºÍÔËÐÐÔÚ¼ÆËã»úÉϵÄÓ¦ÓóÌÐòÖ®¼äÌá¹ ......

Ô¬ÀÏ̸linuxµÄ10Äê·¢Õ¹

 ±¾ÊÀ¼ÍµÚÒ»¸öÊ®Ä꣬¼´½«¹ýÈ¥¡£»Ø¹ËÒÔÍù£¬²ÅÄÜ¿´ÇåÏÖÔÚ£¬ÎÒÓм¸¾ä»°ÒªËµ¡£
      ¼ÇµÃ£¬ÔÚÊ®Äê֮ǰ£¬ÈËÃÇÖ»ÄÜÍæÍæÃÀ¹úºìñµÄ Linux ×ÀÃæ£¨ÌرðÊÇ 6.2 °æ±¾£©£¬ÕûÌì sudo £¨¼´ Super User do £©£¬ÈÎÆ¾¼¤Çé·ºÀÄ¡£µ½ÁË 2001 Äê 1 Ô£¬ Linux 2.4 Õýʽ·¢²¼£¬Ê×´ÎÖ§³Ö USB ºÍÀ¶ÑÀ¼¼Êõ£¬ÒÔ¼° ext ......

linux c mkdir´´½¨µÝ¹éĿ¼

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define err(msg) perror(msg)
static void mkdirs(const char *dir)
{
        char tmp[1024];
        char *p;
 &nbs ......

linuxÏÂcÓïÑԹػú³ÌÐò

/* Offtimer.c.For auto halt. */
#include <time.h>
#include <stdlib.h>
#include <unistd.h>
#define DELAY 60/* Time of sleeping */
int main()
{
  time_t now;
  struct tm *p;
  
  while(1)
  {
  now = time(NULL);
&n ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØÍ¼ | ¸ÓICP±¸09004571ºÅ