摘要: 检测12.1 1 1. 0070:018B 2 1. 0:(N 4) + 2 2. 0:(N 4) 实验12注意点 这次的实验12犯了很多错: 1. 原意是想把当前的段地址赋给ds,然后我智障地直接把标号给了ds ,`mov ds, ax`(正确的做法 是将当前的cs的值赋给ds,然后把do0的偏移 阅读全文
posted @ 2019-06-02 18:20 CoDeleven 阅读(189) 评论(0) 推荐(0) 编辑
摘要: [TOC] 中断的作用就是暂停当前程序的执行,并转去执行另外一个程序,另外个程序执行完后再回来继续执行当前程序。该过程和 和`return`有点像,不过中断是由硬件主动产生的。 系统内置的内中断 1. 除法错误,比如执行div指令产生的除法溢出 0 2. 单步执行 1 3. 执行into指令 4 4 阅读全文
posted @ 2019-06-02 18:19 CoDeleven 阅读(764) 评论(0) 推荐(1) 编辑
摘要: [TOC] 标志寄存器同普通的寄存器一样有16位,它的主要作用就是提供一些程序的状态字段,简称 程序状态字 ZF(零状态寄存器) 当使用 运算指令(比如add、sub、mul等)时,可能会修改ZF位;而传送指令(比如mov、pop、push等)就不会修改ZF位。当执行了运算指令后结果为 0 则 ZF 阅读全文
posted @ 2019-06-02 18:13 CoDeleven 阅读(917) 评论(0) 推荐(0) 编辑
摘要: 检测点11.1 1. ZF = 1, PF = 1, SF = 0 2. ZF = 1, PF = 1, SF = 0 3. ZF = 1, PF = 1, SF = 0 4. ZF = 1, PF = 1, SF = 0 5. ZF = 0, PF = 0, SF = 0 6. ZF = 0, P 阅读全文
posted @ 2019-06-02 18:12 CoDeleven 阅读(337) 评论(0) 推荐(0) 编辑
摘要: 检测点10.1 Q: 补全程序,实现从内存1000:0000处开始执行指令 A: 1. 1000H 2. 0 检测点10.2 Q: 上面的程序执行后,ax中的数值为多少? A: ax = 6 检测点10.3 Q: 上面的程序执行后,ax中的数值为多少? A: ax = 1010H 分析: 1. 将 阅读全文
posted @ 2019-06-02 18:00 CoDeleven 阅读(276) 评论(0) 推荐(0) 编辑
摘要: [TOC] 这章主要学习 call 和 ret 两个指令,前者的作用相当于现在高级语言的 方法调用 ,后者相当于高级语言的 方法返回 call指令 call指令分为了 根据偏移量转移 和 根据目的地转移 两种格式 根据偏移量转移 1. call (16位寄存器) 2. call 标号 3. call 阅读全文
posted @ 2019-06-02 17:59 CoDeleven 阅读(428) 评论(0) 推荐(0) 编辑
摘要: 检测点9.1(1) Q: 若要使程序中的jmp指令执行后,CS:IP指向程序的第一条指令,在data段中应定义哪些数据? A: 想要让此时的 指向程序的第一条,只要 这个 字单元(因为是word ptr) 保存着 数值0 即可,所以 里面前三个字节保存0即可。 这道题帮我解决了一个认知错误: 以前一 阅读全文
posted @ 2019-06-02 17:29 CoDeleven 阅读(311) 评论(0) 推荐(0) 编辑
摘要: [TOC] 简介 转移指令可以理解为转移程序执行位置的指令。转移指令通常会修改 或( 与`CS`)。 转移指令分类 无条件转移指令(jmp) 其使用方式根据跳转的距离(修改IP的范围)分为三种 1. 段内短转移——跳转的IP范围为 128~127 jmp [short] 标号 jmp (16位reg 阅读全文
posted @ 2019-06-02 16:38 CoDeleven 阅读(1008) 评论(0) 推荐(0) 编辑
摘要: 阻塞队列是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法: 1) 支持阻塞的插入方法:当队列满时,队列会阻塞执行插入的线程 2) 支持阻塞的移除方法:当队列空时,队列会阻塞执行移除的线程 方法总结: | 方法/处理方式 | 抛出异常 | 返回特殊值 | 一直阻塞 | 超时退出 阅读全文
posted @ 2019-06-02 16:19 CoDeleven 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 在Java里,有时候需要延迟初始化来降低初始化类和创建对象的开销。为众人所致的双重检查锁定是常见的延迟初始化技术,但它是一个错误的用法。 比如下面的用法: 假设线程A执行getInstance()初始化对象还未完成时,线程B 判断 instance 变量为 null,也执行一遍Instance的初始 阅读全文
posted @ 2019-06-02 15:43 CoDeleven 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 线程池的优点: 降低资源开销:每次任务到达时不需要重新创建和销毁 提高可管理性:统一对线程进行调优、监控 提高任务响应速度:不需要等待线程创建 线程池创建的各个参数: corePoolSize: 核心线程数。在核心线程数未满时,也优先创建满核心线程数(就算有空余的核心线程) maximumPoolS 阅读全文
posted @ 2019-06-02 15:41 CoDeleven 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 线程池核心Executor Java的线程既是工作单元,也是执行机制。从JDK5开始,把工作单元与执行机制分离开来。工作单元包括Runnable、Callable,而执行机制由Executor提供。 Executor框架结构和流程 主要由以下三部分组成: 任务:Runnable、Callable接口 阅读全文
posted @ 2019-06-02 15:39 CoDeleven 阅读(241) 评论(0) 推荐(0) 编辑
摘要: CountDownLatch 该类主要实现了:让一个线程等待其他线程完成后再执行的功能,好比 。 该类的初始化需要一个整数值count,当每次调用 时Count会递减。直到count降到0时,所有执行 的方法都会返回。 初始化了一个共享变量latch,并赋予count为3 创建一个任务,睡眠1秒假装 阅读全文
posted @ 2019-06-02 15:38 CoDeleven 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 本章是在学习内存模型后,对 Volatile 关键字 有了更加全面得理解,对知识点进行一个分析总结。 volatile的特性 volatile在单个操作上和synchronized一样 可见性:volatile字段的写操作保证对所有线程可见 原子性:volatile字段的单个读写操作是原子性的(比如 阅读全文
posted @ 2019-06-02 15:36 CoDeleven 阅读(385) 评论(0) 推荐(0) 编辑
摘要: synchrnoized的happens before 假设线程A执行init(),线程B执行doTask(),有如下的happens before关系: 根据程序次序规则: ① hb ② ② hb ③ ③ hb ④ ⑤ hb ⑥ ⑥ hb ⑦ ⑦ hb ⑧ 根据监视器规则: ① hb ④ ④ hb 阅读全文
posted @ 2019-06-02 15:34 CoDeleven 阅读(481) 评论(0) 推荐(1) 编辑
摘要: 在学习锁优化时, 对象头(Mark Word) 是必不可缺的一环,因为 synchronized 用的锁是存在 对象头 里的。32位的虚拟机上对象头占64位(8字节),64位的虚拟机上对象头占128位(16字节)[^objectHead];而不同的类型,对象头的布局不太一样: 数组类型:Mark W 阅读全文
posted @ 2019-06-02 15:29 CoDeleven 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 整体层次思路:Java采用的是内存共享模型,该模型会遇到内存可见性的问题,而内存可见性通常都是由 重排序 和 写缓冲区 引发的,重排序又分为 处理器重排序 和 编译器重排序 。面对 写缓冲区 的问题,像Java这样的高级语言一般无能为力,所以从 重排序 入手,在重排序里,JVM通过内存屏障提供了一层 阅读全文
posted @ 2019-06-02 15:27 CoDeleven 阅读(278) 评论(0) 推荐(0) 编辑
摘要: happens before 是JMM的核心概念 JMM的设计 程序员对内存模型的使用。程序员希望内存模型简单易用、易于理解,程序员需要一个强内存模型(尽量偏向顺序一致性)编写程序 编译器和处理器对内存模型的实现。编译器和处理器希望内存模型对它们的束缚越小越好,编译器和处理器需要一个弱内存模型(尽量 阅读全文
posted @ 2019-06-02 15:24 CoDeleven 阅读(262) 评论(0) 推荐(0) 编辑
摘要: final的重排序规则 以下面的代码为例,讲解final写和final读的重排序规则 final写的重排序规则 JMM保证写final变量时不被编译器重排序到构造函数外 编译器会在写final域后,构造函数返回前插入StoreStore屏障 假设现在线程A执行init(),线程B执行read()时, 阅读全文
posted @ 2019-06-02 15:20 CoDeleven 阅读(472) 评论(0) 推荐(1) 编辑
摘要: 队列这个数据结构已经很熟悉了,就不多介绍,主要还是根据代码理解Doug Lea大师的一些其他技巧。 入队 如图所示,很多人可能会很疑惑,为什么第一次入队后,TAIL没有指向Node2?答案是为了效率!Σ(っ °Д °;)っ 那这还能叫队列吗?当然,它依然符合先进先出(FIFO)的规则。只是TAIL变 阅读全文
posted @ 2019-06-02 15:11 CoDeleven 阅读(225) 评论(0) 推荐(0) 编辑