[个人笔记]操作系统复习笔记

2023-10-30

一 绪论

OS的作用

  • 用户与硬件之间的接口
  • 管理计算机资源
  • 抽象计算机资源

OS的发展

  • 单道批处理系统
    • 用户程序交给监控程序,由监控程序控制作业一个接一个交给IO处理
    • CPU等待IO、内存浪费、资源浪费
  • 多道批处理系统
    • 当一个作业在等待IO时,处理器可以切换到另一个不在等待IO的作业
    • 中断:中断机构(硬件)发出信号,CPU转而处理中断程序工作,完成后再返回原来的工作
    • 通道:专门负责输入输出的硬件,支持CPU和IO并行执行
    • 作业的四种状态:
      • 提交、后备、运行、完成
    • 三级调度
      • 低级调度:内存与内存
      • 中级调度:内存与交换区
      • 高级调度:外存到内存
    • 多道程序设计好处
      • CPU利用率
      • 内存和IO设备利用率
      • 系统吞吐量
    • 缺点
      • 周转时间长
      • 无交互能力
  • 分时系统、实时系统、微机操作系统
  • 操作系统的特征
    • 并发、共享、异步、虚拟
      • 概念区分:并发与并行、同步与异步

二 OS结构

陷阱和中断

  • 中断:外部的被迫中断
  • 陷阱:程序的主动中断

双模式

计算机硬件通过模式位表示当前为内核模式或用户模式,区分操作系统执行的任务和用户执行的任务。可能引起损害的机器指令为特权指令,只有内核模式才可以执行特权指令。模式概念可以扩展为超过两个模式。

系统调用

当要执行系统调用时,硬件通常将它作为软件中断。控制通过中断向量转到操作系统的中断服务程序,并且模式位也设为内核模式。内核首先验证参数是否正确和合法,执行请求,最后控制返回到系统调用之后的指令。

定时器

为了防止用户程序陷入死循环,或者不调用系统服务且不将控制返回给操作系统,可以使用定时器,设置指定周期后中断计算机。

三 进程与线程

进程的定义

一个具有一定独立功能的可并发执行的程序,在一个数据集合上的运行过程

进程与程序

运行的动态实体与静态实体

进程的状态

  • 新建状态、就绪状态、运行状态、阻塞状态、终止状态

挂起

  • 挂起/解挂的原因:用户、进程、系统的需要
  • 增加挂起状态后:活动就绪、静止就绪、活动阻塞、静止阻塞

PCB

PCB是用以记录与进程相关信息的主存区,是进程存在的唯一标志

  • PCB的组织方式
    • 线性方式、链接方式、索引方式
  • 进程切换
    • P0->系统中断->[保存PCB0->…->加载PCB1]->P1->系统中断->[保存PCB1->…->加载PCB0]->P0

进程创建与终止

  • 进程图:用于描述进程家族关系的有向树,箭头表示创建关系
  • 进程创建:
    • 申请空白PCB
    • 为新进程分配资源
    • 初始化PCB
    • 将新进程插入就绪队列
  • 进程终止:
    • 根据终止进程标识符,找到对应PCB
    • 若该进程正在执行,终止进程,设置调度标志为真
    • 如果该进程具有子孙进程,则终止其所有子孙
    • 回收所有资源,归还给其父进程或系统
    • 将PCB移出原所在队列

进程通信

协作进程需要一种进程间通信机制(Interprocess Communicatio,IPC)来允许进程相互交互数据与信息

  • 进程通信类型
    • 共享存储器系统
    • 消息传递系统
      • 直接通信:Send(Receiver, msg), Receive(Sender, msg)
      • 间接通信(信箱):Send(mailbox, msg), Receive(mailbox, msg)
      • 消息缓冲队列通信机制:生产者-消费者
    • 管道通信
      • 管道:用于连接一个读进程和一个写进程,以实现它们之间通信的共享文件,又称为Pipe文件

线程

是进程中的一个实体,是能被系统独立调度和分派的基本单位

  • 基本状态:就绪、执行、堵塞
  • 基本操作:派生、调度、阻塞、激活、结束

