自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 ubuntu 系统 wordpress 博客搭建步骤

最近需要在我的服务器上搭建一个博客,按照我的设想应该就是一个静态博客,自己从头写 html 和 css 也未尝不可,就是添加 markdown 和 latex 的支持没有头绪,说不定有点复杂。不管怎么样还是想要先搭起来再说,以后想改的时候再改吧,于是就先搭一个 wordpress 博客了。据说是有一些工具可以一键安装 wordpress 的,但是我比较穷,服务器是最低配置,硬盘空间很小,我担心这些工具会给我下载很多用不上的软件,遂考虑自己从头安装。所以「五分钟就能装好」的 wordpress 我硬是搞了一

2020-06-06 16:46:58 876 1

原创 ucore lab7_report

Lab7 Report实验目的熟悉ucore中的进程同步机制,了解操作系统为进程同步提供的底层支持;在ucore中理解信号量(semaphore)机制的具体实现;理解管程机制,在ucore内核中增加基于管程(monitor)的条件变量(condition variable)的支持;了解经典进程同步问题,并能使用同步机制解决进程同步问题。实验内容实验六完成了用户进程的调度框架和具体...

2019-12-17 14:26:17 553 1

原创 LRU不会出现belady异常的证明

对于最近最久未使用算法(LRU, Least Recently Used),是不会出现belady异常(belady anomaly)的,证明如下:设分配给当前进程的页面数量为n,令SnS_nSn​为当前时刻t,某个进程驻留在内存中的所有页面的集合。要证明LRU不会出现belady异常,即证对于任意的k > 0,给进程分配的页面数量为n + k时,对于同一个页面访问序列,SnS_nSn​总...

2019-11-21 21:29:55 2010

原创 ucore lab1_report

实验目的操作系统是一个软件,也需要通过某种机制加载并运行它。在这里我们将通过另外一个更加简单的软件–bootloader来完成这些工作。为此,我们需要完成一个能够切换到x86的保护模式并显示字符的bootloader,为启动操作系统ucore做准备。lab1提供了一个非常小的bootloader和ucore OS,整个bootloader执行代码小于512个字节,这样才能放到硬盘的主引导扇区中。...

2019-11-19 21:55:11 737

原创 ucore lab2_report

Lab 2 Report实验目的理解基于段页式内存地址的转换机制理解页表的建立和使用方法理解物理内存的管理方法实验内容本次实验包含三个部分。首先了解如何发现系统中的物理内存;然后了解如何建立对物理内存的初步管理,即了解连续物理内存管理;最后了解页表相关的操作,即如何建立页表来实现虚拟内存到物理内存之间的映射,对段页式内存管理机制有一个比较全面的了解。本实验里面实现的内存管理还是非常...

2019-11-19 21:50:14 499

原创 Splay Tree伸展树

伸展树基本概念伸展树的基本思想。伸展树完全是基于局部性原理(locality)的。局部性原理是计算机科学中非常重要的原理,很多设计,比如说多级存储器,缓存,都是基于局部性原理。简单说来就是<刚访问过的数据,在一段时间内极有可能再次被访问>。因此,对于物理存储器而言,会将刚刚访问过的数据,转移存储到更高级的存储介质中,比如内存或者缓存,以便下次访问这些数据时可以高效地进行。而对...

2019-10-24 20:49:54 405

原创 串匹配之karp-rabin算法

万物皆数回想我们平时对整数进行的比较,都可以在O(1)的时间内完成,而任何数据在计算机中的存储都是一系列的字节构成的二进制整数,串也不例外,那为什么不可以把对整数高效的比较操作也移植到串匹配问题上呢?这就是karp-rabin的基本思想。一般地,对于任意一个串,设字符集的大小为d,则该串中的任意一个字符都可以用一个d+1进制的整数来表示。需要注意的是,这里是d+1进制,而不是d进制,是因为不能...

2019-10-04 21:16:08 1142

原创 散列的基本概念

散列的基本概念什么是散列?为什么需要散列?散列是一种思想。与已经学过的其他数据结构相比较,向量是采用循秩访问(call by rank)的访问方式,列表是采用循位置访问(call by position)的访问方式,二叉搜索树是采用循关键码访问(call by key)的访问方式,散列与他们都不一样,是采用循值访问(call by value)的访问方式。举个例子,你现在身处同济大学嘉定...

