讨论区讨论详情

【学堂笔记展览馆】《操作系统》第十二章 进程控制
2015-05-08 21:05:15

12.1 进程切换(上下文切换)

1 暂停当前运行进程, 从运行状态变成其他状态

2 调度另一个进程从就绪状态变成运行状态 


进程切换的要求(切换由需要速度快, 由汇编完成)

1 切换前, 保存进程上下文

2 切换后, 恢复进程上下文

3 快速切换


proc_thread.png

ucore+进程/线程切换流程


12.2 进程创建 fork()

Windows进程创建API: CreateProcess(filename)

Unix 进程创建系统调用: fork/exec


fork() 创建一个继承的子进程

  复制父进程的所有变量和内存

  复制父进程的所有CPU寄存器(有一个寄存器例外)

fork()的返回值

  子进程的fork()返回0

  父进程的fork()返回子进程的标示符

  fork返回值课方便后续使用, 子进程可使用getpid()获取PID

fork()的地址空间复制

  对于父进程fork(), 返回child PID, 对于子进程返回值为0

程序加载和执行

系统调用exec()

空闲进程


12.3 进程加载 exec()

允许进程“加载”一个完全不同的程序, 并从main开始执行

允许进程加载时指定启动参数(argc, argv)

exe调用成功时

    它是相同的进程

    但是运行了不同的程序

代码段,堆栈和堆等完全重写


12.4 进程等待与退出 wait()和exit()

wait() 系统调用用于父进程等待子进程的结束

子进程结束时通过exit()向父进程返回一个值

父进程通过wait()接受并处理返回值

wait()系统调用的功能

有子进程存活时, 父进程进入等待状态, 等待子进程的返回结果

有僵尸子进程等待时, wait()立即返回其中一个值

无子进程存活时, wait()立刻返回

exit() 进程的有序终止

进程结束执行时调用exit(), 完成进程资源回收

exit()系统调用的功能

  检查是否父进程是存活着的,

      若存活,保留结果的值直到父进程需要它,进入僵尸

      若没有, 它释放所有的数据结构, 进程结果

  清理所有等待的僵尸进程


回复:

还没有人发言哦,来抢沙发吧~

请先登录

说点什么吧~

学堂公告

各位MOOCer大家好 (^-^)V

欢迎来到学堂在线广场~

在这里你可以玩活动,看资讯,晒笔记。

还可以交学友、发心情、聊人生。

在学堂的每一天,就从这里开始吧!

点击 广场指南 了解更多

推荐活动

我要举报
提交