知识大全 读核日记(三)
Posted 知
篇首语:一箫一剑平生意,负尽狂名十五年。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 读核日记(三)相关的知识,希望对你有一定的参考价值。
作者: sunmoon 在linux 中每一个进程都由task_struct 数据结构来定义 task_struct就是我们通常所说的PCB 她是对进程控制的唯一手段也是最有效的手段 当我们调用fork() 时 系统会为我们产生一个task_struct结构 然后从父进程 那里继承一些数据 并把新的进程插入到进程树中 以待进行进程管理 因此了解task_struct的结构对于我们理解任务 调度(在linux 中任务和进程是同一概念)的关键 在进行剖析task_struct的定义之前 我们先按照 我们的理论推一下它的结构 进程状态 将纪录进程在等待 运行 或死锁 调度信息 由哪个调度函数调度 怎样调度等 进程的通讯状况 因为要插入进程树 必须有联系父子兄弟的指针 当然是task_struct型 时间信息 比如计算好执行的时间 以便cpu 分配 标号 决定改进程归属 可以读写打开的一些文件信息 进程上下文和内核上下文 处理器上下文 内存信息 因为每一个PCB都是这样的 只有这些结构 才能满足一个进程的所有要求 打开/include/linux/sched h 找到task_struct 的定义 struct task_struct /* these are hardcoded don t touch */ 这里是一些硬件设置对程序原来说是透明的 其中state 说明了该进程是否可以执行 还是可中断等信息 Flage 是进程号 在调用 fork() 时给出 addr_limit 是区分内核进程 与普通进程在内存存放的位置不同 volatile long state; /* unrunnable runnable > stopped */ unsigned long flags; /* per process flags defined below */ int sigpending; mm_segment_t addr_limit; /* thread address space: xBFFFFFFF for user thead xFFFFFFFF for kernel thread */ struct exec_domain *exec_domain; long need_resched; /* various fields */ count 是 计数器 priorrity 是优先级 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 tas k_struct *next_run *prev_run; /* task state */ 定义可 task 运行的状态 以及信号 struct linux_binfmt *binfmt; int exit_code exit_signal; int pdeath_signal; /* The signal sent when the parent dies */ /* 定义可进程的用户号 用户组以及进程组*/ unsigned long personality; int dumpable: ; int did_exec: ; 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 */ 在调度中用的一些hash 表 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 wait () 等待队列 */ 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: ; /* 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 m[ ]; /* 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; ; 在分析完 这个结构之后 还有很多问题要想 也许不能读 但框架要搞好 需要向的问题有以下几个 在task_struct 中用的常量在那里定义呢 如最大进程个数 最多支持的cpu 个数 等等 在调用fork() 时 系统是分配一块内存 会是这样么 malloc( sizeof(struct task_struck)) 拷贝一些变量 还是和服进程公用一部分内存 malloc 函数怎么实现(在内存管理那一部分 但此处 我认为不能不想) 对于线程来说 又如何实现呢? 调度策略函数 schedul() 有几种形势 时间片轮转 抢占式 优先级抢占式 多级反馈制 除了时间片轮转外都要对进程树 进行遍历 (对于实时进程 的fifo机制不用)linux 是怎样保证了高效呢?如果把最大线成数修改 效率会不会降低 进程通讯用到的管道 信号结构如何 待续 cha138/Article/program/Oracle/201311/18993相关参考
小学三年级孝敬老人日记怎么写孝敬长辈是我们中华民族的传统美德,我们作为新时代的小学生,同样也要孝敬长辈,我就是这样去做的。“香九龄,能温席;孝于亲,所当职”。虽然这个年代冬季都有电热毯了,用不着孩子去
知识大全 小学生三年级上册数学日记是用300格写还是用数学本写?
小学生三年级上册数学日记是用300格写还是用数学本写?反正不用数学本写三年级小学上册的数学日记怎么写今天,妈妈带我到文具店买文化用品。来到文具店,妈妈让我自己挑选文具,我满心欢喜的跑到柜台前,很有礼貌
类似《早》第三自然段的日记200至300字冬天在一步步后退。这几天我一直抱着希望——来一场大雪吧!因为这个冬天一直这样平淡无奇。早上醒来,看见窗台上有白色的东西闪耀着晶莹的光。我拉开窗帘,这个世界刹那
小昆虫之类观察日记小学生三百字四年级这星期,老师布置了一道写小虫子的作文题目。今天,我和爸爸就去公园里观察小虫子。突然,我发现地上有几只蚂蚁在爬动。“爸爸,这里有好多蚂蚁”,我惊奇地说,“今天观察蚂蚁
三年级苏教版妈妈我想对你说日记80字左右如果说初一我们是小孩,初二是不知愁味,那么,初三就是一首难唱的歌。初三是一种沉重的压力,没有了以往的欢声笑语,告别了车马炮前的苦思乱想,失去了假日的休闲时光,去
大物理学家牛顿小时候在班上学习成绩倒数第一名,因而曾被老师和同学称作“笨蛋”;生物学家达尔文的日记里记载:教师和家长都曾
大物理学家牛顿小时候在班上学习成绩倒数第一名,因而曾被老师和同学称作“笨蛋”;生物学家达尔文的日记里记载:教师和家长都曾认为他智力低下;世界著名的伟大作家高尔基只读过小学三年级;陶行知先生曾提醒老师们
日记怎么数学日记怎么发的老师的邮箱里知道了老师的邮箱,然后把日记用文档的形式存好了,作为链接学生班级邮箱里的作业怎样变成纸质作业没有打印机。如果是WORD的,直接在电脑上解答如果是PDF的,用PDF专
知识大全 老师罚我给大家唱歌,为此写一篇日记或检讨(最好日记)
老师罚我给大家唱歌,为此写一篇日记或检讨(最好日记)对不起,我知道我犯错了。以后要好好学习,不再犯错了。我在这里诚挚的到歉大概就这样写,希望采纳!以英语作业抄错、老师罚我写一篇日记February27
山西汾阳贾家庄生态园一曰游作文三百字,作文:汾阳贾家庄生态园,贾家庄生态园日记100字今天,我到了山西省汾阳市贾家庄生态园,是由贾家庄村自行设计、自筹资金、自行建造.它是国家首批农业旅游示范点一进园内
知识大全 我是出纳新手请给我一份;现金日记账和银行存款日记账明细账电子表格谢谢
我是出纳新手请给我一份;现金日记账和银行存款日记账明细账电子表格谢谢,!楼主给个邮箱,为你传送相关资料若干,可以参考学习,应用。。。出纳新手,恳求一份记账凭证、现金日记账、银行存款日记账、明细账exc