计算机指令

从Java多线程可见性谈Happens-Before原则

匿名 (未验证) 提交于 2019-12-02 21:53:52
Happens-Before是一个非常抽象的概念,然而它又是学习Java并发编程不可跨域的部分。本文会先阐述Happens-Before在并发编程中解决的问题―― 多线程可见性 ,然后再详细讲解Happens-Before原则本身。 Java多线程可见性 在现代操作系统上编写并发程序时,除了要注意线程安全性(多个线程互斥访问临界资源)以外,还要注意多线程对共享变量的可见性,而后者往往容易被人忽略。 可见性是指当一个线程修改了共享变量的值,其它线程能够适时得知这个修改。在单线程环境中,如果在程序前面修改了某个变量的值,后面的程序一定会读取到那个变量的新值。这看起来很自然,然而当变量的写操作和读操作在不同的线程中时,情况却并非如此。 /** *《Java并发编程实战》27页程序清单3-1 */ public class NoVisibility { private static boolean ready ; private static int number; private static class ReaderThread extends Thread { public void run () { while (! ready ) { Thread. yield (); } System.out. println (number); } } public static void

【软考】【软件设计师】【知识模块】【第2章:程序设计语言基础知识】

旧时模样 提交于 2019-12-02 17:04:01
程序设计语言基础知识 2.1 程序设计语言概述   2.1.1 程序设计语言基本概念     低级语言,面向机器的语言,如汇编语言、机器语言;       特性:进行程序设计效率低,程序的可读性差,难以修改、维护,优势是运行速度特别快;     高级语言,面向各类应用的程序设计语言。如C、C++ 、Java、Python、Delphi 、Pascal、Php          语言处理程序:负责将高级语言翻译成计算机能理解的0和1的程序;     语言之间的翻译基本方式:       汇编、解释、编译;       汇编:对使用汇编语言写成的源程序进行翻译成目标程序(机器可直接执行)的过程;       解释:将源程序翻译成中间代码(需要配合专有解释器才可执行)的过程;       编译:将源程序翻译成机器可直接执行的目标程序的过程;                解释和编译的区别在于:       对源程序进行编译后的目标程序可以在机器上直接执行,不需要源程序和编译程序配合执行;机器上运行的是与源程序等价的目标程序。       对源程序进行解释后的中间代码,需要源程序和解释程序(解释器)配合执行;            程序语言的定义涉及的三个范畴:       语义、语法、语用;     所谓高级语言,即不依赖机器硬件的;     所谓通用的程序设计语言

Docker容器的Tengine实践

岁酱吖の 提交于 2019-12-02 16:16:33
作为目前最火的应用, Docker 确实存在着其独到之处,无论是程序猿还是运维都应该听说过 Docker 的大名,Docker 已经走过了许多的坑,应该说是完全能承载开发使用和运维监控,这款工具能帮助我们高效的打包、发布和运行承载着应用程序的容器系统。而且收集日志、帮助 App 的快速开发都有很大作用。 容器和虚拟机,经常是被拿出来对比的两款产品,实际上两者有着根本的差别,虚拟机是完全模拟了一台真实计算机,在上面运行的系统可能或者不可能知道自己运行在虚拟化环境下,并且虚拟机承载了将用户指令转换为特权指令的功能,所以虚拟机非常复杂,但是很完备,而 Docker 则完全不同。Docker 使用主机自身的 Linux 内核,然后从镜像中产生磁盘目录和软件,所有的进程都运行在主机上,如果有兴趣的话完全可以 ps aux 查询一下,就能发现在 Docker 中运行的进程,只不过 Docker 对其做了如同 chroot 差不多概念的封装。 Docker 真正用法 在 Docker 发展的早期,由于 busybox 等轻量化镜像不完备,所以各大发行版的缩减瘦身镜像得到了更多的使用,特别是由于 Docker 本身是在 Ubuntu 环境下开发的,所以 Ubuntu 和 Debian 在很多镜像中作为基镜像,以此作为基础产生目标镜像。但是随着在实践中的使用,其弊端也暴露出来了,就是太过于重量化

什么是java

为君一笑 提交于 2019-12-02 15:29:07
什么是java 就是一门普通的互联网编程语言 什么是互联网编程语言 就是专门进行网络编程的一种语言 什么是java 就是一种往往用来进行互联网编程的编程语言 什么是互联网编程 就是网站编程 什么是网站 就是一个用来在多个机器之间共享的一种程序的统称 什么是互联网编程 就是编写一种可以在多台机器上共享的程序 什么是Java 就是一门编写共享程序的编程语言 什么是编程语言 就是向计算机描述人的指令的符号系统 就是向计算机下达人的命令的媒介 就是向计算机传递人的命令的一种工具 什么是java 就是向计算机传递人的命令的一种工具 什么是传递 就是模仿 就是两个事物之间的映射 什么是传递 就是映射 什么是映射 就是简单的对应 什么是java 就是人和计算机之间的一种映射 什么是java 就是人和计算机之间的一种映射 什么是java 就是人将自己的语言对应成计算机的指令 什么是java 就是一门编程语言 什么是编程语言 什么是编程 就是计算机的一套指令集 通过将这套指令集中的指令拿出来按照一定的顺序输入到计算机之中,计算机就会按照输入的指令按照顺序来执行这些指令 什么是指令 什么是java 就是一套指令集 什么是指令 就是一个操作的文字表述 就是自然语言中的动词 什么是动词 就是人的指令 上级向你下发指令,然后你就会按照上级的指令,按照顺序来执行这些指令 什么是java 就是人的动词

进程管理

你说的曾经没有我的故事 提交于 2019-12-02 15:15:30
计算机是由软件和硬件组成的: 底层的硬件→内核(kernel:输出的借口为system call,用作系统调用)→lib库(库调用;调用就是载入别人事先编写好的功能模块,比如函数、类); 程序由指令和数据组成; CPU上的指令分为普通指令(环三)和特权指令(环零); 特权指令不允许程序随意调用,一般只有内核可以调用;因为特权指令一般是执行硬件操作的,比如读写等,显然类似这些指令是不可能随意授权给普通程序的; 任何程序不得直接使用特权指令,用到的时候可以通过像内核申请系统调用来执行特权指令; 程序执行时是依照指令的顺序由上而下根据选择循环等结构有序的执行; 一个程序运行时一旦需要运行某个特权指令时就会去调用内核,接下来程序会先停止,等待内核把需要调用的功能(特权指令)拿到CPU上来执行,等待执行完成后,将结果返回(调用返回),然后程序继续执行其他操作; 代码执行过程中可能会不断地在自己可以执行的代码和调用由内核执行的代码之间来回转换; 模式切换:(用户代码(用户空间/模式)↔内核代码(内核空间/模式)) 内核的功能:进程管理、文件系统、网络功能、安全功能、内存管理、驱动程序等; 系统运行时会有多个程序一起执行,称作并行执行;是怎么实现的那? 其实当有多个程序一起执行时,系统会把程序对CPU的使用时间切割成时间片,某个程序执行一小段时间后再由下一个程序再执行一小段时间

为什么要有uboot?

[亡魂溺海] 提交于 2019-12-02 10:36:46
一、为什么要有uboot 1.1、计算机系统的主要部件 (1)计算机系统就是以CPU为核心来运行的系统。典型的计算机系统有:PC机(台式机+笔记本)、嵌入式设备(手机、平板电脑、游戏机)、单片机(家用电器像电饭锅、空调) (2)计算机系统的组成部件非常多,不同的计算机系统组成部件也不同。但是所有的计算机系统运行时需要的主要核心部件都是3个东西: CPU + 外部存储器(Flash/硬盘) + 内部存储器(DDR SDRAM/SDRAM/SRAM) 1.2、PC机的启动过程 (1)部署:典型的PC机的BIOS程序部署在PC机主板上(随主板出厂时已经预制了),操作系统部署在硬盘上,内存在掉电时无作用,CPU在掉电时不工作。 (2)启动过程:PC上电后先执行BIOS程序(实际上PC的BIOS就是NorFlash),BIOS程序负责初始化DDR内存,负责初始化硬盘,然后从硬盘上将OS镜像读取到DDR中,然后跳转到DDR中去执行OS直到启动(OS启动后BIOS就无用了) 1.3、典型嵌入式linux系统启动过程 (1)典型嵌入式系统的部署:uboot程序部署在Flash(能作为启动设备的Flash)上、OS部署在FLash(嵌入式系统中用Flash代替了硬盘)上、内存在掉电时无作用,CPU在掉电时不工作。 (2)启动过程:嵌入式系统 上电后先执行uboot 、然后uboot负责初始化DDR

快速了解指令系统

旧街凉风 提交于 2019-12-02 09:20:16
先来看看指令系统在计算机中的位置: 机器指令: 指令的格式: 指令要进行操作,所以用操作码来进行实现,那么对谁进行操作呢?由地址码来实现,为了编程方便,在指令集当中,往往有多种寻址方式。 操作码—地址码—寻址方式 指令字长 (一条指令的长度) 固定字长,可变字长 指令的一般格式 操作码字段–地址码字段 操作码:指出进行什么操作 (1)长度固定 用于指令字长较长的情况,RISC 如 IBM 370 8位 (2)长度可变 操作码分散在指令集的不同字段上 (3) 扩展操作码技术 为什么要扩展操作码呢? 用上面的图来进行讲解:如果OP,A1,A2,A3都是4位的,那么这个最多只能有16条不同类型的指令,这显然是不够的,所以我们需要对操作码进行扩展。 我们经全为1的状态作为标记,如果我们的操作为1111,就扩展一位操作码,意思就是这个时候从0000-1110只有15个3地址码。相似的,如果标志位11111111,那么说明这个时候,有11110000-11111110一共有15个2地址码。剩下的分析都是相似的。 注意:3地址指令操作码每减少一个最多可构成2的4次方的2地址指令 2地址操作码每减少一个最多可以构成2的4次方的1地址指令 在程序中经常出现的那些指令我们可以用短操作码 (短的查的快呀), 那些不常出现的就用常操作码来表示。 地址码: A1:第一操作数地址 A2:第二操作数地址 A3

《深入理解计算机系统》速读笔记

故事扮演 提交于 2019-12-02 09:13:28
问题一 条件码 条件码寄存器中保存着单个位的条件码,由CPU维护,如: CF:进位标志 ZF:零标志 SF:符号标志 OF:溢出标志 有几类指令能够修改条件码: 算术指令:既改变操作数,也有肯能改变条件码。 CMP指令:右操作数减左操作数,只可能改变条件码。 TEST指令:两操作数相与,只可能改变条件码。 条件码寄存器不能直接读取,有三种方法: set指令:根据条件码,设置一个字节。 jump指令:根据条件码进行跳转,即控制的条件转移。 cmov条件传送指令:根据条件码决定是否进行mov操作(其性能要优于控制的条件转移P141)。 来源: https://www.cnblogs.com/20199321zjy/p/11740575.html

计算机组成原理知识点概叙

余生长醉 提交于 2019-12-02 08:52:07
第1篇 概论 为了紧跟国际上计算机技术的新发展,本书对第1版各章节的内容进行了补充和修改,并增加了例题分析,以加深对各知识点的理解和掌握。本书通过对一台实际计算机的剖析,使读者更深入地理解总线是如何将计算机各大部件互连成整机的。 全书共分为4篇,第1篇(第1、2章)介绍计算机的基本组成、发展及应用;第2篇(第3 5章)介绍系统总线、存储器(包括主存储器、高速缓冲存储器和辅助存储器)和输入输出系统;第3篇(第6 8章)介绍CPU的特性、结构和功能,包括计算机的算术逻辑单元、指令系统、指令流水、RISC技术及中断系统;第4篇(第9、10章)介绍控制单元的功能和设计,包括时序系统以及采用组合逻辑和微程序设计控制单元的设计思想与实现措施。 第1章 计算机系统概论 1.1 计算机系统简介 1.1.1 计算机的软硬件概念 1.1.2 计算机系统的层次结构 1.1.3 计算机组成和计算机体系结构 1.2 计算机的基本组成 1.2.1 冯·诺依曼计算机的特点 1.2.2 计算机的硬件框图 1.2.3 计算机的工作步骤 1.3 计算机硬件的主要技术指标 1.3.1 机器字长 1.3.2 存储容量 1.3.3 运算速度 1.4 本书结构 思考题与习题 第2章 计算机的发展及应用 2.1 计算机的发展史 2.1.1 计算机的产生和发展 2.1.2 微型计算机的出现和发展 2.1.3 软件技术的兴起和发展

汇编语言入门

天涯浪子 提交于 2019-12-02 08:24:45
  感觉汇编语言还是很酷的,查了很多资料,这里再发一篇。   学习编程其实就是学高级语言,即那些为人类设计的计算机语言。 但是,计算机不理解高级语言,必须通过编译器转成二进制代码,才能运行。学会高级语言,并不等于理解计算机实际的运行步骤。   计算机真正能够理解的是低级语言,它专门用来控制硬件。汇编语言就是低级语言,直接描述/控制 CPU 的运行。如果你想了解 CPU 到底干了些什么,以及代码的运行步骤,就一定要学习汇编语言。 汇编语言不容易学习,就连简明扼要的介绍都很难找到。下面我尝试写一篇最好懂的汇编语言教程,解释 CPU 如何执行代码。 一、汇编语言是什么?   我们知道,CPU 只负责计算,本身不具备智能。你输入一条指令(instruction),它就运行一次,然后停下来,等待下一条指令。 这些指令都是二进制的,称为操作码(opcode),比如加法指令就是00000011。编译器的作用,就是将高级语言写好的程序,翻译成一条条操作码。 对于人类来说,二进制程序是不可读的,根本看不出来机器干了什么。为了解决可读性的问题,以及偶尔的编辑需求,就诞生了汇编语言。   汇编语言是二进制指令的文本形式,与指令是一一对应的关系。比如,加法指令00000011写成汇编语言就是 ADD。只要还原成二进制,汇编语言就可以被 CPU 直接执行,所以它是最底层的低级语言。 二、来历   最早的时候