<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[github_39353936的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/github_39353936</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; github_39353936]]></copyright><item><title><![CDATA[【《现代操作系统 第4版》】7、死锁]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/107833674</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/107833674</guid><author>github_39353936</author><pubDate>Fri, 07 Aug 2020 01:41:01 +0800</pubDate><description><![CDATA[所谓死锁，就是一种"我手上拿着苹果，想要你手上的梨子，你手上拿着梨子，想要我手上的苹果"的僵持状态。
资源
大部分死锁都和资源有关。
所谓资源就是需要排他性使用的对象。资源可以是硬件设备（如蓝光驱动器）或是一组信息（如数据库中一个加锁的记录）。
通常在计算机中有多种（可获取的）资源。一些类型的资源会有若干个相同的实例，如三台蓝光驱动器。当某一资源有若干实例时，其中任何一个都可以用来满足对资源的请求。
简单来说，资源就是随着时间的推移，必须能获得、使用以及释放的任何东西。
资源的分类

可抢占资源：可以从拥有]]></description><category></category></item><item><title><![CDATA[【《现代操作系统 第4版》】6、进程间的通信之经典的IPC问题]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/107804233</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/107804233</guid><author>github_39353936</author><pubDate>Wed, 05 Aug 2020 11:52:02 +0800</pubDate><description><![CDATA[哲学家就餐问题
1965年，Dijkstra提出并解决了一个他称之为哲学家就餐的同步问题。这个问题可以简单地描述如下∶五个哲学家围坐在一张圆桌周围，每个哲学家面前都有一盘通心粉。由于通心粉很滑，所以需要两把叉子才能夹住。相邻两个盘子之间放有一把叉子。哲学家的动作包括思考和进餐，当一个哲学家觉得饿了时，他就试图分两次去取其左边和右边的叉子，每次拿一把，但不分次序。如果成功地得到了两把叉子，就开始吃饭，吃完后放下叉子继续思考。问∶能为每一个哲学家写一段描述其行为的程序，且决不会死锁吗?

方案1
#define]]></description><category></category></item><item><title><![CDATA[【《现代操作系统 第4版》】5、进程间的通信之同步]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/107675425</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/107675425</guid><author>github_39353936</author><pubDate>Tue, 04 Aug 2020 23:39:50 +0800</pubDate><description><![CDATA[同步与互斥
为了克服并发问题中的竞态条件引入了锁机制从而使得多个进程之间能够互斥的访问共享资源。
而为了实现进程间的同步又引入了信号量和管程等模型。

生产者-消费者问题
有两个进程共享一个公共的固定大小的缓冲区。当生产者想要将数据写入缓冲区的时，如果缓冲区已满则让生产者睡眠，等到消费者从缓冲区中取出一个或多个数据项时再唤醒它。同样的，当消费者试图从缓冲区中取数据，如果缓冲区为空则消费者睡眠，等到生产者向其中放入一个新的数据再唤醒它。
#define N 100			/* 缓冲区 slot 槽的数量 */
]]></description><category></category></item><item><title><![CDATA[【《现代操作系统 第4版》】3、调度算法]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/107545365</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/107545365</guid><author>github_39353936</author><pubDate>Tue, 28 Jul 2020 06:57:23 +0800</pubDate><description><![CDATA[当一个计算机是多道程序设计系统时，会频繁的有很多进程或者线程来同时竞争 CPU 时间片。当两个或两个以上的进程/线程处于就绪状态时，就会发生这种情况。如果只有一个 CPU 可用，那么必须选择接下来哪个进程/线程可以运行。操作系统中有一个叫做 调度程序(scheduler) 的角色存在，它就是做这件事儿的，该程序使用的算法叫做 调度算法(scheduling algorithm) 。
尽管有一些不同，但许多适用于进程调度的处理方法同样也适用于线程调度。当内核管理线程的时候，调度通常会以线程级别发生，很少或者根]]></description><category></category></item><item><title><![CDATA[【《现代操作系统 第4版》】4、进程间的通信之互斥]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/107164518</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/107164518</guid><author>github_39353936</author><pubDate>Fri, 24 Jul 2020 09:40:20 +0800</pubDate><description><![CDATA[进程之间经常需要进行通信。进程间通信（Inter Process Communication，IPC）需要面临如下三个问题：

一个进程如何把信息传递给另一个进程
如何确保两个或更多的进程在关键活动中不会出现交叉

比如两个进程为不同的客户视图争夺飞机上的最后一个座位


如何确定程序正确的执行

比如进程A产生数据而进程B打印数据，那么B在打印之前必须等待，直到A已经产生一些数据



由于在不同地址空间进行通信的线程属于不同进程间的通信，所以除了第一个问题外，后两个问题在线程间的通信中也存在，它们的解决]]></description><category></category></item><item><title><![CDATA[【《现代操作系统 第4版》】2、进程与线程]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/106779337</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/106779337</guid><author>github_39353936</author><pubDate>Fri, 24 Jul 2020 09:39:34 +0800</pubDate><description><![CDATA[进程
进程是OS的核心概念，它是对正在运行程序的一个抽象。
进程模型
一个进程就是一个正在执行程序的实例，包括程序计数器、寄存器和变量的当前值。从概念上说，每个进程拥有它自己的虚拟CPU。真正的CPU在各进程间来回切换，这种快速切换称作多道程序设计。
由于CPU在各进程之间来回快速切换，所以每个进程执行其运算的速度是不确定的。而且当同一进程再次运行时，其运算速度通常也不可再现。所以，在对进程编程时决不能对时序做任何想当然的假设。
进程和程序间的区别是很微妙的，但非常重要。用一个比喻可以更容易理解这一点。想象]]></description><category></category></item><item><title><![CDATA[【Java多线程】01、Java线程的基本概念]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/106604662</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/106604662</guid><author>github_39353936</author><pubDate>Sun, 07 Jun 2020 18:42:45 +0800</pubDate><description><![CDATA[进程与线程
进程是程序运行的实例，是OS中进行资源分配和调度的基本单位。
比如当启动QQ时，会将QQ相关的代码从磁盘加载至内存，这时就开启了一个进程。
线程是执行调度的基本单位，进程中包含至少一个线程，同一个进程中的所有线程共享该进程中的资源。
同步和异步
同步和异步通常用来形容方法调用。
同步方法一旦调用，调用者必须等待结果返回后才能继续后续的行为。类似去餐馆吃饭。
异步方法一旦调用，不需要等待结果返回调用者可以继续后续的操作。异步方法调用更像是一个消息传递。
如果异步调用需要返回结果，那么当该异步调用完]]></description><category></category></item><item><title><![CDATA[【Java程序员应该掌握的底层知识】 02 操作系统]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/106311806</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/106311806</guid><author>github_39353936</author><pubDate>Sun, 07 Jun 2020 18:38:19 +0800</pubDate><description><![CDATA[OS的主要作用

管理硬件
管理应用

内核
内核是OS的核心，它管理着系统的各种资源。
内核的作用

内核的分类
宏内核
宏内核：kernel+一些高级的虚拟接口（控制硬件）
简单的说，宏内核相当于一个是一个中央集权控制中心，把内存管理，文件管理等功能全部管理。
PC上用的比较多，比如常见的windows、Linux。

微内核
微内核：提供操作系统核心功能的内核的精简版本，它设计成在很小的内存空间内增加移植性，提供模块化设计，以使用户安装不同的接口。
比如DOS、华为的鸿蒙。如嵌入式系统一样，可针对不同]]></description><category></category></item><item><title><![CDATA[【Java程序员应该掌握的底层知识】 01 硬件知识]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/106307349</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/106307349</guid><author>github_39353936</author><pubDate>Sun, 07 Jun 2020 18:38:05 +0800</pubDate><description><![CDATA[适合人群：非科班或未阅读过相关书籍的从业者

读书的原则
不求甚解，观其大略。
俗话说，“买书如山*倒,读书如抽丝”。计算机类的书籍都是砖头书，工作后如果从头到尾的仔细通读全书，不仅效率低下而且特别痛苦，还会慢慢地打击读书的积极性，往往半途而废。
工作后读书，应该先快速的通读，大体读明白，了解轻重点。把对自己目前有用的东西先拿来用，用着用着，很多道理就明白了。然后再去读相关部分，往往会有醍醐灌顶的感觉。
书籍推荐

《编码：隐匿在计算机软硬件背后的语言》：基本上高中理科生就能理解
《深入理解计算机系统》（.]]></description><category></category></item><item><title><![CDATA[【《计算机组成 结构化方法 第6版》】04、了解性章节(4、5、7)]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/106394795</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/106394795</guid><author>github_39353936</author><pubDate>Sun, 07 Jun 2020 18:37:35 +0800</pubDate><description><![CDATA[是

]]></description><category></category></item><item><title><![CDATA[【《计算机组成 结构化方法 第6版》】03、数字逻辑层]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/106365135</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/106365135</guid><author>github_39353936</author><pubDate>Sun, 07 Jun 2020 18:37:06 +0800</pubDate><description><![CDATA[门和布尔代数

这章写的行云流水，作为电子专业的科班，纯当复习了，虽然忘的也差不多了╮(╯▽╰)╭

门
数字电路只能表示两个逻辑值。一般用电压 0~0.5V 表示二进制的0，电压  1 ~ 1.5V 表示二进制的1。
通常用门来表示这种电子设备，由二极管构成，门是所有数字计算机的硬件基础（如CPU和存储器）。
布尔代数
布尔代数是数字计算机的基础。通过布尔代数可以表示各种电路。

任何一个电路都可以用真值表来表示：

基本数字逻辑电路
组合逻辑电路
输出信号由输入信号的当前状态唯一确定的电路就是组合逻辑电]]></description><category></category></item><item><title><![CDATA[【《计算机组成 结构化方法 第6版》】02、计算机系统组成]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/106343947</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/106343947</guid><author>github_39353936</author><pubDate>Sun, 07 Jun 2020 18:35:55 +0800</pubDate><description><![CDATA[数字计算机是由处理器、存储器和输入/输出设备组成的内部互连系统。
处理器



CPU：通过总线从主存储器中逐条进行取指令、分析指令和执行指令的过程来执行程序

主要由控制器、算术逻辑单元（ALU） 和 寄存器组（Registers）构成
控制器：负责从主储存器中取指令和确定指令类型
ALU：完成如加法、逻辑等运算指令
寄存器组：存放计算时的中间结果和一些控制信息；它们的容量都相同，可被CPU高速读写

PC：程序计数器。存放下一条将被取出执行的指令
IR：指令寄存器。存放当前正在执行的指令
通过寄存器：存]]></description><category></category></item><item><title><![CDATA[【《计算机组成  结构化方法 第6版》】01、结构化计算机组成]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/106343847</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/106343847</guid><author>github_39353936</author><pubDate>Sun, 07 Jun 2020 18:35:32 +0800</pubDate><description><![CDATA[1、新版变化

链接: https://pan.baidu.com/s/15lD6PNs5iJmA3qZLqyrkPQ
提取码: qbtj

示例上的变化


桌面计算机：Core i7（x86指令）


移动计算：OMAP4430（ARM指令）


嵌入式：ATmega168（AVR指令）


汇编语言：8088
2、章节变化
第2章：增加 GPU、Flash存储设备、触摸屏
第3章：增加 FPGA
第4章：内容没大的改变，只换了示例
第5、6章：仅就新的示例体系结构所涉及的部分做了改写，增加了对 ARM]]></description><category></category></item><item><title><![CDATA[Java8源码 java.lang 包 11、包装类总结]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/104374089</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/104374089</guid><author>github_39353936</author><pubDate>Tue, 18 Feb 2020 13:55:01 +0800</pubDate><description><![CDATA[文章目录1、继承抽象父类 Number2、实现 Comparable 接口3、不可变性4、创建包装类对象5、类变量6、equals7、hashCode8、包装类与基本类型的转换9、字符串、包装类、基本类型之间的转换
1、继承抽象父类 Number
数值类型（byte、short、int、long、float、double）的包装类都继承抽象父类 Number 类，它实现了 Serializable...]]></description><category></category></item><item><title><![CDATA[Java8源码 java.lang 包 10、Long类]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/104359891</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/104359891</guid><author>github_39353936</author><pubDate>Mon, 17 Feb 2020 16:07:30 +0800</pubDate><description><![CDATA[Long 类是基本类型 long 的包装类，有着很多和 Integer 类似的方法。同时提供了 long 和 String 之间互相转换的方法，以及很多处理 long 时非常有用的其他方法和常量。
类的定义
public final class Long extends Number implements Comparable&lt;Long&gt;

同 Integer 。
静态内部类 Long...]]></description><category></category></item><item><title><![CDATA[Java8源码 java.lang 包 11、Float类]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/104359191</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/104359191</guid><author>github_39353936</author><pubDate>Mon, 17 Feb 2020 15:32:33 +0800</pubDate><description><![CDATA[文章目录类的定义成员变量类变量构造方法其他方法核心方法floatToIntBitsfloatToRawIntBitsintBitsToFloat重写 Object的方法equals(Object obj)hashCode()toString()float转字符串 toString(float f)字符串转float重写Number的方法数值判断是否是非数字 isNaN是否是无穷数 isInfini...]]></description><category></category></item><item><title><![CDATA[Java8源码 java.lang 包 09、Integer类]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/104345233</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/104345233</guid><author>github_39353936</author><pubDate>Sun, 16 Feb 2020 22:14:56 +0800</pubDate><description><![CDATA[Integer 类是基本类型 int 的包装类，有着很多和 Byte、Short 类似的方法。同时提供了 int 和 String 之间互相转换的方法，以及很多处理 int 时非常有用的其他方法和常量。
类的定义
public final class Integer extends Number implements Comparable&lt;Integer&gt; 

同 Byte、Short...]]></description><category></category></item><item><title><![CDATA[Java8源码 java.lang 包 06、Number类]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/104338499</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/104338499</guid><author>github_39353936</author><pubDate>Sun, 16 Feb 2020 09:37:53 +0800</pubDate><description><![CDATA[抽象类 Number 是表示数值的类，它是 BigDecimal、BigInteger、Byte、 Short、Integer、Long 、Float、和 Double 的父类。它定义了各种的 xxxValue 方法，用于将数值对象转换为基本类型。如 intValue() 就是将数据转换为 int 类型。
在进行转换时，由于每个基本类型的数据范围不一样，要注意范围越界、精度丢失等问题。比如 byt...]]></description><category></category></item><item><title><![CDATA[Java8源码 java.lang 包 08、Short类]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/104335741</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/104335741</guid><author>github_39353936</author><pubDate>Sat, 15 Feb 2020 22:09:05 +0800</pubDate><description><![CDATA[文章目录概述类的定义静态内部类 ShortCache成员变量构造方法其他方法toString(short)parseByte(String s) 与 parseByte(String, int)valueOf(String) 与 valueOf(String, int)valueOf(short)重写父类的xxxValue()toString()hashCode()equals()compareT...]]></description><category></category></item><item><title><![CDATA[Java8源码 java.lang 包 07、Byte类]]></title><link>https://blog.youkuaiyun.com/github_39353936/article/details/104335383</link><guid>https://blog.youkuaiyun.com/github_39353936/article/details/104335383</guid><author>github_39353936</author><pubDate>Sat, 15 Feb 2020 21:47:37 +0800</pubDate><description><![CDATA[文章目录概述类的定义父类 Number静态内部类 ByteCache成员变量构造方法其他方法toString(byte)parseByte(String s) 与 parseByte(String, int)valueOf(String) 与 valueOf(String, int)valueOf(byte)重写父类的xxxValue()toString()hashCode()equals()co...]]></description><category></category></item></channel></rss>