操作系统之进程理解

进程概念

        进程是程序的一次动态执行,是操作系统分配资源的基本单位。

进程组成

程序段:代码部分

数据段:进程中的一些数据

pcb:一种数据结构,用于描述进程的相关信息等。

详细介绍

        在单道操作系统中,操作系统一次只能加载一个进程,进程是独占cpu的。在多道操作系统中,操作系统一次可以加载多个进程,然后进程之间并发执行,每个进程都独占cpu一段时间,然后cpu时间片耗完之后,就让出cpu,让别的进程执行。进程有一些状态,如下:

首先是新建,这里以unix操作系统为例,操作系统在启动时,会创建一个初始化进程,即init进程,这个是所有进程的父进程。init进程会创建一些需要的子进程,比如bash等。所以从这里可以看出,unix是父进程通过系统调用fork创建子进程的,刚创建时,父进程和子进程是共享内存空间的,即子进程是对父进程的一个内存拷贝。这里创建时,操作系统会给进程分配一些资源,比如内存,一些硬件系统等。

在创建后,进程则进入就绪态,就绪态的意思是进程已经拥有了其它资源,但是缺少cpu,因为此时cpu已经被别的进程占用。

创建后,如果运行进程时间片到了,或者由于阻塞事件发生等退出执行状态,则就绪进程进入运行态,运行自己的代码片段等。

运行态如果需要等待一些阻塞事件的发生,则会进入阻塞态。

阻塞态如果io事件已经发生的话,则会进入就绪态。

如果已经运行结束,或者收到一些终止信号,比如kill -9等,则会终止。终止后会回收进程的资源。

进程切换需要保存上下文环境到寄存器中,以保证下次执行时还能还原当时的执行场景,所以进程切换是一个很重的操作。

在多道程序操作系统中,很可能有多个进程在等待或者就绪,这时就需要有队列来维护这些进程的状态。操作系统通过原语的操作来保证进程状态切换的原子性。

 

数据结构

进程的状态保存在pcb(processor control block)中,pcb是描述进程信息的一个数据结构,操作系统在分配资源时,会将信息写入pcb中。在进程进行上下文切换时,也会将此时进程的执行状态保存在pcb的寄存器中。

pcb中包括进程id,usrid,程序计数器,寄存器,栈帧等信息。

对于多道程序,操作系统可以一次加载多个进程,所以需要一种数据结构来管理进程,即process table。

进程间通信

进程间信息交换 ,即ipc,方式如下:

共享存储:有一块共享内存,供两个进程访问,以实现通信。该块区域互斥访问。

管道通信:通过管道交互,管道可以理解为一种缓冲区,常见的例子,shell中的管道,ps -ef|grep xxx,就是常见的管道通信,其中|表示管道。半双工通信。

消息传递:通过格式化的消息传递消息。

socket通信:通过socket端口建立连接,进行通信。

 

思考

1.unix创建子进程时,占用内存会double吗?

不会,unix采用写时复制,在fork时是共享那一段内存空间的,只有当父进程或者子进程需要改时才会copy修改的某一页内存。

2.unix创建子进程时,会copy父进程的内存,那么会有父进程的所有线程吗?

不会,子进程只有一个线程,即父进程调用fork系统调用的线程的副本。该部分具体可以见《UNIX环境高级编程》12.9章节的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值