联通 TEWA-800G 改桥接
资料来源:
<>
更新
操作系统
进程
进程线程概念和区别
- 进程是资源分配的基本单位,PCB(Process Control Block)描述进程基本信息和运行状态,进程创建撤销都是对PCB操作
- 线程是cpu调度的基本单位,一般一个进程至少有一个或多个线程,android中则对应主线程.
- 区别:
- 进程是资源分配的基本单位,线程不拥有资源,但线程可以访问进程的资源.
- 线程的调度更轻量,同一进程下线程切换不会引起进程切换.
- 线程可以读取同一进程的数据(需要信号量等同步),进程间通信一般需要ipc.
进程的状态切换
- 新建->就绪->运行->终止. 因为io等事件 运行->阻塞,事件结束后 阻塞->就绪.就绪和运行可以相互转换(更高优先级的调度等)
进程调度的算法
- 批处理系统
- 先到先来,不利于短作业
- 短作业优先,饿死长作业.
- 最短剩余时间
- 交互系统
- 时间片轮转(先到先来),时间片过短开销到,时间片过长响应不及时.
- 优先级调度,按照进程优先级调度,相对的等待时间越长优先级越高.
- 多级反馈队列.
- 多级就绪队列,第一个优先级最高,时间片最小,第二队列优先级齐次,时间片x2….
- 新作业扔到第一队列,执行完就算,执行不完,扔到第二级..依次扔下去.
- 只有上面一级的队列执行完毕才执行下一级队列.
- 优点是:短作业相对优先,长作业不会一直得不到执行.
进程同步
- 临界区: 单一资源可以被多个进程共享,但单一资源只能一次被一个进程访问.->临界资源.访问临界资源的代码称为临界区.
- 同步: 完成任务对进程执行顺序有要求.
- 互斥: 对资源竞争关系,一次只能有一个进程访问资源.
- 信号量: 整型变量,只能被 P操作 和 V 操作两个原语访问,可以用来解决互斥和同步问题.
- 管程: 信号量代码很复杂,把这部分代码独立出来就是管程.
经典同步问题
进程间通信
- 管道: 一般特指无名管道,可以看成特殊的文件,在各种 shell 中常用.
- 命名管道: FIFO 位置与路径相关,
- 消息队列: 发消息,接收消息,带个id 没什么特别的.
- 信号量/共享内存: 使用的好,效率最高.信号量是加锁解锁.
- 套接字: 进程间通信,一般是不同机器之间,也能用在同一机器上.
死锁的条件
- 死锁大概是几个进程你等着我,我等着你,直到天荒地老.
- 互斥条件,资源只能被一个进程访问.
- 占用/等待,已经得到某个资源的进程还能申请新的资源.
- 不可抢占,分配给进程的资源只能等待该进程释放.
- 环路等待,两个或两个以上进程组成环路,互相等待资源.
处理死锁
- 鸵鸟策略,处理死锁的代价高昂,那我不处理了.仅仅忽略.
- 死锁检测与恢复,试图检测死锁并恢复.
- 针对单一资源检查资源分配图,深度优先遍历检测到环即为死锁.
- 多资源..待补充
- 死锁恢复,无非是1.抢占资源.2,回滚资源申请.3,干脆杀进程.
- 从死锁的条件入手,避免死锁发生.
- 互斥: 以打印机为例,虚拟个打印机,可以给多个进程同时访问,其实是写入了缓存区,真正访问打印机的只有打印机的守护进程.
- 等待/占有: 进程启动前一次性申请全部资源,资源不到位,不启动.
- 不可抢占: 换成能抢占.
- 环路等待: 给系统资源编号,进程只能按照编号请求资源.这样限制了新设备的增加.
- 从分配入手.如果现在系统剩余资源还是能够满足某个进程所可能需要的最大量,那称为安全状态,此时不会发生死锁.反之称为不安全状态,有可能发生死锁.
- 银行家算法,把系统资源比作银行的资本,进程申请资源比作客户申请贷款.银行家(系统)要保证本金处于安全状态.
- 单资源的银行家算法比较好理解.不再赘述.
- 多资源的银行家算法
- 引用一张github 的图 多个资源的银行家算法
- 图中涉及到 5 个进程,4 个资源.E 总资源 P 已分配资源 A 可用资源.EPA 均为向量,对应4个资源的坐标轴.A = (1020) 表示4个资源分别还剩下 1/0/2/0.
- 检查算法
- 确保右边矩阵始终要存在一行小于等于 A ,没有则表明系统处于不安全状态,可能死锁.
- 若找到这一行,将对应的进程模拟终止,将已分配的资源模拟回收.
- 重复直到所有进程都可以被打上模拟终止的标签,说明此时处于安全状态.
- 如果没有通过检查,则应该拒绝分配资源.
内存
虚拟内存是什么?
- 程序对内存的需求增长,总是比内存本身增长快得多.虚拟内存顾名思义,系统为了方便管理,将内存分成了很多大小一致的块(称为页),每一个页即可以映射到物理内存也可以不映射,这样假设原来物理内存只有 32K,那系统全部页的大小可以有 64K,多出来的部分就是虚拟内存.虚拟内存对应的页一般存放在磁盘中.
- 当程序运行时,没有在实际内存的页会发生缺页中断,系统会通过页面置换算法,将一部分暂时用不到的内存,挪到磁盘,将程序运行对应的页从磁盘写入内存.
分页分段的区别?
- 分页是从系统角度,将内存分成固定大小的块(页),方便系统对内存的管理,减少内存碎片.
- 分段是从程序角度,将整个程序不同的部分分到不同的地址空间,(高级语言这个过程由编译器完成),分段方便了程序的保护.
- 分段的做法是把每个表分成段,一个段构成一个独立的地址空间.每个段的长度可以不同,并且可以动态增长.
- 现在操作系统都是混合的段页式管理内存.
分页地址映射是怎么实现的?
- 分页系统地址映射
- 页表(Page table)存储着页(程序地址空间)和页框(物理内存空间)的映射表.
- 虚拟地址分为两个部分,第一个是存储的页面号,另一个是存储的偏移量.
- 图中存放了 16 个页,需要 4bit 索引,虚拟地址 0010 000000000100,对应页表编号为 2-110 ,页表最后一位代表这一页是否在内存中,这里是 1 在内存中,所以最后得到的物理内存 110 000000000100.
常见的页面置换算法?
- 程序运行需要的页面不在内存时,会发生缺页中断,系统会将一部分不常访问的内存挪到磁盘,以腾出空间.页面置换算法就是决定要将那些页挪到磁盘.目标是缺页率最低.(缺页中断最少)
- OPT: 一个理论上的算法,将最长时间不再访问的页面挪到磁盘…但是现在还无法预测那些页会长时间不再访问..因此只是理论…
- LRU: 最近最久未使用.需要记录过去页的使用情况,一个实现是将页串成一个链表,最新访问的在前,这样每次回收都回收最末尾的页.但这样的代价很高.
- NRU: 最近未使用,每个页有两个状态位,R M .页面访问 R = 1,页面修改 M = 1,R 会定时清零.这样就建立了一个优先级,优先回收 R=0 M=1 的页面.最后回收 R=1 M=0 的页面.还不够智能.
- FIFO: 跟队列的 FIFO 一样,最先回收的是最先进入的页面…非常不适合的算法..
- 第二次机会?,算是对 FIFO 的改进.增加一个标志位 R ,页面被访问或修改时 R=1.回收时,从链表最后开始 R=0 又老又不访问,回收.R=1 把页扔到链表头..再回来继续搜索.
- 第二次访问还是有个问题,移动页的成本还是高..这跟单链表实现有关,,所以..换成循环链表就好了…把头指针指向后挪一位..
磁盘
简单介绍一下磁盘结构?
- 一个机械硬盘可能又几张碟.
- 一张碟是一个盘面.
- 一个完整环形是一个磁道.
- 一个完成的扇形是几何扇区
- 磁道上面的一段弧是一个磁道扇区,磁道扇区是磁盘最小的存储单位.现在一般是 4k.
- 磁头是读数据,主轴带动磁盘旋转.
磁盘的调度?
- 影响磁盘读取的从机械角度看无非是3点.
- 找到特定扇区,盘面的旋转时间.
- 再找到特定的磁道,磁头移动的寻道时间.
- 实际读取和传输数据的时间.
- 实际上寻道时间最长,因此磁盘调度主要围绕寻道优化.
- FCFS: 先到先来,非常简单..但是完全没有优化,平均寻道时间不算理想.
- SSTF: 最短寻道时间,每次调度只取队列里面寻道最短的,这样平均寻道时间最短,但有可能存在饿死特定请求的情况.(类比进程调度的短作业优先)
- SCAN: 电梯算法,跟电梯一样,一次从楼下到楼顶.再从楼顶到到楼底.一次只移动一个方向,直到这个方向没有其他请求为止.这样寻道时间肯定比 SSTF 长了但是没有饿死请求了.
- C-SCAN: SCAN 有一个问题是有一个请求距离磁头比较远,而且方向还相反,这样就需要等待很久.C-SCAN 就一个方向,每次都只从起始端开始,就一个方向,转到直到这个方向上剩余磁道没有其他请求为止,再迅速返回起始端.这样算是对 SCAN 的一个改进.
windows 下日常环境的一些折腾
资料来源:
<>
更新
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 20.06.01 初始化 20.06.17 添加 win32 20.07.20 添加 win ssh 20.12.28 添加 win10 修复 21.01.01 ltsc 安装微软商店 21.01.19 备份 uwp 数据 21.02.21 邮件 wlibim.dll 错误 21.09.08 edge 由你的组织管理 21.09.15 Nvidia Container 占用过高 cpu 21.11.02 firefox 打开的问题 22.08.22 更新一些新的备份 23.04.26 一些最近坑的汇总.. 23.06.08 另外一些坑 23.08.03 windows 系统修复
|
- 2023-06 读书/电台/电影/剧集的随想 & 推荐