操作系统
文章平均质量分 57
操作系统
每一个不曾起舞的日子,都是对生命的辜负
这个作者很懒,什么都没留下…
展开
-
Reactor模型与Proactor模型
1. Reactor模型1.1 什么是Reactor模式它是基于IO多路复用与线程池 Reactor模式的核心组成部分包括Reactor和处理资源池(进程池或线程池) Reactor负责监听和分配事件。 处理资源池负责处理事件 Reactor模式具体实现灵活多变 Reactor的数量可以变化,可以是一个或多个 资源池的数量可以变化,以进程为例,可以是一个或多个 Reactor模式具有三种经典的实现方案 单Reactor单进程/单线程 单Reactor多线程 多Re原创 2022-03-06 17:38:07 · 679 阅读 · 0 评论 -
IO控制方式
1. IO控制器CPU无法直接控制IO设备,IO设备由IO控制器来控制,但CPU可以控制IO控制器 CPU可以控制IO控制器,IO控制器来控制IO设备1.1 IO控制器的组成CPU与控制器之间的接口 IO逻辑 控制器与设备之间的接口(一个控制器可以连接多个设备)1.2 IO控制器的功能接收设备CPU指令:CPU的读写指令和参数存储在控制寄存器中。 向CPU报告设备的状态:IO控制器中会有相应的状态寄存器,用于记录IO设备的状态。(如某位置为1表示忙碌,置为0表示就绪) 数据交换:数原创 2021-11-24 12:21:56 · 4729 阅读 · 0 评论 -
如何从用户态进入内核态
1. 前置知识1.1 GDTglobal (segment)descriptor table 全局段号记录表(全局段号描述符表),以数组的形式存放在内存的某个地方 该块内存的起始地址和有效设定个数放在CPU内的一个名为GDTR(48位)的特殊寄存器中。 GDT中每一项(每一个描述符)表示一个段的信息,占8个字节(64位) 段的大小(20位) 段的起始地址(32位) 段的管理属性(12位) DPL(目标段优先级):占两位,可能取值位00 和11 内核态的优先级为3 用户.原创 2021-11-19 20:12:48 · 1090 阅读 · 1 评论 -
什么是优先级反转
1. 什么是优先级反转如果一个较高优先级的进程需要读取或修改内核数据,但此时这个内核数据正被较低优先级的进程访问,那么就会出现一个调度挑战 由于内核数据通常是用锁保护的,较高优先级的进程将不得不等待较低优先级的进程用完资源。如果较低优先级的进程被其他较高优先级的进程抢占,那么情况将变得更复杂 如三个进程L,M,H. 它们的优先级顺序为L<M<H. 假定H需要资源R,而R正被进程L访问。通常进程H需要等待L用完资源R。但是,现在假设进程M进入可运行状态,从而抢占进程L。间接地,具有较低优先原创 2021-11-15 20:34:25 · 508 阅读 · 0 评论 -
进程控制块PCB
1. 什么是流量控制2. 操作系统缓冲区和滑动窗口的关系发送窗口和接收窗口中所存放的字节数,都是存放在操作系统内存缓冲区中的。原创 2021-09-29 17:10:22 · 2564 阅读 · 0 评论 -
虚拟地址空间与虚拟内存的技术实现
1. 什么是流量控制2. 操作系统缓冲区和滑动窗口的关系发送窗口和接收窗口中所存放的字节数,都是存放在操作系统内存缓冲区中的。原创 2021-09-28 23:44:19 · 178 阅读 · 0 评论 -
select,poll epoll的区别
1. 相同点都是基于IO多路复用实现。 本质上都是同步IO2. select1.有点原创 2021-08-11 14:24:00 · 61 阅读 · 0 评论 -
五种IO模型
0. 一些基本概念1. 用户空间和内核空间对于32位操作系统,虚拟内存空间位4G 操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限 在linux中,较低的3G字节是用户空间,最高的1G字节是内核空间2. 文件描述符fd每个进程PCB中存着一张文件描述符表,也可以叫打开文件描述符表。是进程独有。 这个表的每个表项由两个部分组成,文件描述符以及文件指针 这个文件描述符就是我们使用的文件描述符fd 文件指针指向哪里呢? 系统维护了一个打原创 2021-08-10 00:00:10 · 155 阅读 · 2 评论 -
页面置换算法
地址映射过程中,若发现所需的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统中内存没有空闲页面,则操作系统必须在内存选择一个页面将其移出,以便为即将调用的页面腾出空间,而用来选择淘汰哪一页的规则叫做页面置换算法。1. 最佳置换算法(OPT)每次移除以后不需要的页面,如果不存在则移除最长时间不需要访问的页面 保证了最低的缺页率 但是难以实现2. 先进先出置换算法(FIFO)每次选择淘汰最早进入内存的页面 会产生Belady异常。(随着分配的页面数增多而故障数不减反增的异常现象原创 2021-08-01 09:58:50 · 160 阅读 · 0 评论 -
分页与分段的区别
1. 目的页是信息的物理单位,分页是为了实现离散分配方式,以消减内存的外零头,提高内存的利用率,即分页是处于系统管理的需要而不是用户的需要 段时信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了更好地满足用户的需要2. 长度页大小固定且由操作系统决定,系统把逻辑地址划分为页号和页内地址两个部分,由及其硬件实现的,因此系统中只能由一种大小的页面 段的长度不固定,由用户编写的程序所决定,通常由编译程序在对程序编译时,根据信息的性质来划分。3. 地址空间页的地址空间时一维的,即单原创 2021-08-01 09:17:12 · 436 阅读 · 0 评论 -
用户态和内核态
它们是操作系统运行的两种状态,在PSW(程序状态寄存器)中有一个二进制位控制这两种模式1. 内核态当CPU运行在内核态时,程序可以访问所有的指令集,操作所有的硬件设备,也可以将自己从一个程序切换到另一个程序2. 用户态当CPU运行在用户态时,程序只能执行非特权指令,访问受限的内存,无法操作硬件设备3. 如何由用户态切换到内核态通过系统调用,在CPU中的实现是陷入指令。(中断和异常其实都是发生了系统调用)4. 用户态和核心态的目的处于一些安全的考虑,防止用户进程随意操作内核空间导致系原创 2021-07-31 17:03:29 · 108 阅读 · 0 评论 -
中断处理的详细过程
1. 中断请求阶段内中断:因为CPU内部出错导致的中断。不需要中断请求 外部中断会发生中断请求。2. 中断判优阶段根据优先级选择优先级高的中断请求继续响应3. 中断响应阶段经过中断判优,中断处理进入中断响应阶段,中断响应时,CPU向中断源发出中断响应信号,同时:保护硬件现场 关中断 保存断点 获得中断服务程序的入口地址4. 中断服务阶段保护现场 开中断:即允许中断服务程序运行时能有更高级别的中断请求出现,实现中断嵌套 中断服务 恢复现场:恢复主程序的中断线程,通常是将原创 2021-07-31 16:48:28 · 2692 阅读 · 0 评论 -
进程的上下文与进程的切换
1. 进程的上下文用户级上下文:正文,数据,用户堆栈,以及共享存储区域 (都在用户空间) 寄存器上下文:通用寄存器,程序计数器,处理器状态寄存器,栈指针 (都在CPU中) 系统级上下文:进程控制块,内存管理信息,内核栈 (都在内核空间)进程切换需要对上述全部信息进行切换,而模式切换(如有用户态切换到内核态)只是涉及寄存器上下文的切换。2. 进程切换的步骤切换新的页表,然后使用新的虚拟地址空间 切换内核栈,硬件(寄存器)上下文切换注意:线程切换不需要进行步骤1...原创 2021-07-31 16:32:59 · 279 阅读 · 0 评论 -
解决死锁的方法
1. 预防死锁就是破坏死锁的四个必要条件 破坏请求条件:一次性分配给所有资源 破坏请求保持条件:只要一个资源得不到分配,其他的也不分配 破坏不可剥夺条件:变为可剥夺 破坏循环等待条件:按照固定顺序获取资源2. 死锁避免银行家算法,但实际上操作系统不用3. 接触死锁资源剥夺 撤销进程(按进程优先级或撤销进程代价的高低进行) 进程回退(一个或多个进程回退到足以避免死锁的状态,进程回退是资源释放资源而不是被剥夺,要求系统保持历史信息,设置还原点)...原创 2021-07-31 15:33:28 · 102 阅读 · 0 评论 -
产生死锁的必要条件
互斥条件:进程要求对所分配的资源进行排他性控制,即在一段时间内某资源仅为一进程锁占用 请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放 不可剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完由自己释放 循环等待条件:发生死锁,必然存在一个进程-资源的循环链产生...原创 2021-07-31 15:23:27 · 44 阅读 · 0 评论 -
进程的调度算法有哪些
1. 先来先服务当一个进程就绪后,就加入就绪队列。CUP会根据进入就绪队列的先后顺序依次执行各个进程。 不利于短作业以及IO繁忙的作业,如果短作业后加入队列则需要等待好久 可以用于作业调度也可以用于进程调度2. 时间片轮转法主要用于分时系统。也是将就绪进程依次放入就绪队列。实行先来先服务原则 但是每个进程只允许一个时间片就切换 进程可以在这个时间片内主动放弃使用CPU,而不必要等时间片用完 如果时间片设置的过短,则会造成进程频繁切换,产生系统开销 若时间片过长,就退化为了先来先服务3原创 2021-07-31 10:58:58 · 232 阅读 · 0 评论 -
进程的通信方式
进程的通信方式匿名管道只能用于具有亲缘关系的进程之间的通信(父子进程或者兄弟进程)如# 父进程shell,两个子进程ls与more,管道 | 。ls | more pipe(匿名管道) 通过pipe()系统调用来创建并打开,当最后一个使用它的进程关闭对它的引用时,pipe会自动撤销有名管道(FIFO)命名管道,在磁盘上有对应的节点,但没有数据块。即只是拥有一个名字和相应的访问权限,通过mknode()系统调用或者mkfifo()函数来创建。一旦建立,任何进程都可以通过文件名将其打开原创 2021-07-31 10:13:20 · 58 阅读 · 0 评论 -
同步、异步、阻塞、非阻塞的概念
同步:当同步调用发出后,调用者要一直等待返回结果。获得了返回的结果之后才能继续执行异步:当异步调用发出后直接返回,调用者可以在此时做其他事情而不需要等待返回结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。阻塞:是指调用结果返回前,当前线程会被挂起,即阻塞。非阻塞:指即使还没得到调用的返回结果,也不会阻塞当前线程。在线程通信过程中,阻塞/非阻塞,同步/异步近似同义在IO系统调用层面,非阻塞IO系统调用和异步IO系统调用有一定的差别,他们都不会阻塞线程,但返回原创 2021-07-31 10:04:29 · 161 阅读 · 0 评论