并发编程从操作系统底层工作整体认识开始


并发编程从操作系统底层工作整体认识开始文章插图
作者公众号:一角钱技术(org_yijiaoqian)
前言在多线程、多处理器、分布式环境的编程时代 , 并发是一个不可回避的问题 。 既然并发问题摆在面前一个到无法回避的坎 , 倒不如拥抱它 , 把它搞清楚 , 花一定的时间从操作系统底层原理到Java的基础编程再到分布式环境等几个方面深入探索并发问题 。 先就从原理开始吧 。
计算机系统层次结构早期计算机系统的层次最早的计算机用机器语言编程 , 机器语言称为第一代程序设计语言
并发编程从操作系统底层工作整体认识开始文章插图
汇编语言编程汇编语言编程
并发编程从操作系统底层工作整体认识开始文章插图
现代(传统)计算机系统的层次现代计算机用高级语言编程

  • 第三代程序设计语言(3GL)为过程式 语言 , 编码时需要描述实现过程 , 即“ 如何做” 。
  • 第四代程序设计语言(4GL) 为非过程 化语言 , 编码时只需说明“做什么” ,不需要描述具体的算法实现细节 。

并发编程从操作系统底层工作整体认识开始文章插图
语言处理系统包括:各种语言处理程序(如编译、汇编、 链接)、运行时系统(如库函数 , 调试、优化等功能)
操作系统包括人机交互界面、 提供服务功能的内核例程
可以看出:语言的发展是一 个不断“抽象”的过程 , 因而 , 相应的计算机系统也不断有新的层次出现 。
计算机系统抽象层的转换
并发编程从操作系统底层工作整体认识开始文章插图
功能转换:上层是下层的抽象 , 下层是上层的实现 底层为上层提供支撑环境!
计算机系统的不同用户
  • 最终用户工作在由应用程序提供的最上面的抽象层
  • 系统管理员工作在由操作系统提供的抽象层
  • 应用程序员工作在由语言处理系统(主要有编译器和汇编器)的抽象层
  • 语言处理系统建立在操作系统之上
  • 系统程序员(实现系统软件)工作在ISA层次 , 必须对ISA非常了解
编译器和汇编器的目标程序由机器级代码组成
操作系统通过指令直接对硬件进行编程控制ISA处于软件和硬件的交界面(接口)
并发编程从操作系统底层工作整体认识开始文章插图
ISA是对硬件的抽象所有软件功能都建立在ISA之上
指令集体系结构(ISA)ISA指 Instruction Set Architecture , 即指令集体系结构 , 有时简称为指令系统
  • ISA是一种规约(Specification) , 它规定了如何使用硬件可执行的指令的集合 , 包括指令格式、操作种类以及每种操作对应的 操作数的相应规定;指令可以接受的操作数的类型;操作数所能存放的寄存器组的结构 , 包括每个寄存器的名称、编号、 长度和用途;操作数所能存放的存储空间的大小和编址方式;操作数在存储空间存放时按照大端还是小端方式存放;指令获取操作数的方式 , 即寻址方式;指令执行过程的控制方式 , 包括程序计数器(PC)、条件码定义等 。
  • ISA在通用计算机系统中是必不可少的一个抽象层 , 没有它 , 软件无法使用计算机硬件!没有它 , 一台计算机不能称为“通用计算机”
ISA和计算机组成(微结构)之间的关系ISA是计算机组成的抽象 , 不同ISA规定的指令集不同
  • 如 , IA-32、MIPS、ARM等 计算机组成必须能够实现ISA规定的功能
  • 如提供GPR、标志、运算电路等 同一种ISA可以有不同的计算机组成
  • 如乘法指令可用ALU或乘法器实现
现代计算机的原型现代计算机模型是基于-冯诺依曼计算机模型
1946年 , 普林斯顿高等研究院(the Institute for Advance Study at Princeton , IAS )开始设计“存储程序”计算机 , 被称为IAS计算机.
  • 冯·诺依曼结构最重要的思想是“存储程序(Stored-program)”
  • 工作方式:任何要计算机完成的工作都要先被编写成程序 , 然后将程序和原始数据送入主存并启动执行 。 一旦程序被启动 , 计算机应能在不需操作人员干预下 , 自动完成逐条取出指令和执行指令的任务 。 冯·诺依曼结构计算机也称为冯·诺依曼机器(Von Neumann Machine) 。 几乎现代所有的通用计算机大都采用冯·诺依曼结构 , 因此 , IAS计算机是现代计算机的原型机 。
计算机在运行时 , 先从内存中取出第一条指令 , 通过控制器的译码 , 按指令的要求 , 从存储器中取出数据进行指定的运算和逻辑操作等加工 , 然后再按地址把结果送到内存中去 。 接下来 , 再取出第二条指令 , 在控制器的指挥下完成规定操作 。 依此进行下去 。 直至遇到停止指令 。