进程的概念与创建方式

进程的概念和创建方式(理论)

(多道程序设计)在某一个瞬间,CPU只能运行一个进程,但在一秒钟期间,它可能运行多个进程,这样就产生并行的错觉。
—— 伪并行

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

有 4 种事件(场景)导致进程的创建:
1. 系统初始化 —— 系统启动时候
2. 执行了正在运行的进程所调用的进程创建系统调用
3. 用户请求创建一个新进程 —— windows等交互式系统,双击操作,或者 在Linux bash shell 中运行新的进程
4. 一个批处理作业的初始化 —— 仅在大型机的批处理系统中

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

在Unix系统中,只有一个系统调用可以用来创建进程:fork。
这个系统调用会创建一个与调用进程相同的副本。在调用了fork后,这两个进程(父进程和子进程)拥有相同的存储映像、同样的环境字符串和同样的打开文件。这就是全部场景。
通常,子进程接着执行execve或一个类似的系统调用,以修改其存储映像并运行一个新的程序。
例如:shell -> sort,shell创建一个子进程,然后这个子进程执行sort,之所以要安排两步建立进程,是为了在fork之后,但是在execve之前允许该子进程处理其文件描述符,这样可以完成对标准输入、标准输出和标准出错的重定向。

windows中,情形比较复杂,方式很多,且略过。

在 unix 和 windows 中,进程创建之后,父进程和子进程有各自不同的地址空间。如果其中某个进程在其地址空间中修改了一个字,这个修改对其他进程是不可见的。
在 Unix 中,子进程的初始地址空间,是父进程的一个副本,但是这里涉及两个不同的地址空间,不可写的内存区是共享的(某些Unix 的实现使程序正文在两者间共享,因为他不能修改)。但是对于一个新创建的进程来说,确实有可能共享其创建者的其他资源,比如打开的文件等。在Windows中,从一开始父进程的地址空间和子进程的地址空间就是不同的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值