zoukankan      html  css  js  c++  java
  • 2.1进程

    2.1.1 进程模型

    定义:计算机上所有可以运行的软件,操作系统,被组织成若干顺序进程,简称进程。一个进程就是一个正在执行程序的实例,包括程序计数器,寄存器,私有的虚拟地址空间。

    如果计算机只有一个cpu,运行多个进程时会来回地切换进程上下文(context)。如图:

    2.1.2 进程的创建

    进程的创建有主要有四种事件:

    1.系统初始化   2.正在运行的程序执行了创建进程的系统调用(fork)   3.用户请求创建一个新进程   4.一个批处理作业的初始化

    ps:在linux系统中通过fork系统调用复制出一个与调用进程一样的进程,包括地址空间与程序计数器,堆栈等,可以在调用execve替换掉当前的印象,达到运行其他进程的目的。

    2.1.3 进程的终止

    进程的终止也主要有四种事件:

    1.正常退出(自愿的)   2.出错的退出(自愿的)   3.严重错误(非自愿的)   4.被其他进程杀死(非自愿)

    ps:linux系统中进程可通过调用exit系统调用终止自身,这是自愿的;若进程自己处理某个事件有错误则会收到信号(被中断);调用进程调用kill向其子进程发送信号可导致子进程终止。

    2.1.4 进程的结构层次

    进程创建子进程后存在着父子关系,同属于一个进程组。

    2.1.5 进程的状态

    进程的状态实际上可以表示为FSM(finite state machine)有限状态机。如图:

    进程状态的切换是通过调度程序切换的。 在2.4节的时候会提及。

    2.1.6 进程的实现

    操作系统维护着一张表格(一个结构数组),即进程表(progress table),该表中的字段包括:进程管理相关的寄存器,程序计数器,堆栈指针等等;存储管理相关的正文段指针(代码指针),数据段指针,堆栈指针;文件管理相关的根目录,工作目录,用户组ID等等。

    与I/O相关的是一个称作中断向量(interrupt vector)的位置,包含中断程序的入口地址。例如:我们回想一下,c语言中的scanf,c艹中的cin实际上都会利用这个中断向量来使进程阻塞直到终端(键鼠)输入数据。另外,程序发送错误时也可能会引发中断。

    中断发生后的工作步骤如下图:

    2.1.7 多道程序设计模型

    由于实际中通常有几十上百个进程在操作系统中运行,所以让cpu单独运行一个进程通常来讲是不可能的,所以经常有进程上下文的切换,这就给了我们操作系统好像只在运行一个程序的假象。

    为此,我们需要cpu利用率的最大化。假设一个进程等待I/O操作的时间与其停留在内存中的时间比为p,当内存中有n个进程时,所有进程等待I/O的概率为p的n次方,则cpu的利用率为:

    1-p的n次方

    其中n称为多道程序设计的道数(degree of multiprogramming)

    函数图像:

    我们可以看到,如果你的计算机此时有8GB的内存,操作系统相关程序通常占用2GB左右(这也是为什么你的windows开机会占用内存),如果有三个2GB进程,则CPU的利用率为1-0.8^3,大概为百分之49。如果此时你觉得计算机太卡,要升级内存,那么8GB则是一个不错的选择,可以允许7个2GB进程同时运行,且cpu利用率提高到百分之79;然而再增加一个8GB内存则只提高到百分之91,提高仅为12,不是一个很划算的投资。

  • 相关阅读:
    从程序员到项目经理
    wumii 爆款总结经验
    快速的搭建JFinal的ORM框架示例
    Hibernate all-delete-orphan[转]
    HHvm Apache 2.4 Nginx建站环境搭建方法安装运行WordPress博客
    雷军是如何从程序员蜕变成职业经理人的
    Postgresql数据库数据简单的导入导出
    如何一年看50本好书?
    清除DNS解析缓存
    mysql 下 计算 两点 经纬度 之间的距离
  • 原文地址:https://www.cnblogs.com/manch1n/p/10296298.html
Copyright © 2011-2022 走看看