四 进程调度

  • 三级调度模型
    • 高级调度(作业调度):后备队列->内存(长程调度)
    • 低级调度(进程调度):就绪队列->运行(短程调度)
    • 中级调度(进程调度):内存<->交换区
  • 调度算法
    • 先来先服务(FCFS)
    • 短作业优先(SJF) - 抢占式/非抢占式
    • 优先级调度 - 抢占式/非抢占式
    • 时间片轮转(RR)
    • 多级队列
      • 不同队列调度算法可以不同
      • 队列之间有优先级差异或时间片分配
    • 多级反馈队列
      • 进程可在队列之间移动
      • 参数:
        • 队列数量
        • 每个队列的调度算法
        • 用以确定何时升级到更高优先级队列的方法
        • 用以确定何时降级到更低优先级队列的方法
        • 用以确定进程在需要服务时将会进入哪个队列的方法

五 进程同步

Peterson算法

两个进程互相谦让

while (true) {
  flag[i] = TRUE;
  turn = j;
  while ( flag[j] && turn == j);
  CRITICAL SECTION
  flag[i] = FALSE;
  REMAINDER SECTION
}

信号量机制

semaphore mutex=1;
process_1(){ 
  while(true) {
    wait(mutex);
    critical section;
    signal(mutex);
    remainder section;
  }
}

生产者-消费者

Semaphore muter=1, empty=N, full=0;

Producer() {
  while (true) {
    produce item v;
    wait(empty);
    wait(mutex);
    b[in] = v;
    in = (in+1)%N;
    signal(mutex);
    signal(full);
  }
}

Comsumer() {
  while (true) {
    wait(full);
    wait(mutex);
    w = b[out];
    out = (out+1)%N;
    signal(mutex);
    signal(empty);
    consume item w;
  }
}

读者-写者问题

Semaphore mutex=1, db=1;
int readercount=0;

Reader() {
  while (true) {
    wait(mutex);
    readcount++;
    if (readcount == 1) {
      wait(db);
    }
    signal(mutex);
    Reading;
    wait(mutex);
    readcount--;
    if (readcount == 0) {
      signal(db);
    }
    signal(mutex);
  }
}

Writer() {
  while (true) {
    wait(db);
    writing;
    signal(db);
  }
}

管程

  • 条件变量:condition x, y;
    • 每个条件变量都关联了一个队列,包含因该条件而阻塞的进程,对条件变量仅有的操作是wait()、signal()
  • x.wait():
    • 将自己阻塞在等待队列中
    • 唤醒一个等待者或者释放管程的互斥访问
  • x.signal():
    • 将等待队列中的一个线程唤醒
    • 如果等待队列为空,则等同空操作

哲学家就餐问题(管程)

monitor DP
{ 
  enum { THINKING, HUNGRY, EATING} state [5] ;
  condition self [5];

  void pickup (int i) { 
    state[i] = HUNGRY;
    test(i);
    if (state[i] != EATING) self [i].wait;
  }

  void putdown (int i) { 
    state[i] = THINKING;
    // testing left and right neighbors
    test((i + 4) % 5);
    test((i + 1) % 5);
  }

  void test (int i) { 
    if ( (state[(i + 4) % 5] != EATING) 
      && (state[i] == HUNGRY) 
      && (state[(i + 1) % 5] != EATING) ) { 
      state[i] = EATING ;
      self[i].signal () ;
    }
  }

  initialization_code() { 
    for (int i = 0; i < 5; i++)
      state[i] = THINKING;
  } 
}

六 死锁

多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程将永远无法推进

死锁发生的必要条件

  • 互斥
  • 非抢占
  • 占有并等待
  • 循环等待

资源分配图

  • 无环一定不死锁
  • 单资源有环一定死锁

死锁的处理方法

  • 死锁预防
    • 破坏占有并等待
      • 方法一:必须获得全部资源才能运行
      • 方法二:申请资源前必须释放自己已占有所有资源
    • 破坏非抢占
      • 方法一:进程申请某资源,有则分配,无则释放该进程所有资源并等待
      • 方法二:进程申请某资源,有则分配,否则检测有该资源的另一进程,若该进程在等待则抢占,否则申请资源的进程等待(允许被抢占资源)
    • 破坏循环等待
      • 给资源编号
      • 进程只能按递增顺序申请资源
      • 如果需要同一资源多个实例需一次申请
      • 申请编号更小资源时,需先将大编号资源全部释放
    • 破坏互斥
      • 临界资源不可能做到
  • 死锁避免
    • 系统的安全状态:Max, Allocation, Available
    • 若存在一分配顺序使进程全部执行的安全序列,则认为是安全状态
    • 银行家算法:Max, Allocation, Need, Available
  • 死锁检测
    • 单实例:分配图
    • 多实例:银行家
  • 死锁恢复
    • 进程终止
      • 终止全部死锁进程
      • 一次终止一个
    • 资源抢占
      • 选择一个牺牲品使代价最小
      • 回滚:将进程回滚到某安全状态
      • 饥饿:防止进程饥饿,需要有限牺牲某进程

