linux多线程实验报告

linux多线程实验报告
linux多线程实验报告

1

实验八 Linux 多线程实验

报告撰写人

专业班级

学号 姓名 完成时间

。。。 。。。。 。

。。。

一、 实验目的

1、 了解什么是多线程,熟悉LINUX 的多线程机制;

2、 掌握利用信号处理Linux 多线程的同步问题; 3

、 掌握利用信号量处理Linux 多线程的互斥问题;

4、 运用Linux 多线程的同步机制和互斥机制实现生产者消费者的编程。

二、 实验内容

1. “生产者-消费者”问题如下:有一个有限缓冲区和两个线程:生产者和消费者。他们分别不停地把产品放入缓冲区、从缓冲区中拿走产品。一个生产者在缓冲区满的时候必须等待,一个消费者在缓冲区空的时候也必须等待。另外,因为缓冲区是临界资源,所以生产者和消费者之间必须互斥执行。它们之间的关系如图1所示。现在要求使用共享内存来模拟有限缓冲区,并且使用信号量来解决“生产者-消费者”问题中的同步和互斥问题。

生产者和消费者问题描述

2. 问题描述:假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只餐叉。因为用一只餐叉很难吃到意大利面,所以假设哲学家必须用两只餐叉吃东西。他们只能使用自己左右手边的那两只餐叉。请用Linux 线程编程解决。

2 哲学家进餐问题示意图

三、实验过程与结果

操作过程错误解决

方法

实验步骤一:

编写的文件

在不

同的编译

2

1器中for

循环的用

法不太一

样,在这

里最好不

要使用

for(int

i=0;;)

最好

在外声明

int i在

for循环

里直接写

i=0

步骤二:

编译代码并且运行代码

步骤三:

运行完毕后,显示以下代码:

生产者消费者先后生产数据以及取出数据,此程序中设置了两个消费者两个生产

者,交替进行生产数据消费数据。

3

4

实验

步骤一:

编写的文件

2

步骤二:

编译代码并且运行代码

步骤三:

5

实验

码实验一:

#include <>

#include <>

#include <>

#include <>

#include

#include

#include

#include

#define MAX_BUFFER_SIZE 10

6

#define SHM_MODE 0600

#define SEM_MODE 0600

#define SEM_FULL 0

#define SEM_EMPTY 1

#define MUTEX 2

