Chinaunix首页 | 论坛 | 博客
  • 博客访问: 260176
  • 博文数量: 84
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 927
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-06 23:00
个人简介

growing

文章分类

全部博文(84)

文章存档

2017年(6)

2016年(61)

2015年(17)

我的朋友

分类: LINUX

2016-06-07 11:54:01

一、linux进程控制块task_struct部分内容

   1.进程状态
    R-running, S-sleeping, D-disk sleeping.
    T-stopped, X-dead ,  Z-zombie
  2.进程调度信息
     need_resched 调度标志
     counter 时间片
     nice 优先级(可改变counter)
     rt_priority  实时优先级
     policy 调度策略(下文分析)

3.标识符PID
    通常新创建为后前一个创建+1。(PID本来是32位的无符号整数为了与16位硬件平台的Linux系统保持兼      容,MAX=32767。)当内核在系统中创建第32768个进程时,重新开始使用已闲置的PID号。
   

域名

含义

Pid

进程标识符

Uidgid

用户标识符、组标识符

Euidegid

有效用户标识符、有效组标识符

Suidsgid

备份用户标识符、备份组标识符

Fsuidfsgid

文件系统用户标识符、文件系统组标识符


 4.进程通信有关信息

域名

含义

Spinlock_t sigmask_lock

信号掩码的自旋锁

Long blocked

信号掩码

Struct signal  *sig

信号处理函数

Struct sem_undo *semundo

为避免死锁而在信号量上设置的取消操作

Struct sem_queue *semsleeping

与信号量操作相关的等待队列

 

5. 进程链接信息

名称

英文解释

中文解释 [指向哪个进程]

p_opptr

Original parent

祖先

p_pptr

Parent

父进程

p_cptr

Child

子进程

p_ysptr

Younger sibling

进程

p_osptr

Older sibling

兄进程

Pidhash_next

Pidhash_pprev

 

进程在哈希表中的链接

Next_task prev_task

 

进程在双向循环链表中的链接

Run_list

 

运行队列的链表



二、进程常见调度算法

1.先来先服务算法
FCFS first come first serve

2.短作业优先法
选出一个估计运行时间最短的进程先处理。

3.优先级调度算法。

1)非抢占式

2)抢占式。可被优先级更高的抢占。

3)利用动态优先权使作业的优先随着等待时短作业,又虑了作业到达的先后次序,不会使长作业长期得不到服务。

4.时间片轮转算法。

1)当执行的时间片用完时,由一个计时器发出时钟中断请求停止该进程并将它送往就绪队列的末尾。然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。

2)多级队列:

    (1) 应设置多个就绪队列并为其赋予不同的优先级。
    第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。

    (2) 当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如 果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行;如果它在第二队列中运行一个时间片后仍未 完成,再依次将它放入第三队列,……,如此下去,当一个长作业(进程)从第一队列依次降到第n队列后,在第n 队列便采取按时间片轮转的方式运行。

    (3) 仅当第一队列空闲时,调度程序才调度第二队列中的进程运行。如果处理机正在第i队列中为某进程服务时,又有新进程进入优先权较高的队列(第1~(i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行 的进程放回到第i队列的末尾,把处理机分配给新到的高优先权进程。

   总结:在保证优先级的前提下,防止一个进程长时间占用系统资源。

三、nice及优先级
PRI(new) = PRI(old) + nice.
nice范围是(-20到+19)。

1、nice设置一个要执行command进程的nice值,其命令格式是 nice –n 数字 command_option,如果这里不指定adjustment,则默认为10。例:

2、renice设置一个已经在运行的进程的nice值.

renice命令与nice命令的优先级参数的形式是相反的。直接以优先级作为参数即可,不能加上“-”号!

例:
renice 19 1799
  将PID为1799的进程优先级设置为最高(-19)
--------------------------------------------
将当前目录下的documents目录打包,并且赋予tar进程最高的优先级:
  代码示例:
nice --19 tar zcf pack.tar.gz documents



阅读(1661) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~