10 2018 档案
摘要:现代的操作系统都提供了单个进程包括多个控制线程的特性。线程,有时候称为轻量级进程(lightweight process,LWP),是CPU使用的基本单元;它包含了线程ID,程序计数器,寄存器集合以及堆栈。它与属于同一进程的其他线程共享代码段,数据段和其他的操作系统资...
阅读全文
摘要:优先队列:顾名思义,这个队列中的元素是有优先级的,它和普通的先进先出(FIFO)不一样。我们在很多场合可能都需要用到这种特殊的队列(例如,操作系统的进程调度)。可以看出来,优先队列(priority queue)的核心操作有两个,分别是插入和删除。插入是显而易见的,删...
阅读全文
摘要:为什么要管理CPU,这是因为在“上古时代”,CPU是计算机硬件之中最昂贵的资源。因此提高CPU利用率是很有必要的。我们知道只要给CPU的PC一个地址,CPU就能运行起来了,假设在运行一段时间后,需要一些I/O操作,而I/O操作(当年主要是连接打印机等)是很费时间的。...
阅读全文
摘要:首先,有一个概念叫做接口。抽象而言的接口是连接两个东西的中间物。接口的好处是屏蔽了连接起来的实际细节。我们只关心接口如何使用。系统调用:操作系统的接口是连接应用软件与操作系统的中间桥梁。接口在程序设计中表现的形式就是:函数。操作系统提供的函数就被称为系统调用(syst...
阅读全文
摘要:1936年,阿兰图灵提出了一种可计算模型——图灵机。图灵机是从模拟人用纸笔计算的过程得到的灵感。图灵设想只存在于想象中的机器由一个控制器、一个读写头和一根无限长的工作带组成的。纸带起着存储的作用;读写头能够读取纸带上的信息,以及将运算结果写进纸带;控制器则负责对搜集到...
阅读全文
摘要:对于二叉查找树而言,每次操作的最坏时间复杂度是O(N)。(当树退化为链表的时候)。为了解决这个问题,我们给树附加了一个平衡条件。平衡条件限制了任何节点的深度都不能过深。其中一种限制条件是:一颗二叉查找树的左子树和右子树的高度差不能超过1,这个条件限制产生了AVL树。二...
阅读全文
摘要:AVL树这样一棵搜索二叉树,它的左右子树的深度之差不超过1。因此,他是带有条件的搜索二叉树。这个条件保证了AVL树的深度是O(log n).最简单的想法是左右两棵子树保持相同的高度。但是这种条件过于苛刻,难以使用。AVL只要求深度之差不超过1。AVL解决了二叉搜索树带...
阅读全文
摘要:二叉搜索树(Binary Search Tree)也叫做二叉排序树或者二叉查找树。顾名思义,它是一种对排序和查找都很有用的特殊二叉树。二叉查找树满足以下性质:(假设二叉查找树中每个节点元素都是不同的,它也可以为空)非空左子树的所有键值小于其根节点的键值; 非空右子树的...
阅读全文
摘要:表达式树:表达式树的叶节点是操作数,其他节点是操作符。假设所有的运算符都是双目运算符,那么刚好形成一颗二叉树。我们可以通过递归计算左子树和右子树的值,从而得到整个表达式树的值。这就是一颗表达式树,在这棵树中,只有叶节点是操作数,其他节点都是操作符。 我们先来遍历一下这...
阅读全文
摘要:树的一些定义和基本性质:一棵树只有唯一的根节点。 子树的个数没有限制,但是它们一定是互不相交的。(一对多的关系,不能是多对多的关系) 1个N节点的树有N-1个边。 节点的度:节点的子树个数(度为0的节点称为叶子节点)。 树的度:树中节点度最大的值。 m棵树(一个森林)...
阅读全文