进程
来源:互联网 发布:高级程序员的网络 编辑:程序博客网 时间:2024/04/27 17:57
进程模型:
一个进程就是一个正在执行程序的实例,包括程序计数器(PC)、寄存器(PS)和变量的当前值。从概念上讲,它拥有自己的虚拟CPU。当然,实际上真正的CPU在各自进程之间来回切换。
关键思想: 一个进程是某种类型的一个活动,它有程序、输入、输出以及状态。单个处理器可以被若干个进程共享,它使用某种调度算法决定何时停止一个进程的工作,并转而为另一个进程提供服务。
如果一个程序运行了两边,则属于两个进程,但是操作系统能够使它们共享代码,因次内存中一个一个副本。
进程创建:
导致进程创建的4种原因:
1)系统初始化
2)执行了正在运行的进程所调用的创建进程的调用
3)用户请求创建一个新进程
4)一个批处理作业的初始化
a) 启动程序时,通常会创建若干个进程。其中有些是前台进程,也就是同用户交互并且替他们完成工作的那些进程。其他的是后台进程,这些进程与特定的用户没有关系。
b) 一个正在运行的进程经常发出系统调用,以便创建一个或多个新的进程协助其工作。
c) 在交互式系统中,键入一个命令或者点(双)击一个图标就可以启动一个程序。
在UNIX系统中只有一个系统调用可以用来创建新进程;fork。这个系统调用会创建一个与调用进程相同的副本。在调用了fork后,这两个进程(父进程和子进程)拥有相同的存储映像、相同的环境字符串和相同的打开文件。通常子进程接着执行一个execve或一个类似的系统调用,以修改其存储映像并运行一个新的程序。
进程的退出:
进程通常由以下条件引起的退出:
1)正常退出(自愿的)
2)出错退出(自愿的)
3)严重错误退出(非自愿)
4)被其他进程杀死(非自愿)
a)多数进程是由于完成了它们的工作而终止。在UNIX中该调用时exit( ),而Windows中,相关的调用是ExitProc( )。
d)某个进程执行了一个系统调用通知操作系统杀死某个其他进程。在UNIX中是kill,在Windows是TerminateProcess。
进程的层次结构:
在Windows中没有进程层次的概念,所有的进程都是地位相同的。唯一类似于进程层次的暗示是:在创建进程的时候,父进程得到一个令牌(句柄),该句柄可以用来控制子进程。但是,它有权把这个令牌传送给某个其他进程。在UNIX中,进程就不能被剥夺其子女的”继承权“。
进程的状态:
进程的3中状态;
1)运行态(该时刻进程实际占用CPU)
2)就绪态(可运行,但因为其他进程正在运行而暂时停止)
3)阻塞态(除非某种外部事件发生,否则进程不能运行)
(运行态->阻塞态)在操作系统发现进程不能继续运行下去时,发生。
(运行态《=》就绪态)由系统调用引起的
进程实现的细节:
操作系统维护了一张表格(一个结构数组),即进程表(process table)。每个进程占用一个进程表项(或称进程控制块)。该表项包含了进程状态的重要信息,包括程序计数器、堆栈指针、内存分配状况、所打开文件的状态、账号和调度信息,以及其他咋在进程由运行态转换到就绪态或阻塞态时必须保存的信息。
中断发生后,操作系统最底层的工作步骤:
1)硬件压入堆栈程序计数器等。
2)硬件从中断向量装入新的程序计数器。
3)汇编语言过程保存寄存器值。
4)汇编语言过程设置新的堆栈。
5)C中断服务例程运行(典型地读和缓冲输入)。
6)调度程序决定下一个将运行的进程。
7)C语言过程返回至汇编语言代码。
8)汇编语言过程开始运行新的当前进程。
CPU 利用率 = 1 - pn。
- 进程
- 进程
- 进程
- 进程
- 进程
- 进程
- 进程
- 进程
- 进程
- 进程
- 进程
- 进程
- 进程
- 进程
- 进程
- 进程
- 进程
- 进程
- boost 编译指南
- instr函数的使用-oracle
- 主流cms如何使用帝国备份王网站搬家
- FPGA 可测试性
- Docker ubuntu14.04安装
- 进程
- android phonegap CordovaView 调整字体大小(仿微信)
- 剑指offer 旋转数组的最小数字
- 搜索算法1之1002
- Error:(2) Apostrophe not preceded by \ (in Default product can't deleted!)
- 用幽默抵御一切无趣,这是壹读做好内容的秘诀之一
- ios runtime 交换方法实现
- linux下安装memcacheq
- 【杭电】[1432]Lining Up