七 存储管理

相关概念和术语

  • 逻辑地址(logical address)/相对地址:CPU所生成的地址,又称为虚拟地址(virtual address)
  • 物理地址(physical address)/绝对地址:内存单元所看到的地址(加载到内存地址寄存器中的地址)
  • 逻辑地址空间(logical address space):由程序所生成的所有逻辑地址的集合称为逻辑地址空间
  • 物理地址空间(physicaladdress space ):与逻辑地址对应的所有物理地址的集合称为物理地址空间
  • 重定位(relocation):从逻辑地址(虚拟地址)到物理地址的映射称为重定位,由内存管理单元(MMU)完成
  • 重定位寄存器:基址寄存器、限长寄存器
  • 绑定:从一个地址空间到另一个地址空间的映射

内存保护

  • 基地址寄存器:最小的合法的物理内存地址
  • 界限地址寄存器:指定范围的大小
  • 内存空间保护的实现通过CPU硬件对在用户模式下产生的地址与寄存器的地址进行比较来完成

用户程序处理过程

重定位

  • 静态重定位:程序装入主存之前由编译/链接程序完成重定位,入主存可立即执行
  • 动态重定位:程序入主存之前不进行重定位,入主后存执行到与地址相关项时,再进行重定位

装入方式

  • 绝对装入:程序在编译时完成静态重定位,按绝对地址装入内存
  • 可重定位装入:根据内存使用情况,将装入模块进行静态重定位后装入内存
  • 动态运行时装入:装入程序将装入模块装入内存后,不将装入模块的逻辑地址转换为物理地址,在执行时用重定位寄存器进行动态重定位

链接方式

  • 静态链接:程序运行之前,先将各目标模块以及所需库函数链接成一个完整的装入模块
  • 装入时动态链接:将用户源程序编译后所得到的一组目标模块,在装入内存时,采用边装入边链接的链接方式
    • 容易共享:每个库程序的引用都有一个存根,用于指出如何定位适当的内存驻留库程序
  • 运行时动态链接:将对某些目标模块的链接推迟到程序执行时才进行

连续分配存储管理

  • 单一连续分配
  • 固定分区分配
    • 内碎片
  • 动态分区分配/可变分区分配
    • 算法:
      • 首次适应
      • 循环首次适应
      • 最佳适应
      • 最差适应

碎片

  • 外碎片:内存中小块的空闲分区,无法单独满足任何一个进程的需求
  • 内碎片:固定分区分配方式中存在的,已经分配给进程,但进程不会使用的空闲空间
    • 紧缩、离散分配内存

覆盖与交换技术

  • 覆盖:进程内部区域的替换,主要用于早期操作系统
    • 把程序划分为若干功能上相对独立的程序段,按照自身逻辑结构将那些不会同时执行的程序段共享同一块内存区域
    • 程序段先保存在磁盘上,当有关程序段的前一部分执行结束,把后续程序段调入内存,覆盖前面的程序段
  • 交换:进程之间的替换
    • 当内存空间紧张时,系统将内存中某些进程暂时移到外存(盘交换区),把外存中某些进程换入内存中,替换移出进程原来的内存空间
    • 这种技术是进程在内存与外存之间的动态调度,多用于分时系统中
    • 中级调度:采用交换技术

分页存储管理

  • 分页(长度固定)
    • 分页思想
      • 内存物理地址空间按2n等分成页框/帧(frame),并从0连续编号:0,1,2,…
      • 作业的逻辑地址空间按页框/帧大小等分成页,并从0连续编号:0,1,2,…
      • 作业逻辑地址表示为:v=(p,d)
      • 作业连续的页,可以分配不连续的页框/帧
      • 系统设置页表PMT保存作业各页入内存后的情况,包含页号、页框号
      • 设置一个页表地址寄存器,保存当前执行进程页表的起始地址和页表的长度
  • 分段(长度可变)
  • 段页式(分段管理虚存,分页管理实存)

地址变换

直接地址变换

  • 借助页表、页表寄存器完成作业的逻辑地址(虚地址)到内存物理地址的变换
  • 页表基址寄存器(Page-table base register,PTBR)页表长度寄存器(Page-table length register,PRLR)

具有快表的地址变换

  • 增设若干具有并行查询能力的特殊高速缓冲寄存器(联想寄存器/快表),保存当前执行进程的部分页表
  • 程序的局部性特征

