zoukankan      html  css  js  c++  java
  • 现代操作系统笔记之 进程

    进程:对正在运行程序的一个抽象

    对于只有一个用户的PC,当启动系统时,会同时启动许多进程,而CPU则在这些进程之间进行切换。严格的说,在某一瞬间,CPU只能运行一个进程,而在1秒内,它可以运行多个进程,这就造成了并行的错觉,称为伪并行。用于描述并行的概念模型称为顺序模型。

    1.进程模型

    计算机上所有可运行的软件,包括操作系统,被组织成若干顺序进程。一个进程就是一个正在执行程序的实例,包括程序计数器、寄存器和变量。每个进程有自己的虚拟CPU,而真正的CPU则在各个进程间进行切换,这种快速的切换称为多道程序设计。


    在第一张图中,4个进程每一个都有自己的控制流程,独立的运行。而由于只有一个物理程序计数器,每个程序运行的时候,它的逻辑程序计数器就会被装入到物理程序计数器中,当程序执行暂停时,物理程序计数器就会被保存在逻辑程序计数器中,每一时刻只有一个进程在运行。

    关键思想:一个进程是某种类型的一个活动,它有程序输入、输出以及状态。单个处理器可以被若干程序共享,它使用某种调度算法决定何时停止一个进程的工作,并转为为另一个进程提供服务。

    如果一个进程运行了两遍,那他就算作两个进程。

    2.创建进程

    四种事件导致进程创建:

    1、系统初始化(前台进程、后台进程)

    2、执行了正在运行的进程所调用的进程创建系统调用(系统调用创建新的进程)

    3、用户请求创建一个新进程(交互式系统中启动程序)

    4、一个批处理作业的初始化(提交批处理任务)

    所有情形中新进程都是由一个已经存在的进程执行了一个用于创建进程的系统调用而创建的。

    UNIX:fork指令用来创建,这个系统调用用来创建一个与调用进程相同的副本,这两个进程拥有相同的存储映像、同样的环境字符串和同样的打开文件,然后,子进程执行execve修改存储映像并运行新的程序。之所以需要两部来完成这个创建过程,是为了在fork之后在execve之前允许该子进程处理其文件描述符,这样可以完成对标准输入、标准输出和标准出错的重定向。

    Windows:调用CreateProcess创建进程,把程序装入进程,与UNIX恰好相反,一开始的子进程与父进程就不同。

    3.进程的终止

    进程终止通常由以下原因造成:

    1、正常退出(自愿的):工作完成,通知操作系统

    2、出错退出(自愿的):可处理的错误,一般不退出,要求用户再试一次

    3、严重错误(非自愿):程序中的错误所致

    4、被其他进程杀死(非自愿):系统调用

    4.进程的层次结构

    父进程创建子进程,子进程可以创建孙子进程,等等等等,然后这些进程可以保持一定的联系,这些进程就构成了进程的层次结构。

    UNIX中,进程和它所有的后裔组成一个进程组,可以完成某项特定的任务(如键盘输入、init初始化)。

    Windows中没有层次概念,创建进程的时候,父进程得到句柄,句柄可以用来控制子进程,且能够传给其他进程。

    5.进程的状态


    1、运行态(正在占用CPU)

    2、就绪态(可运行,但其他程序还在占用CPU)

    3、阻塞态(除非某种外部事件发生,否则不能运行)

    6.进程的实现

    为了实现进程模型,操作系统维护了一张进程表,每个进程占用一个进程表项,进程表项保存了进程的重要信息,中断之后再次启动时,能像从未中断过一样。

    下面是典型系统中的关键字段(进程表项需要保存的)

    与每一个I/O类相关联的是一个称作中断向量的位置(靠近内存底部的固定位置),包含中断服务程序的入口地址。


    7.多道程序设计模型

    采用多道程序设计模型可以提高CPU利用率


  • 相关阅读:
    Linux编程 22 shell编程(输出和输入重定向,管道,数学运算命令,退出脚本状态码)
    mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)
    mysql 开发进阶篇系列 45 物理备份与恢复(xtrabackup 安装,用户权限,配置)
    mysql 开发进阶篇系列 44 物理备份与恢复( 热备份xtrabackup 工具介绍)
    Linux编程 21 shell编程(环境变量,用户变量,命令替换)
    Linux编程 20 shell编程(shell脚本创建,echo显示信息)
    mysql 开发进阶篇系列 43 逻辑备份与恢复(mysqldump 的基于时间和位置的不完全恢复)
    Linux编程 19 编辑器(vim 用法)
    (网页)angularjs中的interval定时执行功能(转)
    (网页)在SQL Server中为什么不建议使用Not In子查询(转)
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3231166.html
Copyright © 2011-2022 走看看