随笔分类 - 操作系统与计算机原理
摘要:水平触发(level-triggered,也被称为条件触发)LT:只要满足条件,就触发一个事件。边缘触发(edge-triggered)ET:当状态变化时触发事件。JAVA 的 NIO 属于水平触发,而 epoll 既支持水平触发也支持边缘触发。epoll 性能高于 poll 很重要的一点便是 ep
阅读全文
摘要:内存管理需要完成两个任务:地址保护,一个程序不能访问另一个程序的地址空间;地址独立:程序发出的地址应该与物理地址无关。段式管理/页式管理/段页式管理都是为了实现这两个目标而产生的内存管理方式。 内存管理的演变过程 静态地址翻译 将用户程序固定放在同一个物理地址。这种方式只支持单道编程环境,整个内存只
阅读全文
摘要:首先了解一下系统 I/O 与标准 I/O 的区别: 系统I/O,又称文件I/O,或是内核态I/O,引用文件的方式是通过文件描述符,一个文件对应一个文件描述符。一个文件描述符用一个非负整数表示,0、1、2系统默认表示标准输入、标准输出、标准错误,某些UNIX系统规定了描述符的上限值OPEN_MAX,这
阅读全文
摘要:如果我们要将一个文件通过 socket 发送出去,我们一般会这样写: Socket socket = new Socket(); socket.connect(new InetSocketAddress("127.0.0.1", 33456),10 * 1000); DataOutputStream
阅读全文
摘要:想要理解多路复用技术,首先要了解这个技术出现之前,我们面临的痛点是什么。 以 JAVA 为例,我们想要写一个 TCP 服务端,接收客户端发来的数据,那么我们会这样写: while (true) { Socket socket = serverSocket.accept(); //读取输入缓冲区数据
阅读全文
摘要:I/O 设备是计算机的重要组成部分,介于处理器与 I/O 设备交互的复杂性,I/O 操作一直是高级语言开发者比较难掌握的一个技术点。 因为高级语言对 I/O 操作的封装基于操作系统提供的系统函数,而这些系统函数的调用方式又与其硬件层的结构与工作机制息息相关,所以想要彻底搞懂 I/O 操作的那些函数,
阅读全文
摘要:进行 Socket 编程时经常会碰到 TCP 的粘包与半包问题,很多时候我们选用 netty 等框架而不直接采用原生的 Socket 编程也是因为 netty 帮我们将该类传输过程中可能出现的问题屏蔽掉了,使我们可以抽出更多精力来关注功能的实现,而不是挣扎在处理这些底层问题上。但尽管如此,我们也必须
阅读全文
摘要:首先认识一下 CAS:CAS是支持并发的第一个处理器提供原子的测试并设置操作,通常在单位上运行这项操作。操作数为V,A,B。 CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作
阅读全文
摘要:数据一致性部分借用大神“耗叔”的博客:https://coolshell.cn/articles/20793.html。 总结:volatile 关键字通过内存屏障禁止了指令的重排序,并在单个核心中,强制数据的更新及时更新到缓存。在此基础上,依靠多核心处理器的缓存一致性协议等机制,保证了变量的可见性
阅读全文
摘要:《深入理解计算机系统》学习笔记与总结 首先一个大的总结:在计算机中,使控制流发生突变的源头被称为异常控制流。异常是分为多个层级的,硬件异常与软件异常。我们在讨论异常的处理时也应该分情况讨论。异常控制流存在的逻辑是:我们的程序除了需要对程序内部状态的变化做出反应外,也应该可以对系统状态的变化做出反应。
阅读全文
摘要:时序电路 首先来看两个问题: 1.为什么CPU要用时序电路,时序电路与普通逻辑电路有什么区别。 2.触发器、锁存器以及时钟脉冲对时序电路的作用是什么,它们是如何工作的。 带着这两个问题,我们从头了解一下逻辑电路。要了解逻辑电路,首先我们便要了解组成逻辑电路的基本单位:逻辑门。 逻辑门 逻辑门是数字电
阅读全文
摘要:第一节 哲学家就餐问题 第二节 什么是死锁 第三节 死锁的定义 第四节 死锁发生的条件 第五节 如何避免死锁 5.1 动态避免,银行家算法(杠杆分配),在资源分配上下文章 5.2 静态避免,从任务代码上避免死锁 第六节 死锁的综合治理 第一节 哲学家就餐问题 假设有五位哲学家围坐在一张圆形餐桌旁,做
阅读全文
摘要:在道家的世界观中,无极生太极,是这个世界的从0到1。 天地之道,以阴阳二气造化万物。天地、日月、雷电、风雨、四时、于前午后,以及雄雌、刚柔、动静、显敛,万事万物,莫不分阴阳。人生之理,以阴阳二气长养百骸。经络、骨肉、腹背、五脏、六腑,乃至七损八益,一身之内,莫不合阴阳之理。这一理论建立至今凡两三千年
阅读全文
摘要:前言 中断的概念属于硬件层。虽然在进行软件编程时不会直接使用中断,但理解它对我们来说依然重要。 在使用线程切换及状态管理、异常处理、硬件与处理器的交互、I/O操作等指令时,中断都在默默的服务。 处理器基于硬件封装对外的指令集,底层语言封装指令集提供更加简单的抽象,高级语言基于底层语言赋予程序更明确的
阅读全文
摘要:这是一篇杂记,记录了操作系统层面与I/O管理的零散知识点,用于温习使用。由于I/O管理是一个很大的范畴,后续会不断按照自己的生产需求来补充用的到的知识点。计算机系统是人造系统,没有绝对的对错(相对于自然系统的绝对性),只有特定场景下的优劣。我们在理解一块知识时应当从它提出的背景以及要解决的问题出发,
阅读全文
摘要:由于硬件昂贵,多人分享一个终端,也就是多任务并行的需求引出了进程的概念。 随着硬件的发展和为了提高单个任务的效率,进程内部并发的需求引出了线程。 首先从cpu说起,我们知道,cpu执行指令(三级流水线情况下)分为三个阶段:取指令阶段、指令译码阶段、指令执行阶段。 对于cpu来说,并不存在线程这一概念
阅读全文