操作系统基础

进程与线程

在这里插入图片描述

进程之间如何通讯

在这里插入图片描述
在这里插入图片描述

用户态与核心态

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

进程空间

在这里插入图片描述

操作系统内存管理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

TBL

TBL
多级页表虽然解决了空间上的问题,但是我们发现这种方式需要走多道转换才能找到映射的物理内存地址,经过的多道转换造成了时间上的开销。

程序是局部性的,即在一段时间内,整个程序的执行仅限于程序的某一部分。相应的,执行所访问的存储空间也局限于某个内存区域。

操作系统就利用这一特性,把最多使用的几个页表项放到TBL缓存, CPU 在寻址时,会先查 TLB,如果没找到,才会继续查常规的页表,TLB 的命中率其实很高的,因为程序最常访问的页就那么几个。

页面置换算法 FIFO 、LRU

在这里插入图片描述

LinkedHashMap实现LRU

/**
 * @program: Java
 * @description: LRU最近最久未使用置换算法,通过LinkedHashMap实现 * @author: Mr.Li
 * @create: 2020-07-17 10:29
 **/
public class LRUCache {
    private LinkedHashMap<Integer, Integer> cache;
    private int capacity; //容量大小

    /**
     * 初始化构造函数
     *
     * @param capacity
     */
    public LRUCache(int capacity) {
        cache = new LinkedHashMap<>(capacity);
        this.capacity = capacity;
    }

    public int get(int key) {
//缓存中不存在此key,直接返回
        if (!cache.containsKey(key)) {
            return -1;
        }
        int res = cache.get(key);

        cache.remove(key); //先从链表中删除 cache.put(key,res); //再把该节点放到链表末尾处 return res;
    }

    public void put(int key, int value) {
        if (cache.containsKey(key)) {
            cache.remove(key); //已经存在,在当前链表移除 }
            if (capacity == cache.size()) { //cache已满,删除链表头位置
                Set<Integer> keySet = cache.keySet();
                Iterator<Integer> iterator = keySet.iterator();
                cache.remove(iterator.next());
            }
            cache.put(key, value); //插入到链表末尾 }
        }
    }
}

死锁与解决方案

在这里插入图片描述

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值