- 博客(26)
- 收藏
- 关注
原创 虚拟存储管理(OPT,FIFO,LRU,LFU,NUR算法的C++实现)
1. 最佳置换算法$(OPT);2. 先进先出的算法$(FIFO);3. 最近最少使用算法$(LRU);4. 最少访问页面算法$(LFU);5. 最近不经常使用算法$(NUR)五种页面置换算法的C++实现
2021-12-12 09:00:00 5335 2
原创 操作系统实验七 地址映射与共享(哈工大李治军)
实验七 地址映射与共享实验目的深入理解操作系统的段、页式内存管理,深入理解段表、页表、逻辑地址、线性地址、物理地址等概念;实践段、页式内存管理的地址映射过程;编程实现段、页式内存管理上的内存共享,从而深入理解操作系统的内存管理。实验内容用 Bochs 调试工具跟踪 Linux 0.11 的地址翻译(地址映射)过程,了解 IA-32 和 Linux 0.11 的内存管理机制;在 Ubuntu 上编写多进程的生产者—消费者程序,用共享内存做缓冲区;在信号量实验的基础上,为 Linux 0.
2021-11-27 18:32:13 3203 7
原创 分区式存储管理 动态分区最坏适应算法
实验二 分区式存储管理实验性质:设计建议学时:2学时实验目的:通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法的思想。实验内容:设计程序模拟内存的动态分区法存储管理。内存空闲区使用自由链管理,釆用最坏适应算法从自 由链中寻找空闲区进行分配,内存回收时假定不做与相邻空闲区的合并。假定系统的内存共640K,初始状态为操作系统本身占用64K。在tl时间之后,有作业A、B、C、D分别请求8K、16K、64K、124K的内存空间;在t2时间之后,作业C完成;在t3时间之后,作业E请
2021-11-26 20:29:41 4641 2
原创 进程调度 时间片轮转算法
实验一进程调度实验性质:设计建议学时:6学时实验目的:通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统 性能的评价方法。实验内容;设计程序模拟进程的轮转法调度过程。假设初始状态为:有n个进程处于就绪状态,有m个进 程处于阻塞状态。釆用轮转法进程调度算法进行调度。调度过程中,假设处于执行状态的进程不会阻 塞,且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。程序要求如下:1) 输出系统中进程的调度次序;2) 计算CPU利用率。实现提示:用C语言
2021-11-26 20:21:15 4329
原创 操作系统实验六 信号量的实现和应用(哈工大李治军)
实验六 信号量的实现和应用实验目的加深对进程同步与互斥概念的认识;掌握信号量的使用,并应用它解决生产者——消费者问题;掌握信号量的实现原理。实验内容本次实验的基本内容是:在 Ubuntu 下编写程序,用信号量解决生产者——消费者问题;在 0.11 中实现信号量,用生产者—消费者程序检验之。用信号量解决生产者—消费者问题在 Ubuntu 上编写应用程序“pc.c”,解决经典的生产者—消费者问题,完成下面的功能:建立一个生产者进程,N 个消费者进程(N>1);用文件建立一
2021-11-01 21:51:52 2601 1
原创 操作系统实验五 基于内核栈切换的进程切换(哈工大李治军)
实验5 基于内核栈切换的进程切换实验目的深入理解进程和进程切换的概念;综合应用进程、CPU 管理、PCB、LDT、内核栈、内核态等知识解决实际问题;开始建立系统认识。实验内容现在的 Linux 0.11 采用 TSS 和一条指令就能完成任务切换,虽然简单,但这指令的执行时间却很长,在实现任务切换时大概需要 200 多个时钟周期。而通过堆栈实现任务切换可能要更快,而且采用堆栈的切换还可以使用指令流水的并行优化技术,同时又使得 CPU 的设计变得简单。所以无论是 Linux 还是 Window
2021-09-12 21:25:19 2509 10
原创 操作系统实验四 进程运行轨迹的跟踪与统计(哈工大李治军)
实验4 进程运行轨迹的跟踪与统计实验目的掌握 Linux 下的多进程编程技术;通过对进程运行轨迹的跟踪来形象化进程的概念;在进程运行轨迹跟踪的基础上进行相应的数据统计,从而能对进程调度算法进行实际的量化评价,更进一步加深对调度和调度算法的理解,获得能在实际操作系统上对调度算法进行实验数据对比的直接经验。实验内容进程从创建(Linux 下调用 fork())到结束的整个过程就是进程的生命期,进程在其生命期中的运行轨迹实际上就表现为进程状态的多次切换,如进程创建以后会成为就绪态;当该进程被调度以
2021-09-04 23:12:51 3862
原创 超详细!操作系统实验三 系统调用(哈工大李治军)
实验3 系统调用提醒这次实验涉及的宏过于复杂,加上本人能力有限,我也没有花大量时间去研究每一段代码,只是理解到每一段代码做了什么这一程度。实验目的此次实验的基本内容是:在 Linux 0.11 上添加两个系统调用,并编写两个简单的应用程序测试它们。iam()第一个系统调用是 iam(),其原型为:int iam(const char * name);完成的功能是将字符串参数 name 的内容拷贝到内核中保存下来。要求 name 的长度不能超过 23 个字符。返回值是拷贝的字符数。如果
2021-08-29 22:16:11 7320 28
原创 超详细汇编注释 操作系统实验二 操作系统的引导(哈工大李治军)
实验二 操作系统的引导 哈工大李治军超级详细的汇编代码,一字一句带你解读源码实验前必看
2021-08-14 21:33:27 3593 5
原创 九大经典排序算法(王道考研排序算法整理)
6. 排序算法稳定性:若待排序表有两个元素 RiR_iRi 和 RjR_jRj,其对应的关键字相同即 keyi=keyjkey_i=key_jkeyi=keyj,且排序前 RiR_iRi 在 RjR_jRj 前面。若排序后 RiR_iRi 仍然在 RjR_jRj 前面,则是稳定的。反之亦然 ????6.1 直接插入排序初始 L[1]L[1]L[1] 可以视为已经排好的子序列,然后依次将 L[2]−l[n]L[2]-l[n]L[2]−l[n] 插入已经排好的序列,共执行
2021-07-31 21:57:44 1622 1
原创 拓扑排序(邻接表实现)
5.5 拓扑排序5.5.1 AOV网用有向边 <Vi,Vj><V_i,V_j><Vi,Vj> 表示活动 ViV_iVi 必须先于活动 VjV_jVj 进行的这样一种关系,则将这种有向图称为顶点表示活动的网络,记为AOV网。在AOV网中,活动 ViV_iVi 是活动 VjV_jVj 的直接前驱,活动 VjV_jVj 是活动 ViV_iVi 的直接后继,这种前驱和后继关系具有传递性,且任何活动 ViV_iVi 不能以它自己作为自己的前驱或后继。5.
2021-07-23 11:52:40 1602
原创 最小生成树:Kruskal算法(邻接表+最小堆+并查集)
Kruskal算法概念将所有边通过最小堆排序。选择不会形成回路的边(通过并查集判断)插入树中,重复直至形成一棵树。模板/* 最小生成树 Kruskal算法*/#include <iostream>#include <queue>using namespace std;#define MaxVertexNum 10#define infinity 1e5typedef int weightType; // 权重数据类型typedef char vert
2021-07-22 22:46:35 1256
原创 Prim算法(最小生成树)
Prim算法概念首先任取一个顶点加入树,之后选择一个与当前树中顶点集合距离最小的顶点,将他加入树。直至图中所有顶点都并入树,得到的就是最小生成树。模板/* 最小生成树 Prim算法*/#include <iostream>using namespace std;#define MaxVertexNum 10struct Graph{ int edgenum; int vertexnum; int edgeList[MaxVertexNum]
2021-07-22 12:17:10 176
原创 Floyd算法(多源最短路径问题)
Floyd算法弗洛伊德算法,常用于多源最短路径问题,即求每对顶点间的最短路径。/* 有权图的多源最短路径问题*/#include <iostream>#include <queue>using namespace std;#define MaxVertexNum 10#define infinity 1e9struct Graph{ int edgenum; int vertexnum; int edgeList[MaxVerte
2021-07-21 17:42:14 339
原创 Dijkstra算法最小堆优化
Dijkstra算法迪杰斯特拉算法,常用于有权图的单源最短路径问题,即求图中某一顶点到其他各顶点的最短路径。/* 有权图的单源最短路径问题*/#include <iostream>#include <queue>using namespace std;#define MaxVertexNum 10struct Node{ int vertex; int dist;};struct Graph{ int edgenum;
2021-07-21 11:19:10 464
原创 BFS(邻接矩阵+队列)和DFS(邻接表+栈)C++实现
5.2 图的遍历5.2.1 广度优先搜索概念广度优先搜索(也称宽度优先搜索,缩写BFS)是连通图的一种遍历算法这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。基本过程,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。如果所有节点均被访问,则算法中止。一般
2021-07-19 22:12:57 1663
原创 有向图,无向图的邻接矩阵和邻接表模板
图图的定义有向图概念模板邻接矩阵邻接表无向图概念模板邻接矩阵邻接表简单图完全图图的定义图 GGG 由顶点集 VVV 和边集 EEE 组成,记为 G=(V,E)G=(V,E)G=(V,E),其中 V(G)V(G)V(G) 表示图 GGG 中顶点的有限非空集;E(G)E(G)E(G) 表示图 GGG 中顶点之间的关系(边)集合。有向图概念若 EEE 是有向边(也称弧)的有限集合时,则图 GGG 为有向图。弧是顶点的有序对,记为 <v,w><v,w><v,w>,其中
2021-07-18 17:51:44 6252
原创 阿里云ubuntu系统配置linux-0.11(哈工大 李治军)实验环境搭建
阿里云ubuntu系统配置linux-0.11(哈工大 李治军)实验环境搭建环境介绍使用的是ubuntu14.04(64位),最近在学习操作系统(哈工大李治军老师),本来在蓝桥云课上进行实验操作系统蓝桥云课,但没有会员环境只能保存一个小时,很不方便。于是使用阿里云搭建环境,有需要可以看阿里云服务器Ubuntu14.04(64位)安装图形化界面实验材料gcc-3.4-ubuntu.tar.gz包含linux-0.11源码,bochs虚拟机等hit-oslab-linux-20110823.tar.g
2021-07-15 11:11:30 6374 8
原创 并查集模板
并查集概念并查集是一种简单的集合表示,支持2种操作:查找集合S中元素x所在子集合,并返回子集合名字。把集合S中子集合root2并入子集合root1,要求2集合互不相交。通常用森林的双亲作为并查集的存储结构,每个集合以一棵树表示。模板#include <iostream>#include <vector>using namespace std;typedef int ElementType;struct Set{ ElementType data
2021-07-11 10:30:00 132
原创 哈夫曼编码(C++优先队列实现)
哈夫曼编码(C++优先队列实现)使用变长编码表对字符进行编码,出现频率高的字符采用较短的编码,出现频率低的采用较长的编码。以达到编码后的字符串的平均长度尽可能短,以达到无损压缩数据的目的。图解有一字符串string word = "abbbcccccdddddddd",字符a,b,c,d权重分别为1,3,5,8。初始#mermaid-svg-mjsZwwZkUyfMBRSe .label{font-family:'trebuchet ms', verdana, arial;font-family:
2021-07-10 20:48:22 1522
原创 哈夫曼树的最小堆实现
哈夫曼树定义带权路径长度(WPL):设二叉树有n个叶子结点,每个叶子节点带有权值Wk,从根结点到每个叶子节点的长度为Lk,则每个叶子结点的带权路径长度之和就是:WPL=∑k=1nWkLkWPL=\sum_{k=1}^{n}W_kL_kWPL=∑k=1nWkLk特点没有度为1的结点n个叶子结点的哈夫曼树共有2n-1个结点哈夫曼树的任意非叶子结点的左右子树交换后仍是哈夫曼树同一组权值,存在不同构的哈夫曼树图解初始#mermaid-svg-b6DWuJYTo59uOyOj .labe
2021-06-11 16:38:14 471 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人