操作系统
文章平均质量分 78
码农BookSea
Java开发工程师,写文章的初衷是为了沉淀我所学习,累积我所见闻,分享我所体验。站在巨人的肩膀上,我也能看得更远,希望和更多的人交流学习。
展开
-
计算机操作系统学习笔记(15)——零拷贝
文章目录DMA技术的出现传统I/O存在的问题虚拟内存如何实现零拷贝mmap + writesendfile 方式带有 scatter/gather 的 sendfile方式splice 方式PageCache总结DMA技术的出现在没有 DMA 技术前,I/O 的过程是这样的:CPU 发出对应的指令给磁盘控制器,然后返回;磁盘控制器收到指令后,于是就开始准备数据,会把数据放入到磁盘控制器的内部缓冲区中,然后产生一个中断;CPU收到中断信号后,停下手头的工作,接着把磁盘控制器的缓冲区的数据一次一原创 2022-03-20 19:03:41 · 3949 阅读 · 1 评论 -
select/poll/epoll
文章目录select/pollepollselect/pollselect 实现多路复⽤的⽅式是,将已连接的 Socket 都放到⼀个⽂件描述符集合,然后调⽤select 函数将⽂件描述符集合拷⻉到内核⾥,通过遍历⽂件描述符集合的⽅式,当检查到有事件产⽣后,将此 Socket 标记为可读或可写, 接着再把整个⽂件描述符集合拷⻉回⽤户态⾥,然后⽤户态还需要再通过遍历的⽅法找到可读或可写的 Socket,然后再对其处理。需要进⾏ 2 次「遍历」⽂件描述符集合,⼀次是在内核态⾥,⼀个次是在⽤户态⾥ ,⽽原创 2022-01-31 15:26:23 · 598 阅读 · 0 评论 -
计算机操作系统学习笔记(14)——复习要点笔记
32 位和 64 位 CPU 最主要区别在于⼀次能计算多少字节数据: 32位一次4字节。64位一次8字节,称为CPU位宽 CPU 的位宽越高,一次能读取的内存指令越多CPU 的硬件参数都会有 GHz 这个参数,⽐如⼀个 1 GHz 的 CPU,指的是时钟频率是 1 G,代表着 1 秒会产⽣ 1G 次数的脉冲信号。这个参数越高越好,超频指的就是把 CPU 内部的时钟给调快了,于是 CPU ⼯作速度就变快了,但是也是有代价的,CPU 跑的越快,散热的压⼒就会越⼤,CPU 会很容易奔溃。地址总线并不是只有一.原创 2022-01-01 18:46:39 · 447 阅读 · 1 评论 -
计算机操作系统学习笔记(13)——⾼性能⽹络模式:Reactor 和 Proactor
文章目录一、Reactor单 Reactor 单进程单 Reactor 多进程多Reactor 多线程多Reactor 多进程二、Proactor一、ReactorReactor 模式就是对 I/O 多路复⽤作了⼀层封装,让使⽤者不⽤考虑底层⽹络 API 的细节,只需要关注应⽤代码的编写。I/O 多路复⽤监听事件,收到事件后,根据事件类型分配给某个进程 / 线程。Reactor 模式主要由 Reactor 和处理资源池这两个核⼼部分组成,它俩负责的事情如下:Reactor 负责监听和分发事件,原创 2021-12-29 15:48:26 · 1001 阅读 · 0 评论 -
计算机操作系统学习笔记(12)——I/O 多路复⽤:select/poll/epoll
文章目录一、最基本的 Socket 模型二、建立Socket的过程三、如何服务更多的⽤户?四、多进程模型五、多线程模型六、I/O 多路复⽤select/pollepoll这篇的内容相当重要的一、最基本的 Socket 模型Socket 的中⽂名叫作插⼝,双⽅要进⾏⽹络通信前,各⾃得创建⼀个 Socket,这相当于客户端和服务器都开了⼀个“⼝⼦”,双⽅读取和发送数据的时候都通过这个“⼝⼦”。这样⼀看,是不是觉得很像弄了⼀根⽹线,⼀头插在客户端,⼀头插在服务端,然后进⾏通信。二、建立Socket的原创 2021-12-27 18:42:59 · 954 阅读 · 0 评论 -
计算机操作系统学习笔记(11)——零拷贝
文章目录一、DMA二、传统文件IO三、如何实现零拷⻉?mmap + writesendfile四、PageCache一、DMADMA(直接内存存取)为什么要有 DMA 技术?没有DMA的时候,IO整个数据的传输过程,都要需要 CPU 亲⾃参与搬运数据的过程,⽽且这个过程,CPU 是不能做其他事情的。有了DMA技术。在进⾏ I/O 设备和内存的数据传输的时候,数据搬运的⼯作全部交给 DMA 控制器,⽽ CPU 不再参与任何与数据搬运相关的事情,这样 CPU 就可以去处理别的事务。说白了就是引入了原创 2021-12-23 10:18:03 · 473 阅读 · 0 评论 -
计算机操作系统学习笔记(10)——文件IO
文章目录一、缓冲与⾮缓冲 I/O二、直接与⾮直接 I/O二、阻塞与⾮阻塞 I/O VS 同步与异步 I/O阻塞IO⾮阻塞 I/OIO多路复用异步 I/O总结⽂件的读写⽅式各有千秋,对于⽂件的 I/O 分类也⾮常多,常⻅的有缓冲与⾮缓冲 I/O直接与⾮直接 I/O阻塞与⾮阻塞 I/O VS 同步与异步 I/O一、缓冲与⾮缓冲 I/O⽂件操作的标准库是可以实现数据的缓存,那么根据「是否利⽤标准库缓冲」,可以把⽂件I/O 分为缓冲 I/O 和⾮缓冲 I/O:缓冲 I/O,利⽤的是标准库的缓存实现⽂原创 2021-12-20 18:41:33 · 726 阅读 · 1 评论 -
计算机操作系统学习笔记(9)——页面置换算法
文章目录一、缺⻚异常(缺⻚中断)二、最佳⻚⾯置换算法三、先进先出置换算法四、最近最久未使⽤的置换算法五、时钟⻚⾯置换算法六、最不常⽤算法(LFU)一、缺⻚异常(缺⻚中断)缺⻚异常(缺⻚中断)当 CPU 访问的⻚⾯不在物理内存时,便会产⽣⼀个缺⻚中断,请求操作系统将所缺⻚调⼊到物理内存。就需要「⻚⾯置换算法」选择⼀个物理⻚,把它换出到磁盘,最后把正在访问的⻚⾯装⼊到这个物理⻚中。⻚⾯置换算法的功能是,当出现缺⻚异常,需调⼊新⻚⾯⽽内存已满时,选择被置换的物理⻚⾯,也就是说选择⼀个物理⻚⾯换出到磁盘原创 2021-12-19 18:29:32 · 619 阅读 · 0 评论 -
计算机操作系统学习笔记(8)——死锁
文章目录一、死锁互斥条件持有并等待条件不可剥夺条件环路等待条件二、避免死锁问题的发⽣三、 互斥锁和⾃旋锁一、死锁多线程为了防止竞争共享资源⽽导致数据错乱,都会在操作共享资源之前加上互斥锁,只有成功获得到锁的线程,才能操作共享资源,获取不到锁的线程就只能等待,直到锁被释放。当两个线程为了保护两个不同的共享资源⽽使⽤了两个互斥锁,那应⽤不当的时候,可能会造成两个线程都在等待对⽅释放锁,这种情况就是发⽣了死锁。说白了就是我有你需要的东西,你也有我需要的东西,但是我们2个谁都不肯放手,就导致了死锁死锁只原创 2021-12-17 09:37:00 · 214 阅读 · 0 评论 -
计算机操作系统学习笔记(7)——进程通信
文章目录一、进程通信信号共享内存Socket一、进程通信每个进程的⽤户地址空间都是独⽴的,⼀般⽽⾔是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。信号什么是信号呢?我们可以通过 kill -l 命令,查看所有的信号:linux 的 kill 命令是向进程发送信号,kill 不是杀死的意思,-9 表示无条件退出,但由进程自行决定是否退出,这就是为什么 kill -9 终止不了系统进程和守护进程的原因。运⾏在 shell 终端的进程,我们可以通过键盘输⼊某些组原创 2021-12-14 09:03:41 · 169 阅读 · 0 评论 -
计算机操作系统学习笔记(6)——进程和线程
这篇内容较少,只是先简单介绍下概念,之后会连续出好几篇进程和线程文章目录一、用户空间和内核空间二、上下文切换线程上下⽂切换一、用户空间和内核空间如果有⼤量处于阻塞状态的进程,会占⽤着物理内存空间,显然不是我们所希望的,所以,在虚拟内存管理的操作系统中,通常会把阻塞状态的进程的物理内存空间换出到硬盘,等需要再次运⾏的时候,再从硬盘换⼊到物理内存。那么,就需要⼀个新的状态,描述进程没有占⽤实际的物理内存空间的情况,这个状态就是挂起状态。以下方式可以使进程挂起:通过 sleep 让进程间歇性挂起原创 2021-12-08 11:11:15 · 103 阅读 · 0 评论 -
计算机操作系统学习笔记(5)——内存管理
文章目录一、用户空间和内核空间二、内存管理内存分段内存碎片内存分⻚多级页表TLB一、用户空间和内核空间内核具有很⾼的权限,可以控制 cpu、内存、硬盘等硬件,⽽应⽤程序具有的权限很⼩,因此⼤多数操作系统,把内存分成了两个区域。内核空间,这个内存空间只有内核程序可以访问;⽤户空间,这个内存空间专⻔给应⽤程序使⽤;⽤户空间的代码只能访问⼀个局部的内存空间,⽽内核空间的代码可以访问所有内存空间。因此,当程序使⽤⽤户空间时,我们常说该程序在⽤户态执⾏,⽽当程序使内核空间时,程序则在内核态执⾏。应原创 2021-12-07 16:51:32 · 729 阅读 · 0 评论 -
计算机操作系统学习笔记(4)——伪共享
虽然有点晚,但也算按时更新了文章目录一、伪共享解决方法二、任务调度一、伪共享当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。伪共享只是影响性能,并不会带来程序上的错误伪共享被称为并发编程的隐形杀手,因为开发者很难感知伪共享问题对于多个线程共享的热点数据,即经常会修改的数据,应该避免这些数据刚好在同⼀个 Cache Line 中,否则就会出现为伪共享的问题。其实很简单,就是2个线程x和y分别操作2个变量A和B,如果x操作了A就会使A所在的缓存行原创 2021-12-05 23:29:54 · 513 阅读 · 0 评论 -
计算机操作系统学习笔记(3)——CPU缓存一致性
昨天项目太忙了,没有按时更新,惭愧惭愧,年前这一段时间都会比较忙,可能会拖更,我尽量按时更新文章目录一、CPU Cache写回内存二、何为CPU缓存一致性问题?三、怎么解决缓存一致性问题?事务串形化写传播四、MESI 协议一、CPU Cache写回内存之前说的CPU Cache缓存块实际分为:头标志Tag和数据块Data Block前面说的直接映射,取模运算有可能发生冲突,发生了冲突就用Tag去标记。组标记(Tag)。这个组标记会记录当前 CPU Line 中存储的数据对应的内存块,我们可以⽤这原创 2021-12-04 13:23:09 · 955 阅读 · 0 评论 -
计算机操作系统学习笔记(2)——存储器结构
按时日更文章目录一、存储器结构二、CPU二、寄存器三、总线四、执行过程一、存储器结构内存的数据会被加载到 CPU 的寄存器和 Cache 中CPU Cache也在CPU里,称为CPU高速缓存,分L1,L2和L3。L1体积最小,离的最近。L1可分为数据缓存和指令缓存CPU Cache ⽤的是⼀种叫 SRAM(Static Random-Access Memory,静态随机存储器)的芯⽚。SRAM 之所以叫「静态」存储器,是因为只要有电,数据就可以保持存在,⽽⼀旦断电,数据就会丢失了。CPU存原创 2021-12-02 15:10:53 · 794 阅读 · 1 评论 -
计算机操作系统学习笔记(1)——硬件结构
文章目录一、冯诺依曼模型二、CPU二、寄存器三、总线四、执行过程一、冯诺依曼模型冯诺依曼模型分为5个组成部分:中央处理器(CPU)内存输⼊设备输出设备总线CPU可以分为:控制单元,逻辑运算单元和寄存器。其中,控制单元负责控制 CPU ⼯作,逻辑运算单元负责计算,⽽寄存器可以分为多种类,每种寄存器的功能⼜不尽相同。寄存器又可以分为:指令寄存器,通用寄存器和程序计数器等总线可以分为:控制总线,地址总线和数据总线。地址总线传的是内存中的地址,数据总线传的是对应地址的内存数据,控制总线原创 2021-12-01 16:22:32 · 5988 阅读 · 0 评论