程序和进程

  • 程序:是指编译好的二进制文件,存放在磁盘上,并不占用系统资源(系统资源包括CPU、内存、打开的文件、设备、锁…)
  • 进程:是一个抽象的概念,与操作系统原理密切相关。进程是活跃的程序,占用系统资源。在内存中执行。(程序运行起来之后,产生一个进程)。
  • 那么我们可以形象的将程序比作一个剧本,这个剧本就是一张一张的纸组成的,那么就是进程就要演的戏,一出戏上面包括舞台、演员、灯光、道具等等。同一个剧本可以在多个舞台上同时上演,同样的,同一个程序也可以加载为不同的进程(而且彼此之间互不影响)。
  • 举个例子,在linux终端上同时打开两个终端。他们各自都有一个bash但是彼此的ID却是不同的。

二:并发的认识

  • 并发:在操作系统中,一个时间段中有多个进程都处于已经启动运行—到-----运行完毕之间的状态。但是呢,任一时刻点上CPU上只有一个进程在运行。
  • 举个例子,现在,我们使用计算机可以边听音乐边聊天边上网。那么我用自己的话来说,意思就是说CPU先运算音乐进程几纳秒,然后停下来在运算聊天几微秒,然后在停下来再运算上网几微秒,由于速度很快,我们肉眼几乎发现不了进程在切换着运行。

单道程序设计

  • 所有进程一个一个排对执行。若A阻塞,B只能等待,即使CPU处于空闲状态。而在人机交互时阻塞的出现时必然的。所有这种模型在系统资源利用上极其不合理,在计算机发展历史上存在不久,大部分便被淘汰了。像以前的Dos就是单道程序设计系统。

多道程序设计

  • 在计算机内存中同时存放几道相互独立的程序,它们在管理程序控制之下,相互穿插的运行。多道程序设计必须有硬件基础作为保证。
  • 时钟中断即为多道程序设计模型的理论基础。 并发时,任意进程在执行期间都不希望放弃cpu。因此系统需要一种强制让进程让出cpu资源的手段。时钟中断有硬件基础作为保障,对进程而言不可抗拒。 操作系统中的中断处理函数,来负责调度程序执行。
  • 在多道程序设计模型中,多个进程轮流使用CPU (分时复用CPU资源)。而当下常见CPU为纳秒级,1秒可以执行大约10亿条指令。由于人眼的反应速度是毫秒级,所以看似同时在运行。
  • 实质上,并发是宏观并行,微观串行!

CPU

  • 中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。中央处理器主要包括运算器(算术逻辑运算单元,ALU,ArithmeTIc Logic Unit)和高速缓冲存储器(Cache)及实现它们之间联系的数据(Data)、控制及状态的总线(Bus)。它与内部存储器(Memory)和输入/输出(I/O)设备合称为电子计算机三大核心部件。
  • cpu的基本结构
      从功能上看,一般CPU的内部结构可分为:控制单元、逻辑运算单元、存储单元(包括内部总线和缓冲器)三大部分。其中控制单元完成数据处理整个过程中的调配工作,逻辑单元则完成各个指令以便得到程序最终想要的结果,存储单元就负责存储原始数据以及运算结果。浑然一体的配合使得CPU拥有了强大的功能,可以完成包括浮点、多媒体等指令在内的众多复杂运算,也为数字时代加入了更多的活力。
  1. 逻辑部件

英文Logic components;运算逻辑部件。可以执行定点或浮点算术运算操作、移位操作以及逻辑操作,也可执行地址运算和转换。

  1. 寄存器

寄存器部件,包括寄存器、专用寄存器和控制寄存器。 通用寄存器又可分定点数和浮点数两类,它们用来保存指令执行过程中临时存放的寄存器操作数和中间(或最终)的操作结果。 通用寄存器是中央处理器的重要部件之一。

  1. 控制部件

英文Control unit;控制部件,主要是负责对指令译码,并且发出为完成每条指令所要执行的各个操作的控制信号。

其结构有两种:一种是以微存储为核心的微程序控制方式;一种是以逻辑硬布线结构为主的控制方式。

