如何 网站推广,贵州省建设厅官方网站电话,flash网站的制作,长春建站怎么做进程切换#xff08;上下文切换#xff09;#xff1a;
定义#xff1a;暂停当前运行进程#xff0c;从运行状态变成其他状态#xff0c;调度另一个进程从就绪状态变成运行状态要求#xff1a;切换前#xff0c;保存进程上下文#xff1b;切换后#xff0c;恢复进程…进程切换上下文切换
定义暂停当前运行进程从运行状态变成其他状态调度另一个进程从就绪状态变成运行状态要求切换前保存进程上下文切换后恢复进程上下文快速切换进程存储的生命周期的信息寄存器PCSP...CPU状态内存地址空间进程控制块PCB内核的进程状态记录
内核为每个进程维护了对应的进程控制块PCB内核将相同状态的进程的PCB放置在同一队列进程控制块结构
进程标识信息进程状态信息进程占用的资源存储资源、内核堆栈等保护现场用的内容当前进程在哪个队列
其中内存地址空间结构中会包含有哪些内存块及地址空间第一级页表起始地址置换相关结构 进程创建
Windows进程创建APICreateProcessUnix进程创建系统调用fork/exec。fork()把一个进程复制成两个进程父子进程有各自的PID接下来的exec()用新程序来重写当前进程PID不改变。空闲进程创建
当用户代码执行完之后系统将在空闲进程中执行。 第一个内核线程的创建 fork()的开销
对子进程分配内存复制父进程的内存和CPU寄存器到子进程里开销昂贵
99%调用fork是为了接下来调用exec考虑到fork()操作中内存复制是没有作用的子进程可能会关闭打开的文件和连接因此考虑将其合并到一个调用中于是出现了vfork()。
vfork()
创建进程时不再创建一个同样的内存映像而是当调用exec()时才开始复制而要被覆盖或者关闭的资源不再进行复制一些时候称为轻量级fork()子进程应该几乎立刻调用exec()现在使用Copy on WriteCOW技术
进程加载exec
exec调用成功时是相同的进程运行了不同的程序exec允许一个进程加载一个不同段程序,并在MAIN执行_start允许一个进程指定参数的数量argc和字符串参数数字argv允许进程指定不同的控制流OS中可指定不同的应用程序即调用成功相同进程运行的是不同的程序!Code(代码段)stack(堆栈)heap(堆)等完全重写
进程等待与退出
父进程等待子进程
1. wait()系统调用用于父进程等待子进程的结束
子进程结束时通过exit()向父进程返回一个值父进程通过wait()接受并处理返回值
2. wait()系统调用的功能
有子进程存活时父进程进入等待状态等待子进程的返回结果。当某子进程调用exit()时唤醒父进程将exit()返回值作为父进程中wait的返回值有子进程调用exit()而父进程还未调用wait()处理时子进程被称为僵尸进程。如果此时父进程调用wait()则直接处理并返回无子进程或无子进程存活时wait()也是立刻返回
3. exit()用于进程的有序终止
进程结束执行时调用exit()完成进程资源回收。
4. exit()系统调用的功能
将调用参数作为进程的结果返回关闭所有打开的文件等占用资源释放内存释放大部分进程相关的内核数据结构检查是否父进程是存活的如果父进程存活保留结果的值直到父进程用wait()处理进入僵尸状态如果父进程不存活则子进程为孤儿进程直接释放所有数据结果进程结束清理所有等待的僵尸进程
其他进程控制系统调用
优先级控制nice()指定进程的初始优先级unix系统中进程优先级会随执行时间而衰落进程调试支持ptrace()允许一哥进程控制另一个进程的执行设置断点和查看寄存器定时sleep()可以让进程在定时器的等待队列中等待指定。为什么要让父进程等而不是直接结束?
当进程执行完毕退出后几乎所有资源都回收到OS中。但有个资源很难回收就是PCBPCB是代表进程存在的唯一标识OS要依据PCB执行回收。这个功能由父进程完成。