pcb在linux中的数据结构名是,Linux的进程管理

暂停态:进程需要接受某种特殊处理而暂时停止运行所处的状态。通常进程在接受到外部进程的某个信号进入暂停态,例如,正在接受调试的进程就处于这种状态。

5.僵死态:进程的运行已经结束,但它的任务结构体仍在系统中。

File?id=df3txtzw_59dfdzhcqf_b

三.核心态和用户态

Linux的进程处理机上运行时,处理机提供了两种不同的的执行状态,

核心态(kernel mode)和用户态(user mode)。

核心态又称系统态,它具有较高的特权,能执行所有的机器指令,包括由操作系统执行的特权指令,能访问所有的寄存器和存储区域,能直接控制所有的系统资源。 Linux在执行内核程序时是处于核心态下。

用户态是进程的普通执行状态,在用户态下进程具有较低的特权, 只能执行规定的机器指令,不能执行特权指令。进程在用户态下只能访问进程的存储空间。在用户态下进程不能与系统硬件相互作用,不能访问系统资源。

四.进程空间和系统空间

系统为每个进程分配一个独立的虚拟地址空间(虚拟内存)。进程的虚拟地址空间被分做两个部分,用户空间和系统空间。

用户进程本身的程序和数据(可执行映象)映射到用户空间中。进程空间中还有进程运行用户程序时使用的堆栈,称为进程堆栈。

系统对这个进程进行控制和管理的信息,如进程控制块等,也映射到进程空间。

内核堆栈也在进程空间中。

内核被映射到所有进程的系统空间中。它们只允许在具有较高特权的核心态下访问。进程运行在特权较低的用户态下时,不允许它直接访问系统空间。

进程只能通过系统调用(system call)转换为核心态后,才能访问系统空间。

一个进程在运行过程中,总是在两种执行状态之间不断地转换。

五.进程上下文和系统上下文

把系统提供给进程的处于动态变化的运行环境总和称为进程上下文。系统中的每一个进程都有它自己的上下文。

进程因时间片用完或因等待某个事件而阻塞时,进程调度需要把CPU的使用权从当前进程交给另一个进程,这个过程称为进程切换(procdss switching)。

进程的切换又称为上下文切换(context switching).。

在系统内核为用户进程服务,例如进程执行一个系统调用时,进程的执行状态要从用户态转换为核心态。但是,此时内核的运行仍是进程的一部分,所以说这时内核是运行在进程上下文中。

系统在完成自身任务时的运行环境称为系统上下文(system context)。

File?id=df3txtzw_60g8mpvwgt_b

内核在系统上下文中执行时不会阻塞。

§2.2 Linux进程的任务结构体

1.进程的状态和标志

数据类型

名称

功能及作用

volatile long

state

进程的状态

unsigned long

flags

进程的标志

2.进程的标识

数据类型

名称

功能及作用

int

pid

进程标识号

unsigned short

uid, gid

用户标识号,组标识号

unsigned short

euid, egid

用户有效标识号,组有效标识号

unsigned short

suid, sgid

用户备份标识号,组备份标识号

unsigned short

fsuid, fsgid

用户文件标识号,组文件标识号

3.进程的族亲关系

数据类型

名称

功能及作用

struct task_struct

*p_opptr

指向祖先进程任务结构体的指针

struct task_struct

*p_pptr

指向父进程任务结构体的指针

struct task_struct

*p_cptr

指向子进程任务结构体的指针

struct task_struct

*p_ysptr

指向弟进程任务结构体的指针

s

File?id=df3txtzw_61gvfnkhgv_b

truct task_struct

*p_osptr

指向兄进程任务结构体的指针

4.进程间的链接信息

数据类型

名称

功能及作用

struct task_struct

*next_task

指向下一个任务结构体的指针

struct task_struct

*prev_task

指向上一个任务结构体的指针

struct task_struct

*next_run

指向可运行队列的下一个任务结构体的指针

struct task_struct

*prev_run

指向可运行队列的上一个任务结构体的指针

5.进程的调度信息