微存储中保持微码,每一个微码对应于一个最基本的微操作,又称微指令;各条指令是由不同序列的微码组成,这种微码序列构成微程序。中央处理器在对指令译码以后,即发出一定时序的控制信号,按给定序列的顺序以微周期为节拍执行由这些微码确定的若干个微操作,即可完成某条指令的执行。

简单指令是由(3~5)个微操作组成,复杂指令则要由几十个微操作甚至几百个微操作组成。

CPU的逻辑单元
  • 更细一点,从实现的功能方面看,CPU大致可分为如下八个逻辑单元:

1. 指令高速缓存,俗称指令寄存器 : 它是芯片上的指令仓库,有了它CPU就不必停下来查找计算机内存中的指令,从而大幅提高了CPU的运算速度。

2. 译码单元,俗称指令译码器 : 它负责将复杂的机器语言指令解译成运算逻辑单元(ALU)和寄存器能够理解的简单格式,就像一位外交官。

3. 控制单元 : 既然指令可以存入CPU,而且有相应指令来完成运算前的准备工作,背后自然有一个扮演推动作用的角色——它便是负责整个处理过程的操作控制器。根据来自译码单元的指令,它会生成控制信号,告诉运算逻辑单元(ALU)和寄存器如何运算、对什么进行运算以及对结果进行怎样的处理。

4. 寄存器 : 它对于CPU来说非常的重要,除了存放程序的部分指令,它还负责存储指针跳转信息以及循环操作命令,是运算逻辑单元(ALU)为完成控制单元请求的任务所使用的数据的小型存储区域,其数据来源可以是高速缓存、内存、控制单元中的任何一个。

5. 逻辑运算单元(ALU) : 它是CPU芯片的智能部件,能够执行加、减、乘、除等各种命令。此外,它还知道如何读取逻辑命令,如或、与、非。来自控制单元的讯息将告诉运算逻辑单元应该做些什么,然后运算单元会从寄存器中间断或连续提取数据,完成最终的任务。

6. 预取单元 : CPU效能发挥对其依赖非常明显,预取命中率的高低直接关系到CPU核心利用率的高低,进而带来指令执行速度上的不同。根据命令或要执行任务所提出的要求,何时时候,预取单元都有可能从指令高速缓存或计算机内存中获取数据和指令。当指令到达时,预取单元最重要的任务就是确保所有指令均排列正确,然后发送给译码单元。

7. 总线单元 : 它就像一条高速公路,快速完成各个单元间的数据交换,也是数据从内存流进和流出CPU的地方。

8. 数据高速缓存 : 存储来自译码单元专门标记的数据,以备逻辑运算单元使用,同时还准备了分配到计算机不同部分的最终结果。

  • 通过以上介绍可以看出CPU虽小,方寸之地却能容纳大世界,内部更像一个发达的装配工厂,环环相扣,层层相套。正因为有了相互间的协作配合,才使得指令最终得以执行,才构成了图文并茂、影像结合的神奇数字世界。
cpu的工作原理:
  • 我们都知道CPU的根本任务就是执行指令,对计算机来说最终都是一串由“0”和“1”组成的序列。CPU从逻辑上可以划分成3个模块,分别是控制单元、运算单元和存储单元,这三部分由CPU内部总线连接起来。如下所示:

    • 控制单元:控制单元是整个CPU的指挥控制中心,由指令寄存IR(InstrucTIon Register)、指令译码器ID(InstrucTIon Decoder)和操作控制器OC(OperaTIon Controller)等,对协调整个电脑有序工作极为重要。它根据用户预先编好的程序,依次从存储器中取出各条指令,放在指令寄存器IR中,通过指令译码(分析)确定应该进行什么操作,然后通过操作控制器OC,按确定的时序,向相应的部件发出微操作控制信号。操作控制器OC中主要包括节拍脉冲发生器、控制矩阵、时钟脉冲发生器、复位电路和启停电路等控制逻辑。

    • 运算单元:是运算器的核心。可以执行算术运算(包括加减乘数等基本运算及其附加运算)和逻辑运算(包括移位、逻辑测试或两个值比较)。相对控制单元而言,运算器接受控制单元的命令而进行动作,即运算单元所进行的全部操作都是由控制单元发出的控制信号来指挥的,所以它是执行部件。

  • 存储单元:包括CPU片内缓存和寄存器组,是CPU中暂时存放数据的地方,里面保存着那些等待处理的数据,或已经处理过的数据,CPU访问寄存器所用的时间要比访问内存的时间短。采用寄存器,可以减少CPU访问内存的次数,从而提高了CPU的工作速度。但因为受到芯片面积和集成度所限,寄存器组的容量不可能很大。寄存器组可分为专用寄存器和通用寄存器。专用寄存器的作用是固定的,分别寄存相应的数据。而通用寄存器用途广泛并可由程序员规定其用途,通用寄存器的数目因微处理器而异。这个是我们以后要介绍这个重点,这里先提一下。

  • 我们将上图细化一下,可以得出CPU的工作原理概括如下:

  • 总结一下,CPU的运行原理就是:
      1. 取指令:CPU的控制器从内存读取一条指令并放入指令寄存器。指令的格式一般是这个样子滴:

