11 2012 档案
摘要:1.为什么说中断是进程切换的必要条件,但不是充分条件? 假如在时刻T1到时刻T2之间发生了进程切换,则在时刻T1与时刻T2之间一定执行了处理机调度程序,处理机调度程序是操作系统的一个底层模块,运行于管态,说明在T1到T2时刻之间,处理机状态曾有木态转换到管态。由于中断是系统由目态转换为管态的必要条件,所以在时刻T1与时刻T2之间一定发生过中断。也就是说,中断是进程切换的必要条件,然而,中断不是进程切换的充分条件。 比如说,一个进程执行一个系统调用命令将一个消息发送给另外一个进程,该命令的执行将通过中断进入操作系统,操作系统处理完消息发送的工作后可能返回原调用进程,此时中断并未导致进程切换;也可
阅读全文
摘要:最近,又看起来操作系统,对其中的一些概念还不是理解的很透彻,现在再来温习一遍。 访管指令。引用百度百科的一些理解: 当源程序中有需要操作系统服务的要求时,编译程序就会在由源程序转换成的目标程序中安排一条“访管指令”并设置一些参数。当目标程序执行时,中央处理器若取到了“访管指令”就产生一个中断事件,中断装置就会把中央处理器转换成管态,并让操作系统处理该中断事件。操作系统分析访管指令中的参数,然后让相应的“系统调用”子程序为用户服务。其次,访管指令是在目态下使用的指令。 我们知道,用户程序只能在目态下运行,并且不能使用特权指令。因而就存在这么一个问题:如果用户程序想要启动外设,或者要完成在目态下.
阅读全文
摘要:这个题让我做得有些纠结。将我的做题过程思路写出来。 这是一道深度优先搜索的题目,目的是来求出无线连通图的割点。首先,要明白什么是割点,割点:在一个连通图中,如果去掉了某个点和所有与这个点相连的边后,是图分成了两个部分,变成了一个不连通的图。那么这个点就是割点。还有,就是如何来求割点? 搜索深度:如果节点k的搜索深度为j,则节点k为第j个搜索到的节点。 若有k的儿子为i,我们定义AnceDeep[i]为与结点i相连接的所有节点最小的搜索深度,deep[k]为k的搜索深度(时间戳),那么k为割点当且仅当k满足(1)(2)中的一个: (1) 若k为深搜树的根Root,当且仅当k的儿子数(分支数...
阅读全文
摘要:这是一道bfs的习题,比较经典,以前也没做过bfs的题,第一次做,记录下思路。 首先,应该弄明白的是BFS要通过队列来实现,我向来不喜欢做题时自己再将什么声明队列,出队列,入队列的函数给写出来,感觉有点麻烦。这次我才发现有queue、stack的这种头文件,可以直接使用。第一步将起点位置加入队列,如果当队列为空还没有访问到目标位置就代表访问不到目标位置了。 其次,这道题求的是最少的步数,一旦搜索到目标位置,就立马停止搜索,输出步数。那么这个步数怎么来算呢??如何避免访问已经访问过的位置呢??这里建立一个二维数组,存放每一个位置的状态,-1表示没有访问过,其他的值代表访问这个位置的时候已经走过.
阅读全文
摘要:这道题也是一道最短路径的题目。用的是Floyd算法。下面简述一下自己做这道题的过程。 首先,要对Floyd算法理解清楚。Floyd算法可以求出的是任意两点之间的最短路径,注意这里是任意,所以可用一个邻接矩阵来表示各点到各点的最短路径。它的基本思想是在Vi到Vj的所有路径中找出一条长度最小的。那么如何有效的找出这一条最短的呢??<Vi,Vj>代表从Vi直接到Vj,那么<Vi,Vj>要么是一条弧的值,要么是一个无穷大的值(即这两点之间没有直接连接的弧)。我们依次在<Vi,Vj>之间插入V1到Vn,首先从V1开始,那么从Vi到Vj的最短路径可能要经过V1,所以此时
阅读全文
摘要:做这道题的时候,自己恰好刚看过dijstra算法。不过感觉有些地方还是不是那么好处理?去网上看了一下,大家好像说这个题很简单,就感觉自己太菜了。下面写下自己做这个题的过程。 首先,我要解决的是要存储消防站到火点的路径,并且是存储多个消防站到火点的路径,这个该怎么存储呢?此外,我要存储多个消防站到火点所用的时间,这个该怎么存储呢?还有,怎么根据输入消防站的个数不同来输出呢?这些都成为了我的困扰。 后来看了网上的代码,感觉对我帮助很大。 一、我用不用存储每个消防站到火点的路线呢?不用!!我只要将到达该点的最短路径的前驱存储就行了,用不着再用什么二维数组来存储消防站到火点的距离。举个例子,消防站标.
阅读全文
摘要:今天的计算机组成原理讲的这些知识,感觉以前知道的很是不透彻啊,把我弄的晕的,这里来解释一下。 首先这些码制都是为了解决有符号数来设定的规则。假设有n位,其中1位为符号位,你可以表示的原码范围为:-(2^(n-1)-1)到2^(n-1)-1,也就是说,假如你有8位,可以表示的有-127到+127,所以要想表示-128,必须需要9位,即110000000,要想表示128,结果是010000000;此为还需要注意的是,+0和-0并不一样,假如有八位,那么+0的原码为00000000,-0的原码为10000000; 假设有n位,其中1位为符号位,补码表示的范围为 -2^(n-1)到2^(n-1)-1.
阅读全文