10 2020 档案

摘要:#内存换出 有换入就应该有换出!等价交换! 必须要选择一个页换出,选择哪一页淘汰emm? 下面介绍淘汰算法。 一、FIFO 先来的先走。 二、MIN 内存当中,将来最久没有使用过的page滚蛋。 效果很好,但是我们做不到,我们不知道将来会有什么东西过来。 三、LRU 用过去的历史预测我来,选最近最长 阅读全文
posted @ 2020-10-28 15:33 HermioneGranger 阅读(111) 评论(0) 推荐(0)
摘要:#内存换入与请求调页 为了实现虚拟内存,就应该有换入换出。 用户可以随意使用该内存,如char *p, p=3G,实际上就是使用该地址,而后续该内存如何映射到物理内存是对用户透明的。 如果逻辑地址空间比物理地址空间更大怎么办?这就引入了换入。 先把东西放到disk上,要用到的时候再放到内存当中来。 阅读全文
posted @ 2020-10-28 14:58 HermioneGranger 阅读(125) 评论(0) 推荐(0)
摘要:#段页结合的实际内存管理 底层希望段管理,用户希望页管理...如何结合呢? 这就引出了虚拟内存的概念。 我们设置一种地址空间,称之为虚拟内存,向上,可以为用户提供段;向下,将段映射到物理帧上。 对用户来说,是段的使用,对物理内存来说,是页的使用。 寻址: 用户给出CS: IP,先查段表,访问某个段内 阅读全文
posted @ 2020-10-28 13:33 HermioneGranger 阅读(178) 评论(0) 推荐(0)
摘要:#多级页表与快表 分页会有问题,为了提高利用率,页应该小吧,但这样页表项就会增加==,到后面就会膨胀得很厉害。例如,4k的页,4G的物理,那么就会有4G/4k=4M个页表项!。不仅如此,每个进程的pcb都要保存一份页表。。。 但实际上大部分逻辑地址根本不会用到,能不能把页表压缩? 第一种尝试:只存放 阅读全文
posted @ 2020-10-28 12:44 HermioneGranger 阅读(305) 评论(0) 推荐(0)
摘要:#内存分区与分页 如何在内存中找出一段空闲的区域?如何分割内存? 简单点,固定分区,内存等分成K个分区。但是有问题,每个程序需要的段大小都不一样,这样造成浪费。 所以,一般采用可变分区,其核心结构是表,记录空闲的内存与已经分配的内存。 如果某次申请的时候,有两个分区都满足要求,那么应该pick谁?下 阅读全文
posted @ 2020-10-26 13:16 HermioneGranger 阅读(127) 评论(0) 推荐(0)
摘要:#内存使用与分段 计算机如何工作?从内存中取址,cpu执行指令,从内存中取址,cpu执行指令...... 内存使用:将程序放在内存当中,并令程序执行起来。但是让程序进入内存时,会发生一些问题,汇编指令的调转地址与物理地址必须一致,如果有两段汇编都要将程序放到0-40的地方,怎么办?这就会发生一些矛盾 阅读全文
posted @ 2020-10-26 09:24 HermioneGranger 阅读(114) 评论(0) 推荐(0)
摘要:#死锁处理 一个死锁的栗子,来源于用户对信号量的错误使用,形成一种信号量需求环路,相互依赖,导致谁也无法向下进行。更坏的情况是,锁住的资源越来越多,导致最后cpu不工作了。 (这里应该是先使用P(mutex),再P(empty))先使用了mutex,然后由于empty不够则producer被阻塞,另 阅读全文
posted @ 2020-10-25 23:41 HermioneGranger 阅读(107) 评论(0) 推荐(0)
摘要:#信号量的代码实现 申请信号量,这个在内核中实现,因为信号量中具有pcb。 每个信号量具有唯一的标识,内核根据标识在信号量表中查询信号量。 这里用开关中断来保证原子性。 具体逻辑是,在做相关操作之前,调用wait函数,判断当前信号量的值,判断自己是否要进入等待队列,如果要就schedule。 如果不 阅读全文
posted @ 2020-10-25 18:43 HermioneGranger 阅读(213) 评论(0) 推荐(0)
摘要:#信号量临界区保护 共同修改一个变量,可能会发生问题。 这种情况称为Race Condition,不是编程的问题,是系统调度的问题。 解决问题的直观想法:给信号量上锁。一个程序在操作信号量的时候,确保信号量不能被别人修改。 我们定义临界区:一次只允许一个进程进入的该进程的那一段代码。其他地方叫剩余区 阅读全文
posted @ 2020-10-25 17:31 HermioneGranger 阅读(243) 评论(0) 推荐(0)
摘要:#进程同步与信号量 引例: 多进程合作要沟通好。 总不能售票员还在卖票的时候就开车。 在停车的时候,司机在等售票员的一个信号,这样他才可以开车。 在开车的时候,售票员也在等司机的一个信号,这样他才可以开门。 形成一种合理有序向前推进的工作。 进程同步的核心:等!等信号! 但是,只发信号还是解决不了全 阅读全文
posted @ 2020-10-25 17:04 HermioneGranger 阅读(121) 评论(0) 推荐(0)
摘要:#一个实际的schedule函数 Linux 0.11的调度函数schedule函数 注释: 在这里,counter有两个含义,一是优先级,二是时间片。简单理解就是,时间片多的,优先级高。 然后每次调度的时候,找到counter最大的就绪任务,也就是优先级最高的就绪任务去执行。 如果没有找到,那么就 阅读全文
posted @ 2020-10-25 16:30 HermioneGranger 阅读(162) 评论(0) 推荐(0)
摘要:#CPU调度策略 调度需要折中考虑一些问题。 阻塞了,现在2、3谁上? 最直观的想法: FIFO? 谁先来谁上 Priority? 谁重要谁上 要让进程满意,就是要让用户满意,就是要尽快结束任务,用户操作响应的时间短,系统内耗时间少。 但发生了矛盾,例如: 吞吐量和响应时间是一对矛盾量,响应时间短- 阅读全文
posted @ 2020-10-24 19:59 HermioneGranger 阅读(203) 评论(0) 推荐(0)
摘要:#核心级线程 核心级线性的重要性: 多核想要充分发挥作用,一定要支持核心级线程。 多个线性要能被MMU分配到多个内核当中,同时运行,这就是并行,与之前的并发是相对的。 并行是说,可以同时吃饭和吃面 并发是说,吃一下饭,吃一下面。 与用户级线程相比,核心级线程具有不同: 用户级线程用两个栈 而核心级线 阅读全文
posted @ 2020-10-24 15:21 HermioneGranger 阅读(188) 评论(0) 推荐(0)
摘要:#用户级线程 核心问题:操作系统是如何切换起来的? 先引出线程的概念: 一个程序下面还有一些小程序,这些小程序共享一块内存块,因此切换的时候不改变映射表,所以切换起来特别快。 切换=指令(pc)切换+资源切换 线程的实际作用: 浏览器进程: thread1从服务器接收数据 thread2负责显示文本 阅读全文
posted @ 2020-10-24 14:55 HermioneGranger 阅读(147) 评论(0) 推荐(0)
摘要:kinematic 运动学的 piecewise 分段的 smooth piecewise polynomial functions albeit cont. 尽管 impedes v.阻止 surrogate adj.替代的; 代用的; n.代理,代表; 代用品,代替 versatility n. 阅读全文
posted @ 2020-10-24 10:06 HermioneGranger 阅读(93) 评论(0) 推荐(0)
摘要:#多进程图像 启动多个程序-》多个进程推进-》操作系统记录进程、分配资源、进行调度。 操作系统根据PCB来进行管理的。 问题:多进程如何组织? Process Control Blocck是用来记录进程信息的数据结构。 就绪队列:有一些进程在等待执行。 磁盘等待队列:有一些进程在等待资源。 ... 阅读全文
posted @ 2020-10-24 00:08 HermioneGranger 阅读(80) 评论(0) 推荐(0)
摘要:操作系统核心-管理硬件-管理CPU-引出多进程图像(操作系统核心图像)。 ##如何使用CPU? 自动取指令执行,给个地址,从内存中取出指令执行,并且是自动向下运行。看一眼菜谱,做一步工作。 设置好PC初值就可以了,剩下CPU会往下工作。 管理CPU=设置PC的初值 有一个问题: 有IO指令的速度远远 阅读全文
posted @ 2020-10-24 00:03 HermioneGranger 阅读(111) 评论(0) 推荐(0)
摘要:把操作系统从磁盘中读入到内存当中,并为各个功能设置数据结构。 阅读全文
posted @ 2020-10-23 23:43 HermioneGranger 阅读(131) 评论(0) 推荐(0)
摘要:#操作系统接口 ##问题:上层应用如何调用底层硬件的~。 引子 命令: 每个命令对应一个可执行文件。 shell的代码:根据用户的命令,调用相关的可执行文件执行。 图形:硬件输入到消息队列中,应用程序不断从消息队列中获取消息,再根据消息做一些操作。 接口表现为函数调用,又是系统提供,所以又称之为系统 阅读全文
posted @ 2020-10-23 21:18 HermioneGranger 阅读(231) 评论(0) 推荐(0)
摘要:##线速度 假设坐标系A为参考坐标系,坐标系B与A只有相对平移的运动,Q为坐标系B内一个固定点,那么Q在参考坐标系中的速度是 \(^AV_Q=^AV_{BORG}+R^BV_Q\) ##线速度 假设两个坐标系原点重合,只有相对旋转运动,Q为B内一个固定点,那么在A内可知,Q点绕着某个轴在转着,将其角 阅读全文
posted @ 2020-10-21 16:57 HermioneGranger 阅读(1210) 评论(0) 推荐(0)
摘要:##进程的定义 一个具有独立功能的程序,在一个数据集合上的一次动态执行过程。讲人话,就是一个程序跑了起来,就叫做进程。 进程主要由两部分组成: 程序代码,代码是静态的部分。 程序处理的数据,而程序处理的数据使得进程具有多样性。 总结:程序是静态的,进程是动态的。这两者可以比喻成,菜谱和菜的关系,菜谱 阅读全文
posted @ 2020-10-19 13:08 HermioneGranger 阅读(263) 评论(0) 推荐(0)
摘要:以下每个量都是在各自坐标系内观察得到的值,同时小括号表示取某个方向上的分量作为一个新的向量。 ##外推 从基座开始,对每个连杆使用牛顿-欧拉方差,逐个计算连杆的速度和加速度。 \(w_{i+1}=Rw_i+\dot{\theta}_{i+1}(z)\) \(\dot{w}_{i+1}=R\dot{w 阅读全文
posted @ 2020-10-18 23:59 HermioneGranger 阅读(908) 评论(0) 推荐(0)
摘要:##内容 功能:缺页中断+物理帧已满,选择一个页面进行置换。 目标:尽量减少换入换出的次数。 页面锁定:一些页面需要常驻内存,设置一个锁定标志位。 ##最优页面置换算法 当一个缺页中断发生时,对于保存在内存中的每一个逻辑页面,计算它的下一次访问之前,还需要多长时间,从中选择等待时间最长的那个,作为被 阅读全文
posted @ 2020-10-18 13:34 HermioneGranger 阅读(262) 评论(0) 推荐(0)
摘要:##覆盖技术 目标:在较小的可用内存中运行较大的程序, 把程序按其自身逻辑结构,划分为多个独立的程序模块,那些不会同时执行的模块共享同一块内存区域,按时间先后来运行。 必要部分的代码和数据常驻内存。 不常用功能在其他程序模块中实现,要用的时候加载到内存当中。 不存在调用关系的模块是平行的,可以共享一 阅读全文
posted @ 2020-10-17 12:23 HermioneGranger 阅读(206) 评论(0) 推荐(0)
摘要:##非连续内存的管理 前面的连续内存管理好像都有一些问题,我们可以考虑一种非连续内存管理的办法。管理都是有开销的,最好是要将管理方法建立在硬件之上。 ###分段 分段是为了更好的分离和共享,分离程序为多个具有不同功能的段。 ###段访问 将一个逻辑地址分为: 段号 偏移量 在段表中存有段号与段的物理 阅读全文
posted @ 2020-10-16 13:02 HermioneGranger 阅读(135) 评论(0) 推荐(0)
摘要:##计算机体内存分层体系 CPU寄存器 cache,包括L1,L2 主存 磁盘 形成了一个金字塔的结构,越靠近CPU速度越快、存储空间越小。 操作系统在内存管理中应该要完成的目标: 抽象:进程应该能够使用一段连续的内存,屏蔽了底层的细节,称之为逻辑地址空间。 保护:每个进程应该拥有自己独立地址空间, 阅读全文
posted @ 2020-10-16 12:11 HermioneGranger 阅读(186) 评论(0) 推荐(0)
摘要:##操作系统的启动 DISK:存放OS,以及负责加载os到内存当中的引导程序Bootloader。 BIOS:基本I/O处理系统,让计算机系统开始检测各种外设,将Bootloader加载到内存当中。 ##中断、异常和系统调用 系统调用 来源:应用程序主动向操作系统发出服务请求。 处理时间:异步或者同 阅读全文
posted @ 2020-10-15 23:31 HermioneGranger 阅读(127) 评论(0) 推荐(0)
摘要:记录一些cmake语句的用法~ cmake_minimum_required( VERSION 2.8 ): 要求cmake的最低版本。 project( myProj ): 设置项目名称为myProj。 set(param value): 将变量param的值设置为value,在多处可以被用到,例 阅读全文
posted @ 2020-10-08 12:39 HermioneGranger 阅读(319) 评论(0) 推荐(0)