操作系统--进程

Chapter 3 Processes


进程

  • 什么是进程?为什么要设立进程?进程有哪些特性

    • 进程可以简单的理解为执行中的程序,程序是我们放在硬盘中的一段代码,而通过创建进程,系统将程序放入内存中,同时运行它
    • 进程 = 程序(代码段) +程序计数器(记录下调指令的地址)+CPU寄存器+栈+数据段(特制全局变量)
    • 进程执行某种功能,使用多线程可以使得系统执行多任务并行
    • 进程的特性 动态性 独立性 并发性 结构化:
      1. 动态性:进程除了静态的代码外,其余一切都是动态的,如内存,数据,寄存器等等
      2. 独立性:两个进程间不互相干扰,如浏览器(chrome是进程,ie则是线程)多页面之间
      3. 并发性:进程可以并发.但除了有些特殊限制的(比如游戏什么的防止多开,不过可以使用沙盒多开..)
      4. 结构化:进程是有结构的
  • 进程是有状态的.为什么进程要有状态?进程有哪些状态?他们之间怎么转换?

    • 进程状态是体现进程调度的一种状态,进程调度使得单CPU的系统并行变得可能
    • 进程的状态有:
      1. new 创建一个进程,从静态到动态的过程,new 的程序不久会转为ready
      2. ready 进程已经就绪,只欠CPU的使用权了
      3. running ready的程序获得CPU使用权
      4. waiting 发生中断时,丢掉CPU使用权 由RUNING转来
      5. Terminated: 进程终止运行
    • 进程在执行过程中,其状态在不断变化 变化
  • 进程控制模块PCB:在操作系统内表示进程的方式
    用于保存关于进程的相关信息,如进程的状态 PC 寄存器等,当发生中断时必须保存,用于继续进程


进程的调度

  • 什么是进程的调度?为什么要进行线程的调度?

    • 我们有很多想做的事情.于是我们创建了很多进程.但是CPU只有一个,而且进程不总是占用着CPU,他偶尔也会去进行IO操作.如何利用这时间,合理安排每个进程进入CPU的时间,这就是CPU调度
    • 目的是CPU的利用率最大
  • 如何实现CPU的调度?
    首先操作系统有很多队列:

    1. 就绪队列:处于就绪状态进程的队列, 短期调度程序从中选出一个进程使其获得CPU使用权,而关于 短期调度程序在第5章有详细解释
    2. 设备队列:如进程访问硬盘,但其他进程在访问硬盘,那么这个进程就要等了,他在等的位置就是设备队列
  • 什么是短期调度程序?

    • 上文中提到了短期调度程序,那么什么是短期调度程序?是不是有长期调度程序?中期调度程序?
      首先解释什么是调度程序
      • 进程的生命周期是不断在各种队列中转换的过程,那么选择什么样的进程来转换呢?这就是调度程序的作用了

      • 而上文中已经解释了 短期调度程序的作用了 我们再来谈一下中期调度程序,它是从硬盘中的进程(进程过大,无法完全保存在内存中.部分保存到硬盘中)加载到内存中

      • 长期调度程序:selects which processes should be loaded into memory for execution.

      • 长期调度程序还有一个十分重要的功能:进程大多分为CPU偏重或者IO偏重的,合理组合这两种进程可以最大化CPU使用率.这也是长期调度系统的作用

  • 其他?
    上下文切换,每次交换CPU使用权,操作系统总要进行一次上下文切换(上下文, 熟悉win32编程的的朋友可能知道)这是CPU在执行进程时候的状态,通常用PCB来保存)


进程的操作

  • 额..好吧,这个题目还真是难问什么是"进程的操作"这样的问题的...进程的操作有哪些?如何操作?
    1. 进程的创建:
      • 父进程创建子进程,如此循环生成进程树
      • 系统创建有很多问题,如付进程子进程如何共享资源?子进程怎么执行?和父进程并行还是子进程先执行?地址空间如何分配呢?
      • 用UNIX系统举例: fork() 产生新进程(复制原来的地址空间形成,并行执行),exec()使用fork()之后,用该函数加载新的地址空间(也就是创建了一个全新的进程)
    2. 继承的终止
      • 使用系统调用exit()来结束
      • 向父进程返回状态值
      • 释放所有资源
      • 父进程也可以结束其子进程

进程间通信

  • 进程间为什么要通信?如何实现?
    • 首先.我们要明确,并不是所有进程都是要进行通信的,比如初学者写的大多数程序创建的进程都是没有通信的,这种程序叫做独立程序,否则叫做协作程序

    • 通信有很多好处:

      1. 信息共享
      2. 提高运算速度
      3. 模块化
      4. 方便
    • 消息船体有两种机制 共享内存 消息传递

    • 共享内存方式:运行速度快,但要避免冲突,需要交流信息建立共享信息内存

    • 消息传递系统:

      • 什么是消息传递系统?有何优点?如何实现?
        • 消息传递系统是用消息传递机制传递信息的系统
        • 易于实现,但效率不高
        • 需要两个进程间建立链路之后send()或者receive()信息就好
        • 有直接或间接通信之分,有同步或异步之分,有自动或显示缓冲问题

服务器-客户端交流

  • 服务器-客户端交流有哪些方式?各有哪些优缺点?
    • SOCKET

      • 在两个IP地址间建立连接,(包含端口号)
      • 所有连接唯一
      • 常用且高效
      • 但是低级,只允许在通信线程间交换无结构字节流
    • 远程过程调用(RPC):

      • 这样的方式可以再远程调用程序中的某个函数(当然这首先需要发起方将函数名和参数传递过来),并将函数的返回值传递回去,这样的方式可以传递很多数据结构
    • 远程方法调用RMI:

      • 类似 RPC JAVA在住址类时允许类中含有远程方法
posted @ 2014-04-22 22:58  金发萌音  阅读(196)  评论(0编辑  收藏  举报