页表

页表是一种特殊的数据结构,放在系统空间的页表区,存放逻辑页与物理页帧的对应关系。 每一个进程都拥有一个自己的页表,PCB表中有指针指向页表

  • 层次页表
  • 哈希页表
  • 反置页表
    • 一般页表:每个进程都有一个相关的页表,这些页表可能消耗大量的物理内存
    • 反置页表:为每一个物理页框设置一个条目,并记录该物理页框所分配的进程ID和对应的逻辑页

八 虚存管理

请求分页机制

  • 在分页系统的基础上增加了请求调页功能和页面置换功能
  • 整个用户程序驻留在磁盘(二级存储)上,只装入少量页面入内存即可启动运行
  • 程序运行中,由调页程序(pager)根据需要将单个页面
    从磁盘调入内存, 将不需要的页面换出到磁盘上
  • 置换时以页为单位
  • 硬件支持
    • 请求页表机制
    • 缺页中断机构
    • 地址变换机构

请求页表机制

  • 状态位P(有效-无效位):用于指示该页是否已经调入内存
  • 访问字段A:用于记录本页在一段时间内被访问的次数,或记录本页最近已有多长时间未被访问,以供置换算法在选择置换页面时参考
  • 修改位M(脏位):标识该页在调入内存后是否被修改过
  • 外存地址:该页在外存上的地址,一般指物理块号

缺页中断机构处理过程

  1. 访问进程页表,查看访问页是否合法
  2. 如果是非法访问,则终止进程访问;如果页面访
    问合法,但该页不在内存中,则需要调入
  3. 在物理内存中找到一个空闲页框(free frame)
  4. 调度磁盘操作,将失效页从备用存储(磁盘)中
    装入空闲页框
  5. 重置页表,修改页面信息
  6. 重启因缺页而中断的指令

地址变换机构(有快表)

  1. 存储保护检查:页号>页表长度?
    • 是,越界中断
    • 否则2
  2. 查快表
    • 找到,修改访问位对于写操作置修改位,形成物理地址访问
    • 若未找到,查页表状态位
      • 在主存,将表目写入快表
      • 否则,缺页中断

页面置换算法

基本页面置换流程

  • 查找所需页在磁盘上的位置
  • 查找一个空闲的页框:
    • 如果有空闲页框,那么就使用它
    • 如果有没有空闲页框,就使用页面置换算法以选
      择一个“牺牲”页框(victim frame)
    • 将“牺牲”页框的内容写到磁盘上,修改页表和
      页框表
  • 将所需页读入空闲页框,修改相应的页表和页
    框表
  • 重启用户进程

页面置换算法详解

  • 评价指标:缺页率
  • 先进先出(FIFO)页面置换算法
  • 最佳(Optimal)置换算法(理论上)
    • 置换未来最长时间内不会访问的页面
  • 最近最少使用(LRU)页面置换算法
  • 近似LRU页面置换算法
    • 附加访问位算法
      • 为页表中的每一页保留一个8位的字节
      • 在规定的时间间隔(如每隔100ms)内,时钟定时器产生中断,OS将页面的访问位转移到8位字节的高位,其他位均向右移一位,最低位丢弃,这个8位字节记录了该页面在最近的8个时间间隔内的使用情况
      • 选择值最小的页面置换,相等情况下按照FIFO算法执行
    • 二次机会算法(Clock置换算法)
      • 页表中的每一页有一个访问位(页面被访问后将其置为1)
      • 按照FIFO的方式选择置换页,如果该页的访问位为1,则给予第二次机会,将其访问位置为0
  • 最不经常使用(Least Frequently Used,LFU)页面置换算法
  • 最常使用(Most Frequently Used,MFU)页面置换算法
    • 具有最小次数的页可能刚刚调入内存

页框分配算法

  • 固定分配算法
    • 平均分配
    • 按比例分配:进程大小
  • 基于优先级分配算法
    • 按照进程的优先级成比例给进程分配页框
    • 进程发生缺页中断时
      • 选择自己的页框进行页面置换
      • 选择优先级更低的进程的页框置换

全局分配与局部分配

  • 全局置换:允许从所有页框中置换
  • 局部置换:仅仅从分配给进程自己的页框中进行置换

请求分页系统的性能分析

抖动(thrashing)

  • CPU的利用率会随着道数的增加而提高,直到达到最大值
  • 达到最大值后继续提高道数,CPU的利用率将不再提高,反而急剧下降,这就是“系统抖动”
  • 为了提升CPU利用率,则需要减少道数,消除抖动

