操作系统
文章平均质量分 57
liangdu_Zuker
这个作者很懒,什么都没留下…
展开
-
ChatGPT 探讨内存屏障的意内存
也就说, asm volatile (“mfence” ::: “memory”);这条内存读写屏障,之所以难以理解,是因为他把两种场景用到的两条指令合并成一条指令,从而导致晦涩难懂。单独理解或就简单很多了。首先,我们知道对于共享变量,线程用的内存包括,本地内存,主内存。如果,希望数据马上写穿 write through 到主内存,则写完之后执行如果,希望数据重新到主内存读取最新值,则读之前执行如果又是读,又是写即,等价于。原创 2023-05-06 17:02:30 · 2073 阅读 · 0 评论 -
从目录文件inode角度,理解软连接的由来
目录文件的inode 存放的是 entry,entry 的key 是文件名词, value是 inode 的磁盘Inode数组物理编号(数字下标)。硬连接就是 不同绝对路径下的 目录文件 inode 的 entry 指向同一个 inode 编号的技术。这个时候单单通过 inode 编号,系统会认为是当前文件系统的Inode 编号,无法实现跨文件系统。有时候需要 “跨文件系统” 指向 inode (注意,不同文件系统的 inode 编号允许相同),然后 inode 文件内容存放 “绝对路径的字符串”,原创 2022-11-26 15:15:02 · 519 阅读 · 0 评论 -
通过 filesystem 的 inode 设计,理解数组与链表
inode 是存用户数据的地方。inode 用链表存放用户的数据。磁盘是存放inode 的地方。磁盘用数组存放 inode。inode 喜欢链表的灵活性。磁盘喜欢数组的简单性。原创 2022-11-26 14:52:02 · 533 阅读 · 0 评论 -
位于kernel的文件系统大管家--Virtual File System
包含对持久化的文件内容权限标记方法 inode_operation、以及读写文件内容的IO接口 file_operation。值得一提的是: inode里的 file_operation 涉及很多文件缓存技术以及 IO 缓存等驱动技术,这是技术热点。维护着与底层文件系统相关的 superblock与 替位的新子文件系统入口 dentry。记录无入口的原父文件系统 dentry 与 替位的新子文件系统 dentry 关联关系。维护全局的被打开文件的对象,他是VFS的核心对象。维护进程打开的文件描述符列表。原创 2022-11-19 16:41:44 · 475 阅读 · 0 评论 -
《内核源代码情景分析》-CPU调度阅读笔记
介绍了linux 内核 2类主要调度器,实时调度器,CFS公平调度器,以及一些总结的源码相关的知识点原创 2022-11-16 09:56:40 · 483 阅读 · 0 评论 -
读《凤凰架构》- RPC的历史与知识
引用《凤凰架构》-周志明。原创 2022-07-21 00:33:55 · 374 阅读 · 0 评论 -
重新认识的docker
前言容器是内核特效的集合,比如:namespace(chroot)、 cgroup 或者 unionFS 等隔离技术。由于这种内核特效普通人难以运用,故docker对齐做了封装,并提供成套的便利工具程序。docker的架构容器技术的本质提供了程序运行资源的隔离能力,所以容器进程的本质是进程,只不过具备了资源隔离能力。而作为特殊的程序,故意需要有一套特殊的管理工具,比如:特殊的构建工具 docker build特殊的程序管理工具 docker image特殊的程序下载仓库 docker rep原创 2021-11-03 20:40:49 · 131 阅读 · 0 评论 -
记一次日志文件IO系统的设计心得
记一次日志文件IO系统的设计心得bytebuffer的使用心得。bytebuffer 的本质上还是缓存,我们可以认为他是比较物理层的概念,比如我们如果没有做好映射访问的规划,或者文件索引没有设计好,就容易导致创建很多文件句柄,最终容易引发操作系统的inode耗光。所以想要学会bytebuffer的重点在于掌握好Position和capacity的使用技巧。其次,就是做好文件索引和映射范围控制,常见的手法就是将文件分段segment,然后对段做索引管理。当然你可以通过控制业务范围和文件回收策略以及后原创 2020-12-03 14:22:24 · 193 阅读 · 0 评论 -
【获取shell脚本文件的全路径】涉及的知识点
【获取shell脚本文件的全路径】涉及的知识点$0是当前执行脚本的名称。dirname $0 是当前执行脚本的父目录(相对路径,仍然不是全路径)真正读取全路径的方法:base_dir=(cd"(cd "(cd"(dirname “$0”)";pwd) 则是 切换工作目录到脚本父目录下,然后pwd,返回当前脚本父目录。如果不cd,按照fork的特性,就会继承父进程的work directory.这里有个好处就是我们在 $()里面执行shell script,也就是在子进程里改变了work-dir。因原创 2020-11-10 10:35:22 · 939 阅读 · 0 评论 -
Docker容器进程系统资源限制的最佳实践思考与试验
docker进程的系统资源限制【本文参考自】:https://www.cnblogs.com/edisonchou/p/docker_resource_limitation_introduction.htmlhttps://hub.docker.com/r/lorel/docker-stress-ng/默认情况下,容器是没有资源限制的,它会尽可能地使用宿主机能够分配给它的资源。linux系统内存资源不足的时候就会抛出OOM,之后会开始随机释放用户进程资源,很可能会造成系统崩溃。(提供足够的原创 2020-07-25 16:17:06 · 624 阅读 · 0 评论 -
JVM线程模型与操作系统厂商的关系
jvm线程仍然可以自行控制调度算法(hotspot在非solaris放弃了这种骚操作,直接让一个jvm线程对应一个os线程,成为1vs1模型)。也就说,有些jvm厂商自己实现线程调度算法,在os线程的基础上又做了一层封装。从而实现多个线程在一个os线程内并发,或者多个线程在n个线程内并发。你可以理解为jvm厂商真把jvm当成是计算机操作系统来做了。按照jvm的规范,jvm线程是操作系统级...原创 2020-05-08 10:16:51 · 293 阅读 · 0 评论 -
【操作系统】CSAPP学习笔记
CSAPP学习笔记前言在阅读本书前,最好先了解一下书本的结构,然后根据结构,网上查查网评。最好能找到一些最佳阅读技巧。可以给自己定一个大一点的目标,比如,期望读完这本书,可以自己设计一个操作系统。而不是仅仅学会给代码调优(这个目的会让你走火入魔)。不要企图或者期待这本书给你带来很多开箱即用的最佳实践。你不是在刷算法题。阅读时的模式:明白技术点所要解决的问题,以及如何解决的。(问题驱动阅读)...原创 2020-05-07 09:42:26 · 1210 阅读 · 0 评论 -
【学习JVM】强引用,弱引用,软引用,虚引用
强引用,弱引用,软引用,虚引用需要参考的准备数据:《深入理解JAVA虚拟机》需要参考的知识点:GC Roots引用计数器引用的定义对象的引用finalize执行时机知识的记录方式: - 查看博客,把没有遇见过的或者觉得比较经典的博文段落摘录 - 自己的理解以条目的形式展示 - 知识误解标记 - 知识盲区标记 - JAVA内存模型这个知识点基本上每本书都会讲解,最好的...原创 2019-02-13 16:54:52 · 352 阅读 · 0 评论 -
【学习JVM】内存垃圾回收与调优
新生代的垃圾回收过程需要参考的准备数据:《深入理解JAVA虚拟机》《Oracle技术网/java/G1 GC调优》需要参考的知识点:字节码结构java内存区域对象的引用理论上的GC算法和实际落地的GC收集器知识的记录方式: - 查看博客,把没有遇见过的或者觉得比较经典的博文段落摘录 - 自己的理解以条目的形式展示 - 知识误解标记 - 知识盲区标记 - JAVA内存...原创 2019-02-13 16:50:37 · 753 阅读 · 0 评论 -
修改linux swap交换区大小
swap交换区是linux的虚拟内存技术,为了有效的提高物理内存的利用率,会在硬盘开辟一块空间用处堆放不经常使用的内存数据。而有时候虚拟内存满了会导致部分程序卡死(虽然不至于系统崩溃。)## 修改交换区的方法 ##进入修改交换区空间大小的文件> sudo vi /etc/dphys-swapfile树莓派上的交换区默认值大小 :> CONF_SWAPSIZE=100将...原创 2018-03-14 11:57:06 · 2199 阅读 · 0 评论 -
聊聊3种内存溢出OOM(OutOfMemory)
内存溢出有2种,我们最熟悉的就是堆内存溢出异常,比如我们new一个对象或者数组,如果超出了JVM的heap内存最大限制就会爆出异常比如:从这句话我们可以知道,栈内存溢出有2种异常一种是:StackOverflowError、另一种是OutOfMemoryErrorStackOverflowError是指【线程】的栈内存原创 2017-09-19 10:17:49 · 1512 阅读 · 0 评论 -
操作系统概念 -第七版-重要概念的理解-(1-22)
1. 处理器从功能上来讲,处理器 = 通用指令集(对外接口) + 寄存器(状态)+ 高速缓存(cache)2. CPU中央处理器的主要交互对象是主内存(存放数据+指令)。3.CPU有时候还会和设备控制器交互。4.设备控制器 = 微处理器 + DMA微处理器 = 专用指令集(对外接口) + 寄存器 +cache DMA 连接 设备控制器和主原创 2016-11-29 17:57:41 · 1612 阅读 · 0 评论 -
操作系统-1.设计的原则
由于操作系统到处都是算法和设计,为了能快速的学习和掌握,我选择站在操作系统设计者的角度去学习他,一般学习,一遍猜想,然后把自己的想法和操作系统的设计内容做对比,分析优劣。而要站在操作系统设计者的角度去学习,就意味着要懂得一些设计的原则。设计的原则:1.什么是接口?所谓的接口,其实就是由4个服务原语组成:请求,确认,触发,响应。前面2个是原语涉及使用者,后面2原创 2016-11-24 14:31:25 · 3967 阅读 · 0 评论 -
操作系统概念 -第七版-重要概念的理解-(23-33)
23.操作系统用高级语言提高了移植性,汇编编译器优化弥补了高级语言速度慢的缺点,另外通过性能检测程序可以发掘性能瓶颈,采用汇编进行优化。操作系统的性能瓶颈主要是:CPU调度和内存管理器24.操作系统一般都带有性能监控程序,把执行过程的重要参数记录并写入日志文件,之后分析发现性能瓶颈和错误。25.操作系统分层少,导致系统功能管理能力低,很容易出错。26.分层太多,导致系统性能原创 2016-12-07 09:36:04 · 758 阅读 · 2 评论 -
操作系统概念 -第七版-重要概念的理解-(34-40)
操作系统概念 -第七版-重要概念的理解-(34-40)34.fork()从父进程的当前代码开始复制一个子进程,如果在子进程调用exec()执行指定其他程序,那么子进程会被指定程序覆盖。而在线程中调用fork有2种:一、只复制当前线程到子进程中,二、复制整个进程中的所有线程到子进程中。35.CPU调度中,有简单的短期调度算法"FCFS先进先服务调度"的算法,这个算原创 2016-12-21 15:14:36 · 664 阅读 · 0 评论 -
架构为什么会腐化
转自:联系QQ:517894513架构腐化一词我已经忘了从哪本书上看到的了,但是这个词给我留下了非常深刻的印象。关键在于“腐”一词,充分而又形象的描述了架构是怎样一步一步从简单清爽走向复杂污秽的。请允许我用“污秽”一词来描述一个糟糕的架构,因为糟糕的架构就像是一潭散发着臭味的淤泥,让你不想靠近,一旦涉入其中就会难以自拔,苦不堪言。转载 2016-12-30 09:15:57 · 1261 阅读 · 0 评论 -
操作系统概念 -第七版-重要概念的理解-(41-55)
41.在对临界区的操作时会借助一个同步工具--锁,同时操作系统必须提供一套原子级别的指令用于对锁的操作,保证在加锁和解锁的时候不会被CPU中断。42.管程是有一种特殊的实体,特殊点:所有操作方法都是同步的,即一个方法只能被一个进程所执行。43.CPU所有操作的存储有寄存器(只需要一个CPU周期),和cache高速缓存,内存。44.任何程序的内存访问有基地址寄存器原创 2017-01-09 18:45:45 · 366 阅读 · 0 评论 -
java中的动态加载和热替换
1.C++编写的程序需要经过编译称为目标文件,然后在程序执行之前进行链接后才可以称为可以运行的可执行程序,这个链接可以发生在程序运行之前,也可以发生在程序运行后(在内核中完成链接过程)再被执行。(运行可以理解为双击打开)。而Java则只需要编译成字节码,然后交给JVM解析器去链接执行就可以了。(C++系列也拥有动态加载和动态链接等概念)2.Java的动态加载实际上就是程序在执行过程中可原创 2017-01-10 11:33:09 · 8872 阅读 · 0 评论 -
考虑下列生成二进制的过程,编译器被用来生成单个单元的目标代码,链接器被用来将多个目标单元合并成一个程序二进制,链接器如何改变指令和数据到内存地址的绑定?需要什么信息从编译器传递给链接器,以协助完成链接
考虑下列生成二进制的过程,编译器被用来生成单个单元的目标代码,链接器被用来将多个目标单元合并成一个程序二进制,链接器如何改变指令和数据到内存地址的绑定?需要什么信息从编译器传递给链接器,以协助完成链接器的内存绑定百度了好多个个个都不写答案那就由我来表态吧:答案:编译器需要传递每个编译后的二进制代码的段表,链接器将所有二进制文件的段表合并,这就是链接过程!!!原创 2017-03-20 17:31:04 · 1321 阅读 · 0 评论 -
操作系统概念 -第七版-重要概念的理解-(85-123)
85.页内存的包含是通过物理内存的帧保护寄存器位(用于表示帧的状态为:读写,只读,不可读写)与页表的项状态(有效或无效)共同实现对内存的保护,有时候还会有一个“页大小寄存”,用于校验被访问的地址是否越出进程所分配的内存。86.页内存的保护功能:保护地址访问不会越出进程所分配的访问,保护每一个页的读写权限。87.由于计算机操作系统通常都有“共享页”的功能,所以几乎每一个线程都原创 2017-03-29 09:48:24 · 490 阅读 · 0 评论 -
操作系统概念 -第七版-重要概念的理解-(56-63)
56.硬件的同步机制分为单CPU同步和多CPU同步,单个CPU同步采用屏蔽中断,而多CPU则采用由硬件提供的原子性指令在实现同步 ,常见的硬件同步指令:TestAndSet(Boolean* lock),Swap(Boolean* lock, Boolean* key)。57.由于硬件的原子指令使用复杂,软件的同步则采用【同步锁机制】,比如:信号量。58.信号量用来描述互斥原创 2017-03-16 10:05:49 · 387 阅读 · 0 评论 -
操作系统概念 -第七版-重要概念的理解-(64-84)
64.操作系统的驻留位置可以为高地址或低地址,由中断向量的位置决定,通常为低地址。65.进程的内存空间的分配通常为连续地址分配,连续地址分配由基地址和界地址决定。66.重定位地址寄存器可以保护操作系统的内存,还可以动态的调整操作系统的占用内存大小的情况下不改动进程内存的地址便宜(有了重定位地址寄存器后,进程的内存地址就是逻辑地址了,逻辑地址是相对的)。67.操作原创 2017-03-17 12:01:24 · 538 阅读 · 0 评论 -
操作系统概念 -第七版-重要概念的理解-(124-144)
124.用户进程可以向内核进程索要空闲内存,但是为了减少内部碎片,内核内存不按照“页替换算法”的“按页分配”,而是采用直接访问物理内存,通过内存池去管理内存,采用“按需分配原则(要多少B内存就分配多少)”,内核内存管理不需要经过“虚拟内存接口”,而是直接采用“物理内存接口”。125.buddy算法去分配连续的内核内存的优点在于回收物理内存的速度很快,缺点就是:最差的情况下会产生50%的原创 2017-04-06 15:21:48 · 498 阅读 · 0 评论 -
(不用unix2doc)解决cygwin的输出重定向文件时遇到系统区分不了换行
在cygwin中cat “hello” >demo.txt你系统得到一个demo.txt文件,然后事实并不会你想的那样,你可以ls -al 返回:.... 'demo.txt'$'\r'你得到的不是【demo.txt】而是【demo.txt$\r】why?因为unix系列的系统换行符是\n而win系列的换行是\r所以入坑了。正规渠道就是原创 2017-11-02 11:23:40 · 628 阅读 · 0 评论 -
陷阱:设计同步锁的时候不能依赖于jvm内存分配相关
今天群里有人发了这段代码说会死锁,于是引发了一场高效的争辩。代码如下乍一看,怎么可能同步,每建立一个线程都new了一个对象,这样每个线程获得的同步锁应该!!都是不一样的。但是看到了一句神奇的代码,引起了我的注意那就是Integer想起了java对integer和String的特殊待遇Integer的存储Integer是int的原创 2016-11-29 18:07:57 · 307 阅读 · 0 评论