@yanglt7
2018-05-17T09:05:59.000000Z
字数 6280
阅读 1286
操作系统
7.1 进程的定义
7.2 进程的组成
7.3 进程的特点
7.4 进程控制块结构
进程标识信息
处理机状态信息保存区。保存进程的运行现场信息
链表:同一状态的进程其PCB成一链表,多个状态对应多个不同的链表
索引表:同一状态的进程归入一个index表(有index指向PCB),多个状态对应多个不同的index表
7.5 进程的生命周期管理
在以下情况下,进程等待(阻塞):
进程只能自己阻塞自己,因为只有进程自身才能知道何时需要等待某种事件的发生
7.6 进程状态变化模型
Null -> New:一个新进程被产生出来执行一个程序
New -> Ready:当进程被创建完成并初始化后,一切就绪准备运行时,变为就绪状态(时间很短)
Ready -> Running:处于就绪状态的进程被进程调度程序选中后,就分配到处理机上来运行
Running -> Ready:处于运行状态的进程在其运行过程中,由于分配给它的处理机时间片用完而让出处理机(操作系统完成)
Running -> Blocked:当进程请求某样东西且必须等待时
Blocked -> Ready:当进程要等待某事件到来时,它从阻塞状态变到就绪状态
7.7 进程挂起
7.8 为什么使用线程:
案例
编写一个MP3播放软件
7.9 什么是线程
7.10 线程的实现
用户线程:在用户空间实现;
内核线程:在内核中实现;
轻量级线程:在内核中实现,支持用户线程;
7.12 进程控制
(一)上下文切换
(二)进程创建
Windows进程创建API:CreateProcess(filename)
Unix进程创建系统调用:fork/exec
idleproc | proc_init() |
---|---|
分配idleproc需要的资源 | alloc_proc() ↔ kmalloc()(分配存储资源) |
初始化idleproc进程控制块 | alloc_proc() |
完成idleproc的初始化 | proc_init() |
initproc | proc_init() |
---|---|
初始化trapframe | Kernel thread()tf ↔ do_fork() ↔ copy_thread() |
初始化initproc | alloc_proc() |
初始化内核堆栈 | setup_stack() |
内核共享 | copy_stack() |
把initproc放到就绪队列 | |
唤醒initproc |
fork()的实现开销
在99%的情况里,我们在调用fork()之后是调用exec()
(三)进程加载
(四)进程等待和退出
wait()系统调用用于父进程等待子进程的结束
wait()系统调用的功能
优先级控制
进程调试支持
定时