2019-10-04 21:14:05 14260 1

原创 串匹配之bm算法

以终为始在串匹配之kmp算法中,已经简单介绍了kmp算法的基本原理与实现。kmp算法的基本思想,是利用已经成功匹配的字符的信息,快速跳过无意义的对齐位置,从而实现更高的效率。下面,我们首先对这样的思想进行更深入的研究。在实际的串匹配问题中,字符集的规模往往是挺大的,比如说英文字符集,就至少有52个字符,更不要提ASCII码,还有中文字符集了。这样,在随机的情况下,一次比对成功的概率只有1/52...

2019-10-04 10:07:12 2396 1

原创 串匹配之kmp算法

字符串匹配问题是算法中的常见问题,即对于一个较长的文本串T,以及一个较短的模式串P,返回模式串P在文本串T中是否出现,或者首先出现的位置,或者所有出现的位置。实际上,在实际生活中,具有大量的字符匹配问题的应用场景,例如一般的编辑器软件,都具有的查找替换功能,还有像是google这种软件,本质上就是从整个因特网的文本数据中,去查找用户搜索的字符串。以下主要讨论如何实现串匹配问题。一种简明的策略...

2019-10-02 16:56:14 386

原创 进程管理(5):死锁

死锁的基本概念为什么会发生死锁?其实在前面进程管理的总结中,已经多次出现了死锁的概念,比如在信号量机制中,如果信号量使用不慎,就会出现死锁。实际上,在现实生活中,死锁现象也经常会出现,比如两个胖子过独木桥,比如哲学家就餐问题。比如我去清华面试,面试老师和蔼地让我陈述一下自己的科研经历,我说<我很厉害的,真的!你们先答应录我我就跟你们讲我的科研经历>,老师说<那不行,你得先...

2019-10-01 15:08:49 397

原创 哲学家就餐问题及其实现

哲学家就餐问题描述哲学家就餐问题是指,有五个哲学家围坐一桌,每两个哲学家之间都有一只叉子,一共有五只叉子。每个哲学家都只有两个动作,即思考和就餐,哲学家思考的时候不需要任何的资源,但只有同时拿起他左右的两只叉子,才能开始进餐。进餐完毕后将叉子放归原位。这个问题在于,应该如何保证哲学家们的动作有序进行,如不会出现有人永远拿不到叉子的情况。一些初步的尝试第一次尝试对哲学家就餐问题进行分析,可以...

2019-09-30 10:16:59 4590 1

原创 左式堆(leftist heap)

堆合并堆合并是指,对于任意两个堆,将其合并为一个更大的堆,如下图所示:为了解决这个问题,我们可以首先进行一些初步的尝试。简明的插入策略最简明的思路,无非是将一个堆中的元素,逐个删除并且依次插入到另一个堆中。不妨设两个堆的规模分别为m和n,则这种策略的时间复杂度为O(m * (logm + log(m + n))) = O(m * log(m + n))。Floyd批量建堆算法...

2019-09-29 21:11:31 3228 2

原创 完全二叉堆(complete binary heap)

优先级队列在很多具体的应用条件下,我们都只关心一组数据中的最大值或者最小值,比如考完试大家首先都是看谁是第一名,谁又是最后一名;比如我只知道世界最高峰是珠穆朗玛峰,却不知道后面的第二第三都是什么;比如在操作系统中的诸多算法,都是基于优先级来进行的,像是页面置换算法还有进程调度算法,这个时候总是选出其中优先级最高的页面将它换出,或者优先级最高的进程,让它占用CPU。支持上面这种操作,即每次只是获...

2019-09-29 21:07:29 1797 1

原创 skiplist 跳转表基本概念

跳转表的基本概念跳转表是一个基于列表list的数据结构,从结构上来说,它是由多个列表组成的。各个列表在纵向形成多层,其中第一层(最底层)拥有跳转表中的所有数据节点,以上各层列表中的数据都是其底层列表的一个子集,特别地,最顶层的列表不包含任何数据,仅含有两个头尾哨兵。跳转表的结构如图所示:用地铁站对跳转表打一个比方,设想有一个城市的地铁分为多层,其中最底层的地铁要经过该城市的所有站台;所有这些...

