进程
{
正文段(text)
用户数据段(user segment)
系统数据段(system segment)
}
程序
{
正文段(text)
用户数据段(user segment)
}
至于他们在哪存放的可自行百度。。。
系统数据段(system segment)这个就挺重要了,其实它就是task_struct了,task_struct其实就是通常所说的“进程控制块”即PCB。
task_struct是什么结构体呢?
就是这些:
{
进程状态(State)
·进程调度信息(Scheduling Information)
·各种标识符(Identifiers)
·进程通信有关信息(IPC:Inter_Process Communication)
·时间和定时器信息(Times and Timers)
·进程链接信息(Links)
·文件系统信息(File System)
·虚拟内存信息(Virtual Memory)
· 页面管理信息(page)
· 对称多处理器(SMP)信息
·和处理器相关的环境(上下文)信息(Processor Specific Context)
· 其它信息
}
进程状态(State)分为{TASK_RUNNING(运行),TASK_INTERRUPTIBLE(可中断等待),TASK_UNINTERUPTIBLE(不可中断等待),TASK_ZOMBLE(僵死),TASK_STOPPED(暂停),TASK_SWAPPING(换出中)}
Linux中处于等待状态的进程分为两种:可中断的等待状态和不可中断的等待状态。处于可中断等待态的进程可以被信号唤醒,如果收到信号,该进程就从等待状态进入可运行状态,并且加入到运行队列中,等待被调度;而处于不可中断等待态的进程是因为硬件环境不能满足而等待,例如等待特定的系统资源,它任何情况下都不能被打断,只能用特定的方式来唤醒它,例如唤醒函数wake_up()等。
进程上下文
一般用户程序运行在用户空间,当一个程序执行了系统调用,或者触发了某个异常,它将陷入“内核态”(CPU总处于内核态{进程上下文,中断上下文},用户态其中之一),此时,我们称内核“代表进程执行”并处于进程上下文中。进程上下文其实是进程执行活动全过程的静态描述。我们把已执行过的进程指令和数据在寄存器与堆栈中的内容称为上文,把正在执行的指令和数据在寄存器与堆栈中的内容称为正文,把待执行的指令和数据在寄存器与堆栈中的内容称为下文。