操作码就是汇编语言里的mov,add,jmp等符号码;操作数地址说明该指令需要的操作数所在的地方,是在内存里还是在CPU的内部寄存器里。

  1. 指令译码:指令寄存器中的指令经过译码,决定该指令应进行何种操作(就是指令里的操作码)、操作数在哪里(操作数的地址)。

  2. 执行指令,分两个阶段“取操作数”和“进行运算”。

  3. 修改指令计数器,决定下一条指令的地址。

  • 如上图所示,存储介质中,从上到小,内存越来越大,价格越来越便宜,但是传输速率越来越慢。因此将他们搭配起来使用是最好的。
  • 假如数据在硬盘上放着,当我们执行某个程序的时候,从硬盘中先拿到内存中,在拿到cache缓存器中,然后由预取器预取指令,再交给译码器进行译码,译码器再交给ALU算术逻辑单元执行运算,然后,将运算好的数据交给寄存器,由寄存器交给内存,再由内存交给硬盘。

MMU(内存管理单元)

  • 我就简答的说一下关于MMU,MMU就是为了完成物理内存和虚拟内存之间的映射,还有修改内存的访问级别。
  • 在没有使用虚拟存储器的机器上,虚拟地址被直接送到内存总线上,使具有相同地址的物理存储器被读写。而在使用了虚拟存储器的情况下,虚拟地址不是被直接送到内存地址总线上,而是送到内存管理单元——MMU(主角终于出现了)。他由一个或一组芯片组成,一般存在与协处理器中,其功能是把虚拟地址映射为物理地址。
MMU工作过程
  • 大多数使用虚拟存储器的系统都使用一种称为分页(paging)。虚拟地址空间划分成称为页(page)的单位,而相应的物理地址空间也被进行划分,单位是页框(frame).页和页框的大小必须相同。接下来配合图片我以一个例子说明页与页框之间在MMU的调度下是如何进行映射的:

  • 在这个例子中我们有一台可以生成16位地址的机器,它的虚拟地址范围从0x0000~0xFFFF(64K),而这台机器只有32K的物理地址,因此他可以运行64K的程序,但该程序不能一次性调入内存运行。这台机器必须有一个达到可以存放64K程序的外部存储器(例如磁盘或是FLASH)以保证程序片段在需要时可以被调用。在这个例子中,页的大小为4K,页框大小与页相同(这点是必须保证的,内存和外围存储器之间的传输总是以页为单位的),对应64K的虚拟地址和32K的物理存储器,他们分别包含了16个页和8个页框。

  • 关于MMU,我后面再来介绍。

