操作系统课程设计和实验
来源:互联网 发布:数据库日志恢复 编辑:程序博客网 时间:2024/05/16 00:46
用户进程并不能直接调用系统调用,而是通过终端向量表实现.,假设新的系统调用叫myservice1, 编辑linux/arch/i386/kernel/entry.s .dataENTRY(sys_call_table) .long SYMBOL_NAME(sys_ni_call) /* 0 */ .long SYMBOL_NAME(sys_exit) .long SYMBOL_NAME(sys_fork) ... .long SYMBOL_NAME(sys_vfork) /* 190 */.long SYMBOL_NAME(sys_myservice)/*191*/2, 生成stub这样一个普通用户程序可以可以调用你的系统调用. 编辑linux/include/asm/unistd.h/** This file contains the system call numbers.*/ #define __NR_exit 1 #define __NR_fork 2 ... #define __NR_vfork 190 添加: #define __NR_myservice 191 3.编写源文件目录linux/include/linux/ 存放独立于系统的调用目录linux/include/asm/存放特定依赖书具体系统的调用,比如同步方法-源文件放在linux/ipc(例如同步方法)或者linux/fs/(文件系统相关的)修改原文件目录下的makefile, 添加O_OBJS += ... myservice.o4, 系统调用源文件基础myservice.h:#ifndef __LINUX_MYSERVICE_H#define __LINUX_MYSERVICE_H#include <linux/unistd.h>#include <linux/linkage.h>_syscall2(int, myservice, int, arg1, char*, arg2);#endifmyservice.c:#include <linux/myservice.h>asmlinkage int sys_myservice (int arg1, char* arg2) {return(1);}myservice.h放置在linux/include/linux/下5,添加初始化函数,为的是系统可以使用剥夺式方法?在myservice.h:...#include <linux/init.h>...void __init myservice_init(void);在myservice.cvoid __init myservice_init(void) { /* initialize global variables used by myservice */}修改linux/init/main.c.../* Around line 89 */extern void myservice_init(void);.../* Around line 1352 within "asmlinkage void __init start_kernel(void)" */myservice_init();6. 基本的内核库函数收集到的一些信息: Fedora 9 kernel 2.6.26 (i686) 的 arch/x86/kernel/ 下砸syscall_table_32.S 变到了 Linux/arch/x86/syscalls/参考http://www.csee.umbc.edu/courses/undergraduate/CMSC421/fall02/burt/projects/howto_add_systemcall.htmlhttp://hekimian-williams.com/?p=20http://blog.techveda.org/index.php/adding-system-calls-linux-kernel-3-5-x/ //这个好像有操作命令中文的:http://www.verydemo.com/demo_c269_i1333.htmllinux的目录树http://lxr.free-electrons.com/source/fs/http://www.cnblogs.com/wang_yb/archive/2012/09/17/2688263.html
2013年4月13日8:39:35
研究了一番,发现内核是不会调用C库的.所以只好自己写了,但是就算是写好了,怎么在编译之前知道自己是不是对的呢.
参考<linux内核设计与实现>57页
怎么测试自己的内核程序,现在有两种方案,解决编译问题.
一种是:从用户空间调用系统调用.
一种是:把自己的程序当成一个模块挂载到内核.
现在我选择后一种进行探索:
参考点击打开链接
2013年5月29日19:34:23
要做实验;
在unix环境高级编程里面,开始讲tellwait模型的是在 竞争条件中.
原文说的是在10.16节说明信号的一种实现, 15-3 会讲到管道的的一种实现.
那么我采取信号的方式.线程同步讲的是互斥量
http://www.myexception.cn/linux-unix/1051856.html
第一版本,因为没有互相唤醒
- 操作系统课程设计和实验
- 操作系统进程实验课程设计
- 操作系统存储管理实验课程设计报告
- 操作系统课程设计实验3 -nachos-Synchronization Using Semaphores
- 操作系统课程设计
- 操作系统课程设计
- 操作系统课程设计
- 操作系统课程设计
- 操作系统课程设计
- 操作系统课程设计
- 操作系统课程设计
- 操作系统课程设计消费者和生产者问题源码解析
- 操作系统课程设计-线程和进程的同步与互斥
- 操作系统课程设计任务书
- 操作系统课程设计完成了
- 操作系统课程设计指导书
- 操作系统课程设计代码
- 计算机操作系统课程设计
- c++ 删除remove、重命名rename文件失败原因
- 今天的时间如行云流水的p2p种子搜索器下载
- vector,list,deque区别
- iframe下页面传参数为乱码
- 字符串用指针和数组的区别
- 操作系统课程设计和实验
- perl学习笔记
- linux下使用hash_map及STL总结
- 同时访问不同网段的主机
- 关于阶乘的几道智力题
- Linux 条件变量 pthread_cond_wait
- [哈尔滨工业大学LabWindows_CVI]实验学习一
- Codeforces Round #179 (Div. 2)——C
- Solution for Introduction to Algorithms (3rd Edition) Exercise 26.4-2