美文网首页
进程操作

进程操作

作者: 啦啦哇哈哈 | 来源:发表于2018-10-09 20:23 被阅读0次

一、进程创建

进程树

父进程创建若干子进程,子进程再创建其子进程,依次类推,构成进程树。进程的调度,其实就是在进程树上进行各种调度。
创建的过程,就是:

  • 分配内存空间;
  • 给个PID,进程标志符,一个整数值;
  • 配置PCB里面各个单元,申请的设备啊,打开的文件啊,用到的某些软件变量啊等等
  • 挂到对应的队列里面去。
    前两步都比较好理解,2就是有个类似PID分配器的东西。那么最后一步PCB数据结构中的内容从哪里来?我们把这部分内容叫做资源(CPU时间、内存、文件、I/O设备)
子进程的资源

获取资源有不同的方式:

  • 子进程共享父进程的所有资源(duplicate一个数据结构,内容一样但在不同位置,不是常规意义的共享,copy)这是比较流行的一种做法
  • 子进程共享父进程的部分资源
  • 子进程不从父进程共享资源,重新独立申请(只带了一个名号是子进程,也有PID,然后利用这个名号自己去申请独立的资源,申请之后它就是一个独立个体了)

一个简单的例子
除了各种物理和逻辑资源外,初始化数据(或输入)一般由父进程传递给子进程。一个进程,功能是在终端屏幕上面显示文件(如img.jpg)的状态。创建时,作为它的父进程的输入,会得到文件img.jpg的名称,并能用此名称打开文件,以及写出内容,得到输出设备的名称等等。

执行代码的顺序

创建新进程时候,有两种执行可能:

  • 父进程和子进程并发执行
  • 父进程等待,直到某个或者全部子进程执行完毕(下面这个unix就是这样)
新进程的地址空间

有两种可能:

  • 子进程是父进程的复制品,具有相同的程序和数据
  • 子进程装入另一个新程序

Unix环境创建子进程

  • fork系统调用创建一个新的子进程(fork是创建新进程的系统调用)
  • fork之后,exec系统调用装入一个新程序



    fork完成的一刹那,返回到用户态就完成了创建子进程,子进程和父进程相互独立,而且一模一样,是duplication。唯一不同的是pid,父亲的pid和子的pid不一样。对于父进程fork返回值为子进程的进程标识符,正整数,而对于子进程,fork的返回值为0.


这里的代码就是上面那张流程图的具体实现。子进程调用的execlp是exec()的一个版本,也是系统调用,这里用UNIX命令/bin/ls(列出目录清单)来覆盖其地址空间。而父进程则是调用wait()交出CPU,来等待子进程的完成,并最后exit退出。

关于fork的补充:
fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;
在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。
几乎是完全的复制除了pid,所以子进程的program counter也会和父进程一样,什么意思呢?子进程的执行代码是从fork那句开始的。

二、进程终止

进程终止语义

有两个语义

  • 1.子进程执行完最后一条指令后,要求操作系统将自己杀掉(exit)
    • 子进程把传递数据给父进程
    • 子进程资源被操作系统回收
  • 2.父进程终止子进程的执行(abort),终止原因可能有:
    • 子进程超额使用系统资源
    • 之前交给子进程执行的任务,过期无效了
    • 如果父进程终止了,它的子进程怎么办?有些操作系统就会把这些子进程全部终止掉。

三、进程间合作

进程都是独立的,有独立的代码,独立的资源申请,独立的运行工作。独立进程不影响其它进程的执行,也不被影响。但是完完全全独立,很多进程干不了任何事情。合作进程影响其它进程,或者受其影响。
进程间合作是必须的,好处有:

  • 共享信息
  • 加速(计算)执行任务
  • 模块化
  • 方便调用
    等等......
    进程及那合作的模式有两种基本模式:共享内存和消息传递。
共享内存系统

经典案例:生产者-消费者问题



对于Bounded Buffer,缓冲区空了,消费者进程去消费什么?显然要等待啊,而缓冲区满了,生产者还往哪生产?继续生产就撑死了。这就是典型的进程间合作的案例,他们之间相互协作,用两个指针来判断是空了还是满了,参见P87有代码。

Interprocess Communication(IPC)进程间通信

IPC提供一套进程通信、进程同步的机制,消息系统是进程间相互通信的途径。

  • 两个基本的进程操作
    • send(message)
    • receive(message)
  • 变种 Direct Communication 直接指定了消息的接收方或者发送方
    • send(P,message)——直接发消息给进程P
    • receive(Q,message)——直接接受来自进程Q的消息
  • 变种 indirect Communication 没有指出发给谁,接受谁,e-mail server打开邮箱系统客户端会看到具体的发送和接收方的
    • send(A,message)——发送消息给邮件服务器A
    • receive(A,message)——从邮件服务器A接收消息
同步通信和异步通信
  • 同步通信
    • 发送操作send:发送进程等待,直至接收进程确认收到消息
    • 接收操作receive:接收进程等待,直至有个消息到达
  • 异步通信
    • 发送操作send:发送进程发出消息后即返回,继续进行其他操作
    • 接收操作receive:接收进程执行一次接收动作,要么收到一条有效消息,要么收到空消息。

相关文章

  • 五、python多进程与多线程。

    进程进程的概念是需要理解的,进程是操作系统中正在运行的一个程序实例,操作系统通过进程操作原语来对其进行调度。操作系...

  • linux API记录

    文件内容操作 进程操作

  • 进程操作

    一、进程创建 进程树 父进程创建若干子进程,子进程再创建其子进程,依次类推,构成进程树。进程的调度,其实就是在进程...

  • 进程操作

    关闭进程 psto show them all. and type:kill -9 PID_of_process

  • LInux-基本指令

    1.基本文件和目录的操作 2.系统,进程,网络 系统操作 进程操作 网络操作 3.其他工具 日期

  • 进程和线程的理解

    进程:对于操作系统而言,进程是整个现代操作系统的核心根本,操作系统是以进程为单位执行任务。 线程:随着技术的发展,...

  • 43.进程和线程和事件循环

    操作系统-进程-线程 线程和进程是操作系统中的两个概念: 进程(process):计算机已经运行的程序,是操作系统...

  • 2019-07-30

    进程 线程 进程是操作系统提供给我们的一个抽象;我们通过创建进程来使用CPU、读写内存/硬盘、进程IO操作。 每个...

  • 并发编程的理论基石

    一、进程和线程 1.操作系统、进程、线程的关系 操作系统是包含多个进程的容器,而每个进程又是容纳多个线程的容器。 ...

  • Android 五种进程的管理

    安卓有几种进程? 前台进程 可见进程 服务进程 后台进程 空进程 前台进程 用户当前操作所必需的进程。如果一个进程...

网友评论

      本文标题:进程操作

      本文链接:https://www.haomeiwen.com/subject/trhyaftx.html