1817 字
9 分钟
操作系统基础1212
页面置换算法
-
页面置换算法的作用
- 处理linux虚拟内存的一种算法
- 虚拟内存比物理内存大,虚拟内存中的资源部分放在物理内存里部分放在磁盘里
- 当物理内存不足时,将已经装入内存中的一个页置换出去,为新的页腾出空间
-
涉及到的概念:
-
局部性原理:
- 概念:假如虚拟内存八个页面装入物理内存四个页框,占满后再来新页面时,需要将一个页面置换出去,这时就需要页面置换算法来选择置换哪个
- 目的:==减少==页面置换的==次数==
- 减少的极限:最优页面置换算法
-
最优页面置换算法:用来和别的页面置换算法比,但是不存在最好的页面置换算法,各有各的优点
-
-
分类:
-
最佳页面置换算法(OPT)
-
先进先出置换算法(FIFO):最自然的
-
最近最久未使用置换算法(LRU):
-
==问的比较多的==:最近最少使用页面置换算法(LRU)
- 思想:将所有页面使用次数记录下来,将用的次数最少的页面置换出去
-
==LRU的老化算法==:
-
软件模拟LRU
- ==NFU==:R位被加进来之前,之前的计数右移一位,导致最近加进来的成为影响最大的
-
-
时钟页面置换算法(Lock)
-
最不常用置换算法(LFU)
页表项
-
分类:
- 高速缓存禁止位,访问位,修改位,保护位、“在/不在”位、页框号
- 在与不在:
- 保护位:设置权限
- 修改位:修改后置位1
为什么有了进程还要使用线程
-
先说什么是进程和线程
-
再说使用线程的好处
- 避免整个进程阻塞
- 不使用多线程,进程阻塞就无法工作
- 而多线程的话,只会阻塞一个线程,进程的其他线程还可以工作
- 提高系统并发性能
- 线程之间共享进程资源
- 避免整个进程阻塞
线程切换要保存哪些上下文
-
要保存的:
- 寄存器值
- 堆栈指针
- 内核栈指针
- 程序计数器
- 线程状态
- 虚拟内存信息
-
注意:线程上下文切换,涉及到保存和加载上下文,有性能开销,过于频繁的线程切换会影响性能
什么是协程?和线程有什么区别?
-
协程概念:
- 用户级别轻量级线程,调度完全由用户控制
- 上下文切换极快,成本低
- 因为它需要保存和恢复的状态较少
-
与线程的区别:
- 用户控制切换,开销比线程切换开销还小
- 线程抢占式,协程非抢占式
- 携程不能并发,不用加锁
- 线程适合CPU密集型,协程适合I/O密集型
如果僵尸进程过多,会出现什么问题
- 内存泄漏:
- 僵尸进程的资源无法回收释放
- 最终导致系统的性能降低或崩溃
- 资源浪费:
- 僵尸进程会占用系统资源
- 进程满载:
- 进程表被填满,无法再创建新的进程
如何如理过多的僵尸进程
- 修复父进程:
- 让父进程正确处理子进程的终止状态
- 手动杀死僵尸进程的父进程:
- 通过kill杀死僵尸进程的父进程,然后再修复父进程,让父进程去处理僵尸进程的终止状态
- 编写垃圾回收程序
- 这个程序通过waitpid()定期清理僵尸进程
一个进程可以创建多少个线程
- 总结:具体数量取决于系统的实现和配置
限制因素:
- 系统资源:
- 每个线程需要一定的系统资源,如内存空间、栈空间、寄存器等,最终受到物理内存和虚拟内存的限制
- 32位和64位系统的限制:
- 线程栈大小:
- 线程运行需要栈空间,栈大小是有限的
- 系统设定的限制:
- 系统可以设定创建线程的上限
对锁的理解
- 本质:
- 用于控制多线程和多进程 访问共享资源的==同步机制==
- 原理:
- 线程或进程想访问共享资源时,要先看资源是否被加锁
- 没加锁就获取资源并加锁
- 被加锁了就等待锁解开再获取资源并加锁
- 常见的锁:
- 互斥锁
- 读写锁:
- 允许多个线程同时读,但写只能有一个线程在写
- 可以提高系统的并发性
乐观锁和悲观锁有什么区别
二者本质:是一种使用锁的规则
-
悲观锁:
- 假设访问共享内存会发生冲突
- 所以加锁
- 会降低程序的并发性
-
乐观锁:
- 假设访问共享内存不会发生冲突
- 访问时不加锁,最后只会检测是否有资源被修改而发生冲突
- 如果没有冲突,就更新
- 有冲突,就放弃当前更新并重新检测
-
性能区别:
- 悲观锁:
- 访问前就加锁,造成性能损失
- 乐观锁:
- 不加锁,避免锁竞争,提高并发性能
- 但是检测时如果冲突频繁发生,需要不断重试,可能导致性能下降
- 悲观锁:
操作系统如何实现原子操作的
- 概念:
- 不可中断的一个或一系列操作
- 实现原子操作的方法:
- 内核支持
- 硬件支持
- 硬件锁总线
- 中断禁止
- 软件模拟
什么是物理地址
物理内存RAM中的实际地址
什么是逻辑地址(虚拟地址)
- 就是由CPU生成的虚拟地址
- 程序访问内存时就是访问的虚拟地址
- 一般通过页表或段表等数据结构映射到实际的物理地址
什么是虚拟内存
- 操作系统提供的一种内存管理技术
- 在虚拟内存中,每个程序都自己连续可用的内存空间
- 程序可以访问的内存大于实际物理内存,因为程序的部分数据放在内存中,部分数据放在硬盘中
为什么需要虚拟内存
- 扩展可用内存
- 进程隔离和保护
- 简化内存管理
- 内存共享和进程通信
分页与分段有什么区别
-
分页:
-
分段:
-
二者的区别:
- 目的:
- 分段是为了反映程序的逻辑结构
- 分页是为了更有效地使用内存,减少内存碎片
- 大小:
- 页的大小是固定的,机器系统决定了页的大小,不同系统的页大小不同
- 段的大小是可变的,由程序的逻辑结构决定
- 可见性:
- 用户程序可以看到分段的结果,但是看不到分页的结果
- 目的:
-
实际使用:
- 在实际的系统中,分页和分段往往并用,这种技术被称为段页式管理
内存泄漏和内存溢出有什么区别
- 内存泄漏:
- 内存未能正确释放
- 内存溢出:
- 申请内存超出可用内存
- 引发原因:
- 影响范围:
- 调试和解决:
操作系统基础1212
https://fuwari.cbba.top/posts/操作系统基础1212/