抖动产生的原因

  • 同时在系统中运行的进程太多,分配给每个进程的页框太少,不能满足进程正常运行的基本要求

工作集:进程在某段时间内实际访问页的集合

  • W S ( t , Δ ) WS(t,\Delta) WS(t,Δ) Δ \Delta Δ为工作集尺寸
  • D = s u m ( W S n ( . . . ) ) D=sum(WS_n(...)) D=sum(WSn(...)) m m m为页框数,若 D > m D>m D>m,则挂起进程

预防抖动

  • 采取局部置换策略
  • 将工作集算法融入作业调度
  • 利用“L=S”准则调节缺页率
  • 选择暂停的进程

九 I/O系统

I/O系统的基本功能

  1. 隐藏物理设备的细节
  2. 与设备的无关性
  3. 提高处理机和I/O设备的利用率
  4. 对I/O设备进行控制
  5. 确保对设备的正确共享
  6. 错误处理

I/O系统的层次结构

  • 用户层软件
  • 设备独立性软件
  • 设备驱动程序
  • 中断驱动程序
  • 硬件

I/O系统接口

  • 块设备接口
  • 流设备接口
  • 网络通信接口

I/O系统结构

  • 总线型结构
  • 通道型结构

I/O控制方式

  • 程序直接控制方式
    • CPU轮询I/O设备
    • 程序直接控制I/O方式中CPU直接控制I/O操作的过程
    • CPU的绝大部分时间都处于等待I/O设备完成数据I/O的循环测试中
  • 中断驱动I/O控制方式
    • I/O控制器:一旦接受到CPU读命令,则开始读数据;完成读数据后发送中断信号表示已就绪,当CPU请求数据时传输数据,等待下一次I/O操作
    • CPU:CPU发出读信号以后继续其他工作,每个指令周期末尾检测中断信号,若检测到,则转向执行中断处理程序
  • DMA控制方式
    • 数据传输的基本单位是数据块
    • 所传送的数据是从设备直接送入内存的,或者相反
    • 仅在传送一个或多个数据块的开始和结束时,才需CPU干预
  • 通道控制方式
    • I/O通道控制方式是一种以内存为中心,实现外设与内存直接交换数据的控制方式
    • 与DMA方式相比,通道所需要CPU干预更少, 每次可以完成多个不连续的数据块传送,而且可以做到一个通道控制多台设备,从而进一步减轻了CPU的工作
    • I/O通道具有自己的指令系统,并能实现指令所控制的操作,由CPU发出启动指令启动
    • 通过执行通道程序并与设备控制器共同实现对I/O设备的控制

缓冲

引入原因

  • 缓和CPU与I/O设备间速度不匹配的矛盾
  • 提高CPU和I/O设备之间的并行性
  • 减少CPU对I/O的干预,减少对CPU的中断频率, 放宽对CPU中断响应时间的限制

缓冲实现机制

  • 单缓冲区
  • 双缓冲区
  • 环缓冲区
  • 缓冲池
    • 对多个缓冲区的管理
    • 收容输入、提取输入、收容输出、提取输出

设备独立性

  • 逻辑设备与物理设备无关

SPOOLING(假脱机系统)

  • 组成
    • 输入井/输出井
    • 输入缓冲区/输出缓冲区
    • 输入进程/输出进程
  • 当用户进程请求打印时, SPOOLing打印机系统为它做两件事:
    • 在输出井中为之申请一个空闲磁盘分区, 并将要打印的数据送入其中
    • 再为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中, 再将该表挂到打印请求队列上
    • 打印机空闲时:输出进程取出一张打印请求表,再从输出井中取出打印数据到输出缓冲区,通过打印机进行打印

十 文件系统

文件的逻辑结构

  • 有结构文件(记录式文件)
    • 顺序文件
    • 索引文件
    • 索引顺序文件
    • 直接文件/哈希文件
  • 无结构文件(流式文件)

文件的目录结构

  • 单级目录结构
  • 两级目录结构:系统目录+用户目录
  • 树形目录结构:在两级目录的基础上,允许用户自行添加子目录
  • 无环图目录结构:同一文件和子目录可出现在不同目录中
    • 别名问题、悬挂指针问题
  • 通用目录结构:允许存在环

