- 博客(8)
- 收藏
- 关注
原创 项目实训07
第六部分:文件系统文件是操作系统中最重要的概念。在Linux中,万物皆文件的概念可谓深入人心。事实上,任何数据集合均可看做文件。而管理,存储文件则需要一个精心运作的文件系统。本实验中,我们就来模拟实现一个简易的文件系统。(1)在工作目录下建立FileSystem.h文件:在这里,我们要定义一些最重要的文件数据结构typedef struct{ unsigned short blockSize; unsigned int blockNum; unsigned int ino
2021-05-31 17:41:40
110
原创 项目实训06
多线程单词统计本实验中,我们使用多线程实现统计文本单词的功能。在统计时,凡是一个非字母或数字的字符跟在字母或数字的后面,那么这个字母或数字就是单词的结尾。允许线程使用互斥锁来修改临界资源,确保线程间的同步与协作。如果两个线程需要安全地共享一个公共计数器,需要把公共计数器加锁。在工作目录下建立words.c文件:#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <unistd
2021-05-08 18:55:03
250
原创 项目实训05
1.字符设备驱动只能一个字节一个字节的读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后顺序进行。字符设备是面向流的设备,常见的字符设备如鼠标、键盘、串口、控制台、LED等。在本实验中,我们实现一个简单的字符设备驱动实验,并在设备的打开操作中打印主次设备号。在工作目录下建立device_driver.c文件:#include<linux/kernel.h>#include<linux/module.h>#include<linux/fs.h>#
2021-05-08 18:51:05
103
原创 项目实训04
虚拟内存页面置换内存是计算机最为珍贵的资源,其可被CPU直接访问且速度较快,但正因为如此,严重限制了其存储容量。而进程实际占用的存储空间一般都远大于内存空间,因此我们必须时时刻刻将内存中暂不需要的页面置换出内存,并将需要被执行的程序片段调入内存以确保程序的正常执行,这也就是虚拟内存的基本原理。而好的页面置换算法也直接决定了计算机的性能。在这一模块当中,我们来实现几种最经典的页面置换算法。(1)时钟算法时钟算法可以理解为LRU算法的一种近似,其基本思想是:需要用到页表项当中的访问位,当一个页面被装入内存
2021-04-22 21:45:08
114
原创 项目实训03
第二部分:内存管理1.动态分区分配进程在运行的时候需要为其分配内存空间,但考虑到节约内存等因素的影响,我们需要适当的算法来对进程进行内存分配。本实验主要实现首次适应,临近适应,最佳适应与最差适应这四种算法。首先,我们定义内存空闲块数,进程数,进程大小,进程块号等基本变量:#define MAXNUMBER 100static int PartitionNum; static int ProcessNum; static int FreePartition[MAXNUMBER]; stati
2021-04-20 15:35:49
77
原创 项目实训02
命名管道通信在这一部分中,我们使用命名管道(FIFO)来进行进程通信,并且以此关联客户和服务器,我们用一个服务器来接受请求并处理,最后把结果返回给客户,即发送请求的一方。为了使问题简单化,我们假设被处理的数据可以被拆分成一个个数据块,每个的长度都取决于PIPE_BUF字节。最后,我们通过在传递给服务器的原先数据中加上客户的进程标识符pid双方就可以使用他来为返回数据的一个管道生成一个唯一的管道标识符。首先,我们建立一个头文件client.h,以此来定义客户和服务器程序都会用到的数据,这也包含了一些系.
2021-04-20 15:30:54
149
原创 项目实训01
创建进程在Linux系统中,我们一般使用系统调用fork()函数来创建进程,为此,我们在工作目录下创建一个测试文件processTest.c:#include <stdio.h>#include <unistd.h>#include <stdlib.h>int main(){pid_t pid;int i = 100; pid = fork();if(pid == -1){printf(“Creat fork error!!!\n”);exi.
2021-04-18 15:59:27
150
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人