操作系统实验期末总结

这篇博客总结了操作系统实验的关键点,包括文件复制的驱动程序实现步骤,内存布局,进程创建与通信方式(如管道、信号、消息队列、共享内存、信号量和套接字),并详细讲解了内存分配的四种算法(首次适应、循环适应、最佳适应和最坏适应)。
摘要由CSDN通过智能技术生成

文件复制

//将一个文件从from拷贝到to中
int copyfile(int from,int to)
{
   
	char *bp;
	char buf[1024];
	int r,w;//r 读 w 写
	int total=0;
	for(;;){
   //循环复制
		r=read(from,buf,1024);
if (r<=0) break;
		bp=buf;
		w=write(to,bp,r);
		if (w<=0) break;
		total+=w;
		r-=w;
		bp+=w;
	}
	if(r==0) return total;
	else exit(5);
}

驱动程序

first_drv驱动程序需要以下几步
(1)写出驱动程序first_drv_open first_drv_write
(2)需要定义file_operations结构体来封装驱动函数first_drv_open first_drv_write
对于字符设备来说,常用file_operations以下几个成员:
在这里插入图片描述
(3) 模块加载函数,通过函数 register_chrdev(major, “first_drv”, &first_drv_fops) 来
注册字符设备
(4)写驱动的first_drv_init 入口函数来调用这个register_chrdev()注册函数,
(5)通过module_init()来修饰入口函数,使内核知道有这个函数
(6)写驱动的first_drv_exit出口函数,调用这个unregister_chrdev()函数卸载,
(7) 通过module_exit()来修饰出口函数
(8) 模块许可证声明, 最常见的是以MODULE_LICENSE( “GPL v2” )来声明

/*1写出驱动程序first_drv_open first_drv_write */
/*inode结构表示具体的文件,file结构体用来追踪文件在运行时的状态信息。*/
static int first_drv_open(struct inode *inode, struct file  *file)
{
   
   printk(“first_drv_open\n”);      //打印,在内核中打印只能用printk()
   return 0;
}

/*参数filp为目标文件结构体指针,buffer为要写入文件的信息缓冲区,count为要写入信息的长度,ppos为当前的偏移位置,这个值通常是用来判断写文件是否越界*/
static ssize_t first_drv_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos)
{
   
  printk(“first_drv_write\n”);      //打印,在内核中打印只能用printk()
   return 0;
}

/*2定义file_operations结构体来封装驱动函数first_drv_open first_drv_write */
 static struct file_operations first_drv_fops = {
   
	.owner  =   THIS_MODULE,     //被使用时阻止模块被卸载
	.open   =   first_drv_open,      
	.write   =   first_drv_write,   
};

/*4写first_drv_init入口函数来调用这个register_chrdev()注册函数*/
int first_drv_init(void)
{
   
	register_chrdev (111, “first_drv”, &first_drv_fops); //111:主设备号,”first_drv”:设备名
	return 0;
}

/*5 module_init修饰入口函数*/
module_init(first_drv_init);
 
/*6 写first_drv_exit出口函数*/
void first_drv_exit(void)
{
   
	unregister_chrdev (111, “first_drv”);  //卸载驱动,只需要主设备号和设备名就行 
}

/*7 module_exit修饰出口函数*/
module_exit(first_drv_exit<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值