文件共享

  • 基于索引节点的共享方式
    • 设置索引节点,存储文件的物理地址、链接计数(共享计数)及其它文件属性
    • 文件目录只包括文件名和该文件对应索引节点的指针
  • 利用符号链实现文件共享
    • 假设B为了共享C的文件F,在B中创建一个Link类型的新文件,新文件目录中只包含被链接文件F的路径名,称这种链接方法为符号链接(symbolic Linking)
    • 说明:只有文件主人的目录中有文件索引节点的指针,其它用户目录中只有路径名

文件保护措施:存取控制

  • 访问矩阵

文件的物理结构

  • 连续文件
  • 链接文件
  • 索引文件

空闲空间管理

  • 空闲表法
  • 位向量
  • 空闲块链

十一 磁盘管理

磁盘的访问时间

  • 数据传输时间、平均旋转延迟时间、寻道时间

磁盘调度算法

  • 先来先服务(FCFS)
  • 最短寻道优先(SSTF)
  • 扫描算法(SCAN、电梯算法)
  • 循环扫描(C-SCAN)
  • LOOK/C-LOOK(不扫描到终点,到最远的进程就马上掉头)
  • FSCAN:在扫描的过程中所有新产生的序列放在另外的一个队列中,当访问完当前队列之后,再访问新产生的一个队列;队列按SCAN算法处理

廉价磁盘冗余阵列RAID

