Operating System-Process(1)什么是进程&&进程的创建(Creation)&&进程的终止(Termination)&&进程的状态(State)
本文阐述操作系统的核心概念之一:进程(Process),主要内容:
- 什么是进程
- 进程的创建(Creation)
- 进程的终止(Termination)
- 进程的状态(State)
一、什么是进程
1.1 基本信息
进程是执行程序的一个实例,是对正在运行的程序的抽象(Abstraction),包含当前运行程序的所有程序计数器(PC),寄存器以及变量:程序运行所需要的指令和数据。
如果说程序是一个菜谱,那么进程就是做菜的过程。
我当前系统运行的进程实例(windows 10)

如果一个程序同时运行多次,操作系统会创建多个进程(互不影响),对于操作系统来说就是有多个进程恰好在运行相同的程序而已。上图的Google Chrome就是一个例子(多个实例,互不影响,但是消耗内存资源。。)
1.2 Why Process
为什么操作系统要引入进程的概念?上面提到了隔离,但是隔离不是进程引入的首要驱动力,引入进程的首要驱动力是:增加系统的响应时间。
CPU同一个时间只能做一件事情,只能有一个进程运行在CPU上,但是为什么我们感觉电脑在同时作者很多事情呢?我们一遍在Word中打字,一遍右下角收到邮件通知。
- Word是一个进程(当然,打开多个则是多个进程)
- 邮件是一个进程
操作系采用自己的调度策略让CPU在Word和Email之间切换,由于切换的非常快,所以用户感觉CPU同时在作者很多事情,从而达到了增加系统响应的效果。
用户感觉
a、b、c进程在同时执行

实际执行
a、b、c同一时间只有一个在执行

1.3 进程调度
用一个例子说明:有一个爸爸准备给儿子做一个蛋糕,他有一份做蛋糕的菜谱,他正在按照食谱做着蛋糕,突然他儿子进来对他说:“爸爸,我要喝牛奶”。这位爸爸停下手中正在做的蛋糕,去给儿子倒牛奶,然后在微波炉加热,最后把牛奶给了儿子。最终这位爸爸又回到原来做蛋糕的地方,继续完成蛋糕。
- 蛋糕菜谱: 是程序,先做什么,后做什么
- 做蛋糕的过程:是进程A
- 给儿子热牛奶的过程:是进程B
- 这位爸爸:CPU
- 儿子突然要喝牛奶:中断
CPU根据现有的情况(策略)在进程A、B之间切换。上面爸爸倒完牛奶后继续做蛋糕。这里的继续其实就是CPU在进程之间切换之前先保存当前进程的状态,当再次切换到这个进程时,会从之前保存的状态处进行运行(由此也能看出进程切换的开销)。
二、进程的创建(Creation)
2.1 进程创建时机
- 在系统启动时创建进程(boot)。这个时候创建的都是系统运行必须的进程,有些用于和UI进行交互,有些属于后台进程,比如Email接受进程
- 由现有的进程通过调用系统的Create Call进行创建。比如在一个web系统中,可以另外创建一个excel进程完成数据导入到excel的功能
- 当用户发起一个请求时进行创建,比如当用户点击鼠标,在command中输入时会创建相应的进程对用户的请求进行响应
2.2 创建过程
以上的所说的三种创建进程的时机最终创建进程的方式是一致的:由一个已有的进程跳过一个系统调用完成进程的创建。
- Unix:Fork
- Windows:CreateProcess
该系统调用会告知操作系统去创建一个进程。
发起系统调用的进程为父进程,被创建的进程为子进程,父子进程之间是相互独立的,他们的地址空间完全不同。

2.3 进程的层级关系(Hierarchy)
上面做了阐述,新的进程是已有进程通过像OS发送创建进程的call而完成的。被创建的进程暂且叫child process。这个child process接下来可能也会再次给os发请求创建子进程。。。。。以此类推,将会有一个进程继承链。

上面这种成为一个链的进程在unix中会作为一个进程组而存在。但是在Windows中,这些进程其实是完全独立的。继承关系在进程中不是很重要。
三、进程的终止(termination)
一个进程创建后最终都会终止的,进程会在以下几种条件下被终止,相对比较好理解:
- 正常终止:当进程完成自己的事情之后告诉操作系统(System Call)终止进程
- 出现错误的时候终止。当进程发现错误时,比如资源不存在或者所运行的程序有bug。比如被0除。
- 被其他进程Kill。比如在windows下可以通过任务管理器直接Kill系统的进程
在有些操作系统中当一个进程终止时,有其创建的进程也会被Kill 掉。
四、进程的状态(State)
4.1 状态
进程被创建后有三个状态:
- Running(运行中)
- Blocked(被阻塞)
- Ready(就绪)
Blocked是指进程在等待外部的刺激(与CPU无关),比如Console程序,一直在等待用户输入。
Ready是指进程可以运行,没有等待任何资源,但是CPU被其他进程占用,没有CPU资源
4.2 状态切换
如图:

