2.1 动为进程,静为程序 -进程概论

问1:发明进程的原因?

早在20世纪60年代,进程的思想就已经被IBM的工程师们构想出来,并且一直延续到今天。当时的计算机面临着,一段时间内要轮转并发执行多个任务的要求,这要求各个程序之间占据的内存空间互不干扰,程序通过统一的程序编号进行访问控制。

但是在编写操作系统的时候,我们不可能预料到未来会有什么样程序运行在它之上(什么样都有可能)。所以我们必须给所有运行在操作系统上的程序,再封装一次,让它们拥有一些共性,这样才能借此进行各种后续调度机制的设计。

进程是为了解决程序并发性和资源共享性而发明的。


问2:现在计算机中的进程的定义是什么?

进程Process,就是程序执行的过程。

对于进程的定义的含义,我们可以从多个角度进行理解:

  • 进程可以看作是对处理器上运行程序的活动规律一种抽象
  • 进程可以看作是一种数据结构,他对程序执行过程进行封装。
  • 进程是操作系统设计的最小独立实体,拥有自己内存空间和分配的计算力。
  • 进程就是操作系统中的一项任务作业,负责一件事情。

    (我本人认为第一种定义更形象)

可见进程强调的是执行的过程,如果把程序看作是一道数学题,进程表示的就是做题的过程(开始、暂停、做完、放弃)。进程跟处理器CPU的联系远大于跟程序的联系。


问3:为什么进程跟处理器的联系更密切?

虽然进程是由程序创造出来的,但是在程序创造完进程后,进程跟程序就没有关系了。

 操作系统更关心的是进程跟处理器的关系。

因为进程就相当于做事情,管理者更关心的肯定是做事的人和事情的关系。

从另外一个角度来看,程序在操作系统眼里,本质就是存储在硬盘上的一个二进制数组,根本不需要投入精力去管理。

但是进程却是实时运行在内存中的过程,时刻渴求着CPU给予足够的计算力,操作系统必须掌控住它的状态,因为CPU的算力同一时刻只能给一个进程。


问4:进程的主要特性有哪些?

  • 内存空间独立,进程只能访问自己的内存空间和一些公用寄存器,绝对不能访问别的进程的内存空间。
  • 进程是动态的,当我们对待一个进程,一定要考虑它此时的状态。是在使用处理器还是在等待处理器。
  • 两个由相同程序创造出来的进程,其内存空间依然是独立的,不能互相访问。
  • 每个进程都有自己的独立编号,不会重复。


问5:进程的主要状态:

注意:确定进程的状态,是考试和学习的重点
  • 创建:程序从硬盘拷贝一份到内存变成进程,需要CPU执行
  • 运行:进程在被CPU执行
  • 等待:等待某些外部操作(I/O数据输入、信号),此时不被分配处理器
  • 就绪:等待操作结束,但还未被分配CPU的状态。
  • 终止:程序完成执行,或被操作系统强制注销,释放占据内存空间。

进程是操作系统学习的核心,是后续一切学习的基础,一定要多思考。
关键要理解两点 拥有独立的内存空间、跟CPU的五种状态

欢迎访问:个人博客-zobolの计算机操作系统学习札记