/*

#if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)

\n", i + 1, c);

printf("-------------------------------------------------------------\ n");

fflush(stdout);

sigSem(sem_id, MUTEX);

sigSem(sem_id, SEM_FULL);

}

\n", i + 1, lt);

printf("-------------------------------------------------------------\ n");

fflush(stdout);

sigSem(sem_id,MUTEX);

sigSem(sem_id,SEM_EMPTY);

}

//将共享段与进程之间解除连接

shmdt(shmptr);

exit(0);

}

}

//主进程最后退出

7

while (wait(0) != -1);

//将共享段与进程之间解除连接

shmdt(shmptr);

//对共享内存区执行控制操作

shmctl(shm_id,IPC_RMID,0);//当cmd为IPC_RMID时,删除该共享段shmctl(sem_id,IPC_RMID,0);

printf("主进程运行结束!\n");

fflush(stdout);

exit(0);

return 0;

}

实验二:

#include

#include<>

#include<>

#include<>

#include<>

#include<>

#include<>

#define N 5 //哲学家数量

#define LEFT(i) (i+N-1)%N //左手边哲学家编号

#define RIGHT(i) (i+1)%N //右手边哲家编号

#define HUNGRY 0 //饥饿

#define THINKING 1 //思考

#define EATING 2 //吃饭

8

#define U_SECOND 1000000 //1秒对应的微秒数

pthread_mutex_t mutex; //互斥量

int state[N]; //记录每个哲学家状态

//每个哲学家的思考时间,吃饭时间,思考开始时间,吃饭开始时间

clock_t thinking_time[N], eating_time[N], start_eating_time[N], start_thinking_time[N];

//线程函数

void *thread_function(void *arg);

int main()

{

pthread_mutex_init(&mutex, NULL);

pthread_t a,b,c,d,e;

//为每一个哲学家开启一个线程,传递哲学家编号

pthread_create(&a,NULL,thread_function,"0");

pthread_create(&b,NULL,thread_function,"1");

pthread_create(&c,NULL,thread_function,"2");

pthread_create(&d,NULL,thread_function,"3");

pthread_create(&e,NULL,thread_function,"4");

//初始化随机数种子

srand((unsigned int)(time(NULL)));

while(1)

{

;

}

}

9

void *thread_function(void *arg)

{

char *a = (char *)arg;

int num = a[0] - '0'; //根据传递参数获取哲学家编号

int rand_time;

while(1)

{

//关键代码加锁

pthread_mutex_lock(&mutex);

//如果该哲学家处于饥饿并且左右两位哲学家都没有在吃饭就拿起叉子吃饭

if(state[num] == HUNGRY && state[LEFT(num)] != EATING && state[RIGHT(num)] != EATING)

{

state[num] = EATING;

start_eating_time[num] = clock(); //记录开始吃饭时间

eating_time[num] = (rand() % 5 + 5) * U_SECOND; //随机生成吃饭时间

//输出状态

printf("state: %d %d %d %d %d\n",state[0],state[1],state[2],state[3],stat e[4]);

//printf("%d is eating\n",num);

}

else if(state[num] == EATING)

{

//吃饭时间已到,开始思考

if(clock() - start_eating_time[num] >= eating_time[num]) //

10

{

state[num] = THINKING;

//printf("%d is thinking\n",num);

printf("state: %d %d %d %d %d\n",state[0],state[1],state[2],state[3],stat e[4]);

start_thinking_time[num] = clock(); //记录开始思考时间

thinking_time[num] = (rand() % 10 + 10) * U_SECOND; //随机生成思考时间

}

}

else if(state[num] == THINKING)

{

//思考一定时间后,哲学家饿了,需要吃饭

if(clock() - start_thinking_time[num] >= thinking_time[num])

{

state[num] = HUNGRY;

printf("state: %d %d %d %d %d\n",state[0],state[1],state[2],state[3],stat e[4]);

// printf("%d is hungry\n",num);

}

}

pthread_mutex_unlock(&mutex);

}

}

11

四、实验小结

生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。

1) 关系分析。生产者和消费者对缓冲区互斥访问是互斥关系,同时生产者和消费者又是一个相互协作的关系,只有生产者生产之后,消费者才能消费,他们也是同步关系。

2) 整理思路。这里比较简单,只有生产者和消费者两个进程,正好是这两个进程存在着互斥关系和同步关系。那么需要解决的是互斥和同步PV操作的位置。

3) 信号量设置。信号量mutex作为互斥信号量,它用于控制互斥访问缓冲池,互斥信号量初值为1;信号量full用于记录当前缓冲池中“满”缓冲区数,初值为0。信号量empty 用于记录当前缓冲池中“空”缓冲区数,初值为n。

12

嵌入式实验报告

计算机专业类课程 实 验 报 告 课程名称:嵌入式微处理器系统及应用学院:计算机科学与工程 专业:计算机科学与技术 学生姓名:廖雪平 学号:2011060120003 指导教师:陈丽蓉 日期:2014年5月15日 电子科技大学计算机学院实验中心

电子科技大学 实验报告 实验一 实验名称:熟悉嵌入式系统软件开发工具与环境 一、实验学时:4 二、实验内容和目的: AR熟悉嵌入式系统软件开发工具与环境 M处理器指令编程基础实验 ARM处理器工作模式实验 ARM处理器异常处理实验 编写2段汇编程序,一段实现数据区的拷贝,另一段实现对第一个程序的调用,完成参数传递和返回值的传递。数据拷贝程序需要判断传递参数的正确性:源数据区和目的数据区不能重叠,如果重叠则不进行拷贝操作,并返回错误码(1),否则进行数据拷贝并返回成功码(0)。 三、实验原理: M处理器指令编程基础。 ARM处理器工作模式 ARM处理器异常处理 四、实验器材(设备、元器件) Pc机、开发板 五、实验步骤 1、了解并连接开发板。 2、运行程序熟悉环境并对开发板进行测试。 3、编写程序并调试运行 4、完成实验内容。 5、调试并撰写实验报告。 六、实验数据及结果分析: 实验代码:

实验截图: 电子科技大学计算机学院实验中心

七、实验结论、心得体会和改进建议: 实验本身不会很难,但初次开发还是不太熟练,不过本实验让我更加熟练了ARM汇编的开发,以及熟悉了ARM的开发流程以及开发环境 电子科技大学计算机学院实验中心

电子科技大学 实验报告 实验二 一、实验名称:UART串口通讯实验 二、实验学时:4 三、实验内容和目的: 1)在已有串口驱动软件及测试程序的基础上,修改测试程序,尝试对串口的各项通讯参数进行修改,并调整相应的与主机的连接配置,以便修改参数后的串口仍然 能够正常通讯; 2)通过查阅芯片手册,尝试自行实现串口的初始化函数,替代已有驱动软件库中的串口初始化函数,并通过测试程序验证自行编写的函数的正确性。 四、实验原理:UART串口通讯原理 五、实验器材(设备、元器件) pc、开发板、相关环境 六、实验步骤: 1、了解实验内容 2、修改测试程序调整连接配置以便修改参数后的串口仍然能够正常通讯 2、编写实验代码 3、测试验证自行编写的函数的正确性。 七、实验数据及结果分析: 实验代码:

操作系统-Linux课程实验报告材料

实验1.1、1.2 Linux Ubuntu的安装、创建新的虚拟机VMWare

实验1.3 Shell编程 1.实验目的与内容 通过本实验,了解Linux系统的shell机制,掌握简单的shell编程技巧。 编制简单的Shell程序,该程序在用户登录时自动执行,显示某些提示信息,如“Welcome to Linux”, 并在命令提示符中包含当前时间、当前目录和当前用户名等基本信息。 2.程序源代码清单 #include #include int main(){ printf("Hello Linux\n"); int pid; int state; int pfd[2]; pipe(pfd); if (fork()==0){ printf("In the grep progress\n"); dup2(pfd[0],0); close(pfd[0]); close(pfd[1]); execlp("grep","grep","sh",0); perror("exelp grep error");

} esle if(fork()==0){ printf("In the ps progress\n"); dup2(pfd[1],1); close(pfd[0]); close(pfd[1]); execlp("ps","ps","-ef",0); perror("execlp ps -ef"); } close(pfd[1]); close(pfd[0]); wait(&state); wait(&state); } 实验2.3 内核模块 实验步骤: (1).编写内核模块 文件中主要包含init_clock(),exit_clock(),read_clock()三个函数。其中init_clock(),exit_clock()负责将模块从系统中加载或卸载,以及增加或删除模块在/proc中的入口。read_clock()负责产生/proc/clock被读时的动作。(2).编译内核模块Makefile文件 # Makefile under 2.6.25

LINUX实验报告

实验报告 ( 2014/ 2015 学年第一学期) 课程名称操作系统A 实验名称文件系统 实验时间2014 年12 月8 日指导单位计算机学院计算机科学与技术系 指导教师徐鹤 学生姓名王生荣班级学号B12040809 学院(系) 计算机学院专业软件工程

实验名称文件系统指导教师徐鹤 实验类型设计实验学时 2 实验时间2014.12.08 一、实验目的和要求 1. 学习LINUX系统下对文件进行操作的各种命令和图形化界面的使用方法。 2. 深入学习和掌握文件管理系统的基本原理和LINUX等操作系统下常用的系统调用,编写一个使用系统调用的例程。 3.实现一个文本文件的某信息的插入和删除 4.实现一个记录文件的某记录的插入和删除 二、实验环境(实验设备) Windows XP + VMWare + RedHat Linux 8

三、实验过程描述与结果分析 1. 目录/proc下与系统相关的文件和目录 (1) /proc/$pid/fd:这是一个目录,该进程($PID号码进程)每个打开的文件在该目录下有一个对应的文件。 例如:#ls /proc/851/fd 0 1 2 255 这表示,851号进程目前正在使用(已经打开的)文件有4个,它们的描述符分别是0、1、2、255。其中,0、1、2 依次分别是进程的标准输入、标准输出和标准错误输出设备。 (2)/proc/filesystems:该文件记录了可用的文件系统类型。 (3)/proc/mounts:该记录了当前被安装的文件系统信息 例如:#cat /proc/mount (4)/proc/$pid/maps:该文件记录了进程的映射内存区信息。 例如:#cat /proc/851/maps 2.常用命令讲解 ls 命令 用来查看用户有执行权限的任意目录中的文件列表,该命令有许多有趣的选项。例如: $ ls -liah * 22684 -rw-r--r-- 1 bluher users 952 Dec 28 18:43 .profile

浙工大 嵌入式实验报告

金艳霞通信2班201203110210 实验五Linux交叉编译平台 一、实验目的 1.掌握一些基本的linux读写操作 2.利用vcc编译c程序 3.通过nfs挂载到实验箱中,利用交叉编译执行文件 二.实验设备 1.Arm9试验箱 2.Pc机 3.Linux系统服务器 三.实验过程及实验结果 1.连接电脑箱 2.设置交叉编译环境 启动putty.exe 登陆192.168.1.116 3.添加软件包至实验目录: ①[shiyan@localhost ~]$ cd /home/shiyan ②[shiyan@localhost ~]$ tar –zxvf arm-linux-gcc-3.4.4-glib-2.3.5-static.tar.gz tar -zxvf arm-linux-gcc-3.4.4-glib-2.3.5-static.tar.gz ③[shiyan@localhost201203110210] $export PATH=$PATH:/home/shiyan/201203110210/opt/crosstool/arm-linux/gcc-3.4.4-glib-2. 3.5/arm-linux/bin ④[shiyan@localhost 201203110210]$ set OSTYPE=linux-gnu PATH=/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/shiya n/bin:/home/shiyan/opt/crosstool/arm-linux/gcc-3.4.4-glibc-2.3.5/arm-linux/bin:/ho me/shiyan/opt/crosstool/arm-linux/gcc-3.4.4-glibc-2.3.5/arm-linux/bin:/home/shiyan /opt/crosstool/arm-linux/gcc-3.4.4-glibc-2.3.5/arm-linux/bin 可以看出路径已添加 ⑤[shiyan@localhost 201203110210]$ arm-linux-g再按tab arm-linux-g++ arm-linux-gcc arm-linux-gcc-3.4.4 arm-linux-gccbug arm-linux-gcov ⑥[shiyan@localhost 201203110210]$ arm-linux-gcc arm-linux-gcc: no input files 此时出错,无此文件 3.测试程序 ①创建hello.c [shiyan@localhost ~]$ vi hello.c

Linux文件系统实验报告

黄冈师学院 提高型实验报告 实验课题文件系统的设计与实现(实验类型:□综合性 设计性□应用性) 实验课程操作系统原理 实验时间2015-2016 第二学期 学生何正发 专业班级软件工程1401 学号07

成绩: 一、实验目的和要求 1、熟悉操作系统设计的过程,巩固操作系统的基本知识,加深对操作原理、功能及各种不同的存储管理方法理解与应用; 2、学会运用各种语言、软件开发新软件的基本方法; 3、增强实际应用能力和动手操作能力。 二、实验条件 Win7 /Windows 8.1/Linux等操作系统,装有java、C、C++、C#等语言工具的环境。 三、实验原理分析 可以选择最佳适应算法,按照从小到大的次序组成空闲区自由链,当用户作业或进程申请一个空闲区时,存储管理 程序从表头开始查找,当找到第一个満足要求的空闲区时,停止查找。如果该空闲区大于请求表中的请求长 度,将减去请求长度后的剩余空闲区部分留在可用表中。回收时,从作链中删去要回收的作业块,同时在空 闲链中插入该作业大小的空闲区,并按顺序排列 四、实验方案或步骤 1、应用环境、需求分析 本模拟系统主要针对文件的管理和操作名主要有:创建用户、文件、文件夹,读文件,写文件,执行文件,关闭文件,删除用户、文件夹、文件的功能。 创建用户、文件、文件夹:在对系统发出操作命令之前必须先登录用户,然而登录之前必须创建该用户。在创建完后,可通过登录用户来创建文件和文件夹。在创建文件时可设置文件的属性和输入文件的容。 读文件:读取任何已创建的只读或读写文件的容;如果所要读的文件不是可读文件时,系统会显示该文件不可读;如果所读文件不存在,系统会显示文件不存在。 写文件用户可写或重写读写文件中的容,并保存文件中的重写容,以供下次读取;当所要写的文件不是可写的文件时,系统会显示该文件不可写;当所要写的文件并不存在时,系统会显示该文件不存在。

2《Linux基础》实验报告 基本配置Linux

实验序号: 2 《Linux基础》 实验报告 实验名称:基本配置Linux操作系统 姓名: 学院:计算机学院 专业: 班级: 学号: 指导教师: 实验地址:N6-113 实验日期:2017.3.7

说明 一.排版要求 1.实验报告“文件名”按模板要求填写。 2.一级标题:顶格排版。汉字用宋体,阿拉伯数字用Times New Roman字 体,四号字体,加粗。 3.二级标题:顶格排版。汉字用宋体,阿拉伯数字用Times New Roman字 体,小四号字体,加粗。 4.三级标题:顶格排版。汉字用宋体,阿拉伯数字用Times New Roman字 体,五号字体。 5.正文:每段缩进量:2个汉字。两端对齐;汉字用宋体,阿拉伯数字用 Times New Roman字体,五号字体。 6.图形要求 (1)在正文中要有引用。 (2)要有图名,图名位于图的下方,汉字用宋体,阿拉伯数字用Times New Roman字体,五号字体。 (3)图和图名“居中”。 7.表格要求 (1)在正文中要有引用。 (2)要有表名,表名位于表的上方,汉字用宋体,阿拉伯数字用Times New Roman字体,五号字体。 (3)表和表名“居中”。 二.注意事项 1.复制、拷贝、抄袭者取消成绩。 2.没有安实验报告排版要求者不及格。

实验2基本配置Linux操作系统实验 【实验目的】 1.。。。。 2.。。。。 3.。。。。 4.思考: (1)Linux默认的系统超级管理员帐户是什么? (2)Linux的操作系统引导器是什么?它有哪几种的操作界面? (3)RHEL的支持哪几种X-Window图形管理器?默认是使用哪一种?(4)RHEL支持哪几种Shell?默认是使用哪一种? 【实验原理】 1.。。。 。。。 2.。。。 。。。 (1)。。。 。。。 (2)。。。 。。。 3.。。 【实验环境】 1.实验配置 本实验所需的软硬件配置如表1所示。 表1 实验配置 本实验的环境如图1所示。

嵌入式系统 实验报告 南邮

实验报告 ( 2011 / 2012 学年第二学期) 课程名称ARM嵌入式系统原理与开发 实验名称嵌入式Linux交叉开发环境建立与程序开发实验时间2012 年 6 月21 日指导单位计算机学院 指导教师王诚 学生姓名颜泽鑫班级学号B09011027 学院(系) 通信与信息工程专业电子信息工程

实验一、熟悉Linux开发环境 实验目的: 熟悉Linux开发环境,学会基于S3C2410的Linux开发环境的配置和使用,学习使用Linux操作系统的常用命令。使用Linux的armv4l-unknown-linux-gcc编译,使用基于NFS方式的下载调试,了解嵌入式开发的基本过程。 实验内容与要求: 使用Redhat Linux 9.0操作系统环境,安装ARM-Linux的开发库及编译器。创建一个新目录,并在其中编写hello.c和Makefile文件。学习在Linux下的编程和编译过程,以及ARM开发板的使用和开发环境的设置。下载已经编译好的文件到目标开发板上运行。 学会集成环境的安装与开发。 实验设备及工具(包括软件调试工具): 硬件:UP-NETARM2410-S嵌入式实验平台、PC机Pentium 500以上, 硬盘10GB以上。 软件:PC机操作系统REDHAT LINUX 9.0+MINICOM+ARM-LINUX开发环境。 实验过程: 运行PC机上的Linux系统,进入系统后,建立工作目录,所用语句如下:[root@zxt smile]# mkdir hello [root@zxt smile]# cd hello 编写的hello.c如下: #include main() { printf(“hello world \n”); } 要使上面的hello.c程序能够运行,必须要编写一个Makefile文件,Makefile 文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。 本次实验所用的Makefile文件如下: CC= armv4l-unknown-linux-gcc EXEC = hello OBJS = hello.o CFLAGS +=

linux操作系统实验报告要点

LINUX操作系统实验报告 姓名 班级学号 指导教师 2011 年05月16 日 实验一在LINUX下获取帮助、Shell实用功能 实验目的: 1、掌握字符界面下关机及重启的命令。 2、掌握LINUX下获取帮助信息的命令:man、help。 3、掌握LINUX中Shell的实用功能,命令行自动补全,命令历史记录,命令的排列、替

换与别名,管道及输入输出重定向。 实验内容: 1、使用shutdown命令设定在30分钟之后关闭计算机。 2、使用命令“cat /etc/cron.daliy”设置为别名named,然后再取消别名。 3、使用echo命令和输出重定向创建文本文件/root/nn,内容是hello,然后再使用追加重定向输入内容为word。 4、使用管道方式分页显示/var目录下的内容。 5、使用cat显示文件/etc/passwd和/etc/shadow,只有正确显示第一个文件时才显示第二个文件。 实验步骤及结果: 1.用shutdown命令安全关闭系统,先开机在图形界面中右击鼠标选中新建终端选项中输入 命令Shutdown -h 30 2、使用命令alias将/etc/cron.daliy文件设置为别名named,左边是要设置的名称右边是要更改的文件。查看目录下的内容,只要在终端输入命令即可。取消更改的名称用命令unalias 命令:在命令后输入要取消的名称,再输入名称。 3.输入命令将文件内容HELLO重定向创建文本文件/root/nn,然后用然后再使用追加重定向输入内容为word。步骤与输入内容HELLO一样,然后用命令显示文件的全部内容。 4.使用命令ls /etc显示/etc目录下的内容,命令是分页显示。“|”是管道符号,它可以将多个命令输出信息当作某个命令的输入。

嵌入式实验报告

中国地质大学(北京) 实验报告 课程名称:嵌入式系统 实验名称:嵌入式 Linux Socket编程 姓名:程维安 学号: 1010122231 班级: 10101222 指导教师:曾卫华 评分: 实验时间:二零一六年四月

实验题目:嵌入式Linux Socket编程 一、实验目的 通过实验熟悉Linux环境,掌握Linux串口和网络应用程序开发。学会串口的设置,串口数据收发处理,阻塞型I/O和非阻塞型I/O,SOCKET套接字,多线程编程基础,Server和Client端程序设计。 二、实验内容和步骤 1.4.4.3交叉编译工具的PATH已经生效,在任意目录下能够执行arm-linux-gcc –v; 2.nfs网络文件系统的配置: ○1打开nfs1175.exe; ○2配置板子ip,使其和电脑ip在同一个网段(使用命令ifconfig eth0 115.25.74.176 netmask 255.255.255.0); ○3挂载:在板子上运行 #mount -t nfs -o nolock 115.25.74.175:/d/share_vm /mnt/nfs ○4使用 cd /mnt/nfs 进入nfs共享目录,ls 显示共享目录下的文件; 3.仔细阅读提供的代码server.c和client.c Target为服务器,Ubuntu为客户端; 4.交叉编译server.c、本地编译client.c(因为用到多线程编程,在编译语句后面加上 -lpthread); 5.在板子上运行server可执行文件:#cd /mnt/nfs#ls -l server 看看前面的字串里面有没有“x”, 如没有则表明没有可执行的权限,需要用命令加入server的执行权限:#chmod 777 server,运行server 代码 #./server; 6.在ubuntu上运行client程序:#./client 115.25.74.176; 7.观察服务器端和客户端的提示信息。 三、程序流程框图和源码 1.流式套接字工作过程,如图1所示

操作系统-Linux课程实验报告

实验 1.1、1.2 Linux Ubuntu的安装、创建新的虚拟机VMWare

实验1.3 Shell编程 1.实验目的与容 通过本实验,了解Linux系统的shell机制,掌握简单的shell编程技巧。 编制简单的Shell程序,该程序在用户登录时自动执行,显示某些提示信息,如“Welcome to Linux”, 并在命令提示符中包含当前时间、当前目录和当前用户名等基本信息。 2.程序源代码清单 #include #include int main(){ printf("Hello Linux\n"); int pid; int state; int pfd[2]; pipe(pfd); if (fork()==0){ printf("In the grep progress\n"); dup2(pfd[0],0); close(pfd[0]); close(pfd[1]); execlp("grep","grep","sh",0); perror("exelp grep error");

} esle if(fork()==0){ printf("In the ps progress\n"); dup2(pfd[1],1); close(pfd[0]); close(pfd[1]); execlp("ps","ps","-ef",0); perror("execlp ps -ef"); } close(pfd[1]); close(pfd[0]); wait(&state); wait(&state); } 实验2.3 核模块 实验步骤: (1).编写核模块 文件中主要包含init_clock(),exit_clock(),read_clock()三个函数。其中init_clock(),exit_clock()负责将模块从系统中加载或卸载,以及增加或删除模块在/proc中的入口。read_clock()负责产生/proc/clock被读时的动作。 (2).编译核模块Makefile文件 # Makefile under 2.6.25

linux实验报告

实验一 实验名称:Linux 基本命令的使用 实验时间:2学时 实验目的:熟练使用Linux字符界面、窗口系统的常用命令。 实验内容 (一)Linux操作基础 1.重新启动linux或关机(poweroff,shutdown,reboot,init 0,init 6) 2.显示系统信息(uname),显示系统日期与时间,查看2014年日历(date,cal) ①uname:查看系统与内核相关信息 uname -asrmpi 参数: -a :所有系统相关的信息; -s: 系统内核名称; -r: 内核的版本; -m:本系统的硬件名称,如i686或x86_64; -p: CPU的类型,与-m类似,只是显示的是CPU的类型; -i :硬件的平台(ix86). ②date:显示日期的命令 ③cal:显示日历 单独cal:列出当前月份的日历 cal 2014:列出2014年的日历 cal 5 2014:列出2014年五月的目录 3.使用帮助命令(man,help) ①man:是manual(操作说明)的简写,是在线帮助系统 man后跟某个命令就会详细说明此命令,例如:man man就会详细说明man 这个命令的用法; ②help:也是帮助命令,一般会在命令后,例如:cd --help 就会列出cd命令的使用说明。 4.查看当前登陆用户列表(who),显示当前用户(whoami) ①who:显示目前已登录在系统上面的用户信息; ②whoami:查询当前系统账户 5.建立一个新用户mytest,设定密码(useradd,passwd) ①useradd mytest(建立新用户mytest);

嵌入式实验报告

《嵌入式系统导论》实验报告 学院: 学号: 姓名: 上海工程技术大学 电子电气工程学院

实验一 GPIO(按键和LED)实验 一、实验要求 1 、掌握基于STM32F103微控制器的嵌入式系统、仿真器和开发用PC机之间的连接方法,能够搭建基于STM32F103微控制器的嵌入式系统交叉开发环境。 2 、熟悉常用的嵌入式开发工具KEIL MDK或IAR EWARM的操作环境和基本功能(包括编辑、编译、链接、调试和下载等),学会创建、配置和管理STM32工程,掌握嵌入式程序的基本调试方法,学会使用逻辑分析仪窗口和外设窗口等信息窗口调试嵌入式程序。 3 、理解LED和按键的构件原理,学会设计它们与微控制器间的接口电路 4 、掌握STM32F103微控制器GPIO的工作原理,熟悉STM32的GPIO库函数 5 、学会使用STM32的GPIO库函数在KEIL MDK或IAR EWARM下开发基于LED和按键的简单嵌入式应用程序 二、实验环境 1 、硬件: ALIENTEK STM32F103嵌入式开发板 2 、软件: KEIL MDK或IAR EWARM 三、实验内容 1 、流水灯实验一: 在KEIL MDK或IAR EWARM 中建立STM32工程,并使用GPIO库函数和延时循环设计基于无限循环架构的嵌入式应用程序,使开发板上的红色LED以一定周期闪烁。 采用软件仿真的方式调试程序,通过“Logic Analyzer”,观察程序模拟运行时连接红色LED的引脚PA8上的输出波形。 采用硬件下载的方式调试程序,观察程序下载硬件运行时红色LED的闪烁情况。 2 、按键控制LED实验: 在KEIL MDK或IAR EWARM 中建立STM32工程,并使用GPIO库函数设计基于无限循环架构的嵌入式应用程序,实现以下功能:当按键KEY0按下时,目标板上红色LED点亮;当按键KEY0释放时,目标板上红色LED熄灭。 采用软件仿真的方式调试程序,通过“Logic Analyzer”和“Peripherals→GPIOC”,观察程序模拟运行时连接红色LED的引脚PA8和连接按键KEY0的PC5上的输出波形。 采用硬件下载的方式调试程序,观察程序下载硬件运行时按键KEY0按下和释放时红色LED的点亮和熄灭情况。 四、硬件设计 1 、发光二极管(红色LED)、按键(KEY0)与嵌入式微控制器(STM32F103)的接口电路

Linux常用命令实验报告

实验二 姓名:陈辉龙学号:201407010201 班级:14计科(1)一.实验目的: 掌握Linux常见命令,为今后的实验打下良好的基础。 二.实验内容 1.新建用户为chenhuilong,配置密码为passwd: 2.切换到chenhuilong用户,并在/home/chenhuilong目录下新建文件夹dir: 3.在文件夹dir下新建文件hello(内容为"printf hello world!"),并将其拷贝至/home/user目录: 4.统计/home/user目录下文件的个数,包括子目录里的首字符为-的普通文件:

5.统计/home下目录的个数,包括子目录里的目录: 6.显示/home/user目录下名为hello的文件的行数、字数以及字符数(使用输入重定向): 7.将上步的结果输出重定向到名为cnt_hello的文件: 8.删除/home/user目录下的hello文件: 9.进入/home/user/dir文件夹,将hello文件属性变为-rwxrw-r--(使用符号标记方式),并为hello文件在/home/user目录下建立软链接,链接文件名为link_hello:

10.查看/home/user/dir/hello文件的详细信息: 11.切换至根目录下查找hello文件: 12.打包home/user/dir/hello文件,并进行压缩,然后再进行解压缩解包: 13.退出user用户,删除/home/user文件夹:

14.将文件夹/home的所有者改为user用户,并删除user用户: 三.实验总结: 本实验旨在熟悉Unix的常用命令,实验较简单,操作起来还算顺利,做了一遍感觉还不是很熟悉,因此做了两遍,第二遍就很得心顺手。通过这次实验,熟悉了一些常用的命令操作,为以后的学习打下坚实的基础,提高自己的动手能力。

江苏科技大学嵌入式实验报告

实验一熟悉嵌入式系统开发环境 一、实验目的: 1.熟悉嵌入式系统硬件实验平台 2.掌握超级终端配置方法。 3. 掌握嵌入式系统开发环境配置,ARM-Linux下NFS服务器的配置方法 4. 掌握常用的 Linux下shell命令 二、实验设备及工具: 硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。 软件:PC机操作系统REDHAT LINUX 9.0 、MINICOM 、AMRLINUX开发环境 三、实验内容 : (1)掌握嵌入式系统实验平台上的各类借接口的位置; (2)配置windows的超级终端,熟悉vivi的命令行,bootload、kernel、root 和用户程序的介绍; (3)配置linux的终端,配置网络服、Ip地址,开发目录共享,挂载等。 四、实验步骤: 1.掌握嵌入式系统实验平台上的各类接口的位置 UP-TECH S2410/P270 DVP 的硬件配置如表 1.2.1 所示 实物如图 1.2.1 所示:

2.配置windows的超级终端,熟悉vivi的命令行,bootload、kernel、root 和用户程序的介绍; 1)配置windows的超级终端: a)用串口线将 PC 机与 ARM 开发板连接好后,将 UP-TECH S2410、P270 DVP 开发板 开机,然后点击 PC 机上的开始“菜单”然后找到“附件”中“通讯”选项中的“超级终端”, b)然后在超级终端里进行配置,在“名称”中输入要建立的超级终端的名字。 c)在“连接时使用”一栏选择可用的串口号,(这里根据自己的实际情况进行选择)。 d)在“每秒位数”中选择“115200”,“数据流控制”选择“无”,然后点击“确定”按 钮,设置完毕。 2)学习并掌握如下命令: ls,cd ,pwd,cat,more,less,mkdir,rmdir ,rm,mv,cp,tar,ifconfig 3. Linux下minicom的使用与程序挂载 a)打开虚拟机,启动linux; b)新建终端,输入minicom来启动实验箱;

Linux课程综合训练实验报告

Linux课程综合训练实验报告 姓名:柳晓阳 班级:软件94班 学号:09161071

一.实验目的 熟练掌握Linux操作系统的使用,掌握Linux的各项系统管理功能,掌握Linux下各类网络服务的安装、配置以及使用,并能用shell脚本实现简单的管理任务。 二.实验内容 (1)准备工作:利用虚拟机安装Linux操作系统,要求对 /home目录单独分区,在系统中安装适当的软件包以备后续的实验需要,可关闭防火墙和SeLinux。完成安装后将/root中的anaconda-ks.cfg 文件的内容附到报告中。(5分) 实现过程:首先安装虚拟机VMware,然后在虚拟机里新建一个虚拟机,利用老师的光盘Fedora-10-i386-DVD.iso安装Linux操作系统,因为题目要求对/home目录单独分区,所以在安装时有个分区选项,默认是不打勾的,打勾后按下一步,会有个分区,在下拉列表框中选出/home,然后设置它的大小,默认是200mb的大小,我设置为5000mb。在安装的最后新建了一个非管理员用户gui,密码123456,用于平时的登录。 附:anaconda-ks.cfg文件的内容

关闭selinux需要修改/etc/selinux/config文件中的SELINUX="" 为disabled ,然后重启。Linux关闭防火墙用chkconfig iptables off 命令。

(2)题目1: 查看Linux系统磁盘空间的使用情况(给出显示结果)(3分) 在命令行新建几个用户,如tux,tom,lily等,给每个用户创建密码,测试各个用户是否创建成功。(2分) 并为/home分区创建磁盘配额,使得你所创建的每个用户的可用空间的软限制为100M,硬限制为150M,且每个用户可用的inodes的软限制为300,硬限制为400。试编写shell测试脚本验证你的磁盘配额设置。(10分) 实现过程:首先,查看Linux系统磁盘空间的使用情况用df这个命令。显示结果如下: 其次,新建几个用户和密码,所用的命令为useradd和passwd。比如说我们新建2个用户,一个为tux,密码为09161071;另一个为tom,密码为09161071。

实验一 Linux基本操作实验报告

实验一Linux基本操作 一.实验目的: 1. 二.实验环境: 虚拟机+Red Hat Enterprise Server 5.0 三.实验内容: 根据以下的文字提示,调用相应的命令来完成,记录相应的运行结果。一)用户和组基本操作 1.添加一个user01用户,家目录为/home/sub2,并设置密码 2.添加一个group1 组 3.将user01用户添加到group1组中 4.修改group1组名称为group2 5.修改user01的家目录为/home/user01 6.判断/etc/password这个目录是否包含user01这个用户 7.修改user01的shell为/bin/tcsh 8.添加一个group3组,把user01和root用户都添加到该组

https://www.360docs.net/doc/ec1587778.html,er01用户从group2组切换到group3组 10.设置user01的密码在2012-5-20过期 11.把/home/user01目录所属的组修改为group3 12.删除user01帐号 13.查看内核版本号 二)进程管理 1.运行cat命令:vi test,输入若干字符如this is a example,挂起vi进程 2.显示当前所有作业 3.将vi进程调度到前台运行

4.将vi进程调度到后台并分别用kill/pkill/killall命令结束该该进程。 三)磁盘管理 1.通过fdisk 将为硬盘增加一个分区(主分区或者逻辑分区)。 2.并格式化ext3系统,

3.检测分区是否有坏道 4.检测分区的完整性 5.加载分区到/mnt目录(或者其他分区)下,并拷贝一些文件到该目录下 6.(选做)为test用户设置磁盘配额(软限制和硬限制参数自行设定) 7.退出/mnt目录后卸载该分区 8.用du查看/usr目录的大小

Linux程序设计实验报告总结计划.docx

实验报告 课程名称:Linux程序设计 学院:信息科学与工程学院 专业:13计算机班级:2013-1姓名:学号: 2016年6月28日 山东科技大学教务处制 实验报告

组别姓名同组实验者 实验项目名称实验一熟悉linux命令实验日期教师评语第 12 周周四9,10 节 实验成绩指导教师廉文娟 1.登录和退出 Linux 系统 用户登录系统时为了使系统能够识别自己必须输入用户名和密码经系统验证无后 方能进入系统。用户登录分两步进行,第一步输入用户的登录名,系统根据该登录 名来识别用户,第二步输入用户的口令,该口令是用户自己选择的一个字符串对其 他用户是保密的,是在登录时系统用来辨别真假用户的关键字。 必须输入用户的账号,分为 1)root ——系统管理员账号,该账号可以进行任意操作。2)普通用户——拥有一定的权限 2.其他命令 三、实验内容 常用操作命令。 1、在 Linux 系统中打开终端,利用快捷键ctrl+alt+T,打开,结果如下: 2、退出: 不论是 root 用户还是普通用户,需要退出系统,在 shell 提示符下,键入 exit 命令 即可。 3、关机与重启: Linux 中提供了命令 shutdown,可以安全地关机或重启系统,该命令只能是超级用 户可以使用,命令格式: shutdown [ 选项 ][ 时间 ][ 警告信息 ] 其中警告信息是向其他用户发布的信息,时间指定关机或是重启的时间,选项的意 义如下: -h关机,关机前关闭相关进程,执行fsck 命令(文件系统的一致性检查) -r系统重新启动 -f快速关机,系统关机前不执行 fsck命令 -n快速关机,系统关机前不执行 init命令 -k不关机,只是将警告信息向其他用户发布 -c终止执行正在运行的 shutdown 命令 举例: 1.系统立即关机shutdown–h now 2.两分钟后重启系统,发布信息 System will be down in 2 minutes!给其他终端用户。 Shutdown – r +2“System will be down in 2 minutes!” 除了可以使用 shutdown 命令来关机和重启系统外, Linux 还有专门用于关机和重启系统的命令 poweroff 和 reboot ,reboot 用于重启系统(相当于 shutdown –r now),

Linux实验报告

Linux实验 一、实验目的 1. 了解Linux基本使用方法; 2. 掌握Linux基本设置方式; 3. 掌握Linux基本操作命令使用。 二、内容要求 1. 了解进程管理、文件管理与内存管理 2.掌握系统设置文件与命令 3. 熟练使用系统操作与维护命令 4. 熟练使用系统操作与维护命令 三、实验原理 Linux 系统常用命令格式: command [option] [argument1] [argument2] ... 其中option以“-”开始,多个option可用一个“-”连起来,如 “ls-l -a”与“ls-la”的效果是一样的。根据命令的不同,参数 分为可选的或必须的;所有的命令从标准输入接受输入,输出结果显示在 标准输出,而错误信息则显示在标准错误输出设备。可使用重定向功能对这 些设备进行重定向。如: ls –lh > a.txt 命令在正常执行结果后返回一个0值,如果命令出错可未完全完成,则返回 一个非零值(在shell中可用变量$?查看)。在shell script中可用此返 回值作为控制逻辑的一部分。 DSL命令操作: 帮助命令: man 获取相关命令的帮助信息 例如:man dir 可以获取关于dir的使用信息。 info 获取相关命令的详细使用方法 例如:info info 可以获取如何使用info的详细信息。 基本操作: echo 显示字符串 pwd 显示当前工作目录 ls 查看当前文件夹内容 ls -a 查看当前文件夹内容(包括隐藏项) ls -l 查看当前文件夹内容(详细) ls / 查看根目录内容 cd / 移动到根目录

pwd 显示当前工作目录 ls -al 查看根目录文件夹内容(详细情况并包括隐藏项) cd /home/dsl 回到“家”目录 pwd 显示当前工作目录 df -h 显示剩余磁盘空间,参数“-h”表示适合人读取(human readable) du -h 显示文件夹(及子文件夹)所占空间 mkdir fd0 在当前目录下创建目录fd0 touch a.txt 创建一个空文件a.txt ls / -lh > a.txt 利用重定向功能将根目录中的内容写入a.txt。 cat a.txt 显示a.txt内容 wc a.txt 显示a.txt的行数,字数与字节数 find / -name *conf 在根目录下(包括子目录)查找以conf结尾的文件 sudo mount /dev/fd0 fd0 将软盘镜像挂载到目录fd0上 cd fd0 进入软盘镜像所挂载的目录 ls -lh 查看软盘镜像中的文件 cd .. “..”表示进入上一层目录 gzip a.txt 使用gzip压缩a.txt ls -lh 查看当前文件夹 sudo cp a.txt.gz fd0/ 将a.txt复制到fd0目录下,即将其复制到软盘镜像中 sudo mv fd0/a.txt.gz ./ 将a.txt移动到当前目录下,“.”表示当前目录 sudo umount /dev/fd0 将软盘镜像卸载 ls fd0 显示fd0 目录内容 gzip -d a.txt.gz 解压缩a.txt.gz ls -lh 查看当前文件夹 权限管理: 假设当前处于/home/dsl 目录下,且有a.txt(文件)与fd0(目录),当前用户名为dsl。 sudo cat /etc/passwd 用户 sudo cat /etc/shadow 密码 sudo cat /etc/group 组 users 查看当前登录用户 sudo chmod -x fd0 更改文件夹权限 ls fd0 fd0不能被执行,则意味着无法打开! sudo chmod +x fd0 更改文件夹权限 ls fd0 fd0能被打开 sudo chown root fd0 更改目录fd0的所有者 ls -lh 注意看fd0目录的属性 sudo chown dsl:root fd0 更改目录fd0的所有者为dsl,所属组为root ls -lh 注意看fd0目录的属性 chmod a-r a.txt 现在a.txt不具有“读”权限,不能被读取

嵌入式实验报告

池州学院数学计算机科学系 实验报告 课程名称: 嵌入式操作系统原理及应用学号: 姓名: 专业: 年级: 指导教师: 学期:

实验项目列表

池州学院数学计算机科学系实验报告 专业:班级:实验课程: 姓名:学号:实验室:______ _ 同组同学: 实验时间:指导教师签字:成绩: 实验一熟悉Linux常用命令 一.实验目的和要求 1.熟练Linux下的常用命令. 2.熟练地操作linux. 二.实验环境 Windows2003的vmware6 workstation的Redhat2.4.2 三.实验过程 1.常见命令 ?ls ls命令用于查看当前系统支持的Shell。 ?exit exit命令用来退出服务器或当前用户命令 ?passwd passwd用来修改用户口令 ?who who命令用来查看当前用户 ?echo echo命令用来在终端显示字符串 ?cal cal命令用来显示日历 ?clear clear命令用来清除当前屏幕显示内容 ?id id命令用于进行用户认证 ?cat cat命令用于查看文件内容 ?date date命令用于显示或设置日期或时间 ?ifconfig ifconfig命令用于查看IP信息 ?route route命令用于添加网关 ?netstat netstat命令用于查看网络状态 ?man man是手册命令 ?whatis whatis命令用来描述一个命令执行什么功能 ?whereis where命令用来找出程序的源、二进制文件或手册2.文件和目录命令 ?cat cat命令用来查看文件内容

?cd cd命令用来改变工作目录 用法:cd [name] name:目录名 ?cp cp命令用来复制文件 用法:cp [-r] 源地址目的地址 -r参数表示复制内容包括文件夹?mv mv命令用来移动或更改文件、目录名称 用法:mv 源地址目的地址 ?mkdir mkdir命令用来建立新目录 用法:mkdir 目录名 ?rmdir rmdir命令用来删除目录 用法:rmdir 目录名或rm 目录名 ?rm rm命令用来删除文件 用法:rm 文件名 ?pwd pwd命令用来列出当前所在的目录位置 ?du du命令用来查看目录所占磁盘容量 用法:du [-s] 目录 ?chmod chmod命令用来改变文件或目录的读、写以及执行权限。 用法:chmod [-R] mode name name:文件名或目录名。 mode:3个8位数字或r w x u g o 的组合,它们的含义为:?chown chown命令用来改变文件或目录的所有权。 用法:chown [-R] 用户名 name ?groups groups命令用于检查自己所属的工作组名称 ?chgrp chgrp命令用来改变文件或目录工作组所有权 用法:chgrp [-R] 工作组名name name:文件名或目录名 ?touch touch命令用来改变文件或目录的最后修改时间 用法:touch name name:文件名或目录名。 ?ln ln命令用来进行文件的链接。 用法:ln 老文件名新文件名 ?grep grep命令用来进行文件中字符串的查寻 用法: grep string file ?diff diff命令用来比较文件或目录的内容 用法: diff [-r] name1 name2 name1,name2:文件名或者目录名 ?file file命令用来查看文件属性 用法:file 文件名 思考题 1.ls命令的-l, -a的含义是什么? 用ls命令以时间排序列出文件及目录。 2.查看计算机cpu, memory, hard disk的基本信息。 3. 如何强行杀死系统中不要的进程。 四.实验结果与分析讨论 五.实验总结

相关文档
最新文档