Running-》Blocked:进程在运行过程中需要其他外部资源。
Blocked-》Ready:进程需要的资源得到了满足
Ready-》Running:由CPU的Scheduler决定,CPU可以给当前进程使用
Running-》Ready:由CPU的Scheduler决定,CPU分配给其他进程使用(比如上面的例子,爸爸停下正在做的蛋糕去给儿子热牛奶,这时候蛋糕处于ready状态)
Operating System-Process(1)什么是进程&&进程的创建(Creation)&&进程的终止(Termination)&&进程的状态(State)的更多相关文章
- 个人小爱好:Operating System: three easy pieces—第6章第3小节问题2#进程间的切换
问题2#:进程间的切换 直接执行的下一个问题是如何实现进程的切换.进程的切换按理说是挺简单的,对吧?不就是决定哪一个进程应该停止,哪一进程应该开始而已,才多大点事情啊?但,事实上这还真的有点棘手:尤其 ...
- [Chapter 3 Process]Practice 3.3 Discuss three major complications that concurrent processing adds to an operating system.
3.3 Original version of Apple's mobile iOS operating system provied no means of concurrent processi ...
- osquery An Operating System Instrumentation Framewor
catalog . Getting Started . install guide for OS X and Linux . Features Overview . Logging . query e ...
- 如何定位“Operating system error 32(failed to retrieve text for this error. Reason: 15105)”错误中被占用的文件
之前在这篇"Operating system error 32(failed to retrieve text for this error. Reason: 15105)"博 ...
- Operating system error 32(failed to retrieve text for this error. Reason: 15105)
一台数据库服务器的事务日志备份作业偶尔会出现几次备份失败的情况,具体的错误信息为: DATE/TIME: 2018/7/30 12:10:52 DESCRIPTION: BackupDiskFi ...
- book-rev8 Chapter 0 Operating system interfaces
Chapter 0 第0章 Operating system interfaces 操作系统接口 The job of an operating system is to share a comput ...
- [No000035]操作系统Operating System之OS Interface操作系统接口
接口(Interface) 仍然从常识开始… 日常生活中有很多接口:电源插座:汽车油门… 那什么是接口? 连接两个东西.信号转换.屏蔽细节… Interface: electrical circuit ...
- Operating System Concepts with java 项目: Shell Unix 和历史特点
线程间通信,fork(),waitpid(),signal,捕捉信号,用c执行shell命令,共享内存,mmap 实验要求: 1.简单shell: 通过c实现基本的命令行shell操作,实现两个函数, ...
- cidaemon.exe进程cpu占用率高及关闭cidaemon.exe进程方法
问题描写叙述: 这段时间机器总是出现一个奇怪的问题:cidaemon.exe进程占用CUP率98%以上,大大影响了电脑的正常使用.资源管理器中出现多个cidaemon.exe进程,强制结束占用cp ...
- Operating System 概述和学习图
Operating System 概述和学习图 大神绕道,鄙人初入 OS . 一.想知OS,先知计算机系统概述 #图解 #基本指令和中断周期 #直接内存存取(Direct Memory Access, ...
随机推荐
- 算法设计 mac 字符串 标识 n维度 2 3维度 字符串 标识值 特征值
基向量
- 在函数中如何获取 线程对象、线程唯一ID
threading.current_thread() threading.current_thread().ident
- spring 事物管理
示例:模拟实现转账操作,"A"转给"B"1000,"A"少1000而"B"多一千. 一.转账环境搭建 1.xml配置文件 ...
- python3 生成随即激活码
import string import random #激活码中的字符和数字 field = string.ascii_letters + string.digits #获得四个字母和数字的随即组合 ...
- python SimpleHTTPServer 快速共享文件
简单介绍 通过一个python命令快速共享文件给他人. 操作步骤 1.打开cmd命令行,切换到需要共享文件的目录,执行命令 python -m SimpleHTTPServer . 2.打开浏览器,在 ...
- Maze迷宫问题(求最优解)
迷宫地形我们可以通过读文件的形式,通过已知入口逐个遍历坐标寻找通路. 文件如图: 每个坐标的位置用结构体来记录: struct Pos //位置坐标 { int _row; int _col; }; ...
- mysql日志总结
1.mysql慢查询设置 log-slow-queries=/alidata/mysql-log/mysql-slow.loglong_query_time = 1log-queries-not-us ...
- 在我的电脑右键 Manage 拒绝访问的解决方法
为什么我的电脑右键里的“管理”会变成“manage”啦.原来是中文的,点了之后出来一个对话框,标题是“桌面”说是“拒绝访问” 是系统环境变量里少了 windir=C:\WINDOWS 方法是:打开系统 ...
- HDU3294 Girls' research
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- nginx+tomcat负载均衡搭建
一. 单独部署tomcat和nginx Nginx版本:nginx-1.13.5 Tomcat版本:apache-tomcat-8.5.8 操作系统:win10 必须先部署一个tomcat服 ...