数据类型

名称

功能及作用

long

counter

时间片计数器

long

priority

进程优先级

unsigned long

rt_priority

实时进程的优先级

unsigned long

policy

进程调度策略

6.进程的时间信息

数据类型

名称

功能及作用

long

start_time

进程创建的时间

long

utime

进程在用户态下耗费的时间

long

stime

进程在核心态下耗费的时间

long

cutime

所有子进程在用户态下耗费的时间

long

cstime

所有子进程在核心态下耗费的时间

unsigned long

timeout

进程申请延时

7.进程的虚存信息

数据类型

名称

功能及作用

struct mm_struct

*mm

进程的虚存信息

struct desc_struct

*ldt

进程的局部描述符表指针

unsigned long

saved_kernel_stack

核心态下堆栈的指针

unsigned long

kernel_stack_page

核心态下堆栈的页表指针

8.进程的文件信息

数据类型

名称

功能及作用

struct fs_struct

*fs

进程的可执行映象所在的文件系统

struct files_struct

*files

进程打开的文件

9.与进程间通信有关的信息

数据类型

名称

功能及作用

unsigned long

signal

进程接收到的信号

unsigned long

blocked

阻塞信号的掩码

struct signal_struct

*sig

信号处理函数表的指针

int

exit_signal

进程终止的信号

struct sem_undo

semundo

进程要释放的信号量

struct sem_queue

*semsleeping

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

10.其它信息

数据类型

名称

功能及作用

int

errno

系统调用的出错代码

long

debugreg[8]

进程的8个调试寄存器

char

comm[16]

进程接收到的信号

§2.3 Linux的进程调度

一.Linux进程调度方式

Linux系统采用抢占调度方式,又称可剥夺调度方式。采用这种调度方式时,对于当前运行的进程而言,当有更紧急的进程到来时,系统将剥夺当前进程使用处理机的权利,立即停止它在处理机上的运行,而把处理机分配给那个更紧急的进程。

Linux采用时间片轮转法。对某个运行中的进程,当它的时间片用完时,系统将停止它的运行并把处理机分配给其它进程。

二.Linux进程调度策略

Linux的进程分为普通进程和实时进程,实时进程的优先级高于普通进程。

Linux对实时进程和普通进程采用不同的调度策略,在基于优先级的算法下,实时进程优先于普通进程。

Linux进程的策略有三种,

符号常量

意义

SCHED_OTHER

普通进程的时间片轮转算法

SCHED_FIFO

实时进程的先进先出算法

SCHED_RR

实时进程的时间片轮转算法

普通进程按照SCHED_OTHER调度策略进行进程调度。

实时进程按照SCHED_FIFO或SCHED_RR策略进行调度。

SCHED_FIFO是按先进先出方法选择下一个使用CPU的进程。

SCHED_RR是实时进程的时间片轮转法策略(Round Robin)。

三.Linux进程调度依据

policy是进程的调度策略

SCHED_FIFO、SCHED_RR的是实时进程,

SCHED_OTHER是普通进程。

priority是进程优先级。

它还表示分配给进程使用CPU的时间片。

counter是进程使用CPU运行时间的计数值。随时钟滴答减1。counter=0时,进程的时间片已用完。

static inline int goodness(struct task_struct * p,

struct task_struct * prev, int this_cpu)

{

int weight;

if (p->policy != SCHED_OTHER)

return 1000 + p->rt_priority;

weight = p->counter;

……

……

return weight;

}

四.Linux进程调度方法

Linux进程调度采用动态优先级法,调度对象是可运行队列,

可运行队列中优先级大的进程首先得到CPU投入运行。

进程在运行中,counter的代表进程的动态优先级。

Linux采取了加权的方法来保证实时进程优先于普通进程。

普通进程的权值就是它的counter的值,

而实时进程的权值是它的rt_priority的值加1000。

在调度过程中,调度程序检查可运行队列中所有进程的权值,

选择其中权值最大的进程做为下一个运行进程。

五.进程调度时机

时机1.进程状态发生变化时。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值