文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>今天天气好晴朗,处处好风光,好风光~~~

今天天气好晴朗,处处好风光,好风光~~~

时间:2006-01-06  来源:晏东

2006年1月6日星期五                                                          晴天

还是要从应用层开始学。

一、    进程

进程的结构:每个进程都有一个task_struct结构

另人恐怖的task_struct结构:

/* task_struct 结构*/

/* 在/include/linux/sched.h 中*/

struct task_struct {

/* these are hardcoded - don't touch */

/* 进程状态*/

volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */

unsigned long flags; /* per process flags, defined below */

int sigpending;

mm_segment_t addr_limit; /* thread address space:

0-0xBFFFFFFF for user-thread

0-0xFFFFFFFF for kernel-thread

*/

struct exec_domain *exec_domain;

long need_resched;

/* 进程调度信息*/

/* various fields */

long counter;

long priority;

cycles_t avg_slice;

/* SMP and runqueue state */

int has_cpu;

int processor;

int last_processor;

int lock_depth; /* Lock depth. We can context switch in and

out of holding a syscall kernel lock... */

struct task_struct *next_task, *prev_task;/* 任务队列指针*/

struct task_struct *next_run, *prev_run; /* 运行队列指针*/

/* task state */

struct linux_binfmt *binfmt;

int exit_code, exit_signal;

int pdeath_signal; /* The signal sent when the parent dies */

/* ??? */

unsigned long personality;

int dumpable:1;

int did_exec:1;

pid_t pid;

pid_t pgrp;

pid_t tty_old_pgrp;

pid_t session;

/* boolean value for session group leader */

int leader;

/*

* pointers to (original) parent process, youngest child, younger sibling,

* older sibling, respectively. (p->father can be replaced with

* p->p_pptr->pid)

*/

struct task_struct *p_opptr, *p_pptr, *p_cptr, *p_ysptr, *p_osptr;

/* PID hash table linkage. */

struct task_struct *pidhash_next;

struct task_struct **pidhash_pprev;

/* Pointer to task[] array linkage. */

struct task_struct **tarray_ptr;

struct wait_queue *wait_chldexit; /* for wait4() */

struct semaphore *vfork_sem; /* for vfork() */

unsigned long policy, rt_priority; /* 调度策略*/

unsigned long it_real_value, it_prof_value, it_virt_value;

unsigned long it_real_incr, it_prof_incr, it_virt_incr;

struct timer_list real_timer;

struct tms times;

unsigned long start_time;/* 进程创建时间*/

long per_cpu_utime[NR_CPUS], per_cpu_stime[NR_CPUS];

/* mm fault and swap info: this can arguably be seen as either mm-specific

or thread-specific */

unsigned long min_flt, maj_flt, nswap, cmin_flt, cmaj_flt, cnswap;

int swappable:1;

/* process credentials */

uid_t uid,euid,suid,fsuid;/* 用户标识*/

gid_t gid,egid,sgid,fsgid;/* 组标识*/

int ngroups;

gid_t groups[NGROUPS];

kernel_cap_t cap_effective, cap_inheritable, cap_permitted;

struct user_struct *user;

/* limits */

struct rlimit rlim[RLIM_NLIMITS];

unsigned short used_math;

char comm[16];

/* file system info */

int link_count;

struct tty_struct *tty; /* NULL if no tty */

/* ipc stuff */

struct sem_undo *semundo;

struct sem_queue *semsleeping;

/* tss for this task */

struct thread_struct tss;

/* filesystem information */

struct fs_struct *fs;

/* open file information */

struct files_struct *files;

/* memory management info */

struct mm_struct *mm;

/* signal handlers */

spinlock_t sigmask_lock; /* Protects signal and blocked */

struct signal_struct *sig;

sigset_t signal, blocked;

struct signal_queue *sigqueue, **sigqueue_tail;

unsigned long sas_ss_sp;

size_t sas_ss_size;

};

 

                       i.              缺省情况下,系统进程向量组大小是512,这表示系统中最多容纳512个进程。

                    ii.              状态

1.       运行态—正在运行

2.       等待态—可中断和不可中断良种

3.       停止态—已经被终止

4.死亡态—已经停止,但还占用一个task_struct结构

                 iii.              调度信息

调度算法据此信息觉得执行哪一个进程

      iv.       标识符

           系统中的每一个进程都有一个进程标识符。即pid,gpid

      v.内部进程通讯

           信号、管道、信号量等内部进程通讯机制

vi.链接

      包括指向父进程,兄弟进程,子进程的指针。除初始化进程外

vii.时间和计时器

      记录进程创建和运行时所占用的CPU时间

viii.文件系统

      进程在运行时可以打开和关闭的文件的描述符指针,并且包括两个指向VFS索引节点的指针。VFS的索引节点用来在文件系统内唯一地描述一个文件或目录,并且提供文件操作系统的统一接口。第一个索引节点是进程的根目录,第二个节点是当前工作目录。两个VFS索引节点都有一个计数字段用来表明指向节点的进程数。

ix.虚拟内存

      大多数的进程都需要虚拟内存,linux系统必须了解如何从虚拟内存映射到物理内存。

x.处理器的内容

      一个进程可以说是系统当前状态的总和。每当一个进程正在运行时,它都要使用处理器的寄存器及堆栈等资源,当一个进程挂起时,所有有关处理器的内容都要保存到进程的tast_struct中。当进程恢复运行时,所有保存的内容再装入处理器中。

注:在一个进程的task_struct中,有4对进程和组标识符

1.         Uid,gid:正在运行的进程用户标识符和组标识符

2.         有效uid和gid:有些程序可能将正在运行的uid,gid改为自己所有。这些程序就叫setuid程序,他们的uid和gid就称为有效uid和gid。相当于是,有操作权利的uid和gid.

3.         文件系统uid和gid:一般和有效uid,gid相同,用于保存文件存储权限。

4.         保留uid和gid:用来和POSIX标准兼容。在程序中,改动uid和gid的时候,可以用来保存原先的真实的uid和gid

二、    创建进程

初始化进程:始化进程是/etc/init , /bin/init, 或者/sbin/init中的一个。它通过/etc/inittab脚本来创建新的进程。它的pid=1,系统中所有进程都是初始化进程的子进程。

 

感言:看是看了,总静不下心来,不晓得为啥子。在浮躁社会中,难免浮躁。写点东西自我安慰吧!

相关阅读 更多 +
排行榜 更多 +
崩溃大陆2鱼竿如何获取

崩溃大陆2鱼竿如何获取

冒险解谜 下载
狙击手行动

狙击手行动

冒险解谜 下载
狙击突围行动最新版

狙击突围行动最新版

冒险解谜 下载