进程的初步认识(程序与进程、并发、单道程序设计、多道程序设计、CPU、MMU)相关推荐

  1. 程序员架构修炼之道:如何设计“易理解”的系统架构?

    前言 尽管"可靠性"有时被视为"可用性"的同义词,但这一属性实际上意味着系统的所有关键设计的保证:可用性.持久性和安全不变量等. 我们构建易于理解的系统的主要指 ...

  2. Linux中的进程之初步了解

    一.概念的理解 二.进程的属性 一.概念的理解 首先程序与进程是什么?程序与进程又有什么区别? 程序(procedure):不太精确地说,程序就是执行一系列有逻辑.有顺序结构的指令,帮我们达成某个结果 ...

  3. linux(十四)程序和进程的深入研究

    目录 一.程序和进程的基础知识 1.1.程序和进程的关系 1.2.进程状态 二.命令解析 2.1.ps 命令 2.1.1.针对查询结构进行补充 2.2.TOP命令 2.2.1.描述 2.2.2 查询结 ...

  4. Linux系统【一】CPU+MMU+fork函数创建进程

    切板中的内容输出到文件### 进程相关概念 程序:编译好的二进制文件,在磁盘上,不占用系统资源(不包括磁盘).(剧本) 进程:占用系统资源,是程序的一次运行.(戏剧) 一个程序可以产生多个进程,一个进 ...

  5. 使用父子两个进程拷贝同一个文件,父进程拷贝前一半,子进程拷贝后一半。

    #include <head.h> // 父子进程在宏观上同时执行,微观上实际是时间片轮询串行. //两个进程同时调用同一个拷贝函数进行拷贝 int get_file_len(const ...

  6. linux进程网络监控,linux下的进程、网络、性能监控命令

    Linux下的java虚拟机性能监控与故障处理命令 java包中提供了很多监控JVM的工具类,作为java程序员必须得掌握常用的几个工具,下面是几个常用的JVM性能监控与故障处理工具的介绍与使用. 1 ...

  7. 完全拷贝的一份,程序员阅读书单

    Apocalypsa Rumination Introspection 博客园 首页 新随笔 联系 订阅 管理 随笔 - 28  文章 - 1  评论 - 1046 程序员必读书单 作者:Lucida ...

  8. 程序员必读书单1.0

    原文:http://lucida.me/blog/developer-reading-list/ 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必 ...

  9. 转:程序员必读书单 1.0

    本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读.旨在成为最好最全面的程序员必读书单. 前言 Reading makes a ...

  10. 程序员必读书单 1.0 ----转自Lucida

    本文转载自:http://lucida.me/blog/developer-reading-list/ 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书 ...

最新文章

  1. 像优秀的SQL程序员一样思考
  2. 检测到目标URL存在http host头攻击漏洞
  3. EXC中时间控件的使用
  4. java consumer.poll_kafka消费者API consumer.poll()没有错误,没有异常,只是阻止
  5. 发布一个很COOL的图片验证码程序[含源码]
  6. 解决微信小程序新建项目没有样式问题,以及官方demo
  7. 使用IDEA创建springcloud父工程
  8. B站回应视频监控被破解上传:下架相关内容 封禁账号
  9. 开发一个app需要多少钱、APP开发需要投入多少资金?
  10. lzg_ad:Windows Embedded Standard 安装说明
  11. 厦门大学计算机系夏令营考什么,2018年厦门大学全校33个学院保研夏令营信息汇总,读研不止一条路...
  12. 【题解】DZY Loves Math
  13. 一个stm32的简单程序的编译
  14. MySQL面试系列:MVCC是怎么实现的?(三)
  15. Jquery实现京东tab切图
  16. bgp基础配置实验(基于环回口建立peer关系)
  17. 喀什地区教师计算机水平考试报名,喀什地区2021年教师资格证面试报名时间-面试报名入口-报考条件-233网校...
  18. Presto下载地址
  19. TransRepair:自动测试及修复神经网络翻译模型的不一致性问题
  20. python学习第二天

热门文章

  1. c语言设计 教师信息管理系统 含源码及说明
  2. 基于Unity的极乐净土/others MMD动画制作
  3. 张家口地区某一级公路设计--河北建筑工程学院
  4. 高通骁龙430系列-MSM8937 ( Cortex-A53架构)
  5. 雷蛇鼠标垫真假区分_您真的需要鼠标垫吗?
  6. wms仓库管理系统中条形码管理的两大优势
  7. Linux性能优化(五)——性能监控工具
  8. 一位共阴数码管0至F数码显示
  9. Abbott's Revenge UVA - 816(BFS典型例题)
  10. pyside2 镜像安装_简单安装Pyside2