进程

来源:互联网 发布:java web ftp下载文件 编辑:程序博客网 时间:2024/04/25 13:00

进程:正在运行的程序

1、网络服务器:当一个请求进入时,服务器检查是否其需要的网页在缓存中。如果是,则把网页发送回去,如果不是,则启动一个磁盘请求以获取网页。然而,从cpu的角度看,磁盘请求需要漫长的时间(因磁盘的速度远小于内存处理,且是外围设备),这时一般是先切换到其他进程运行

2、在某一瞬间,一个cpu只能运行一个进程,但在1秒钟期间,它可能运行多个进程,这样就产生了并行的错觉(伪并行),但如果该系统有两个或多个cpu(多核)共享一个物理内存,则是真正硬件并行,同一瞬间能运行多个进程

3、进程模型

一个进程就是一个正在执行程序的实例,包括程序计数器 、寄存器和变量的当前值

每个进程有自己的逻辑程序计数器,并且每个程序都独立地运行。实际上只有一个物理程序计数器,所以在每个程序运行时,它的逻辑程序计数器被装入实际的程序计数器中。当该程序执行结束(或暂停执行)时,物理程序计数器被保存在内存中该进程的逻辑程序计数器中

4、进程和程序的区别

厨师做菜的例子:厨师是处理器(cpu),而做菜的各种原材料就是输入数据,做菜的食谱就是程序。进程就是厨师阅读食谱,取来各种原料以及做菜一系列动作总和

5、创建进程:前台进程、后台进程(守护进程)

键入一个命令或双击一个图标就启动一个程序,这两个动作的任一都会开始一个新的进程,并在其中运行所选择的程序

从技术上看,新进程都是由于一个已存在的进程执行了一个用于创建进程的系统调用而创建的

UNIX系统中

只有一个系统调用可以用来创建新、进程fork。调用fork后,这两个进程(父和子进程)拥有相同的存储映像、同样的环境字符串和同样的打开文件。然后,子进程执行execve或一个类似的系统调用,以修改其存储映像并运行一个新的程序

Windows系统中

情形正相反,一个win32函数调用CreateProcess既处理进程创建,也负责把正确的程序装入新的进程

在UNIX和Windows中,进程创建后,父进程和子进程有各自不同的地址空间。在UNIX中,子进程的初始化地址空间是父进程的一个副本。但是这里涉及两个不同的地址空间,可认为是后来修改了子进程的地址空间,让它不同于父进程的。但是对于一个新创建的进程而言,确实有可能共享其创建者的其他资源,如打开的文件等。而Windows中,从一开始父进程的地址空间和子进程的地址空间就是不同的了

6、进程的层次结构

在UNIX中,进程和它的所有子女以及后裔共同组成一个进程组,当用户从键盘发出一个信号时,该信号被送给当前与键盘相关的进程组中的所有成员(它们通常是在当前窗口创建的所有活动进程)每个进程可以分别获取该信号、忽略该信号或采取默认的动作,即被该信号杀死。

相反,Windows中没有进程层次的概念,所有的进程地位相同,唯一类似于进程层次的暗示是在创建进程的时候,父进程得到一个特别的令牌(称句柄),该句柄可以用来控制子进程。但是,它有权把该句柄传送给某个其他进程,这样就不存在进程层次了。在UNIX中,进程就不能剥夺其子女的“继承权”。

7、进程的状态(如下图)


1、进程为等待输入而阻塞

2、调度程序选择另一个进程

3、调度程序选择这个进程

4、出现有效的输入



所有关于中断处理、启动进程和停止进程的具体细节都隐藏在调度程序中

8、进程的实现——>为实现进程模型,OS维护着一张表格(一个结构数组),即进程表。每个进程占用一个进程表项(有些地方称这些表项为进程控制块)。该表项包含了进程状态的重要信息,包含程序计数器、堆栈指针、内存分配状况、所打开文件状态、调度信息,以及其他在进程由运行态转换到就绪态或阻塞态时必须保存的信息,从而保证该进程随后能再次启动,就像从未被中断过一样


原创粉丝点击