Chinaunix

标题: 在kernel module中我可以调用 time 函数吗? [打印本页]

作者: triphop    时间: 2003-06-17 18:15
标题: 在kernel module中我可以调用 time 函数吗?
我在做个console screen saver,但我想调用 time函数以得到当前时间,请问我可以调用吗?
作者: csujun    时间: 2003-06-17 23:20
标题: 在kernel module中我可以调用 time 函数吗?
man 9 time
作者: darkcc    时间: 2003-06-18 01:28
标题: 在kernel module中我可以调用 time 函数吗?
[quote]原帖由 "triphop"]我在做个console screen saver,但我想调用 time函数以得到当前时间,请问我可以调用吗?[/quote 发表:
     

假如你要显示自已时间的话,时间不能直接,time得出是一个logn,你要转换成现在时间,
#include <time.h>;
作者: triphop    时间: 2003-06-19 12:21
标题: 在kernel module中我可以调用 time 函数吗?
我想说的是如果我在编写 --内核模块--时,在代码中是否可以直接调用
#include <time.h>;
#include <sys/time.h>;

...other codes go here...
time_t  att;
struct tm  *atm;


att = time(NULL);
atm = localtime(&att);
some codes using atm->;tm_hours atm->;tm_min atm->;tm_sec  go here
my_put_string(y, x, ctime(&att));

...other codes go here...

我之所以问这个问题,是因为对内核编程不了解,只知道在内核编程中可用的函数很少,按王波的书上所说,只有libc中的可用,但我不是我是否可用 上面的函数(time(), localtime(), ctime() ???),以及我怎样包含头文件(是只#include <time.h>; 还是只#include <sys/time.h>;;如果都要include,他们的顺序是怎样的?)

谢谢!
作者: qjlemon    时间: 2003-06-19 15:01
标题: 在kernel module中我可以调用 time 函数吗?
不行的!在内核模块里不能这样干!
因为是在内核里,想干什么的话比较直接了当 ,直接读那个当前时间的全局变量好了! man 9 time,楼上那位说得很对!
作者: triphop    时间: 2003-06-19 15:38
标题: 在kernel module中我可以调用 time 函数吗?
那个 time量的值是什么呢?

我是不是还要 sysctl -a来看呀!
作者: qjlemon    时间: 2003-06-19 15:42
标题: 在kernel module中我可以调用 time 函数吗?
man 9 time:   
     extern struct timeval boottime;
     extern volatile struct timeval mono_time;
     extern struct timeval runtime;
     extern struct timeval time;
有几种不同的系统时间,具体我也没试过,应该就是在上面这几个变量里,如果只是想得到一个简单的时间差,应该随便用哪个都行。
作者: triphop    时间: 2003-06-19 15:43
标题: 在kernel module中我可以调用 time 函数吗?
我想ctime, localtime, time这些函数都应该是libc中的呀,我为什么不能用呢?我没有用其他的连接库呀!
作者: qjlemon    时间: 2003-06-19 15:47
标题: 在kernel module中我可以调用 time 函数吗?
在内核里是没有libc给你用的,在这个地方和普通程序还是有很大区别的,很多东西只有靠自己,”内核“!为程序提供运行环境的程序!
其实还是有少量库函数可用的,看一下/sys/libkern。
作者: triphop    时间: 2003-06-19 15:47
标题: 在kernel module中我可以调用 time 函数吗?
在BSD4.4设计那本书中说系统是使用 clock rate来记时的,但要表示成local time则需要C library
作者: qjlemon    时间: 2003-06-19 15:58
标题: 在kernel module中我可以调用 time 函数吗?
看来你得编一个这函数了!嘿嘿。。。
作者: triphop    时间: 2003-06-19 15:59
标题: 在kernel module中我可以调用 time 函数吗?
我在王波《freebsd 使用大全》一书中看到“内核编程可用的函数是很少的,只能用libc中的函数”,他这句话有应该怎么讲呢?

我实在是不明白了。。。。
作者: triphop    时间: 2003-06-19 16:01
标题: 在kernel module中我可以调用 time 函数吗?
哈哈,说的很真确,为了使我的程序可用,我自己编写了个sin(double x), cos(double x)函数,不过我对它的精度要求不高,在万分之2左右就可以。
作者: qjlemon    时间: 2003-06-19 16:11
标题: 在kernel module中我可以调用 time 函数吗?
原帖由 "triphop" 发表:
我在王波《freebsd 使用大全》一书中看到“内核编程可用的函数是很少的,只能用libc中的函数”,他这句话有应该怎么讲呢?

我实在是不明白了。。。。
  我理解,libc里的函数如果不需要用到系统调用,就可以用,需要在你编译模块的时候把libc里的函数体提取出来链接进你的模块里,是把函数体copy进来而不是动态链接。
作者: triphop    时间: 2003-06-19 16:16
标题: 在kernel module中我可以调用 time 函数吗?
那就没有其它方法来实现我上面的操作了吗?因为要将 time (9)中的变量进行转换,来提取 hour, min, sec, yy/mm/dd,太困难了!!
作者: triphop    时间: 2003-06-19 16:21
标题: 在kernel module中我可以调用 time 函数吗?
还有我对libc的理解是:libc是所有程序都需要的,那操作系统的运行不也应该需要libc吗?

我的理解错在何处呢?
作者: triphop    时间: 2003-06-19 16:39
标题: 在kernel module中我可以调用 time 函数吗?
你的文章我看了,我知道有些函数是通过syscall来工作的,但sysent[]中就那么不足100的syscall number,我觉得整个系统的实现不可能只靠它们吧。向sprintf, strlen,random等等都可直接用的,这又是如何实现的?
作者: qjlemon    时间: 2003-06-19 16:43
标题: 在kernel module中我可以调用 time 函数吗?
象这些函数其实是很单纯的,只需要实现它们自己的算法就可以,不需要操作系统为它提供什么支持。确实系统调用是比较少的,因为它们是完成一些任务的最基本操作,对应用程序来说是最底层的支持,然后一些更复杂的工作就是通过库函数来实现的,这些库函数可以以特定的组合调用一个或者一些”系统调用“。
作者: qjlemon    时间: 2003-06-19 16:49
标题: 在kernel module中我可以调用 time 函数吗?
象这类问题还是到”UNIX高级技术”或C++版里讨论比较好,BSD版的人好象只关心网络
作者: triphop    时间: 2003-06-19 16:49
标题: 在kernel module中我可以调用 time 函数吗?
那看来我是无法实现那个module 了,因为我还不会将syscall 得来的那个数转化为 yy/mm/dd/hh/mm/ss了!

我没有思路
作者: qjlemon    时间: 2003-06-19 16:52
标题: 在kernel module中我可以调用 time 函数吗?
原帖由 "triphop" 发表:
那看来我是无法实现那个module 了,因为我还不会将syscall 得来的那个数转化为 yy/mm/dd/hh/mm/ss了!

我没有思路
    去看看那几个C库函数的实现代码吧!不过可以想象必定是非常复杂的。
作者: triphop    时间: 2003-06-19 16:55
标题: 在kernel module中我可以调用 time 函数吗?
你说libc也是动态link的?
作者: qjlemon    时间: 2003-06-19 17:00
标题: 在kernel module中我可以调用 time 函数吗?
是不是动态的取决于你编译的时候用什么选项,如果指定static,就可以静态链接。还有一种办法是把lib文件里的函数单独提取出来成为一个.o文件再把它链接到你自己的程序里。
作者: triphop    时间: 2003-06-19 17:01
标题: 在kernel module中我可以调用 time 函数吗?
呵呵
/* asctime(tvec))
* where tvec is produced by localtime
* returns a ptr to a character string
* that has the ascii time in the form
*        Thu Jan 01 00:00:00 1970n0\\
*        01234567890123456789012345
*        0          1            2
*
* ctime(t) just calls localtime, then asctime.
*/

#include <time.h>;
#include <sys/types.h>;
#include <sys/timeb.h>;

static        char        cbuf[26];
static        int        dmsize[12] =
{
        31,
        28,
        31,
        30,
        31,
        30,
        31,
        31,
        30,
        31,
        30,
        31
};

/*
* The following table is used for 1974 and 1975 and
* gives the day number of the first day after the Sunday of the
* change.
*/
static struct {
        int        daylb;
        int        dayle;
} daytab[] = {
        5,        333,        /* 1974: Jan 6 - last Sun. in Nov */
        58,        303,        /* 1975: Last Sun. in Feb - last Sun in Oct */
};

struct tm        *gmtime();
char                *ct_numb();
struct tm        *localtime();
char        *ctime();
char        *ct_num();
char        *asctime();

char *
ctime(t)
long *t;
{
        return(asctime(localtime(t)));
}

struct tm *
localtime(tim)
long *tim;
{
        register int dayno;
        register struct tm *ct;
        register daylbegin, daylend;
        long copyt;
        struct timeb systime;

        ftime(&systime);
        copyt = *tim - (long)systime.timezone*60;
        ct = gmtime(&copyt);
        dayno = ct->;tm_yday;
        daylbegin = 119;        /* last Sun in Apr */
        daylend = 303;                /* Last Sun in Oct */
        if (ct->;tm_year==74 || ct->;tm_year==75) {
                daylbegin = daytab[ct->;tm_year-74].daylb;
                daylend = daytab[ct->;tm_year-74].dayle;
        }
        daylbegin = sunday(ct, daylbegin);
        daylend = sunday(ct, daylend);
        if (systime.dstflag &&
            (dayno>;daylbegin || (dayno==daylbegin && ct->;tm_hour>;=2)) &&
            (dayno<daylend || (dayno==daylend && ct->;tm_hour<1))) {
                copyt += 1*60*60;
                ct = gmtime(&copyt);
                ct->;tm_isdst++;
        }
        return(ct);
}

/*
* The argument is a 0-origin day number.
* The value is the day number of the first
* Sunday on or after the day.
*/
static
sunday(t, d)
register struct tm *t;
register int d;
{
        if (d >;= 5
                d += dysize(t->;tm_year) - 365;
        return(d - (d - t->;tm_yday + t->;tm_wday + 700) % 7);
}

struct tm *
gmtime(tim)
long *tim;
{
        register int d0, d1;
        long hms, day;
        register int *tp;
        static struct tm xtime;

        /*
         * break initial number into days
         */
        hms = *tim % 86400;
        day = *tim / 86400;
        if (hms<0) {
                hms += 86400;
                day -= 1;
        }
        tp = (int *)&amp;

        /*
         * generate hours:minutes:seconds
         */
        *tp++ = hms%60;
        d1 = hms/60;
        *tp++ = d1%60;
        d1 /= 60;
        *tp++ = d1;

        /*
         * day is the day number.
         * generate day of the week.
         * The addend is 4 mod 7 (1/1/1970 was Thursday)
         */

        xtime.tm_wday = (day+7340036)%7;

        /*
         * year number
         */
        if (day>;=0) for(d1=70; day >;= dysize(d1); d1++)
                day -= dysize(d1);
        else for (d1=70; day<0; d1--)
                day += dysize(d1-1);
        xtime.tm_year = d1;
        xtime.tm_yday = d0 = day;

        /*
         * generate month
         */

        if (dysize(d1)==366)
                dmsize[1] = 29;
        for(d1=0; d0 >;= dmsize[d1]; d1++)
                d0 -= dmsize[d1];
        dmsize[1] = 28;
        *tp++ = d0+1;
        *tp++ = d1;
        xtime.tm_isdst = 0;
        return(&xtime);
}

char *
asctime(t)
struct tm *t;
{
        register char *cp, *ncp;
        register int *tp;

        cp = cbuf;
        for (ncp = "Day Mon 00 00:00:00 1900\n"; *cp++ = *ncp++;
        ncp = &"SunMonTueWedThuFriSat"[3*t->;tm_wday];
        cp = cbuf;
        *cp++ = *ncp++;
        *cp++ = *ncp++;
        *cp++ = *ncp++;
        cp++;
        tp = &t->;tm_mon;
        ncp = &"JanFebMarAprMayJunJulAugSepOctNovDec"[(*tp)*3];
        *cp++ = *ncp++;
        *cp++ = *ncp++;
        *cp++ = *ncp++;
        cp = ct_numb(cp, *--tp);
        cp = ct_numb(cp, *--tp+100);
        cp = ct_numb(cp, *--tp+100);
        cp = ct_numb(cp, *--tp+100);
        if (t->;tm_year>;=100) {
                cp[1] = '2';
                cp[2] = '0';
        }
        cp += 2;
        cp = ct_numb(cp, t->;tm_year+100);
        return(cbuf);
}

dysize(y)
{
        if((y%4) == 0)
                return(366);
        return(365);
}

static char *
ct_numb(cp, n)
register char *cp;
{
        cp++;
        if (n>;=10)
                *cp++ = (n/10)%10 + '0';
        else
                *cp++ = ' ';
        *cp++ = n%10 + '0';
        return(cp);
}
作者: triphop    时间: 2003-06-19 17:04
标题: 在kernel module中我可以调用 time 函数吗?
我的初步思路是用相应的syscall 比如 ftime, gettimeofday。。。得到那个最叫我心烦的数值,然后使用下面的code,你说这么做如何?
作者: qjlemon    时间: 2003-06-19 17:05
标题: 在kernel module中我可以调用 time 函数吗?
呵呵比想象的简单,不过localtime可能复杂一点吧?与什么时区之类的东东有关
作者: qjlemon    时间: 2003-06-19 17:08
标题: 在kernel module中我可以调用 time 函数吗?
不,不要用syscall了,记住你现在是在内核里面了,再去调syscall是危险的,再说syscall需要有进程上下文存在,你的screen saver是不运行在任何进程的上下文里的!
作者: triphop    时间: 2003-06-19 17:17
标题: 在kernel module中我可以调用 time 函数吗?
localtime在最上面, 我认为既然 ftime()函数原形在/sys/timeb.h下,那也就可以在我的  loadable kernel module 中直接用吧?
作者: qjlemon    时间: 2003-06-19 17:22
标题: 在kernel module中我可以调用 time 函数吗?
这样说好象理由不太充分。我是想如果那些库函数直接能在user层搞定的话就应该可以搬到module里来用。/sys下声明的函数很多都是要调用系统调用来实现的吧?那就不行。得具体分析。
作者: triphop    时间: 2003-06-19 17:27
标题: 在kernel module中我可以调用 time 函数吗?
我的console screensaver 就是个 要放到/module下的加载模块呀,也就是说当它被 kldload到kernel中后,它也就成为kernel的一部分了呀?
既然kernel可syscall,那我的module也应该可以syscall呀?
作者: qjlemon    时间: 2003-06-19 17:30
标题: 在kernel module中我可以调用 time 函数吗?
kernel也不是铁板一块,从逻辑上它分成上下两个半层,上层运行在进程的上下文里,你的saver是很典型的纯下层程序,它与任何user进程都没关系,所以是不能通过syscall接口来做事的。
强烈建议你研究一下〈UNIX操作系统设计〉。
作者: triphop    时间: 2003-06-19 17:36
标题: 在kernel module中我可以调用 time 函数吗?
那好,我看只有两条路可走:

1) 自己实现或偷窃代码,完成time, ctime, localtime的工作
2) 读取系统变量(如果有合适的话)
作者: qjlemon    时间: 2003-06-19 17:37
标题: 在kernel module中我可以调用 time 函数吗?
呵呵你可能两个都要做才搞得定
作者: triphop    时间: 2003-06-19 17:45
标题: 在kernel module中我可以调用 time 函数吗?
完全同意,我在上面贴的代码中函数都是long *t,在系统的变量中肯定有这个变量(是哪个?),我想这样我所需要的就都有了。
我说的对吗?
作者: qjlemon    时间: 2003-06-19 17:47
标题: 在kernel module中我可以调用 time 函数吗?
呵呵这我可不知道了,试试man 9 time里提到的那几个吧。
作者: triphop    时间: 2003-06-19 17:50
标题: 在kernel module中我可以调用 time 函数吗?
你的那些都是 timeval呀!
作者: qjlemon    时间: 2003-06-19 17:51
标题: 在kernel module中我可以调用 time 函数吗?
关于time嘛。。嘻嘻不要问我, 这方面我菜着呢!
作者: triphop    时间: 2003-06-19 17:54
标题: 在kernel module中我可以调用 time 函数吗?
太谢谢你了,如果我把那个screensaver做出来,给你发个?
有机会要研究研究你说的那本书!
作者: qjlemon    时间: 2003-06-19 17:55
标题: 在kernel module中我可以调用 time 函数吗?
好!一定记得发一个   
lmn163@163.com
作者: triphop    时间: 2003-06-20 19:01
标题: 在kernel module中我可以调用 time 函数吗?
qjlemon,你好,能不能把 sysctl -a 得输出贴出来,因为我现在没有机器可用,不能查看!

我现在就差timezone得信息了。我想知道系统中是否有有关 time zone得变量。
作者: qjlemon    时间: 2003-06-22 08:24
标题: 在kernel module中我可以调用 time 函数吗?
Sorry,这两天没到这里!
sysctl -a|grep time
kern.boottime: { sec = 993169141, usec = 824990 } Fri Jun 22 08:19:01 2001
kern.cam.da.default_timeout: 60
kern.cp_time: 36 0 188 22 9950
kern.timecounter.method: 0
kern.timecounter.hardware: i8254
vfs.nfs.access_cache_timeout: 60
vfs.timestamp_precision: 0
net.inet.tcp.delacktime: 100
net.link.ether.inet.host_down_time: 20
net.inet6.ip6.temppltime: 86400
net.inet6.ip6.tempvltime: 604800
net.inet6.icmp6.redirtimeout: 600
p1003_1b.realtime_signals: 0
p1003_1b.timers: 0
p1003_1b.delaytimer_max: 0
p1003_1b.timer_max: 0

sysctl -a
kern.ostype: FreeBSD
kern.osrelease: 4.5-RELEASE
kern.osrevision: 199506
kern.version: FreeBSD 4.5-RELEASE #0: Mon Jan 28 14:31:56 GMT 2002
    murray@builder.freebsdmall.com:/usr/src/sys/compile/GENERIC

kern.maxvnodes: 4294
kern.maxproc: 532
kern.maxfiles: 1064
kern.argmax: 65536
kern.securelevel: -1
kern.hostname: bsd.math
kern.hostid: 0
kern.clockrate: { hz = 100, tick = 10000, tickadj = 5, profhz = 1024, stathz = 128 }
kern.posix1version: 199309
kern.ngroups: 16
kern.job_control: 1
kern.saved_ids: 0
kern.boottime: { sec = 993169141, usec = 824990 } Fri Jun 22 08:19:01 2001
kern.domainname:
kern.osreldate: 450000
kern.bootfile: /kernel
kern.maxfilesperproc: 957
kern.maxprocperuid: 478
kern.dumpdev:
kern.ipc.maxsockbuf: 262144
kern.ipc.sockbuf_waste_factor: 8
kern.ipc.somaxconn: 128
kern.ipc.max_linkhdr: 16
kern.ipc.max_protohdr: 60
kern.ipc.max_hdr: 76
kern.ipc.max_datalen: 136
kern.ipc.nmbclusters: 1024
kern.ipc.semmap: 30
kern.ipc.semmni: 10
kern.ipc.semmns: 60
kern.ipc.semmnu: 30
kern.ipc.semmsl: 60
kern.ipc.semopm: 100
kern.ipc.semume: 10
kern.ipc.semusz: 92
kern.ipc.semvmx: 32767
kern.ipc.semaem: 16384
kern.ipc.shmmax: 33554432
kern.ipc.shmmin: 1
kern.ipc.shmmni: 192
kern.ipc.shmseg: 128
kern.ipc.shmall: 8192
kern.ipc.shm_use_phys: 0
kern.ipc.mbuf_wait: 32
kern.ipc.mbtypes: 7 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0
kern.ipc.nmbufs: 4096
kern.ipc.maxsockets: 1064
kern.dummy: 0
kern.ps_strings: 3217031152
kern.usrstack: 3217031168
kern.logsigexit: 1
kern.cam.da.retry_count: 4
kern.cam.da.default_timeout: 60
kern.cam.cd.changer.min_busy_seconds: 5
kern.cam.cd.changer.max_busy_seconds: 15
kern.fallback_elf_brand: -1
kern.init_path: /sbin/init:/sbin/oinit:/sbin/init.bak:/stand/sysinstall
kern.module_path: /;/boot/;/modules/
kern.acct_suspend: 2
kern.acct_resume: 4
kern.acct_chkfreq: 15
kern.cp_time: 38 0 212 23 12599
kern.timecounter.method: 0
kern.timecounter.hardware: i8254
kern.openfiles: 36
kern.kq_calloutmax: 4096
kern.ps_arg_cache_limit: 256
kern.ps_argsopen: 1
kern.fast_vfork: 1
kern.randompid: 0
kern.maxusers: 32
kern.ps_showallprocs: 1
kern.shutdown.poweroff_delay: 5000
kern.shutdown.kproc_shutdown_wait: 60
kern.sugid_coredump: 0
kern.coredump: 1
kern.corefile: %N.core
kern.quantum: 100000
kern.ccpu: 1948
kern.fscale: 2048
kern.devstat.numdevs: 4
kern.devstat.generation: 4
kern.devstat.version: 4
kern.disks: ad0 md0
kern.log_wakeups_per_second: 5
kern.msgbuf:
kern.msgbuf_clear: 0
kern.nselcoll: 0
kern.consmute: 0
kern.filedelay: 30
kern.dirdelay: 29
kern.metadelay: 28
kern.minvnodes: 1073
kern.chroot_allow_open_directories: 1
vm.loadavg: { 0.08 0.03 0.01 }
vm.v_free_min: 175
vm.v_free_target: 801
vm.v_free_reserved: 101
vm.v_inactive_target: 1201
vm.v_cache_min: 801
vm.v_cache_max: 1602
vm.v_pageout_free_min: 34
vm.pageout_algorithm: 0
vm.swap_enabled: 1
vm.swap_async_max: 4
vm.swap_idle_threshold1: 2
vm.swap_idle_threshold2: 10
vm.v_free_severe: 138
vm.stats.sys.v_swtch: 1943
vm.stats.sys.v_trap: 4409
vm.stats.sys.v_syscall: 17991
vm.stats.sys.v_intr: 31144
vm.stats.sys.v_soft: 518
vm.stats.vm.v_vm_faults: 7556
vm.stats.vm.v_cow_faults: 1671
vm.stats.vm.v_cow_optim: 0
vm.stats.vm.v_zfod: 1352
vm.stats.vm.v_ozfod: 1326
vm.stats.vm.v_swapin: 0
vm.stats.vm.v_swapout: 0
vm.stats.vm.v_swappgsin: 0
vm.stats.vm.v_swappgsout: 0
vm.stats.vm.v_vnodein: 171
vm.stats.vm.v_vnodeout: 0
vm.stats.vm.v_vnodepgsin: 1314
vm.stats.vm.v_vnodepgsout: 0
vm.stats.vm.v_intrans: 3
vm.stats.vm.v_reactivated: 49
vm.stats.vm.v_pdwakeups: 0
vm.stats.vm.v_pdpages: 0
vm.stats.vm.v_dfree: 0
vm.stats.vm.v_pfree: 1787
vm.stats.vm.v_tfree: 3606
vm.stats.vm.v_page_size: 4096
vm.stats.vm.v_page_count: 15049
vm.stats.vm.v_free_reserved: 101
vm.stats.vm.v_free_target: 801
vm.stats.vm.v_free_min: 175
vm.stats.vm.v_free_count: 11741
vm.stats.vm.v_wire_count: 1309
vm.stats.vm.v_active_count: 865
vm.stats.vm.v_inactive_target: 1201
vm.stats.vm.v_inactive_count: 1128
vm.stats.vm.v_cache_count: 6
vm.stats.vm.v_cache_min: 801
vm.stats.vm.v_cache_max: 1602
vm.stats.vm.v_pageout_free_min: 34
vm.stats.vm.v_interrupt_free_min: 2
vm.stats.vm.v_forks: 101
vm.stats.vm.v_vforks: 1
vm.stats.vm.v_rforks: 0
vm.stats.vm.v_kthreads: 5
vm.stats.vm.v_forkpages: 6281
vm.stats.vm.v_vforkpages: 49
vm.stats.vm.v_rforkpages: 0
vm.stats.vm.v_kthreadpages: 0
vm.stats.misc.zero_page_count: 10107
vm.stats.misc.cnt_prezero: 11469
vm.max_proc_mmap: 4280
vm.max_launder: 32
vm.pageout_stats_max: 801
vm.pageout_full_stats_interval: 20
vm.pageout_stats_interval: 5
vm.pageout_stats_free_max: 5
vm.swap_idle_enabled: 0
vm.defer_swapspace_pageouts: 0
vm.disable_swapspace_pageouts: 0
vm.pageout_lock_miss: 0
vm.zone:
ITEM            SIZE     LIMIT    USED    FREE  REQUESTS

PIPE:            160,        0,      2,    100,       34
SWAPMETA:        160,    15049,      0,      0,        0
unpcb:            64,        0,      2,    126,        5
ripcb:           192,     1064,      0,     21,        1
syncache:        160,    15359,      0,     25,        1
tcpcb:           544,     1064,      5,     10,        5
udpcb:           192,     1064,      2,     40,       23
socket:          192,     1064,      9,     33,       34
KNOTE:            64,        0,      0,    128,        4
DIRHASH:        1024,        0,     24,      4,       24
NFSNODE:         352,        0,      0,      0,        0
NFSMOUNT:        544,        0,      0,      0,        0
VNODE:           192,        0,    869,     85,      869
NAMEI:          1024,        0,      0,     16,     2669
VMSPACE:         192,        0,     18,     46,      102
PROC:            416,        0,     23,     26,      107
DP fakepg:        64,        0,      0,      0,        0
PV ENTRY:         28,   139150,   3661,  12714,    20675
MAP ENTRY:        48,        0,    276,    107,     5120
KMAP ENTRY:       48,     3890,     74,    139,      421
MAP:             108,        0,      7,      3,        7
VM OBJECT:        96,        0,    373,     93,     1665
vm.zone_kmem_pages: 9
vm.zone_kmem_kvaspace: 9687040
vm.zone_kern_pages: 80
vm.kvm_size: 1069547520
vm.kvm_free: 943718400
vfs.nfs.nfs_privport: 0
vfs.nfs.async: 0
vfs.nfs.commit_blks: 0
vfs.nfs.commit_miss: 0
vfs.nfs.realign_test: 0
vfs.nfs.realign_count: 0
vfs.nfs.bufpackets: 4
vfs.nfs.gatherdelay: 10000
vfs.nfs.gatherdelay_v3: 0
vfs.nfs.defect: 0
vfs.nfs.diskless_valid: 0
vfs.nfs.diskless_rootpath:
vfs.nfs.diskless_swappath:
vfs.nfs.access_cache_timeout: 60
vfs.nfs.nfsv3_commit_on_close: 0
vfs.ufs.dirhash_minsize: 2560
vfs.ufs.dirhash_maxmem: 2097152
vfs.ufs.dirhash_mem: 26748
vfs.ufs.dirhash_docheck: 0
vfs.numdirtybuffers: 4
vfs.lodirtybuffers: 128
vfs.hidirtybuffers: 256
vfs.numfreebuffers: 940
vfs.lofreebuffers: 57
vfs.hifreebuffers: 114
vfs.runningbufspace: 0
vfs.lorunningspace: 524288
vfs.hirunningspace: 1048576
vfs.maxbufspace: 15466496
vfs.hibufspace: 14811136
vfs.lobufspace: 14745600
vfs.bufspace: 3653632
vfs.maxmallocbufspace: 740556
vfs.bufmallocspace: 61440
vfs.getnewbufcalls: 285
vfs.getnewbufrestarts: 0
vfs.vmiodirenable: 1
vfs.bufdefragcnt: 0
vfs.buffreekvacnt: 0
vfs.bufreusecnt: 223
vfs.cache.numneg: 65
vfs.cache.numcache: 1356
vfs.cache.numcalls: 4615
vfs.cache.dothits: 33
vfs.cache.dotdothits: 11
vfs.cache.numchecks: 3320
vfs.cache.nummiss: 1472
vfs.cache.nummisszap: 8
vfs.cache.numposzaps: 12
vfs.cache.numposhits: 2878
vfs.cache.numnegzaps: 2
vfs.cache.numneghits: 199
vfs.cache.numcwdcalls: 10
vfs.cache.numcwdfail1: 0
vfs.cache.numcwdfail2: 0
vfs.cache.numcwdfail3: 0
vfs.cache.numcwdfail4: 0
vfs.cache.numcwdfound: 10
vfs.cache.numfullpathcalls: 0
vfs.cache.numfullpathfail1: 0
vfs.cache.numfullpathfail2: 0
vfs.cache.numfullpathfail3: 0
vfs.cache.numfullpathfail4: 0
vfs.cache.numfullpathfound: 0
vfs.write_behind: 1
vfs.reassignbufcalls: 225
vfs.reassignbufloops: 0
vfs.reassignbufsortgood: 98
vfs.reassignbufsortbad: 17
vfs.reassignbufmethod: 1
vfs.nameileafonly: 0
vfs.timestamp_precision: 0
vfs.usermount: 0
vfs.ffs.doreallocblks: 1
vfs.ffs.doasyncfree: 1
net.local.stream.sendspace: 8192
net.local.stream.recvspace: 8192
net.local.dgram.maxdgram: 2048
net.local.dgram.recvspace: 4096
net.local.inflight: 0
net.inet.ip.portrange.lowfirst: 1023
net.inet.ip.portrange.lowlast: 600
net.inet.ip.portrange.first: 1024
net.inet.ip.portrange.last: 5000
net.inet.ip.portrange.hifirst: 49152
net.inet.ip.portrange.hilast: 65535
net.inet.ip.forwarding: 0
net.inet.ip.redirect: 1
net.inet.ip.ttl: 64
net.inet.ip.rtexpire: 3600
net.inet.ip.rtminexpire: 10
net.inet.ip.rtmaxcache: 128
net.inet.ip.sourceroute: 0
net.inet.ip.intr_queue_maxlen: 50
net.inet.ip.intr_queue_drops: 0
net.inet.ip.accept_sourceroute: 0
net.inet.ip.fastforwarding: 0
net.inet.ip.keepfaith: 0
net.inet.ip.gifttl: 30
net.inet.ip.subnets_are_local: 0
net.inet.ip.maxfragpackets: 256
net.inet.ip.check_interface: 0
net.inet.icmp.maskrepl: 0
net.inet.icmp.icmplim: 200
net.inet.icmp.drop_redirect: 0
net.inet.icmp.log_redirect: 0
net.inet.icmp.bmcastecho: 0
net.inet.tcp.rfc1323: 1
net.inet.tcp.rfc1644: 0
net.inet.tcp.mssdflt: 512
net.inet.tcp.keepidle: 7200000
net.inet.tcp.keepintvl: 75000
net.inet.tcp.sendspace: 32768
net.inet.tcp.recvspace: 65536
net.inet.tcp.keepinit: 75000
net.inet.tcp.delacktime: 100
net.inet.tcp.v6mssdflt: 1024
net.inet.tcp.log_in_vain: 0
net.inet.tcp.blackhole: 0
net.inet.tcp.delayed_ack: 1
net.inet.tcp.path_mtu_discovery: 1
net.inet.tcp.slowstart_flightsize: 1
net.inet.tcp.local_slowstart_flightsize: 4
net.inet.tcp.newreno: 1
net.inet.tcp.tcbhashsize: 512
net.inet.tcp.do_tcpdrain: 1
net.inet.tcp.pcbcount: 5
net.inet.tcp.icmp_may_rst: 1
net.inet.tcp.strict_rfc1948: 0
net.inet.tcp.isn_reseed_interval: 0
net.inet.tcp.syncookies: 1
net.inet.tcp.syncache.bucketlimit: 30
net.inet.tcp.syncache.cachelimit: 15359
net.inet.tcp.syncache.count: 0
net.inet.tcp.syncache.hashsize: 512
net.inet.tcp.syncache.rexmtlimit: 3
net.inet.tcp.msl: 30000
net.inet.tcp.always_keepalive: 1
net.inet.udp.checksum: 1
net.inet.udp.maxdgram: 9216
net.inet.udp.recvspace: 42080
net.inet.udp.log_in_vain: 0
net.inet.udp.blackhole: 0
net.inet.accf.unloadable: 0
net.inet.raw.maxdgram: 8192
net.inet.raw.recvspace: 8192
net.link.generic.system.ifcount: 6
net.link.ether.inet.prune_intvl: 300
net.link.ether.inet.max_age: 1200
net.link.ether.inet.host_down_time: 20
net.link.ether.inet.maxtries: 5
net.link.ether.inet.useloopback: 1
net.link.ether.inet.proxyall: 0
net.link.ether.inet.log_arp_wrong_iface: 1
net.inet6.ip6.forwarding: 0
net.inet6.ip6.redirect: 1
net.inet6.ip6.hlim: 64
net.inet6.ip6.maxfragpackets: 256
net.inet6.ip6.accept_rtadv: 0
net.inet6.ip6.keepfaith: 0
net.inet6.ip6.log_interval: 5
net.inet6.ip6.hdrnestlimit: 50
net.inet6.ip6.dad_count: 1
net.inet6.ip6.auto_flowlabel: 1
net.inet6.ip6.defmcasthlim: 1
net.inet6.ip6.gifhlim: 30
net.inet6.ip6.kame_version: 20010528/FreeBSD
net.inet6.ip6.use_deprecated: 1
net.inet6.ip6.rr_prune: 5
net.inet6.ip6.v6only: 0
net.inet6.ip6.rtexpire: 3600
net.inet6.ip6.rtminexpire: 10
net.inet6.ip6.rtmaxcache: 128
net.inet6.ip6.use_tempaddr: 0
net.inet6.ip6.temppltime: 86400
net.inet6.ip6.tempvltime: 604800
net.inet6.ip6.auto_linklocal: 1
net.inet6.icmp6.rediraccept: 1
net.inet6.icmp6.redirtimeout: 600
net.inet6.icmp6.nd6_prune: 1
net.inet6.icmp6.nd6_delay: 5
net.inet6.icmp6.nd6_umaxtries: 3
net.inet6.icmp6.nd6_mmaxtries: 3
net.inet6.icmp6.nd6_useloopback: 1
net.inet6.icmp6.nodeinfo: 3
net.inet6.icmp6.errppslimit: 100
net.inet6.icmp6.nd6_maxnudhint: 0
net.inet6.icmp6.nd6_debug: 0
debug.mddebug: 0
debug.elf_trace: 0
debug.boothowto: -2147483648
debug.free_devt: 0
debug.fdexpand: 0
debug.sizeof.vnode: 168
debug.sizeof.proc: 408
debug.sizeof.specinfo: 68
debug.sizeof.disklabel: 276
debug.sizeof.diskslices: 1820
debug.sizeof.disk: 304
debug.ttydebug: 0
debug.nchash: 8191
debug.ncnegfactor: 16
debug.numneg: 65
debug.numcache: 1356
debug.vfscache: 1
debug.vnsize: 168
debug.ncsize: 36
debug.disablecwd: 0
debug.disablefullpath: 0
debug.numvnodes: 869
debug.wantfreevnodes: 25
debug.freevnodes: 664
debug.rush_requests: 0
debug.vnlru_nowhere: 0
debug.bpf_bufsize: 4096
debug.bpf_maxbufsize: 524288
debug.if_tun_debug: 0
debug.ncr_debug: 0
debug.max_softdeps: 34352
debug.tickdelay: 2
debug.worklist_push: 0
debug.blk_limit_push: 0
debug.ino_limit_push: 0
debug.blk_limit_hit: 0
debug.ino_limit_hit: 0
debug.sync_limit_hit: 0
debug.indir_blk_ptrs: 0
debug.inode_bitmap: 0
debug.direct_blk_ptrs: 0
debug.dir_entry: 0
debug.dircheck: 0
hw.machine: i386
hw.model: Pentium 4
hw.ncpu: 1
hw.byteorder: 1234
hw.physmem: 62787584
hw.usermem: 57425920
hw.pagesize: 4096
hw.floatingpoint: 1
hw.machine_arch: i386
hw.aac.iosize_max: 65536
hw.pcic.irq: 0
hw.pcic.boot_deactivated: 0
hw.pcic.ignore_function_1: 0
hw.pcic.intr_path: 2
hw.pcic.init_routing: 0
hw.dc_quick: 1
hw.sis_quick: 1
hw.wx.txint_delay: 5000
hw.wx.dump_stats: -1
hw.wx.clear_stats: -1
hw.ata.ata_dma: 1
hw.ata.wc: 1
hw.ata.tags: 0
hw.ata.atapi_dma: 0
hw.atamodes: dma,---,pio,---,
hw.instruction_sse: 0
hw.availpages: 15163
machdep.consdev: { major = 12, minor = 255 }
machdep.adjkerntz: -28800
machdep.disable_rtc_set: 0
machdep.wall_cmos_clock: 1
machdep.an_dump: off
machdep.an_cache_mcastonly: 0
machdep.an_cache_iponly: 1
machdep.cs_recv_delay: 570
machdep.do_dump: 1
machdep.pccard.pcic_resume_reset: 1
machdep.pccard.mem_start: 655360
machdep.pccard.mem_end: 1048576
machdep.enable_panic_key: 0
machdep.apm_suspend_delay: 1
machdep.apm_standby_delay: 1
machdep.ispc98: 0
machdep.msgbuf:
machdep.msgbuf_clear: 0
machdep.panic_on_nmi: 1
machdep.i8254_freq: 1193182
machdep.wi_cache_mcastonly: 0
machdep.wi_cache_iponly: 1
machdep.conspeed: 9600
user.cs_path: /usr/bin:/bin:/usr/sbin:/sbin:
user.bc_base_max: 99
user.bc_dim_max: 2048
user.bc_scale_max: 99
user.bc_string_max: 1000
user.coll_weights_max: 0
user.expr_nest_max: 32
user.line_max: 2048
user.re_dup_max: 255
user.posix2_version: 199212
user.posix2_c_bind: 0
user.posix2_c_dev: 0
user.posix2_char_term: 0
user.posix2_fort_dev: 0
user.posix2_fort_run: 0
user.posix2_localedef: 0
user.posix2_sw_dev: 0
user.posix2_upe: 0
user.stream_max: 20
user.tzname_max: 255
p1003_1b.asynchronous_io: 0
p1003_1b.mapped_files: 0
p1003_1b.memlock: 0
p1003_1b.memlock_range: 0
p1003_1b.memory_protection: 0
p1003_1b.message_passing: 0
p1003_1b.prioritized_io: 0
p1003_1b.priority_scheduling: 1
p1003_1b.realtime_signals: 0
p1003_1b.semaphores: 0
p1003_1b.fsync: 0
p1003_1b.shared_memory_objects: 0
p1003_1b.synchronized_io: 0
p1003_1b.timers: 0
p1003_1b.aio_listio_max: 0
p1003_1b.aio_max: 0
p1003_1b.aio_prio_delta_max: 0
p1003_1b.delaytimer_max: 0
p1003_1b.mq_open_max: 0
p1003_1b.pagesize: 4096
p1003_1b.rtsig_max: 0
p1003_1b.sem_nsems_max: 0
p1003_1b.sem_value_max: 0
p1003_1b.sigqueue_max: 0
p1003_1b.timer_max: 0
jail.set_hostname_allowed: 1
jail.socket_unixiproute_only: 1
jail.sysvipc_allowed: 0
作者: qjlemon    时间: 2003-06-22 08:26
标题: 在kernel module中我可以调用 time 函数吗?
我后来想了想,关于time,很可能内核里有函数可以用,不过肯定不是走syscall接口罢了。
作者: triphop    时间: 2003-06-23 16:54
标题: 在kernel module中我可以调用 time 函数吗?
我准备直接用 adjkerntz 但从上面看不出它的原型,我想应该是
   struct { int timezone, int isdst }; 看来我还得查资料。

我发的那个小东西能运行吗?
作者: triphop    时间: 2003-06-23 17:00
标题: 在kernel module中我可以调用 time 函数吗?
我还有个问题:既然在user space 中 syscall,会发生从 user space -->; kernel space, 并且此时用户进程等待 syscall 的返回(除信号),而系统就去执行 syscall 的操作,那么也就是说系统中有完成 特定 syscall的context呀,那我在kernel module中为什么不能 直接去执行那段 kernel context呢?
作者: qjlemon    时间: 2003-06-23 17:00
标题: 在kernel module中我可以调用 time 函数吗?
原帖由 "triphop" 发表:
我准备直接用 adjkerntz 但从上面看不出它的原型,我想应该是
   struct { int timezone, int isdst }; 看来我还得查资料。

我发的那个小东西能运行吗?
    你没发附件给我啊? 你是不是想在屏幕上显示一个晃来晃去的当前时间啊? 要不先简单一点暂不考虑时区?
作者: triphop    时间: 2003-06-23 17:09
标题: 在kernel module中我可以调用 time 函数吗?
不是,是一个表,有表盘,指针,和asctime输出的字符串;我一定要有时区的内容,要不我得到得是 GMT得时间,这就 没有意义了。

我下次发给你。
作者: qjlemon    时间: 2003-06-23 17:13
标题: 在kernel module中我可以调用 time 函数吗?
时区可以以后再加上去的,现在最要紧的是先把你那个表画出来,要知道我已经迫不急待想看一看了
作者: triphop    时间: 2003-06-23 17:25
标题: 在kernel module中我可以调用 time 函数吗?
这是它得curses程序,当然那个kernel module得实现有很大不同,但显示得效果应该是一样得。


  1. #include <curses.h>;#include <float.h>;#include <math.h>;#include <time.h>;/* To compile: gcc -o tclock tclock.c -lcurses -lm */#ifndef PI#define PI 3.141592654#endif#ifndef EXIT_SUCCESS#define EXIT_SUCCESS    0#endif#define sign(_x) (_x<0?-1:1)#define ASPECT 2.2#define ROUND(value) ((int)((value) + 0.5))#define A2X(angle,radius) ROUND(ASPECT * radius * sin(angle))#define A2Y(angle,radius) ROUND(radius * cos(angle))typedef struct {        int row;        int col;} Angel[13];static Angel  range;static void plot(int x, int y, char col );static void dline(int from_x, int from_y, int x2, int y2, char ch);/* Plot a point */static void plot(int x, int y, char col){        mvaddch(y, x, (chtype) col);}/* Draw a diagonal(arbitrary) line using Bresenham's alogrithm. */static void dline(int from_x, int from_y, int x2, int y2, char ch){        int dx, dy;        int ax, ay;        int sx, sy;        int x, y;        int d;        dx = x2 - from_x;        dy = y2 - from_y;        ax = abs(dx * 2);        ay = abs(dy * 2);        sx = sign(dx);        sy = sign(dy);        x = from_x;        y = from_y;        if (ax >; ay) {                d = ay - (ax / 2);                while (1) {                        plot(x, y, ch);                        if (x == x2)                                return;                        if (d >;= 0) {                                y += sy;                                d -= ax;                        }                        x += sx;                        d += ay;                }        } else {                d = ax - (ay / 2);                while (1) {                        plot(x, y, ch);                        if (y == y2)                                return;                        if (d >;= 0) {                                x += sx;                                d -= ay;                        }                        y += sy;                        d += ax;                }        }}int main(void){        int i, cx, cy;        double mradius, hradius, mangle, hangle;        double sangle, sradius, hours;        int bg;        int hdx, hdy;        int mdx, mdy;        int sdx, sdy;        time_t tim;        struct tm *t;        char szChar[10];        int secFinger = 1, hourFinger = 2;        chtype color;        bool clicks = FALSE;        int count = 0;        initscr();        noecho();        if (has_colors()) {                bg = COLOR_BLACK;                start_color();#ifdef NCURSES_VERSION                if (use_default_colors() == OK)                        bg = -1;#endif                init_pair(secFinger, COLOR_CYAN, bg);                init_pair(hourFinger, COLOR_GREEN, bg);        }        nl();        curs_set(0);        timeout(0);        cbreak();        cx = 39;        cy = 12;        mradius = 9;        hradius = 6;        sradius = 8;        for (i = 0; i < 12; i++) {                sangle = (i + 1) * (2.0 * PI) / 12.0;                sradius = 10;                sdx = A2X(sangle, sradius);                sdy = A2Y(sangle, sradius);                sprintf(szChar, "%d", i + 1);                if ((i + 1) % 3 == 0) {                        chtype hc = COLOR_PAIR(hourFinger);                        hc |= A_BOLD;                        attrset(hc);                        mvaddstr((int) (cy - sdy), (int) (cx + sdx), szChar);                        attroff(hc);                }                else                         mvaddstr((int) (cy - sdy), (int) (cx + sdx), szChar);        }        sradius = 8;        for (i = 0; i <= 12; ++i) {                sangle = ((60 - i * 2) * (2.0 * PI) / 60.0);                 sdx = A2X(sangle, sradius);                sdy = A2Y(sangle, sradius);                range[i].col = cx + sdx;                range[i].row = cy - sdy;        }        touchwin(stdscr);        while (getch() == ERR) {                refresh();                tim = time(NULL);                t = localtime(&tim);                hours = (t->;tm_hour + (t->;tm_min / 60.0));                if (hours >; 12.0)                        hours -= 12.0;                mangle = ((t->;tm_min) * (2 * PI) / 60.0);                mdx = A2X(mangle, mradius);                mdy = A2Y(mangle, mradius);                hangle = ((hours) * (2.0 * PI) / 12.0);                hdx = A2X(hangle, hradius);                hdy = A2Y(hangle, hradius);                sangle = ((t->;tm_sec) * (2.0 * PI) / 60.0);                sdx = A2X(sangle, sradius);                sdy = A2Y(sangle, sradius);                dline(cx, cy, cx + hdx, cy - hdy, '.');                dline(cx, cy, cx + mdx, cy - mdy, '*');                mvaddstr(5, 37, "OMEGA");//如果嫌OMEGA挡住指针,可放在上两行之上,反正我喜欢这样,呵呵                color = COLOR_PAIR(secFinger);                color |= A_BOLD;                attrset(color);                plot(cx + sdx, cy - sdy, '+');                attroff(color);                mvaddstr(23, 28, ctime(&tim)); //向右移动了点,显得好看些                refresh();                if (t->;tm_min == 59)                  if ((cx + sdx) == range[(int) hours].col &&                                  (cy - sdy) == range[(int) hours].row  )                     clicks = TRUE;                if (clicks == TRUE) {                        if (count == 0)                                 beep();                        count =(++count) % 2;                        if ((cx + sdx) == range[0].col                                         && (cy - sdy) == range[0].row) {                                clicks = FALSE;                                count = 0;                        }                }//加入了下面的 if 语句, 使之在 1:00:00 和 13:00:00报时if ((int) hours == 1 && t->;tm_min == 0 && t->;tm_sec == 0)                        beep();                napms(1000);                plot(cx + sdx, cy - sdy, ' ');                dline(cx, cy, cx + hdx, cy - hdy, ' ');                dline(cx, cy, cx + mdx, cy - mdy, ' ');        }        curs_set(1);        endwin();        return EXIT_SUCCESS;}
复制代码

可能贴上来是乱得,你用 indent来处理吧
indent -kr -cli3 omega.c
[/code]
作者: qjlemon    时间: 2003-06-23 17:30
标题: 在kernel module中我可以调用 time 函数吗?
怪哉!你的BSD是什么版本?我的indent没有kr参数啊?以前在linux上见过一个console时钟,还不错!不过在kernel里有cursor库可用吗?怀疑!现在的那些saver好象是用的直接写视频内存喔!还没仔细看过,有时间研究一下。。。
作者: triphop    时间: 2003-06-23 17:36
标题: 在kernel module中我可以调用 time 函数吗?
那个indent 是gnu indent,我一直用它,它有这个option,我只是说显示效果应该是一样得,但实现是完全不同得。我不用别的lib,是直接写屏
作者: qjlemon    时间: 2003-06-23 17:39
标题: 在kernel module中我可以调用 time 函数吗?
[quote]原帖由 "triphop"]我一直用它[/quote 发表:
大宝挺好的。。。我们一直用它
我只用4.7 mini,很爽,感觉我要的任何东西都有了。
作者: triphop    时间: 2003-06-23 17:42
标题: 在kernel module中我可以调用 time 函数吗?
呵呵,那个效果图看了吗?我得console saver我准备放放了,现在没时间做。
作者: qjlemon    时间: 2003-06-23 17:45
标题: 在kernel module中我可以调用 time 函数吗?
没收到邮件啊!干脆你把效果图贴出来吧!让大家都观赏一下喔!
作者: triphop    时间: 2003-06-23 17:49
标题: 在kernel module中我可以调用 time 函数吗?

head.jpg (115.84 KB, 下载次数: 20)

这是aalib得图片,我得没做,但我用得是它得lib,所以效果是一样得。等有时间我给你发吧

这是aalib得图片,我得没做,但我用得是它得lib,所以效果是一样得。等有时间我给你发吧

作者: qjlemon    时间: 2003-06-23 17:52
标题: 在kernel module中我可以调用 time 函数吗?
哇噻吓了我一跳!期待中。。
作者: bsdxp    时间: 2003-06-23 17:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: triphop    时间: 2003-06-23 18:02
标题: 在kernel module中我可以调用 time 函数吗?
很感谢你qjlemon,以及给我发sysctl -a得输出,谢谢!
   那个小东西我以后有时间一定给你发。
作者: qjlemon    时间: 2003-06-23 18:03
标题: 在kernel module中我可以调用 time 函数吗?
[quote]原帖由 "triphop"]我还有个问题:既然在user space 中 syscall,会发生从 user space -->; kernel space, 并且此时用户进程等待 syscall 的返回(除信号),而系统就去执行 syscall 的操作,那么也就是说系统中有完成 特定 syscall?.........[/quote 发表:
执行syscall时的contex是每个进程的contex,它存放在进程的TSS里,而saver的运行独立于user进程,可以想象它不会得到一个contex,这和中断服务程序很象,比如时钟中断,随时都会打断user进程,那在处理这个中断的时候是不能借用被中断的进程的contex的,需要使用单独的kernel执行环境,比如独立的堆栈
作者: qjlemon    时间: 2003-06-23 18:13
标题: 在kernel module中我可以调用 time 函数吗?
我想实在要借用人家的contex从理论上讲可能也是可以的,但会把事情搞得一团糟,得不偿失喔!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2