|
阅读:727回复:7
你会linux吗?
不知道你会linux吗?我想了解有关它的资料。希望你帮忙。:)
|
|
|
1C#
发布于:2002-05-16 23:50
Re:你会linux吗?
你想知道什么??不知道在下能不能帮忙?? |
|
|
|
3C#
发布于:2002-05-22 01:40
Re:你会linux吗?
你能说说吗???在下的毕业设计和linux有关,是linux的源代码分析(linux虚拟内存技术)和多重引导lilo的分析,不知道能不能帮上你的忙?? |
|
|
|
4C#
发布于:2002-06-05 19:53
hi!
你能说说吗???在下的毕业设计和linux有关,是linux的源代码分析(linux虚拟内存技术)和多重引导lilo的分析,不知道能不能帮上你的忙??
我想知道关于liunx进程管理的内容。在哪能找到呢?:) 具体的是用户与内核间如何通信?为什么不能直接通信? 如何查看内核中各进程的状态?进程有多少中状态?每中状态的意义? 你知道吗? |
|
|
5C#
发布于:2002-06-05 22:38
Re:你会linux吗?
我怎么觉得你好像不是再问我??好像是在考我??问人又用这种口气的吗!!:icon_smile_evil::icon_smile_evil: |
|
|
|
6C#
发布于:2002-06-05 23:03
你要的关于LINUX的答案!!!!
我想知道关于liunx进程管理的内容。在哪能找到呢?:)
答: [a]http://www.linuxforum.net/[/a] 具体的是用户与内核间如何通信? 答:买本书去看看,一时半会讲不清楚!我原准备贴一个帖子,有1万字左右,但是贴了2~3此都没有贴上去。你要作系统分析的话,有一本书《LINUX源代码分析》浙大出的,比较不错,也算是代表了中国较高的LINUX源代码分析的水平了。 为什么不能直接通信? 答:其实,我做了几个试验,用户可以管理进程的调度和释放,甚至可以控制进程! 如何查看内核中各进程的状态? 答:在KDE PROCESS MANAGER 和 KDE TASK MANAGER 可以看到进程状态! 也可以用 PS -aux | grep 'x' 命令行来看 进程有多少中状态?每中状态的意义? 答: 在Linux2.2.8版本的sched.h中定义了六种状态,十三种标志。 //进程状态 #define TASK_RUNNING 0 #define TASK_INTERRUPTIBLE 1 #define TASK_UNINTERRUPTIBLE 2 #define TASK_ZOMBIE 4 #define TASK_STOPPED 8 它们的含义分别是:  TASK_RUNNING:正在运行的进程(是系统的当前进程)或准备运行的进程(在Running队列中,等待被安排到系统的CPU)。处于该状态的进程实际参与了进程调度。  TASK_INTERRUPTIBLE:处于等待队列中的进程,待资源有效时唤醒,也可由其它进程被信号中断、唤醒后进入就绪状态。  TASK_UNINTERRUPTIBLE:处于等待队列中的进程,直接等待硬件条件,待资源有效时唤醒,不可由其它进程通过信号中断、唤醒。  TASK_ZOMBIE:终止的进程,是进程结束运行前的一个过度状态(僵死状态)。虽然此时已经释放了内存、文件等资源,但是在Task向量表中仍有一个task_struct数据结构项。它不进行任何调度或状态转换,等待父进程将它彻底释放。  TASK_STOPPED:进程被暂停,通过其它进程的信号才能唤醒。正在调试的进程可以在该停止状态。 //进程标志位: #define PF_ALIGNWARN 0x00000001 #define PF_STARTING 0x00000002 #define PF_EXITING 0x00000004 #define PF_PTRACED 0x00000010 #define PF_TRACESYS 0x00000020 #define PF_FORKNOEXEC 0x00000040 #define PF_SUPERPRIV 0x00000100 #define PF_DUMPCORE 0x00000200 #define PF_SIGNALED 0x00000400 #define PF_MEMALLOC 0x00000800 #define PF_VFORK 0x00001000 #define PF_USEDFPU 0x00100000 #define PF_DTRACE 0x00200000 其中PF_STARTING没有用到。 各个标志位的代表着不同含义,对应着不同调用: 1、 PF_ALIGNWARN 标志打印“对齐”警告信息,只有在486机器上实现 2、 PF_STARTING 进程正被创建 3、 PF_EXITING 标志进程开始关闭。  在do_exit()时置位。 current->flags |= PF_EXITING  用于判断是否有效进程。  在nlmclnt_proc()(在fs\lockd\clntproc.c),如果current_flag为PF_EXITING,则进程由于正在退出清除所有的锁,将执行异步RPC 调用。(Remote Procedure Call ) 4、 PF_PTRACED 进程被跟踪标志,  在do_fork()时清位。 p->flags &= ~PF_PTRACED  当ptrace(0)被调用时置位,在进程释放前要清掉。 current->flags |= PF_PTRACED  在sys_trace()中判断 如果request为PTRACE_TRACEME,如是则将current_flag置为PF_PTRACED; 如果request为PTRACE_ATTACH,则将child_flag置为PF_PTRACED,给child发一个SIGSTOP信号; 如果request为PTRACE_DETACH ,则将child清除PF_PTRACED。  在syscall_trace()中判断current_flag如果为PF_TRACED和PF_TRACESYS,则current强行退出时的出错代码置为SIGTRAP并将状态置为STOPPED。 5、 PF_TRACESYS 正在跟踪系统调用。  do_fork()时清位,在进程释放前要清掉。  在sys_trace()中判断request如果为PTRACE_SYSCALL,则将child->flags 置为 PF_TRACESYS;如为PTRACE_SYSCALL,则将child->flags 清除 PF_TRACESYS;然后唤醒child。如果request为PTRACE_SINGLESTEP(即单步跟踪),则将child_flag清除PF_TRACESYS,唤醒child。 6、 PF_FORKNOEXEC 进程刚创建,但还没执行。  在do_fork()时置位。 p->flags |= PF_FORKNOEXEC  在调入格式文件时清位。 p->flags &= ~ PF_FORKNOEXEC 7、 PF_SUPERPRIV 超级用户特权标志。 如果是超级用户进程则置位,用户特权设为超级用户,如是超级用户,在统计时置统计标志(accounting flag)为ASU。 8、 PF_DUMPCORE 标志进程是否清空core文件。  Core文件由gdb进行管理,给用户提供有用信息,例如查看浮点寄存器的内容比较困难,事实上我们可以从内核文件里的用户结构中得到 Core文件格式如下图: UPAGE DATA STACK Core 文件结构 UPAGE是包含用户结构的一个页面,告诉gdb文件中现有内容所有寄存器也在 UPAGE中,通常只有一页。DATA存放数据区。STACK堆栈区 最小Core文件长度为三页(12288字节)  在task_struct中定义一个dumpable变量,当dumpable==1时表示进程可以清空core文件(即将core文件放入回收站),等于0时表示该进程不能清空core文件(即core文件以放在回收站中,不可再放到回收站中),此变量初值为1。  例如在调用do_aout_core_dump()时判断current—>dumpable是否等于1(即判断该进程是否能将core文件放入回收站),如果等于1则将该变量置为0,在当前目录下建立一个core dump image ,在清空用户结构前,由gdb算出数据段和堆栈段的位置和使用的虚地址,用户数据区和堆栈区在清空前将相应内容写入core dump,将PF_DUMPCORE置位,清空数据区和堆栈区。  只有在aout_core_dump()内调用do_aout_core_dump(),而没有地方调用aout_core_dump()。对其它文件格式也是类似。 9、 PF_SIGNALED 标志进程被信号杀出。  在do_signal()中判断信号,如果current收到信号为SIGHUP, SIGINT, SIGIOT, SIGKILL, SIGPIPE, SIGTERM, SIGALRM, SIGSTKFLT, SIGURG, SIGXCPU, SIGXFSZ, SIGVTALRM, SIGPROF, SIGIO, SIGPOLL, SIGLOST, SIGPWR,则执行lock_kernel(),将信号加入current的信号队列,将current->flag置为PF_SIGNALED,然后执行do_exit() 10、 PF_USEDFPU 标志该进程使用FPU,此标志只在SMP时使用。  在task_struct中有一变量used_math,进程是否使用FPU。  在CPU从prev切换到next时,如果prev使用FPU则prev的flag清除PF_USEDFPU。 prev->flags&=~PF_USEDFPU  在flush_thread()(arch\i386\kernel\process.c)、restore_i387_hard()、save_i387_hard()(arch\i386\kernel\signal.c)中,如果是SMP方式,且使用FPU则stts(),否则清除PF_USEDFPU。 current->flags &= ~PF_USEDFPU  在sys_trace()中如果request为PTRACE_SETFPREGS,则将child的used_math置为1,将child_flag清除PF_USEDFPU。 child->flags &= ~PF_USEDFPU  在SMP方式下进行跟踪时,判断是否使用FPU。  在跟踪时出现数学错误时清位。 current->flags &= ~PF_USEDFPU 11、 PF_DTRACE 进程延期跟踪标志,只在m68k下使用。  跟踪一个trapping指令时置位。 current->flags |= PF_DTRACE 12、 PF_ONSIGSTK 标志进程是否工作在信号栈,只在m68k方式下使用。  liunx 2.1.19版本中使用此标志位,而2.2.8版本中不使用。  在处理信号建立frame时如果sigaction标志为ONSTACK,则将current->flag置为PF_ONSIGSTK。 13、 PF_MEMALLOC 进程分配内存标志。  linux 2.2.8版本中使用此标志位。  在kpiod()和kwpad()中置位。 tsk->flags |= PF_MEMALLOC 14、 PF_VFORK linux 2.2.8版本中使用此标志位。  在copy_flags(unsigned long clone_flags, struct task_struct *p),如果clone_flags为CLONE_VFORK,则将p的flags置为PF_VFORK。  在mm_release()中将current ->flags清除PF_VFORK。 tsk->flags &= ~PF_VFORK 由于使用的是比较早的LINUX的源代码,所以有些参量在7.4 或者 7.5 的源代码中,变量和参数有变化,但是设计思想和基本结构没有变化!其实我也有许多不太懂的地方,只是把自己会的说出来了,不只在下说得是否正确,恳请赐教当面!!谢谢!!:supergrin::supergrin::supergrin: |
|
|
|
7C#
发布于:2002-06-10 20:46
谢谢你!!!!!!!!!!!!!!
:icon_smile:
笑了,谢谢你回帖! 不好意思,我回帖时很急,或许说话的语气不好,望原谅!!!! 你很强啊,真的很感激你的帮忙。:mess2: 你说的帖子(那个帖不上的)能发到我的信箱吗?[email protected] 先谢谢了!!!!!:mess1: 我是出学的,希望你能多多指教啊。 不知道回答这2个问题,要写多少字呢? 我的时间不多了,很着急啊。。。。。。。 |
|