2019-09-29 20:56:17 1113

原创 进程管理(4):信号量与管程

在进程管理(3):同步互斥中,我们提到,为了解决同步互斥问题,操作系统会提供一些高级抽象方法供应用进程调用,这样应用进程就不需要自己利用繁琐的软件方法来解决同步互斥了。存在三种高级抽象方法,分别是锁,信号量与条件变量,其中锁也在上面那篇中讨论过了,这里主要是讨论信号量与条件变量。同步互斥的层次结构如下图所示:信号量为什么要引入信号量?前面我们已经用锁机制方便的解决了临界区的互斥访问问题...

2019-09-26 16:51:24 3056 2

原创 多线程互斥之eisenberg算法

在前面进程管理(3):同步互斥中,已经就两个进程情况下互斥问题的软件实现方法进行了讨论,最终介绍了两种算法,即Peterson算法和Dekkers算法,这两种算法的基本思路是相同的,但是Dekkers算法更容易推广到多进程的情况。因此,以下我们将尝试以Dekkers算法为基础,实现多进程的互斥访问。一些简单尝试首先还是先来回顾一下Dekkers算法,它的代码描述如下:flag[i] = tr...

2019-09-22 21:13:45 1810 1

原创 进程管理(3):同步互斥

什么是同步互斥问题?引入了进程和线程的概念以后,多个进程和线程可以并发地在处理器中执行。在实际应用中,它们并不是独立地自己执行自己的,有时候会存在多个进程协作完成一个更大的任务。例如前面在进程管理(1):线程和进程的概念中提到的例子,一个MP3播放器软件,被划分为I/O读取数据,解压数据,和播放解压后的音频文件三个子模块,我们可以使用三个线程来实现这三个子模块,I/O操作总是把数据读到某一个缓冲...

2019-09-21 15:14:31 2287

原创 进程管理(2):进程调度策略

进程调度的概念第一个问题还是,为什么需要对进程进行调度?在前面一篇进程管理(1):进程和线程的概念中已经提出,进程这个概念是在多道程序的背景下产生的,之所以引入进程,就是为了让操作系统可以更好地管理这些并发的任务。而我们知道,进程的并发并不可能是真正的并行,因为无论是在单处理机还是多处理机中,进程的数量都远远多于CPU的内核数,因此进程的并发本质上只是对CPU资源的时分复用而已。一个CPU...

2019-09-17 10:43:15 1172

原创 进程管理(1):进程和线程的概念

进程产生的背景首先需要回答一个问题,为什么要引入进程的概念?前面在物理内存管理部分,我有提到物理内存管理的一切目的,都是为了多任务的系统,否则对于单道程序的操作系统,直接让那单道程序独占内存和CPU就可以了,自然不需要内存管理,显然也不需要进程的管理。所以,进程概念的产生,其实还是处在多道程序的背景下的。正是因为操作系统希望同时运行多道程序,而我们都知道程序运行需要资源,因此操作系统需要合理...

2019-09-11 17:55:19 465

原创 虚拟存储总结(2):页面置换算法总结

上次虚拟存储总结(1)中说到,当程序要加载不在内存中的页面时,就会产生一个缺页异常。从而操作系统会选择内存中的一个页面,将它换出到外存当中,这样需要加载的页面就可以驻留在刚刚释放出的内存空间了。那么,在内存中的页面那么多,操作系统是如何选择被换出的页面呢?这就是涉及到具体的页面置换算法。页面置换算法的设计思路前面提到,虚拟存储性能的一个评价指标是有效存储访问时间(EAT, Effective ...

2019-09-02 14:18:50 2685 1

原创 虚拟存储总结(1)

文中的图片都是来源于thu os课程的讲义,如有侵权请联系作者删除。虚拟存储产生的背景在计算机发展的过程中,程序规模的增长速度是远远大于存储器容量的增长速度的。于是喜欢做梦的人类就产生了一些不切实际的幻想,比如[如果我可以回到十年前就好了!],或者[如果我可以使用的存储空间比实际存储空间大该多好啊!]与别的白日梦不同的是,这个白日梦还真实现了。于是人们就开始了实现这个白日梦的探索工作。覆盖和交...

2019-08-31 18:02:24 537

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除