2022年操作系统-Linux课程实验报告.pdf
《2022年操作系统-Linux课程实验报告.pdf》由会员分享,可在线阅读,更多相关《2022年操作系统-Linux课程实验报告.pdf(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验、 Linux Ubuntu的安装、创建新的虚拟机VMWare实验 Shell编程1. 实验目的与内容通过本实验,了解Linux 系统的 shell机制,掌握简单的 shell编程技巧。编制简单的 Shell 程序,该程序在用户登录时自动执行,显示某些提示信息, 如“Welcome to Linux ”, 并在命令提示符中包含当前时间、当前目录和当前用户名等基本信息。2. 程序源代码清单#include#include int main()printf(Hello Linuxn);int pid;int state;int pfd2;pipe(pfd);if (fork()=0)print
2、f(In the grep progressn);dup2(pfd0,0);close(pfd0);close(pfd1);execlp(grep,grep,sh,0);perror(exelp grep error);esle if(fork()=0) printf(In the ps progressn);dup2(pfd1,1);close(pfd0);close(pfd1);execlp(ps,ps,-ef,0);perror(execlp ps -ef);精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - -
3、 -第 1 页,共 11 页 - - - - - - - - - - close(pfd1);close(pfd0);wait(&state);wait(&state);实验内核模块实验步骤 :(1). 编写内核模块文件中主要包含init_clock(),exit_clock(),read_clock()三个函数。其 中 init_clock(),exit_clock()负责将模块从系统中加载或卸载,以及增加或删除模块在 /proc 中的入口。 read_clock()负责产生 /proc/clock被读时的动作。(2). 编译内核模块 Makefile文件# Makefile under i
4、fneq ($(KERNELRELEASE),) #kbuild syntax. dependency relationshsip of files and target modules are listed here. obj-m := else PWD := $(shell pwd) KVER ?= $(shell uname -r) KDIR := /lib/modules/$(KVER)/build all: $(MAKE) -C $(KDIR) M=$(PWD) modules clean: rm -rf .*.cmd *.o *. *.ko .tmp_versions *.symv
5、ers *.order endif 编译完成之后生成模块文件。(3). 内核模块源代码#include #include #include #include #include #include #define MODULE #define MODULE_VERSION #define MODULE_NAME clock struct proc_dir_entry* my_clock; int read_clock(char* page, char* start, off_t off, int count, int* eof, void* data) int len; struct timeva
6、l xtime; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 11 页 - - - - - - - - - - do_gettimeofday(&xtime); len = sprintf(page, %d %dn, , ; printk(clock: read_func()n); return len; struct proc_dir_entry *clock_proc_file; int init_clock(void) clock_proc_file =create_proc_rea
7、d_entry(clock,0,NULL,read_clock,NULL); return 0; void exit_clock(void) remove_proc_entry(clock,clock_proc_file); module_init(init_clock) module_exit(exit_clock) MODULE_LICENSE(GPL);(4). 编译内核模块# make (5). 加载内核模块在系统 root 用户下运行用户态模块命令装载内核模块# insmod (6). 测试在终端中输入以下命令: cat /proc/clock (7). 卸载内核模块在系统 root
8、 用户下运行用户态模块命令卸载内核模块#rmmod 实验系统调用实验步骤 :(1). 添加新调用的源代码在./ 中添加相应的调用代码asmlinkage int sys_xwlcall(struct timeval *tv) struct timeval ktv; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 11 页 - - - - - - - - - - do_gettimeofday(&ktv); copy_to_user(tv,&ktv,sizeof(ktv); printk(KER
9、N_ALERTPID %ld called sys_xwlcall()./n,(long)current-pid); return 0; (2). 连接系统调用a、修改 ./ ,在系统调用列表后面相应位置添加一行,这样在用户空间做系统调用时就不需要知道系统调用号了, 如果在用户空间指明了调用号,就可以省略这一步, 实际上我就没写:#define _NR_xwlcall338 新增加的调用号位338 b、修改 ./ 在 ENTRY(sys_call_table)清单最后添加一行,这步至关重要,338就是这里来的:.long sys_xwlcall (3). 重建新的 Linux 内核先安装好编译
10、内核必要的软件包:# sudo apt-get install build-essential kernel-package libncurses5-dev 复制当前内核的配置文件# cp /boot/config-uname -r ./.config 保存配置文件# sudo make menuconfig 使用 debian 的的内核编译方法,要简单很多# sudo make-kpkg-initrd-initrd-append-to-version=xwlcallkernel_image kernel-headers 运行以下 deb 包,安装内核镜像和模块:运行以下 deb 包,安装内核
11、头文件:运行以下命令,使内核启动时能调用模块,比如硬件驱动:# sudo update-initramfs -c -k 此次编译的内核采用ubuntu 默认配置文件,通用性非常好,可以拷贝到大部分x86 机器上安装。安装后系统自动会修改grub启动选单。4. 重建引导信息 a 、安装 deb包就自动重建引导信息了,无须另行处理。 b 、如果仍然不放心,可以运行# update-grub5. 重新引导从新的内核进入精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 11 页 - - - - - -
12、- - - - 6. 修改系统调用表7. 测试实验 Shell编程实验(进程管理实验)1、实验目的通过编写 shell程序,了解子进程的创建和父进程与子进程间的协同,获得多进程程序的编程经验。2、实验内容 1设计一个简单的 shell解释程序,能实现基本的bsh 功能。3、实验原理将每一条命令分子段压入argv 栈。然后再子进程中调用execvp() 来实现该命令的功能。4、代码(源代码清单)#include #include #include #define BUFFERSIZE 256 n,buf);计思路通过 fork ()创建子进程,用execvp()更改子进程代码,用wait ()等
13、待子进程结束。这三个系统调用可以很好地创建多进程。另一方面,编写的Shell要实现管道功能,需要用pipe ()创建管道使子进程进行通信。2. 源代码清单#include #include #include #include #define BUFFERSIZE256 n); exit(1); n=0; n); exit(1); n=0; argv2n+=cmd2; while(argv2n+=strtok(NULL, tn); pipe(fd); if(fork()=0) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - -
14、- - - -第 5 页,共 11 页 - - - - - - - - - - dup2(fd0,0); 验步骤(1) 、安装 GDB (2) 、编写观测程序(3) 、按照指令手册进行观察操作2. 观测程序源代码#include #include char str50 = Hello Linux.; int main() int num = 10; while(num-) printf(%sn,str); 验结果及分析(1).Gdb 程序观察一个程序文件的内容和结构结果截图:(2).GDB 观察程序内存映象的内容和结构(3). 在 Linux 下,用 free 和 vmstat 命令观察内存使
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 操作系统 Linux 课程 实验 报告
限制150内