
图解系统读书笔记
文章平均质量分 82
操作系统入门
Jackeys007
开朗、活泼,一个逗比的程序员
展开
-
你知道操作系统有哪些调度算法吗?
调度算法一、进程调度算法非抢占式的先来先服务调度算法(First Come First Seved, FCFS)最短作业优先调度算法(Shortest Job First, SJF)高响应比优先调度算法(Highest Response Ratio Next, HRRN)时间片轮转调度算法(Round Robin, RR)最高优先级调度算法(Highest Priority First,HPF)多级反馈队列调度算法(Multilevel Feedback Queue)二、内存页面置换算法缺页中断(缺页中断)原创 2021-10-24 11:35:17 · 1359 阅读 · 0 评论 -
线程中的锁
线程中的锁一、互斥锁与自旋锁互斥锁自旋锁互斥锁和自旋锁的比较二、读写锁读优先锁写优先锁公平读写锁三、乐观锁与悲观锁一、互斥锁与自旋锁互斥锁互斥锁是⼀种独占锁,比如当线程 A 加锁成功后,此时互斥锁已经被线程A独占了,只要线程A没有释放手中的锁,线程B加锁就会失败,于是就会释放 CPU让给其他线程,既然线程B释放掉了CPU,自然线程B加锁的代码就会被阻塞。对于互斥锁加锁失败而阻塞的现象,是由操作系统内核实现的。当加锁失败时,内核会将线程置为睡眠状态,等到锁被释放后,内核会在合适的时机唤醒线程,当这个线原创 2021-10-20 07:38:21 · 287 阅读 · 0 评论 -
你知道死锁吗?
死锁一、死锁的基本概念死锁的四个条件二、避免死锁的发生一、死锁的基本概念当两个线程为了保护两个不同的共享资源而使用了两个互斥锁,那么这两个互斥锁应用不当的时候,可能会造成两个线程都在等待对方释放锁,在没有外力的作用下,这些线程会⼀直相互等待,就没办法继续运行,这种情况就是发生了死锁。死锁的四个条件互斥条件:多个线程不能同时使用同⼀个资源,线程A已经持有的资源,不能再同时被线程B持有,如果线程B请求获取线程A已经占用的资源,那线程 B只能等待,直到线程A释放了资源。持有并等待条件:线程A已经持有了原创 2021-10-19 21:47:41 · 119 阅读 · 0 评论 -
多线程同步
多线程同步一、竞争与协作互斥同步互斥与同步二、互斥与同步的使用锁信号量三、经典问题生产者-消费者问题哲学者就餐问题方案一:有叉子就用方案二:只准一个人拿叉子方案三:规定先拿的叉子方案四:记录状态读写者问题方案一:读者优先的策略方案二:写者优先策略方案三:公平策略一、竞争与协作互斥由于多线程执行操作共享变量的这段代码可能会导致竞争状态,因此我们将此段代码称为临界区,它是访问共享资源的代码片段,⼀定不能给多线程同时执行。所以我们希望这段代码是互斥的,也就说保证⼀个线程在临界区执行时,其他线程应该被组织进入原创 2021-10-17 21:48:19 · 147 阅读 · 0 评论 -
你知道进程间怎么通信吗?
进程间通信一、管道创建管道父子进程的管道单向通信父子间的双向通信管道Shell中的管道通信匿名管道与命名管道管道特点二、消息队列不足三、共享内存四、信号量五、信号进程是相互独立的,他们之间的通信只能通过内核。一、管道创建管道匿名管道的创建,需要通过下这个系统调用:这里表示创建⼀个匿名管道,并返回了两个描述符,⼀个是管道的读取端描述符 fd[0]⼀个是管道的写入端描述符 fd[1] 。这个匿名管道是特殊的文件,只存在于内存,不存于文件系统中。其实,所谓的管道,就是内核里面的⼀串缓存。从原创 2021-10-15 15:21:09 · 477 阅读 · 0 评论 -
进程与线程
进程与线程一、进程概述中断并发与并行进程与程序的类比进程的状态进程的状态转换进程的控制结构PCB的组织结构链表方式索引方式进程的控制创建进程终止进程阻塞进程唤醒进程进程的上下文切换上下文上下文切换CPU上下文切换的类型进程上下文切换的场景二、线程概述优点缺点进程与线程的比较线程相比进程能减少开销线程的上下文切换线程的实现用户线程优点缺点内核线程优点缺点轻量级进程1:1模式一、进程概述运行中的程序被称为进程。中断当进程要从硬盘读取数据时,CPU不需要阻塞等待数据的返回,而是去执行另外的进程。当硬盘数原创 2021-10-10 14:57:54 · 162 阅读 · 0 评论 -
你知道虚拟内存吗?
虚拟内存一、虚拟内存概述二、内存分段分段虚拟地址结构分段映射过程一、虚拟内存概述为了在多进程环境下,使得进程之间的内存地址不受影响,相互隔离,于是操作系统就为每个进程独立分配⼀套虚拟地址空间。每个进程都有自己的虚拟空间,而物理内存只有⼀个,所以当启用了大量的进程,物理内存必然会很紧张,于是操作系统会通过内存交换技术,把不常使用的内存暂时存放到硬盘(换出),在需要的时候再装载回物理内存(换入)。操作系统会提供⼀种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来。二、内存分段程序是由若干个逻原创 2021-10-07 11:47:38 · 367 阅读 · 0 评论 -
你知道什么是软中断吗?
软中断一、中断二、软中断一、中断中断是系统用来响应硬件设备请求的一种机制,操作系统收到硬件的中断请求,会打断正在执行的进程,然后调用内核中的中断处理程序来响应请求。中断是⼀种异步的事件处理机制,可以提高系统的并发处理能力。中断程序可能会暂时关闭中断。如果当前中断处理程序没有执行。完之前,系统中其他的中断请求都⽆法被响应,也就说中断有可能会丢失,所以中断处理程序要短且快二、软中断软中断主要是为了解决中断丢失和执行时间过长的问题,因此中断过程被分成了两部分上半部分:快速处理中断,一般会暂原创 2021-10-05 08:52:06 · 925 阅读 · 0 评论 -
你知道Linux内核和Windows内核的区别吗?
Linux内核与Windows内核一、内核内核的概念内核的基本功能内核的工作过程内存分区系统调用内核的架构二、Linux内核多任务(MutiTask)对称多处理(SMP)可执行文件链接格式(ELF)宏内核(Monolithic Kernel)三、Windows内核一、内核内核的概念计算机是由各种外部硬件设备组成的,比如CPU、内存等硬件设备。内核作为应用连接硬件的桥梁。内核的基本功能进程调度:管理进程、线程,决定哪个线程使用CPU内存管理:管理内存的分配与回收硬件通信:为进程与硬件设备提供原创 2021-10-06 11:17:35 · 904 阅读 · 0 评论 -
0.1+0.2一定等于0.3吗?
浮点数在计算机中的存储一、负数用补码表示二、十进制小数与二进制的转换三、计算机存储小数的方式浮点数在计算机中的存储在回答问题之前先研究一下浮点数在计算机中是怎么存储的吧,之后你就会得到答案的。一、负数用补码表示负数之所有用补码表示,是出于性能的考虑。因为如果不用补码表示的话,需要多一步判断是否为负数,如果是负数还得把加法变成减法或者减法变成加法,因此耗费性能。使用补码,对于负数的加减操作,实际上和正数加减法操作是一样的。二、十进制小数与二进制的转换大家可能都知道十进制整数转为二进制数的方法是除2取原创 2021-10-06 10:30:12 · 374 阅读 · 0 评论 -
CPU是如何执行任务的?
CPU是如何执行任务的?一、CPU是如何读取数据的?Cache为伪共享避免伪共享的方法二、CPU是如何选择线程的?任务任务调度类调度策略完全公平调度CPU运行队列调度类优先级调整任务优先级一、CPU是如何读取数据的?Cache为伪共享因为多个线程同时读写同⼀个 Cache Line 的不同变量时,而导致 CPU Cache 失效的现象称为伪共享。避免伪共享的方法将b的地址设置为Cache Line对齐地址二、CPU是如何选择线程的?任务在linux中,任务的优先级数值越小,优先级越高实原创 2021-10-04 00:09:38 · 475 阅读 · 0 评论 -
CPU缓存一致性
CPU缓存一致性一、内存-Cache一致性的实现方式二、缓存一致性问题问题解决措施三、总线嗅探四、MESI协议一、内存-Cache一致性的实现方式写直达:把数据同时写入内存和Cache中如果数据已经在Cache里面,先将数据更新到 Cache里面,再写入到内存里面如果数据没有在Cache里面,就直接把数据更新到内存里面。写回:发生写操作时,新的数据仅仅被写入Cache Block(缓存块)里,只有当修改过的 Cache Block (被替换)时才需要写到内存中,减少了数据写回内存的频率,提原创 2021-10-03 23:23:29 · 720 阅读 · 0 评论 -
如何写出让CPU跑得更快的代码?
如何写出让CPU跑得更快的代码?一、CPU缓存有多快?二、CPU缓存的数据结构和读取过程是什么样的?三、如何提升数据缓存的命中率?论如何写出让CPU跑得更快的代码,由于我们的CPU的主频已经是确定的,所以我们应该从访问数据的速度着手,那么问题可以转化为如何利用高速缓存。一、CPU缓存有多快?L1 Cache 通常会分为数据缓存和指令缓存。index0 也就是数据缓存,⽽ index1 则是指令缓存,它两的⼤⼩通常是⼀样的。L1 Cache 和 L2 Cache 都 是每个 CPU 核⼼独有的,⽽原创 2021-10-01 22:42:02 · 1488 阅读 · 8 评论 -
存储器金字塔
存储器金字塔一、存储器的层次结构寄存器CPU 缓存内存SSD/HDD硬盘二、存储器的层次关系三、存储器之间的实际价格和性能差异一、存储器的层次结构存储器的层次结构可以类比我们在图书馆看书的场景:此时我们的书本就类比为数据,书桌类比为内存,L3 Cache和L2 Cache类比为长期记忆,L1 Cache类比为短期记忆,寄存器则类比为正在思考的数据,大脑则类比为CPU。这样就比较好理解了。数据从磁盘到内存,再到三级缓存,再到寄存器,最后通过CPU进行处理计算。寄存器每个寄存器可以存储一定字节的原创 2021-10-01 22:08:57 · 1127 阅读 · 0 评论 -
CPU是如何执行程序的?
CPU是如何执行程序的?一、图灵机的工作方式组成工作方式二、冯诺依曼模型计算机基本结构三、线路位宽和CPU位宽四、程序执行的基本过程CPU执行程序的过程五、指令机器内部指令类型指令的4个阶段(4级流水线)指令类型(功能划分)指令的执行速度一、图灵机的工作方式组成字符:代表数据或者程序格子:每个格子可以写入字符纸带:由一个个连续的格子组成,好比内存读写头:读取纸带上任意格子的字符,也可以把字符写入到纸带的格子,读写头有一些部件:存储单元:用于存放数据控制单元:用于识别字符是数据还是指令,以原创 2021-09-30 00:16:26 · 1821 阅读 · 0 评论