进程介绍一进程示例编译并运行这个程序:Sgcc fork test.c -o fork testS./fork testPID before forkO: 1991I am the parent process, my process ID is 1991I am the child process, my process ID is 1992再运行一遍,输出结果可能不同读者考虑一下为什么?
进程介绍-进程示例 编译并运行这个程序: $gcc fork_test.c -o fork_test $./fork_test PID before fork():1991 I am the parent process, my process ID is 1991 I am the child process, my process ID is 1992 再运行一遍,输出结果可能不同。 读者考虑一下为什么?
进程控制块★对进程进行全面描述的数据结构Linux中把对进程的描述结构叫做task_struct:struct task_struct {.M★传统上,这样的数据结构被叫做进程控制块PCB (process control blaock)
进程控制块 对进程进行全面描述的数据结构 Linux中把对进程的描述结构叫做task_struct: struct task_struct { . . } 传统上,这样的数据结构被叫做进程控制块 PCB(process control blaock)
进程控制块一信息分类★状态信息一描述进程动态的变化。★链接信息一描述进程的父/子关系。★各种标识符一用简单数字对进程进行标识。★进程间通信信息一描述多个进程在同一任务上协作工作。★时间和定时器信息一描述进程在生存周期内使用CPU时间的统计、计费等信息。★调度信息一描述进程优先级、调度策略等信息。★文件系统信息一对进程使用文件情况进行记录。★虚拟内存信息一描述每个进程拥有的地址空间。★处理器环境信息一描述进程的执行环境(处理器的寄存器及堆栈等)
进程控制块-信息分类 状态信息-描述进程动态的变化。 链接信息-描述进程的父/子关系。 各种标识符-用简单数字对进程进行标识。 进程间通信信息-描述多个进程在同一任务上协作工作。 时间和定时器信息-描述进程在生存周期内使用CPU时间的 统计、计费等信息。 调度信息-描述进程优先级、调度策略等信息。 文件系统信息-对进程使用文件情况进行记录。 虚拟内存信息-描述每个进程拥有的地址空间。 处理器环境信息-描述进程的执行环境(处理器的寄存器及 堆栈等)
进程控制块一Linux进程状态及转换fork()资源到位wake_up_interruptible()收到信号SIGCONTwake_up()或收到信号wake_up()TASK RUNNING就绪资源到位wake_up()TASKINTERRUPTIBLschedule()时间片耗尽浅度睡眠TASK UNINTERRUPTIBLE深度睡眠占有CPU等待资源到位等待资源到位执行interruptible_sleep_on()sleep_on()schedule()schedule()schedule()ptrace()do_exit()TASK_STOPPEDTASK ZOMBIE暂停僵死
进程控制块-Linux进程状态及转换 fork() TASK_RUNNING 就绪 TASK_INTERRUPTIBLE 浅度睡眠 TASK_UNINTERRUPTIBLE 深度睡眠 TASK_STOPPED 暂停 TASK_ZOMBIE 僵死 占有CPU 执行 do_exit() schedule() ptrace() schedule() 时间片耗尽 等待资源到位 sleep_on() schedule() 等待资源到位 interruptible_sleep_on() schedule() 资源到位 wake_up_interruptible() 或收到信号 wake_up() 资源到位 wake_up() 收到信号SIGCONT wake_up()
进程控制块一进程标识符★每个进程都有一个唯一的标识符,内核通过这个标识符来识别不同的进程。心进程标识符PID也是内核提供给用户程序的接口,用户程序通过PID对进程发号施令心PID是32位的无符号整数,它被顺序编号★每个进程都属于某个用户组。task_struct结构中定义有用户标识符UID(UserIdentifier)和组标识符GID(GroupIdentifier)这两种标识符用于系统的安全控制系统通过这两种标识符控制进程对系统中文件和设备的访问
进程控制块-进程标识符 每个进程都有一个唯一的标识符,内核通过 这个标识符来识别不同的进程 。 ❖进程标识符PID也是内核提供给用户程序的接口, 用户程序通过PID对进程发号施令 。 ❖PID是32位的无符号整数,它被顺序编号 每个进程都属于某个用户组。 ❖task_struct结构中定义有用户标识符UID(User Identifier)和组标识符GID(Group Identifier) ❖这两种标识符用于系统的安全控制 ❖系统通过这两种标识符控制进程对系统中文件和 设备的访问