并行交叉存取:

  • 有多台磁盘驱动器,系统将每一盘块中的数据分为若干个子盘块数据,再把每一个子盘块的数据分别存储到各个不同磁盘
    中的相同位置上
  • 当要将一个盘块的数据传送到内存时,采取并行传输方式,从而减少传输时间
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[个人笔记]操作系统复习笔记 的相关文章

  • Tomcat7安装及配置教程

    Apache Tomcat7 0安装及配置教程 Apache Tomcat7 0官方网站链接 http tomcat apache org apache tomcat 7 0 73 windows x64 先解压下载的压缩包 然后在bin目
  • Linux系统的安装(在VM虚拟机上安装CentOS 7)

    工具准备 物理计算机一台 配置要求 操作系统 win10 64位 大家基本上都是 硬盘可用容量 20G以上 内存容量 4G以上 虚拟机安装包 VMware workstation full 12 5 下载链接 点我下载 提取码 9gha C
  • VMware-Ubuntu安装bochs

    我的运行环境是VMware的Ubuntu 首先大家可以按照CSDN上的教程按照符合自己需求的虚拟机 我在上午还在VMware和virtualBox之间做选择 但是由于已经安装过了VMware 所以我就直接用了VMware 当然了 一千人眼中
  • 虚拟机管理程序、虚拟化和云: 深入剖析 PowerVM 虚拟机管理程序

    预备知识 Power 是没有限制的虚拟化 一些企业打算依靠 PowerVM 虚拟化将多个工作负载整合到较少系统上 从而提高服务器利用率 降低成本 Power VM 为基于 Power Systems 平台的高级 RAS 功能和领先性能为 A
  • 操作系统PV操作及读者写者问题

    操作系统PV操作及读者写者问题 目录 1 信号量 2 P V操作原语可描述为以下式子 3 解释 4 互斥模式原理 5 同步模式原理 6 读者写者问题 1 信号量 PV操作与信号量的处理有关 信号量是表示资源的实体 是一个与队列有关的整型变量
  • office2013 excel 打开时提示excel词典xllex.dll文件丢失或损坏

    今天打开Excel时 发现报错 xllex dll文件丢失或损坏 我用的是office2013 网上找了好多都是2007的dll文件 导入不了 于是乎重装office 问题解决 但还是把xllex dll烤出来做个备份吧 参考下面步骤即可
  • Windows 添加永久静态路由

    route add p 10 10 0 0 mask 255 255 0 0 10 10 6 1 p 参数 p 即 persistent 的意思 p 表示将路由表项永久加入系统注册表
  • 红帽7.9部署telnet服务

    升级ssh 为预防万一提前配置telnet服务 安装软件包 yum install telnet server yum install xinetd xinetd加入开机自启 systemctl enable xinetd service
  • LWIP在STM32上的移植

    本文做记录摘抄 加上自己的体会 文章标题 STM32使用LWIP实现DHCP客户端 http www cnblogs com dengxiaojun p 4379545 html 该文章介绍了几点 LWIP源码的内容 关键点 1 inclu
  • 操作系统笔记六(文件管理)

    1 文件逻辑结构 1 1逻辑结构的文件类型 分类 有结构文件 例如 PNG文件 无结构文件 1 2顺序文件 1 3索引文件 2 辅存的存储空间分配 2 1分配方式 连续分配 直接分配连续的存储空间 链接分配 隐式链接 在盘块内指定下一个盘块
  • Linux,Network manager 导致节点异常重启

    推断是Network manager 导致的 原因待查今天在VmWare的虚拟机上装了个测试RAC 又遇到了一个摸不到头绪的问题CRS装好后 一旦登陆图形界面 节点就重启 事情就有这么巧不登陆图形界面 观察了1个小时没问题 一旦登陆后 立刻
  • Linux学习--CentOS7.5

    CentOS7命令大全 Linux系统简介 Unix Linux发展史 Linux目录结构 树形结构 查看 切换以及创建目录 文本内容操作 grep工具 关机和重启 Linux命令 基本用法 ls list 使用通配符 mkdir 别名 g
  • Visual studio 2005 hangs on startup AppHangXProcB1 svchost devenv.exe svchost.exe:{2a811bb2-303b-48b...

    This problem has been torturing me for the whole afternoon and after searching on the web for a long time I finally get
  • 使用inet_ntop转换IPv6地址时在macOS和linux上的行为不一样

    下面这段python代码在macOS和linux时运行的结果是不同的 import socket ip socket inet pton socket AF INET6 1 2 3 0 5 6 7 8 print socket inet n
  • java IO、NIO、AIO详解

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 IO流 同步 阻塞 二 NIO 同步 非阻塞 三 NIO2 异步 非阻塞 正文 回到顶部 概述 在我们学习Java的IO流之前 我们都要了解几个关键词 同步与异步 sy
  • 磁盘调度算法笔记和练习题

    磁盘调度算法 先来先服务FCFS 最短寻道时间优先SSTF 扫描调度SCAN 练习题 先来先服务FCFS 最短寻道时间优先SSTF 扫描调度SCAN 它是一次只响应一个方向上的请求 这个方向上的请求都响应完了 再掉头处理另一个方向上的 有点
  • 如何快速构建CMBD系统-glpi

    脚本后续更新及迭代将由kkitDeploy项目代替 https github com luckman666 kkitdeploy server 请大家持续关注kkitDeploy 一 CMBD系统构建步骤 起初 开发这套CMBD系统是为了帮
  • 地址映射与共享

    跟踪地址映射过程 1 通过命令 dbg asm启动调试器 在linux 0 11运行test c文件 使其进入死循环 我们的任务就是找到i的地址并将其修改为0使test c程序退出循环 2 在命令行输入crit c使Boch暂停 一般会显示
  • I/O设备模型

    I O设备模型 绝大部分的嵌入式系统都包括一些I O Input Outut 输入 输出 设备 例如仪器上的数据显示屏 工业设备上的串口通信 数据采集设备上用于保存数据的Flash或SD卡 以及网络设备的以太网接口等 I O设备模型框架 R
  • 【操作系统xv6】学习记录4-一级页表与二级页表

    占位

随机推荐

  • html取消select下拉,取消下拉选项_jquery如何取消选择select下拉框

    摘要 腾兴网为您分享 jquery如何取消选择select下拉框 中邮网院 天天美剧 搜狐视频 七哈小说等软件知识 以及比特彗星 cad素材包 交易猫app 视频调色软件 网易云歌单 小米温湿度传感器 装配式设计软件 富士通打印机网 百度网
  • Markdown符号

    Markdown符号 一 Markdown数学符号 二 LaTex公式 三 段落及强调 3 1 强调 3 2 斜体 3 3 粗体 3 4 删除线 四 标题 4 1 Setext 形式标题 标题1 标题2 4 2 Atx 形式标题 标题1 标
  • 国网B接口资源上报(Push_Resourse)接口描述和消息示例

    上篇blog 梳理了国网B接口的REGISTER接口描述和消息示例 前端系统加电启动并初次注册成功后 向平台上报前端系统的设备资源信息 包括 视频服务器 DVR DVS 摄像机 告警设备 环境量采集设备等模拟或数字信号采集设备信息 前端系统
  • C语言实现线性方程组的高斯消元法

    C语言实现线性方程组的高斯消元法 线性方程组是高等数学中常见的数学模型 解方程组的方法有很多 其中高斯消元法是一种较为普遍和常用的方法 在计算机编程中 我们可以使用C语言来实现高斯消元法 快速地求解线性方程组的解析解 高斯消元法原理 高斯消
  • RPN详解

    转载原文 https blog csdn net lanran2 article details 54376126 这里的博客都挺好的 转载一下 留的 RPN全称是Region Proposal Network Region Proposa
  • 计算机视觉面试题整理

    1 介绍目标检测网络yolo系列以及ssd系列的原理 yolo对小目标检测不好的原因 除了缩小anchor外还可以如何改善 Yolo目标检测 YOLO是一种实时目标检测算法 其核心思想是将目标检测问题归为一个回归问题 直接从输入图像中预测目
  • 小程序:微信开发者工具中页面一片空白怎么办?

    试过网上的更新工具 重启什么的 都无效 后面找到办法了 地雷 先删除 wxml 中的所有内容 换成最简单的
  • Required field 'serverProtocolVersion' is unset

    java sql SQLException Could not establish connection to jdbc hive2 localhost 10000 Required field serverProtocolVersion
  • 大数据可视化课程笔记 4

    文章目录 第四章 比例数据可视化 4 1 比例数据在大数据中的应用 4 2 整体与部分 4 2 1 饼图 4 2 2 环形图 4 2 3 比例中的重叠 4 2 4 矩形树图 4 3 时空比例 第四章 比例数据可视化 4 1 比例数据在大数据
  • 密码强度检测器

    我的CSDN主页 python 每日一练 题目 代码运行效果 完整代码 我的博文推荐 基础更熟代码更优 再炼同类问题 2022 11 27试炼 练习题目 定义一个名为 isStrongPassword 的函数 该函数将字符串作为参数 功能是
  • yolov5篇-快速开始使用yolov5

    基本需求 需要python gt 3 8和pip即可 剩下的环境搭建需求已经被列在即将下载的文件中的 requirements txt 中了 当然需要注意的是 如果你的电脑上被安装了很多的python版本 还请确定一下你使用的是否是正确的那
  • 在离线服务器上创建深度学习虚拟环境

    在离线服务器上创建深度学习虚拟环境 一 安装虚拟机 1 虚拟机软件和Ubuntu下载链接 2 注意事项 二 Linux平台下Anaconda虚拟环境配置 1 Anaconda安装 2 配置自己所需的深度学习环境 3 打包虚拟环境传送到服务器
  • C++中类和函数类型在java中的对应

    C Java 虚函数 普通函数 纯虚函数 抽象函数 抽象类 抽象类 虚基类 接口
  • C# 辗转相除法求最大公约数

    辗转相除法求最大公约数 public static void CalcGCD int largeNumber int smallNumber out int GCD GCD 1 int remain 1 while remain 0 rem
  • 推挽输出&&开漏输出

    在学习STM32的时候 我发现了一个很值得研究学习的问题 下面 用我的理解来阐述一遍 这其中的原理 首先请看电路图 在给GPIO配置输出的时候 其有两种工作模式可选 分别是推挽输出和开漏输出 在此之前先得了解mos管的工作原理 为了方便大家
  • 软件测试工作内容和职责有哪些

    目前 在IT行业中测试的职位数量仅次于开发 可以说是第二大技术就业岗位 然而许多人对测试师工作的理解还停留在 只需要像用户一样使用产品 然后发现有问题提交报告就行了 其实这是极其不准确的 软件测试师在测试产品前后通常有很多工作要做 下面我们
  • 计网笔记(1)- 计算机网络和因特网

    本章主要内容 构成网络的基本硬件和软件 我们将从网络的边缘开始 介绍网络中运行的端系统和网络应用 接下来探究网络的核心 介绍传输数据的链路和交换机 最后是连接端系统和网络核心的接入网和物理媒体 网络中数据的时延 丢包 吞吐量 计算机联网时的
  • stm32 串口发数据 0x00 变 0x80

    stm32 串口发数据 0x00 变 0x80 一般配置奇校验odd和偶校验even的时候 会出现这个问题 根本原因是stm32在计算长度的时候 会把校验位也计算进去 所以你之前设置的数据位8要改成数据位9才能正常运行 USART Init
  • Android Studio升级异常:Error : Program type already present: android.support.design.widget.CoordinatorLa

    解决的方案在build gradle增加 implementation com android support design 27 1 0 如图 最后Build一下就ok了 希望你跟我是一样的错误 能帮到你最好
  • [个人笔记]操作系统复习笔记

    一 绪论 OS的作用 用户与硬件之间的接口 管理计算机资源 抽象计算机资源 OS的发展 单道批处理系统 用户程序交给监控程序 由监控程序控制作业一个接一个交给IO处理 CPU等待IO 内存浪费 资源浪费 多道批处理系统 当一个作业在等待IO