2.1 动为进程,静为程序 -进程概论 -《zobolの操作系统学习札记》的更多相关文章

  1. dvm进程,linux进程,应用程序进程是否同一概念

    Android 运行环境主要指的虚拟机技术——Dalvik.Android中的所有Java程序都是运行在Dalvik VM上的.Android上的每个程序都有自己的线程,DVM只执行.dex的Dalv ...

  2. 《C#与.NET程序员面试宝典》学习札记

    第2章 .NET概述 2.1-6~ .Net Framework / CLR / IL / Assembly IL:中间语言代码,不同语言(如C#,VB)的基于CLR的编译器编译生成的中间语言字节码, ...

  3. Java程序-进程中的"进程"

    进程 我们知道程序在磁盘上的时候是静态的,当他被加载到内存的时候,就变成了一个动态的,称为进程,如下图是程序被加载到内存后,在内存中的分布情况如下      此图来自http://blog.csdn. ...

  4. Linux C 程序 进程控制(17)

    进程控制 1.进程概述现代操作系统的特点在于程序的并行执行.Linux是一个多用户多任务的操作系统.ps .pstree 查看进程进程除了进程id外还有一些其他标识信息,可以通过相应的函数获得.// ...

  5. C# 强制关闭当前程序进程(完全Kill掉不留痕迹)

    C# 强制关闭当前程序进程(完全Kill掉不留痕迹) /// <summary> /// 运行DOS命令 /// DOS关闭进程命令(ntsd -c q -p PID )PID为进程的ID ...

  6. delphi根据进程PID获取程序所在路径的函数(用OpenProcess取得句柄,用GetModuleFileNameEx取得程序名)

    uses psapi; {根据进程PID获取程序所在路径的函数}function GetProcessExePath(PID: Cardinal): string;varpHandle: THandl ...

  7. Android应用程序进程启动过程的源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址: http://blog.csdn.net/luoshengyang/article/details/6747696 Android 应用程序框架层创 ...

  8. 在Delphi中隐藏程序进程

    在开发某些软件的时候,为了保护程序自身,就需要用到隐藏程序进程.以下通过实例来讲解隐藏程序进程的方法: 1.创建一个新的项目 Project1 选择File,New Application.在表单Fo ...

  9. Linux 程序,进程和线程

    进程如何使用内存. 当程序文件运行为进程时, 进程在内存中获得空间. 1) Text : 固定大小 存储指令(instruction), 说明每一步的操作. 2) Global Data : 固定大小 ...

随机推荐

  1. Cookie与Session、CBV添加装饰器

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  2. JVM虚拟机类加载机制(一)

    类从被加载到虚拟机内存中开始,到卸载出内存截止,整个生命周期包括:加载.验证.准备.解析,初始化.使用.卸载七个阶段.其中验证.准备.解析三个部分统称为连接. 类初始化情况: 遇到new.getsta ...

  3. 羽夏壳世界—— PE 结构(上)

    羽夏壳世界之 PE 结构(上),介绍难度较低的基本 PE 相关结构体.

  4. Blazor 生命周期

    执行周期 1. SetParametersAsync 2. OnInitializedAsync(调用两次) 和 OnInitialized: 3. OnParametersSetAsync 或 On ...

  5. 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)

    提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...

  6. 使用Camera API https://developer.mozilla.org/zh-CN/docs/Web/Guide/API/Camera

    使用Camera API 在本文章中 获取到所拍摄照片的引用 在网页中展示图片 完整的示例代码 HTML页面: JavaScript文件: 浏览器兼容性 通过Camera API,你可以使用手机的摄像 ...

  7. 2021.12.09 [HEOI2016/TJOI2016]排序(线段树+二分,把一个序列转换为01串)

    2021.12.09 [HEOI2016/TJOI2016]排序(线段树+二分,把一个序列转换为01串) https://www.luogu.com.cn/problem/P2824 题意: 在 20 ...

  8. Go Context 原理详解

    实现一个小目标 很开心的一件事,学习了一个月的后端拿到一个13k的offer,今年年底目标拿到一个30k的go方向offer. 好了回归正文,这篇文章是回答交流时一个老哥的问题,跟go的context ...

  9. 分享一款高逼格的Linux磁盘信息查看工具

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 可以使用df命令来显示在Linux.macOS和类Unix系统中挂载的文件系统上有多少可用磁盘 ...

  10. Linux screen命令详解

    开源Linux 长按二维码加关注~ 上一篇:局域网IP冲突罪魁祸首是谁? 很多时候,我们都需要执行一些需要很长时间的任务.如果这时候,你的网络连接突然断开了,那么你之前所做的所有工作可能都会丢失,所做 ...