unix实验报告7

合集下载

北京邮电大学 操作系统实验 实验报告

北京邮电大学 操作系统实验 实验报告

操作系统实验实验报告实验日期:11月23日实验名称:实验一一、实验目的1.学习LINUX操作系统2.熟悉UNIX/LINUX的常用基本命令3.理解fork()与clone()函数的区别和联系4.深入理解生产者和消费者问题二、实验内容(1)安装LINUX:(2)熟悉UNIX/LINUX的常用基本命令如ls、who、wc、pwd、ps、pstree、top,cat,cd,chgrp,chmod,chown,comm,cmp,cp,rm,diff,mv,rmdir等,了解环境。

(3)比较fork()和clone()的功能,利用fork()生成子进程和clone()生成线程。

(4)利用pthread库,通过其中的mutex来实现生产者和消费者问题。

三、项目要求及分析基本要求:(1)安装LINUX:使用FEDORA11(2)熟悉UNIX/LINUX的常用基本命令如ls、who、wc、pwd、ps、pstree、top,cat,cd,chgrp,chmod,chown,comm,cmp,cp,rm,diff,mv,rmdir等,了解环境。

(3)比较fork()和clone()的功能,利用fork()生成子进程和clone()生成线程。

(4)利用pthread库,通过其中的mutex来实现生产者和消费者问题。

四、具体实现1.linux常用指令1.1 目录操作和DOS 相似,Linux 采用树型目录管理结构,由根目录开始一层层将子目录建下去,各子目录以“/”隔开。

用户login后,工作目录的位置称为home directory,由系统管理员设定。

‘—’符号代表自己的home directory,例如:~/myfile是指自己home目录下myfile这个文件。

Linux 的通配符有三种:‘*’和‘?’用法与DOS相同,‘’代表区间内的任一字符,如test[05]即代表test0,test1,……,test5的集合。

北京工业大学操作系统实验报告

北京工业大学操作系统实验报告

操作系统实验报告姓名: xxx学号: 110703xx完成时间:2013年11月21日目录:实验一:UNIX/LINUIX入门 (3)实验二:进程管理 (5)实验三:线程的管理 (11)实验四:利用信号量实现进程间通信 (15)实验五:基于消息队列和共享内存的进程间通信 (20)实验六:一个进程启动另一个程序的执行 (25)实验一UNIX/LINUIX入门一、实验目的了解UNIX/LINUX运行环境,熟悉UNIX/LINUX的常用基本命令,熟悉和掌握UNIX/LINUX 下c语言程序的编写、编译、调试和运行方法。

二、实验内容1、熟悉UNIX/LINUX的常用基本命令如ls、who、pwd、ps等。

2、练习UNIX/LINUX的文本行编辑器vi的使用方法3、熟悉UNIX/LINUX下c语言编译器cc/gcc的使用方法。

用vi编写一个简单的显示“Hello,World!”c语言程序,用gcc编译并观察编译后的结果,然后运行它。

三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。

四、实验设计代码如下:#include<stdio.h>int main() {printf("Hello, world");return 0;}五、运行结果六、收获及机会此次实验让我熟悉了c语言编译器cc/gcc的使用方法。

七、参考资料《实验指导书》实验二进程管理一、实验目的加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质二、实验内容(1)进程创建编写一段程序,使用系统调用fork()创建两个子进程。

当此程序运行时,在系统中有一个父进程和两个子进程活动。

让每一个进程在屏幕上显示一个字符:父进程显示“a“;子进程分别显示字符”b“和字符“c”。

试观察记录屏幕上的显示结果,并分析原因。

(2)进程控制修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。

实验七:Linux多线程编程(实验报告)

实验七:Linux多线程编程(实验报告)

实验七:Linux多线程编程(4课时)实验目的:掌握线程的概念;熟悉Linux下线程程序编译的过程;掌握多线程程序编写方法。

实验原理:为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。

1 多线程概念使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。

运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间。

使用多线程的理由之二是线程间方便的通信机制。

同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。

2多线程编程函数Linux系统下的多线程遵循POSIX线程接口,称为pthread。

编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。

pthread_t在头文件/usr/include/bits/pthreadtypes.h中定义:typedef unsigned long int pthread_t; 它是一个线程的标识符。

函数pthread_create用来创建一个线程,它的原型为:extern int pthread_create((pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg));第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三个参数是线程运行函数的起始地址,最后一个参数是运行函数的参数。

函数pthread_join用来等待一个线程的结束。

函数原型为:extern int pthread_join(pthread_t th, void **thread_return);第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。

操作系统实验报告3篇

操作系统实验报告3篇

课程设计说明书设计题目:操作系统课程设计班级:信息管理与信息系统2011级学号:姓名:山东科技大学2013年12 月25 日课程设计任务书学院信息科学与工程专业信息学管理与信息系统班级2011-1姓名一、课程设计题目:操作系统课程设计二、课程设计主要参考资料(1)Abraham Silberschatz & Peter Baer Galvin & Greg Gagne. Operating System Concepts(第七版影印版). 高等教育出版社. 2007.3.(2)计算机操作系统(第三版)西安电子科技大学出版社(3)三、课程设计应解决的主要问题:(1)CPU调度算法的模拟实现(2)死锁相关算法的实现(3)磁盘调度算法的实现四、课程设计相关附件(如:图纸、软件等):(1)程序源代码(2)五、任务发出日期:2013-10-1 课程设计完成日期:2014-1-1指导教师签字:指导教师对课程设计的评语成绩:指导教师签字:年月日设计1 CPU调度算法的模拟实现一、设计目的1、根据系统的资源分配策略所规定的资源分配算法2、利用编程语言,模拟实现先来先服务(FCFS)、最短作业优先(非抢占SJF)、非抢占优先调度算法、时间片轮转调度算法(RR)3、针对模拟进程,利用CPU调度算法进行调度4、进行算法评价,计算平均周转时间和平均等待时间二、设计要求1、调度所需的进程参数由输入产生(手工输入或者随机数产生)2、输出调度结果3、输出算法评价指标三、设计说明1、定义public类:class program{public:char name;//进程名int atime;//进程到达的时间int stime;//进程服务的时间int btime;//进程开始执行的时间int ftime;//进程完成的时间int rtime;//进程的周转时间float qrtime;//进程的带权周转时间};2、冒泡排序:class program t;for( i=1;i<m;i++)for(int j=0;j<m-i;j++)if(p[j].atime>p[j+1].atime){t=p[j];p[j]=p[j+1];p[j+1]=t;}3、流程图:(1)①先来先服务调度流程图:②主要程序p[0].btime=p[0].atime;p[0].ftime=p[0].atime+p[0].stime;p[0].rtime=p[0].ftime-p[0].atime;p[0].qrtime=(float)p[0].rtime/p[0].stime;for(i=1;i<m;i++){if(p[i].atime>p[i-1].ftime){p[i].btime=p[i].atime;}else{p[i].btime=p[i-1].ftime;}p[i].ftime=p[i].btime+p[i].stime;p[i].rtime=p[i].ftime-p[i].atime;p[i].qrtime=(float)p[i].rtime/p[i].stime;}①短作业优先进程(非抢占优先权)调度流程图:②(SJF)主要代码int k=0,x=0;for(i=k+1;i<m;i++){for(j=k+1;j<m;j++){if(p[j].atime<p[k].ftime){x++;}elsebreak;}int min=k+1;if(x>1){for(j=k+2;j<=x+k;j++){if(p[j].stime<p[min].stime){min=j;}}t=p[min];p[min]=p[k+1];p[k+1]=t;p[k+1].ftime=p[k].stime+p[k+1].stime;}k++;x=0;}③优先权调度算法(非抢占):int k=0,x=0;for(i=k+1;i<m;i++){for(j=k+1;j<m;j++){if(p[j].atime<p[k].ftime){x++;}elsebreak;}int min=k+1;if(x>1){for(j=k+2;j<=x+k;j++){if(p[j].youxianquan<p[min].youxianquan){min=j;}}t=p[min];p[min]=p[k+1];p[k+1]=t;p[k+1].ftime=p[k].stime+p[k+1].stime;}k++;x=0;}①时间片轮转调度算法:②主要算法int time=p[0].atime;int Max=p[0].stime1;for(i=0; i<m; i++){p[i].stime2=p[i].stime1;if(p[i].stime1>Max)Max=p[i].stime1; }for(int j=0; j<Max; j++){for(i=0; i<m; i++){if(p[i].stime2==0)continue;if(p[i].atime<=time){p[i].stime2-=1;time+=1;}elsei=-1;if(p[i].stime2==0)p[i].ftime=time;}}4、输出p[0].btime=p[0].atime;p[0].ftime=p[0].atime+p[0].stime;p[0].rtime=p[0].ftime-p[0].atime;p[0].qrtime=(double)p[0].rtime/p[0].stime;for(i=1;i<m;i++){if(p[i].atime>p[i-1].ftime){p[i].btime=p[i].atime;}else{p[i].btime=p[i-1].ftime;}p[i].ftime=p[i].btime+p[i].stime;p[i].rtime=p[i].ftime-p[i].atime;p[i].qrtime=(float)p[i].rtime/p[i].stime;}cout<<"进程******到达时间**服务时间**开始执行时间*完成时间**周转时间**带权周转时间"<<endl;for(i=0;i<m;i++){cout<<setiosflags(ios::left)<<setw(10)<<p[i].name<<setw(10)<< p[i].atime<<setw(10)<<p[i].stime<<setw(13)<<p[i].btime<<setw(10) <<p[i].ftime<<setw(10)<<p[i].rtime<<setw(13)<<p[i].qrtime<<endl;}}四、运行结果及分析1、先来先服务(FCFS)测试数据2、短作业优先(SJF)测试数据3、优先权(非抢占)测试数据4、时间片轮转(RR)测试数据五、总结通过这次试验,我进一步的理解了冒泡排序的算法,而且,对进程作业先来先服务、短进程优先、非抢占优先、按时间片轮转调度算法以及进程调度的概念和算法,有了更深入的认识!初步理解了操作系统对于作业处理的基本思想!了解到算法很重要,又更加明白算法本身可以节约时间。

操作系统原理实验报告

操作系统原理实验报告

操作系统原理实验报告操作系统原理实验报告一、课程设计的题目:根据“操作系统原理”课程的课堂教学内容,结合自己的知识积累情况,题目可从下述拟题中选择,亦可自定。

二、实验设计的内容:在Linux或Windows操作系统下,用C语言进行操作系统相关的设计开发,内容可关于“并发程序设计”、“处理机管理”、“用户接口”、“存储管理”、“文件系统管理”、“设备管理”等等。

三、参考资料:1、清华大学出版,张尧学《计算机操作系统教程》配套的《习题解答与实验指导书》中范例;2、清华大学出版,任爱华《操作系统实用教程》中的实例设计;3、《Linux下C语言编程入门教程》、《Linux软件工程师(C 语言)实用教程》等;4、网上与操作系统设计与开发相关的文献资料。

四、重要操作环节1、步骤:选题(2~3人一小组)--→提交小组名单--→分析、编写程序--→上机调试--→分析结果--→评价结果--→写出设计报告2、设计报告的主要内容:①、设计说明:设计主要完成的任务、解决的主要问题;②、工作原理:找出教材中的相关工作原理并简要说明;③、详细设计:包括调用的主要系统函数说明、程序流程图、程序代码、关键语句注释;④、运行结果:要求写出运行结果或抓图给出;⑤、分析结果:要求用操作系统原理有关理论解释说明;⑥、调试步骤以及调试过程中出现的问题及解决方法;⑦、参考文献:5篇以上;⑧、以学年论文格式提交文档资料,要有统一的封面和实验心得体会。

五、成绩评定1、各小组轮流演示小组作品,演示完毕,由其他小组的同学提2个以上问题,回答完毕打分;3、打分遵循原则如下:注意:①以下必做实验每小组都要做②以下选做实验,1个实验题目至多允许2个小组选,各小组也可以自拟题目必做实验(四个,都要做)实验一1. 实验名称:Linux登录、注销、关机和基本操作一。

2. 实验要求:掌握Linux系统的登录、注销、关机方法;掌握列出文件清单命令的使用方法:ls;掌握目录的切换命令的使用:cd;掌握目录的建立、删除命令的使用:mkdir、rmdir;掌握文件的拷贝、删除、移动命令的使用:cp、rm、mv 。

linux实验报告总结与体会

linux实验报告总结与体会

linux实验报告总结与体会
一、实验内容
本次实验的主要内容是Linux系统的安装、配置以及使用,包括Linux系统的安装、操作系统的配置、文件和目录的管理、文件系统权限管理以及进程和用户管理等。

二、实验结果
1、配置 yum 源
在配置yum源时,我参照了一些网上的教程,使用了Cent OS7 的网络镜像源作为yum源。

使用yum命令可以调取网络上的软件仓库,并自动下载安装,避免了手动下载并安装的麻烦,使安装更加便捷。

2、部署 Apache服务器
Apache服务器是一款功能强大的web服务器,是许多开源网站或网站开发项目的经典选择。

从yum库中安装apahce 服务器非常的方便。

在部署好Apache服务器之后,成功在浏览器中显示出Apache 的测试页面,表明Apache服务器配置成功。

三、实验体会
由于Linux是一款开源软件,因此拥有更为强大的功能和更高的性能。

本次实验,我学会了Linux的安装、文件和目录管理、文件系统权限管理以及进程和用户管理等,这些都是Linux系统里的基本操作,我也学会了如何配置 yum 源,以及如何部署 Apache 服务器等。

通过本次实验,我对Linux有了更加深入的了解,也掌握了Linux的基本操作技能,对深入研究Linux有了更大的兴趣。

操作系统 进程的管道通信 实验报告

操作系统 进程的管道通信  实验报告
5、验证读写进程本身是否已经实现了互斥作用
实验内容与步骤:
编写程序实现进程的管道通信。用系统调用pipe( )建立一管道, 二个子进程P1和P2分别向管道各写一句话:
Child P1 is sending a message!
Child P2 is sending a message!
父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1, 后P2)。
进程的管道通信实验报告
学号
姓名
时间
2011年11月18日
专业
网络工程
班级
5班
实验题目:进程的管道通信实验
实验目的:
1.了解什么是管道
2.熟悉UNIX/LINUX支持的管道通信方式
3.通过进程多次的循环读写学习利用管道进行进程间的通信
4.验证lockf的加锁解锁作用
5.验证读写进程本身是否已经实现了互斥作用
2.熟悉UNIX/LINUX支持的管道通信方式, 并在程序中运用了pipe(), read()和write()等系统调用。
3、验证了lockf的加锁解锁作用, 并验证了读写进程互斥。
4、进程中sleep(5)的作用是让所显示的内容休眠5秒钟,即等待5秒钟再显示。进程1和进程2也能对管道进行操作,因为他们同属于共同的管道,共同共享资源。
printf("%s\n", InPipe);
}
exit(0);
}
}
return 0;
}
运行结果如下:
分析与体会:
1.通过本实验, 我了解到所谓管道, 是指能够连接一个写进程和一个读进程、并允许它们以生产者—消费者方式进行通信的一个共享文件, 又称为pipe文件。由写进程从管道的写入端(句柄1)将数据写入管道, 而读进程则从管道的读出端(句柄0)读出数据。并知道pipe文件的建立。

实验一 UNIX常用命令

实验一  UNIX常用命令

实验一 UNIX/LINUX常用命令一、实验目的1.熟悉操作系统界面。

2.掌握UNIX文件系统的目录结构。

3.掌握有关UNIX文件系统操作的常用命令。

4.了解有关文件安全方面的知识。

二、实验内容1.系统登录与退出。

2.使用pwd,cd,ls等命令浏览文件系统。

3.使用cat,cp,mv等命令查看你的文件。

4.练习查看命令。

三.实验步骤1、登录在DOS环境下用MS提供的telnet程序(也可使用WINDOWS 自带的telnet图形界面程序或多功能的S-Term终端程序),可使PC作为终端(terminal)登录(login)UNIX 服务器(UNIX Server)。

(1)执行格式:telnet hostname(主机名)或 telnet 主机的IP地址例: telnet 或 telnet 210.37.47.95(2)步骤login:(输入username,如xx01)password:(输入密码,如xx01xx01)2、退出在UNIX系统提示符$下,输入logout、exit或shutdown 。

例:$ logout3.浏览文件系统〈1〉运行pwd命令,确定你当前的工作目录。

〈2〉利用以下命令显示当前工作目录的内容: ls -l〈3〉运行以下命令: ls -ai〈4〉使用mkdir命令建立一个子目录subdir。

〈5〉使用带-d选项的ls命令,你只能看到有关子目录的信息。

〈6〉使用cd命令,将工作目录改到根目录(/)上。

〈7〉使用ls命令列出根目录的内容,再分别列出各子目录的内容。

〈8〉使用ls-l命令列出/dev的内容。

〈9〉使用不带参数的命令cd,然后用pwd命令确定你当前的工作目录是什麽。

〈10〉使用命令cd../..,你将工作目录移到什麽地方?4.查看你的文件〈1〉利用cd命令,将工作目录改到你的主目录上。

〈2〉将工作目录改到你的子目录subdir,然后运行命令: date > file1将当前日期和时间存放到新建文件file1中。

2020年Linu实验报告

2020年Linu实验报告

L L ix nux 程序设计实验报告姓名 :杨帆班级: :计计 1242学号: :1218 42 284专业: : 计算机科学与技术指导老师 :赵帼英实验一x Linux 系统安装与启动( ( 选做实验) )一、实验目得(通过实践及查阅资料完成如下实验) 掌握虚拟机得配置过程。

掌握 Linux系统得安装过程与简单配置方法。

掌握与Linux 相关得多操作系统得安装方法、掌握 Linux 系统得启动、关闭步骤、了解Linux 文件系统与目录结构。

二、容内验实安装虚拟机软件(如 VMware、Virtualbox)。

在虚拟机软件中安装 Linux 操作系统(如 Fedora、Ubuntu、redhat 等)。

配置 Linux系统运行环境。

正确地启动、关闭系统、三、骤步验实1 。

安装虚拟机软件(VMware Workstatio n 7。

0) 。

2、在虚拟机软件中新建 Linux虚拟机1设置内存大小(建议大于 256MB) 2、2 设置虚拟硬盘大小(建议大于 8GB) 2。

3 设置虚拟光驱(虚拟方式,镜像文件) 4 设置网络连接模式(建议采用桥接方式) 2。

5 设置共享目录(建议英文目录名) 在 Linux 虚拟机中安装 Linux 操作系统(fedora10 )、3、1 选择安装界面3.2检测安装截介质(建议跳过) 3。

3 安装过程中得语言、键盘选择4磁盘分区(采用自动分区,总大小与2相匹配) 3。

5 引导程序选择(采用GRUB) 3、6 注意事项(禁用 SELinux) 通过相关命令实现对操作系统得登录、退出与关机使用文件浏览器査瞧 Linux 操作系统目录结构四、实验思考题举例说明Linux操作系统不同目录下文件得主要作用、列出您发现得 Linux 与 Windows 操作系统区别、列出决定文本界面及图形界面显示得关键文件,并说明设置得关键。

列出您所能想到得虚拟机软件得用途。

实验结论:实验二: : lix nux 基本命令( ( 必做实验) )一、实验目得、要求(请在操作后附实验结果) 熟悉 Linux操作环境。

操作系统系统接口实验

操作系统系统接口实验

操作系统实验报告一、操作系统接口实验1)实验目的熟悉操作系统的命令接口、图形接口和程序接口。

2)实验内容▪UNIX或LINUX环境:✧熟悉开机登录进入系统、退出系统的过程。

✧使用UNIX或LINUX常用命令以及图形化接口X-Windows。

✧使用C语言编制一个小程序,使其可以通过某个系统调用来获得操作系统的服务。

▪Windows环境:✧熟悉开机登录进入系统、退出系统的过程。

✧熟悉使用命方式启动应用程序的过程、熟悉Windows图形用户接口。

✧编程实现一个操作系统的简单命令解释程序。

✧使用汇编语言编制一个小程序,使其可以通过某些系统调用来获得操作系统的服务。

3)实验分析和思考▪操作系统向用户提供的各种接口分别适用于什么场合?4)实验学时安排6学时,在第一章学习完之后可以进行。

(选做)实验题目(1)命令接口实验利用操作系统的用户接口编写程序实现一个操作系统的简单shell程序,实现对一些简单命令的解释执行。

具体内容包括:✧查阅相关函数system(cmd)的调用方法,掌握它的用法;✧掌握操作系统用户接口的使用方法;✧编写主函数,实现一个微型命令解释程序,该程序可以接受并解释以下命令:⏹dir 列出当前目录⏹copy file1 file2 拷贝文件⏹del filename 删除文件⏹echo string 显示字符串⏹exit 结束、退出(2) 程序接口实验使用DOS系统功能调用进行编程,实现文件操作。

(在DOS下用3ch号功能创建一个文件,3dh号功能打开一个文件,3eh好功能关闭一个文件,3fh号功能读文件,40h号功能写文件。

windows下用CreatFile创建一个文件,CloseHandle关闭文件,WriteFile写文件OpenFile打开文件,还有很多文件操作的api,可以查阅资料)【示例1】用汇编语言编程把输入的信息写到txt文件中。

DATA SEGMENTBUFFER DB 'ABCDEF'FILENAME DB 'A.TXT'EMSG DB 'ERROR!','$'DATA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP(0)STACK1 ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK1,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV AH,3CH ;3CH号功能,创建文件,也可以用5BH号功能MOV CX,0 ;文件属性LEA DX,FILENAMEINT 21HJZ ERROR ;若CF=1则出错处理MOV BX,AX ;AX中为文件句柄MOV CX,6 ;要写的字节数LEA DX,BUFFERMOV AH,40H ;40H好功能调用,写文件INT 21HJMP END0ERROR:MOV AH,9LEA DX,EMSGINT 21HEND0:MOV AH,4CHINT 21HCODE ENDSEND START改进要求:1)文件未关闭,请在合适位置增加关闭文件功能;2)文件名改为从键盘输入;3)字符串从键盘输入;【示例2】将文本文件内容读入内存并显示在屏幕上。

《操作系统原理》实验报告

《操作系统原理》实验报告

《操作系统原理》实验报告书班级:学号:姓名:指导教师:2013-2014 学年第二学期在数字设定法中,每种权限设置均可以用数值来代表,其中0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,这些值之和便可以用来设定特定权限。

4.什么过滤操作?在Linux中如何实现?过滤操作:将一个命令的输出作为一个命令的输入Linux实现的命令格式:命令|命令5.在Linux中挂载u盘并能显示其文档的中文信息,所使用的挂载命令是:Mount/dev/sdal/mnt/usb 。

6.什么是vi? 其三种操作模式的含义是什么?给出三种工作模式间的转换图。

命令模式:vi启动后的默认模式,控制光标的移动,复制删除文字,进入输入模式和末行模式输入模式:进行文字输入末行模式:保存文件,退出VI三、实验内容(包含实验所用命令或相关程序源代码)1.shell操作命令(给出每题所用的Shell命令或命令结果)(1)创建名为stu1、stu2的2个用户,设置密码分别为student1和student2 ,并将它们设为组group1中的成员。

#groupadd group1#useradd stu1 –g group1#su stu1Spasswd stu1 回车后敲入密码student12.Linux C程序开发(1)编写Linux C程序,把一个文件的内容复制到另一个文件中,即实现简单的copy功能。

要求:程序输入的第一个参数是源文件,第二个参数是目标文件。

【源程序】#include<sys/types.h>#include<dirent.h>#include<stdio.h>#include<crrno.h>Int main(int argc,char *argv[]){FILE *in,*out;Char ch;If(argc!=3){Printf(“you forgot to enter a \n”);Exit(0);}If(in=fopen(argv[1],”r”))==NULL{Print 当前进程是父进程3.图示pipe系统调用生成无名管道时所涉及的数据结构。

操作系统报告书

操作系统报告书

操作系统实验报告 Linux部分班级:网络C121班姓名:高象森学号:1250772.3 Linux并发程序设计(实验估计时间:90分钟)背景知识实验目的工具/准备工作实验内容与步骤背景知识管道是Linux中最常用的进程间通信IPC机制。

利用管道时,一个进程的输出可成为另外一个进程的输入。

当输入输出的数据量特别大时,这种IPC机制非常有用。

可以想象,如果没有管道机制,而必须利用文件传递大量数据时,会造成许多空间和时间上的浪费。

在Linux中,通过将两个file结构指向同一个临时的索引节点,而两个索引节点又指向同一个物理页而实现管道。

实验目的1) 通过在Linux进程之间进行的通信实例来学习并发程序设计的方法。

2) 通过Linux进程通信的程序设计与实现,进一步熟悉操作系统的进程概念,理解Linux 进程管理概念。

3) 通过阅读和分析Linux实验程序,学习Linux程序设计、调试和运行的方法。

工具/准备工作在开始本实验之前,请回顾教科书的相关内容。

需要准备一台运行Linux操作系统的计算机。

实验内容与步骤并发程序的设计关键是使用创建进程的系统调用,使一个程序运行时可以生成几个同时运行的程序,如果程序中没有创建进程的动作则为顺序程序设计。

本实验中的并发程序例子完成两个程序child和father之间的数据传递工作,具体做法分为四步。

步骤1:编制并发程序pipeline.c。

单击红帽子,在“GNOME帮助”菜单中单击“附件”-“文本编辑器”命令,在文本编辑中键入程序并保存为pipeline.c。

在该程序中定义管道和文件描述符,并且创建子进程child。

该程序用到的系统调用有pipe() 、dup() 、fork() 、close、execl() 、exit,它们的功能分别是建立管道、复制文件描述符、创建进程并使子进程与父进程有相同的程序正文、关闭文件描述符、用指定文件覆盖调用程序、撤销当前进程。

清单4-5 pipeline.c// 定义管道程序# define STD_INPUT 0 // 定义标准输入设备描述符# define STD_OUTPUT 1 // 定义标准输出设备描述符int fd[2];main(){static char process1[]="father",process2[]="child";pipe(fd); // 定义管道pipeline(process1,process2); // 调用自定义函数pipeline()exit(1); // 程序结束}pipeline(char* process1,char* process2){int i;while ((i=fork())==-1); // 创建进程,直到创建成功为止if (i){close(fd[0]); // 关闭管道输入描述符close(STD_OUTPUT); // 关闭标准输出描述符1dup(fd[1]); // 指定标准输出描述符1为管道写指针close(fd[1]); // 关闭原始管道写指针execl(process1, process1, 0); // 用程序father覆盖当前程序printf(" father failed.\n"); // execl()执行失败}else{close(fd[1]); // 关闭管道输出描述符close(STD_INPUT); // 关闭标准输入描述符0dup(fd[0]); // 指定标准输入描述符0为管道读指针close(fd[0]); // 关闭原始管道读指针execl(process2,process2,0); // 用程序child覆盖当前程序printf("child failed.\n"); // execl()执行失败}exit(2); // 程序结束}步骤2:编制“管道写”程序father.c作为父进程的一部分工作。

操作系统实验

操作系统实验

操作系统实验报告(一)Linux基本操作与编程(验证性 2学时)1、实验目(de):1)熟悉Linux操作系统(de)环境和使用.2)了解LINUX系统(de)安装过程.(注:表示可选择)3)掌握Linux环境下(de)命令操作.2、实验内容:(1)完成LINUX系统(de)登录,启动终端.进行下列操作并记录结果(要求:结果以屏幕截图表示).1)运行pwd命令,确定你当前(de)工作目录.2)利用以下命令显示当前工作目录(de)内容: ls –l3)运行以下命令: ls –al4)使用mkdir命令建立一个子目录subdir.5)使用cd命令,将工作目录改到根目录(/)上.6)使用ls-l命令列出/dev(de)内容.7)使用不带参数(de)命令cd改变目录,然后用pwd命令确定你当前(de)工作目录是哪里8)使用命令cd ../..,你将工作目录移到什么地方(2)在LINUX下查看你(de)文件.1)利用cd命令,将工作目录改到你(de)主目录上.2)将工作目录改到你(de)子目录subdir,然后运行命令: date > file1 将当前日期和时间存放到新建文件file1中.3)使用cat命令查看file1文件(de)内容.4)利用man命令显示date命令(de)用法: man date5)将date命令(de)用法附加到文件file1(de)后面:man date >> file16)利用cat命令显示文件file1(de)内容.7)利用ls -l file1命令列出文件file1(de)较详细(de)信息.运行ls -l/bin 命令显示目录(de)内容.8)利用ls -l/bin|more命令行分屏显示/bin目录(de)内容.9)利用cp file1 fa命令生成文件file1(de)副本.然后利用ls -l命令查看工作目录(de)内容.10)用cd命令返回你(de)主目录,输入命令ls –l后,解释屏幕显示(de)第一列内容(de)含义.(3)编写能输出“Hello world”问候语(de)C程序,并在终端中编译、执行.要求记录所使用(de)命令及结果.操作步骤:1)在文本编辑器中,编写C程序如下:include ""main(){ printf("hello"); }2) 在终端中,用gcc命令进行编译,生成可执行文件a.gcc –o a3) 在终端中执行a (de)命令如下:./a(4)编写一个程序:显示信息“Time for Play”,并能在后台运行一段时间(自定义)后,弹出信息提醒用户.要求记录所使用(de)命令及结果.(提示:使用sleep(s)函数)3、实验结果分析:(对上述实验内容中(de)各题结果,进行分析讨论.并回答下列问题)(1)进程包括哪些特征间断性, 失去封闭性, 不可再现性, 动态性, 并发性, 独立性(2)在Linux中,如何设置前、后台命令和程序(de)执行命令后直接加 & ,这个命令就在后台执行;正在运行(de)命令,使用Ctrl+z ,就挂起; jobs命令,可以现实后台,包括挂起(de)命令;使用 bg %作业号就可以把挂起(de)命令在后台执行;使用 fg %作业号就可以把后台命令调到前台(3)你所使用(de)Linux系统(de)内核版本是多少用什么命令查看内核版本目前你所了解(de)各发行版本(de)情况如何Linux version (gcc version (Red Hat (GCC) ) 1 SMP Tue Jan 2911:48:01 EST 2013(4)你对Linux系统有什么认识linux是一款开放性(de)操作系统,也可以说成是开放(de)源代码系统,这些代码可以完全自由(de)修改可以再任何(de)计算机上去运行它,也就是“可移植性”,其次大家都知道,linux是由UNIX(de)概念所开发出来(de),所以它也继承了UNIX(de)稳定和效率(de)特点4、总结:你对本次实验有什么体会或看法.操作系统实验报告(二)文件访问权限设置与输入输出重定向(2学时)一、实验目(de)1、掌握linux(de)文件访问权限设置.2、熟悉输入输出重定向和管道操作.二、实验内容1、启动进入红帽linux系统2、设置文件权限:在用户主目录下创建目录test,进入test目录,用vi 创建文件file1,并输入任意(de)文字内容.用ls -l显示文件信息,注意文件(de)权限和所属用户和组.对文件file1设置权限,使其他用户可以对此文件进行写操作:chmod o+w file1.用ls -l查看设置结果.取消同组用户对此文件(de)读取权限:chmod g-r file1.查看设置结果.用数字形式来为文件file1设置权限,所有者可读、可写、可执行;其他用户和所属组用户只有读和执行(de)权限:chmod 755 file1.设置完成后查看设置结果.3、输入、输出重定向和管道(1) 输出重定向用ls命令显示当前目录中(de)文件列表:ls –l.使用输出重定向,把ls命令在终端上显示(de)当前目录中(de)文件列表重定向到文件list中:ls –l > list.查看文件list中(de)内容,注意在列表中会多出一个文件list,其长度为0. 这说明shell是首先创建了一个空文件,然后再运行ls命令:cat list.再次使用输出重定向,把ls命令在终端上显示(de)当前目录中(de)文件列表重定向到文件list中.这次使用追加符号>>进行重定向:ls –l >> list.查看文件list(de)内容,可以看到用>>进行重定向是把新(de)输出内容附加在文件(de)末尾,注意其中两行list文件(de)信息中文件大小(de)区别:cat list.重复命令ls –l > list.再次查看文件list中(de)内容,和前两次(de)结果相比较,注意list文件大小和创建时间(de)区别.(2) 管道who |grep root命令(de)结果是命令ls –l |wc –l结果是4、退出linux系统操作步骤:在主菜单上选择“注销” ->关闭计算机.三、实验结果与讨论(根据实验结果回答下列问题)1. 文件(de)权限如下:-rw-r—r-- 1 root root 19274 Jul 14 11:00回答:-rw-r—r-- (de)含义是什么答:是LINUX/FTP(de)简易权限表示法:对应于本用户-所在组-其他人(de)权限,每一个用执行(x)-读取(r)-写入(w)如本题若是说自己可以读取写入不可以执行,所在组和其他人只能读取.2、文件(de)所有者添加执行权限(de)命令是答:chmod u+x 、赋予所有用户读和写文件权限(de)命令是四、答:chmod a+w,a+r 个人体会(你对本次实验有什么体会或看法)操作系统实验报告(三)文件和目录管理一、实验目(de)1) 掌握在Linux系统下(de)文件和文件系统(de)概念及命令;2) 掌握Linux系统下(de)目录操作.二、实验内容1. 进入linux终端后,用命令(de)操作结果回答下列问题:1)vi(de)三种工作模式是其中不能进行直接转换(de)是什么模式到什么模式命令模式、文本输入模式、末行模式命令模式不能直接到末行模式2)在vi中退出时,保存并退出(de)操作步骤是Ese:wq3)用vi 创建myfile1文件,并在其中输入任意文字一行,创建myfile2文件,任意输入文字3行.请问执行命令:cat <myfile1 >myfile2 后,myfile2中还有几行内容该命令(de)作用是用命令操作验证你(de)回答.myfile2中还有1行内容该命令(de)作用是替换myfile(de)内容4)请用至少两种不同(de)命令创建一个文本文件(),在其中写入“我是2014级学生,我正在使用Linux系统.”,记录命令及执行结果.1、Vi创建2、5)用___pwd________命令可查看所创建文件(de)绝对路径,写出它(de)绝对路径__/root_________;用___ls -l________命令查看该文件(de)类型及访问权限,其访问权限(数字和字母)分别是多少__-rw- r- - r- - 6 4 4______________.6)若将该文件(de)访问权限修改为:所有者有读写权限;其他用户只读;同组用户可读写,请写出命令,并记录结果.7)查找my开头(de)所有文件,可___find my_________命令,写出命令并记录结果8)在/home下创建子目录user,并在其中创建2个文件,名为file1和file2,file1(de)内容是/root目录(de)详细信息;file2(de)内容任意,最后将这两个文件合并为file3文件,请先写出命令序列,并在终端中验证,记录结果.2. 文件及目录操作,写出操作所使用(de)命令,并记录结果.在终端中完成下列命令操作,并记录结果在root用户主目录下创建一个mydir子目录和一个myfile文件,再在mydir下建立d1和d2两个子目录.查看mydir和myfile(de)默认权限查看当前myfile和mydir(de)权限值是多少将myfile文件分别复制到root 和dd1(de)主目录中将root主目录中(de)myfile改为yourfile通过从键盘产生一个新文件并输入I am a student查找文件是否包含student字符串三、实验结果与分析,回答下列问题:1、能够创建文件(de)命令有哪些vi 和cat>name2、能够查看当前目录(de)绝对路径(de)命令是pwd3、Linux中按用户属性将用户分成哪些类型根据文件(de)访问权限,用户又被分成哪些类型能够查看文件访问权限(de)命令是用户同组其他可读可写可执行 cat f1四、小结(本次实验(de)体会或小结)操作系统实验报告(四)作业调度算法模拟(验证性2学时)1、实验目(de):1)掌握作业调度(de)主要功能及算法.2)通过模拟作业调度算法(de)设计加深对作业管理基本原理(de)理解.3)熟悉Linux环境下应用程序(de)编程方法.2、实验内容:(1)作业调度算法(FCFS)编程模拟:编制一段程序,对所输入(de)若干作业,输入、输出数据样例如下表所示.按FCFS算法模拟调度,观察、记录并分析调度(de)输出结果情况.输入输出样例1:FCFS算法include <>include <>define SIZE 5struct Job_type{char no[2]; o,&job[i].tb,&job[i].tr);printf("输入作业顺序:\n");for(i=0;i<SIZE;i++)printf("\t%s\t%d\t%d\n",job[i].no,job[i].tb,job[i].tr);}void fcfs(){ int i,j,t=0,tw=0,tt=0;for(i=0;i<SIZE-1;i++)for(j=i+1;j<SIZE;j++)if(job[i].tb>job[j].tb){x=job[i];job[i]=job[j];job[j]=x;}printf("FCFS调度结果:\n");printf("开始时间作业号到达时间运行时间完成时间等待时间周转时间\n");for(i=0;i<SIZE;i++){printf(" %d",t);t=t+job[i].tr;tw=t-job[i].tb-job[i].tr; b; o,job[i].tb,job[i].tr,t,tw,tt);}}void main(){load();fcfs();}(2)作业调度算法(SJF)编程模拟:编程实现由短作业优先算法,分别用下面两组输入、输出数据样例进行模拟,观察分析运行结果.输入输出样例2:SJF算法输入输出A 0 4B 0 3C 0 5D 0 2E 0 1A 0 6 10 10B 0 3 6 6C 0 10 15 15D 0 1 3 3E 0 0 1 1include <>include <>define SIZE 5struct Job_type{char no[2]; o,&job[i].tb,&job[i].tr);printf("输入作业顺序:\n");for(i=0;i<SIZE;i++)printf("\t%s\t%d\t%d\n",job[i].no,job[i].tb,job[i].tr);}void sjf()n=i; pl[i].pfn=ERR;}for(i=1;i<total;i++){ pfc[i-1].next=&pfc[i];pfc[i-1].pfn=i-1;}pfc[total-1].next=NULL;pfc[total-1].pfn=total-1;freepf_head=&pfc[0];}void FIFO(int total){ int i,j;pfc_type p,t;initialize(total);busypf_head=busypf_tail=NULL;for(i=0;i<page_len;i++){if(pl[page[i]].pfn==ERR){ diseffect+=1;if(freepf_head==NULL){p=busypf_head->next;pl[busypf_head->pn].pfn=ERR; freepf_head=busypf_head;freepf_head->next=NULL;busypf_head=p;}p=freepf_head->next;freepf_head->next=NULL;freepf_head->pn=page[i];pl[page[i]].pfn=freepf_head->pfn;if(busypf_tail==NULL)busypf_head=busypf_tail=freepf_head; else{ busypf_tail->next=freepf_head;busypf_tail=freepf_head;}freepf_head=p;}}printf("FIFO:%d",diseffect);}main(){ int i; int k;printf(“请输入页(de)引用序列:\n”); for(k=0;k<page_len;k++)scanf("%d",&page[k]);for(i=4;i<=7;i++){printf("%2d page frames ",i);FIFO(i);}参考程序LRU算法,略三、实验结果分析:(对上述实验各题所使用(de)原始数据、调试数据与状态(包括出错)及最终结果进行记录并分析.)随着块数(de)增加,缺页数目也减少,4个实验中3个实验(de)块数增加到了5以后,即使块数再增加,缺页数目也是保持不变.只有实验4,块数增加到7以后,缺页数目又再次减少了四、总结:你对本次实验有什么体会或看法.。

unix实验(操作系统)

unix实验(操作系统)

实验一:linux常用命令一、实验内容和要求1、使用自己的帐户登录linux系统查看系统提示符确定自己使用的shell程序类型。

2、修改个人口令后重新登录。

3、用who命令查看当前登录在系统中的用户列表、用户总数、系统启动时间等。

4、查看当前用户的标志符及当前进程的状态。

5、用cal命令查看自己的生日是星期几。

6、将Windows下的C盘链入linux 系统的根目录下。

7、将C盘上的一个文本传递到linux下的当前用户目录下,并进行浏览查看。

8、使用mail进行电子邮件的传递与查看。

9、在系统中与其他用户对话。

10、练习允许与拒绝其他用户向自己的终端上发送信息。

二、实验结果:请同学们自己写出1、用户使用的shell可查阅/etc/passwd文件确定。

2、修改口令的命令为:passwd<CR>3、who –h <CR>4、id <CR>5、cal –m 3 –y 1990 <CR>6、mkdir/dosc <CR>mount/dev/hda1/dosc <CR>7、cp /myexample.txt <CR>vim ./myexample.txt<CR>8、% mail zhangming<CR>subject:hello<CR>hi,my friend! How are you![ctrl+d]Cc:<CR>%查看信件只需要键入‖mail‖% mail<CR>9、% talk zhangming<CR> 用户屏幕将分成两半,其显示:请同学们自己写此时zhangming 回应:% talk wangyong@class<CR>则zhangming 的屏幕就会分成两半,双方开始对话。

10、% mesg y<CR>允许其他用户向自己发送信息。

操作系统上机实验报告

操作系统上机实验报告

操作系统上机实验报告计算机科学与技术学院操作系统上机实验报告实验名称:进程和线程实验⽬的:理解unix/Linux下进程和线程的创建、并发执⾏过程。

实验内容:1.进程的创建2.多线程应⽤实验步骤:⼀、进程的创建下⾯这个C程序展⽰了UNIX系统中⽗进程创建⼦进程及各⾃分开活动的情况。

1、实验指导fork( )创建⼀个新进程。

系统调⽤格式:pid=fork( )参数定义:int fork( )fork( )返回值意义如下:0:在⼦进程中,pid变量保存的fork( )返回值为0,表⽰当前进程是⼦进程。

>0:在⽗进程中,pid变量保存的fork( )返回值为⼦进程的id值(进程唯⼀标识符)。

-1:创建失败。

如果fork( )调⽤成功,它向⽗进程返回⼦进程的PID,并向⼦进程返回0,即fork( )被调⽤了⼀次,但返回了两次。

此时OS在内存中建⽴⼀个新进程,所建的新进程是调⽤fork( )⽗进程(parent process)的副本,称为⼦进程(child process)。

⼦进程继承了⽗进程的许多特性,并具有与⽗进程完全相同的⽤户级上下⽂。

⽗进程与⼦进程并发执⾏。

2、参考程序代码/*process.c*/#include#includemain(int argc,char *argv[]){int pid;/* fork another process */pid = fork();if (pid < 0) { /* error occurred */fprintf(stderr, "Fork Failed");exit(-1);}else if (pid == 0) { /* child process */ execlp( "/bin/ls", "ls",NULL);}else {/* parent process *//* parent will wait for the child to complete */ wait(NULL);printf( "Child Complete" );exit(0);}}3、编译和运⾏$gcc process.c –o processs4、运⾏$./process5、思考(1)系统是怎样创建进程的?⽤fork()系统调⽤创建。

洛阳师范学院UNIX实验报告-1

洛阳师范学院UNIX实验报告-1

测试过程:(实验中出现的问题、错误、解决方法)基本实现了函数的功能,在测试过程中会出现无法解决的问题,通过请教老师的讲解最终达到了老师的基本要求实验总结:通过此次实验掌握类UNIX下程序开发的流程;熟悉程序开发有关的工具软件;掌握ANSI C的编程规范;掌握文件系统访问的编程方法、数据结构、函数;签名2012 年 2 月20 日评语与成绩:教师签名:年月日洛阳师范学院信息技术学院软件实验报告专业:软件工程课程:UNIX高级编程学号:姓名:班级:实验名称编程环境实验类型验证型实验时间2012-2-22 实验环境装有linux操作系统的虚拟机环境实验目的与要求:掌握类UNIX下程序开发的流程;熟悉程序开发有关的工具软件;掌握ANSI C的编程规范;掌握文件系统访问的编程方法、数据结构、函数;理解不同系统平台下编程的特点、区别。

实验内容:编程实现例程1-5使用vi编辑程序分别使用gcc和cc编译生成可执行程序分析、验证程序的功能列出程序中包含的头文件,分别指出头文件包含程序中那些函数的原型列出程序中用到了那些原始系统数据类型分析该程序在调用execlp函数而执行子进程时,为什么不能传递参数?如果实现该功能,需要如何修改程序(提出方案)编程实现指定目录的递归访问分析、调试例程1-1总结程序中用到哪些与目录操作相关的数据结构如果在例程基础上增加“递归列出一个目录中的所有文件”,需要哪些数据结构、如何修改程序的逻辑结构?通过搜索、查阅资料,提出上述问题的解决方案;编程实现该方案;实验步骤:(算法描述、源程序、操作步骤和方法)习题1.5的头文件有#include<sys/types.h>基本系统数据类型#include<sys/wait.h>进程控制#include<stdio.h>定义输入输出函数#include<string.h>字符串处理函数#include<unistd.h>符号常量#include<errno.h>定义错误码#include<stdarg.h>不定参数列表支持Vsprintf()由<stdarg.h> <stdio.h>printf(),Fgets(),Fputs(),Fprintf(),Fflush(),Sprintf()需要用到头文件<stdio.h>函数execlp()需要用到<unistd.h>头文件以_t结尾的数据类型被称为原始系统数据类型。

UNIX系统实验指导书

UNIX系统实验指导书

实验1 UNIX基本操作1、实验目的掌握 UNIX (LINUX)系统的基本使用方法:系统启动、注销、关闭和关机;帐号管理;文件系统的日常管理;文件系统的权限控制。

2、实验工具及环境UNIX(LINUX)系统网络环境或单机。

3、实验计划学时2学时上机实际操作。

4、实验内容及操作步骤⑴系统启动和关闭① 使用自己的账户登录UNIX系统,查看系统提示符确定自己使用的shell程序类型别。

◎开机后,系统自检启动后提示login:(输入:root ↙)password:(输入:用户口令↙ ,root用户为redhat )◎ 查看/etc/passwd文件可以获得用户使用的shell# grep $LOGNAME /etc/passwd ↙可能的显示为: user001:*:200:50::/usr/user001:/bin/sh请思考上述命令怎样得到了当前使用的shell类型的?使用下面的命令也可以查看当前shell:# echo $SHELL② 注销和关机命令。

◎ 用户注销使用:$exit ↙或$<ctrl>+<D> ↙或$logout ↙◎ 超级用户关机使用:#shutdown ↙该命令将结束所有的进程,当执行此命令后系统提示“ Safe to Power off or Press Any Key to Reboot ”时可以关闭电源或按任一键重启系统。

◎haltsys(halt),reboot只能由超级用户在单用户模式下使用。

⑵帐号管理① 添加用户,删除用户,修改个人口令后重新进行登录;◎ 添加用户的shell命令:# useradd user08 ↙(Linux系统中可以为 adduser)上述命令采用默认属性, UNIX 也可以使用选项来指定创建帐户的属性:- c comment 用户说明- d directory 指定用户主目录- m 若用户的起始目录不存在则创建- g group 指定用户所属组- s shell 指定用户使用的shell- u uid 为用户分配标识◎ 修改口令对linux系统而言,用adduser增加的用户应该随即用passwd命令来修改口令。

操作系统进程的创建与控制实验报告

操作系统进程的创建与控制实验报告
6、掌握进程另外的创建方法
7、熟悉进程的睡眠、同步、撤消等进程控制方法
二、实验内容
1)UNIX/LINUX及其使用环境
1、用vi编写一个简单的、显示"Hello,World!"的C程序,用gcc编译并观察编译后的结果
2、利用gdb调试该程序
3、运行生成的可执行文件。
2)进程创建:
1、编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。
操作系统实验报告
实验一进程的创建和控制
班级:12计算机12班
学号:127401219
姓名:刘艳仙
成绩:
2013年6月17日
一、实验目的
1、掌握进程的概念,明确进程的含义
2、复习C语言程序基本知识
3、练习并掌握UNIX提供的vi编辑器来编译C程序
4、学会利用gcc、gdb编译、调试C程序
5、认识并了解并发执行的实质
操作系统实验报告实验一进程的创建和控制12计算机12实验目的1掌握进程的概念明确进程的含义2复习c语言程序基本知识3练习并掌握unix提供的vi编辑器来编译c程序4学会利用gccgdb编译调试c程序5认识并了解并发执行的实质6掌握进程另外的创建方法7熟悉进程的睡眠同步撤消等进程控制方法实验内容1unixlinux及其使用环境1用vi编写一个简单的显示helloworld
#include <stdio.h>
#inlude<stdlib.h>
#include<unistd.h>

版图设计实验报告

版图设计实验报告

版图设计实验——三输入与或非门的版图实现一、实验要求1、熟悉UNIX基本命令的使用2、了解Cadence软件的使用方法3、掌握半导体集成电路的设计规则4、能够实现基本CMOS集成电路的版图设计二、实验内容使用Cadence Tools实现三输入或与非门(C=)()电路的版图+F∙AB设计,并实现其设计规则检查(DRC)和电路图与版图一致性对照检查(LVS)。

三、实验设备计算机(内含UNIX系统),Cadence Tool四、实验原理及电路结构分析实验要求实现三输入或与非门电路的版图,则首先要分析此或与非门的电路结构,根据集成电路的有关知识,实现这样的电路,如果使用全互补CMOS集成电路的话,要使用至少6个晶体管,其中NMOS管3个,PMOS管3个。

由于电路结构要求输出函数为C+(,因此根据CMOS集成电路的=)F∙AB设计规则:NMOS逻辑块接地,PMOS逻辑块接高电平,且对NMOS逻辑块,遵循“与串或并”的规律;对PMOS逻辑块,遵循“与并或串”的规律。

:逻辑电路图如下:根据NMOS、PMOS逻辑块电路的设计规则得到晶体管级电路图如下:该电路图实现的逻辑功能 A B C管子工作状态 输出C B A F ∙+=)( 0 0 0 P 管导通;N 管截止 10 0 1 t1、t2导通,t3截止;t4导通,t5、t6截止 10 1 0 t1、t2截止,t3导通;t4、t5、t6截止 10 1 1 t1、t2、t3截止;t4、t5导通,t6截止 01 0 0 t1、t2截止,t3导通;t4、t5、t6截止 11 0 1 t1、t2、t3截止;t4、t6导通,t5截止 01 1 0 t1、t2截止,t3导通;t4、t5、t6截止 11 1 1 P 管截止;N 管道通0 在初步分析了电路的结构和逻辑功能之后,接下来就是要具体的进行该电路的版图设计工作了,首先要明确几个概念。

1、版图设计规则。

主要有两种,一种是微米(um-microm )设计规则,它是一种以微米为单位的直接描述版图的最小允许尺寸,是一种绝对单位的设计规则;另一种是λ为单位的设计规则,该规则是一种相对单位,若某工艺的特征尺寸为A ,则m A μλ2=,规定最小线宽为λ2,其它最小允许尺寸均表示为λ的整数倍。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验七管道pipe和popen通信
实验目的
1. 掌握无名管道pipe的原理
2. 掌握管道的应用及重定向。

3. 熟悉popen创建管道的方式及应用程序设计;
实验内容
1. (1) 在命令行下执行ls –l |grep .c命令,查看运行结果。

(2)设计一个程序,要求创建一个管道PIPE,复制进程,父进程运行命令“ls -l”,把运行结果写入管道,子进程从管道中读取“ls -l”的结果,把读出的作为输入运行“grep .c”。

即实现“ ls –l |grep .c”功能。

参考课件ch4 P52,54。

程序源代码:
#include <>
#include<>
#include<>
#include<>
int main () {
int fd[2];
char buf[1000];
pid_t p;
if(pipe(fd)<0)
{
printf("创建管道失败");
return -1; }
p=fork();
i f(p<0)
{ perror("创建子进程失败");
exit;}
else if (p==0){
close(0);
dup(fd[0]);
execlp("grep","grep",".c",NULL);
}
else{
close(1);
dup(fd[1]);
execlp("ls","ls","-l",NULL); wait(0);
}
return 0; }
结果截图:
2. (1)在命令行下执行 $touch $ls –l >, cat命令查看内容。

(2)设计一个程序,要求利用popen函数,实现“ls –l > ”的重定向功能,在程序中创建。

参考课件ch4 59
程序源代码:
#include <>
#include<>
#include<>
#include<>
int main ()
{ FILE *fp; int num; char buf[500]; m emset(buf,0,sizeof(buf));
p rintf("建立管道……\n");
f p=popen("ls -l","r");
i f(fp!=NULL)
{ num=fread(buf,sizeof(char),500,fp);
if(num>0)
{ printf("%s\n",buf); }
pclose(fp); }
e lse
{ printf("用popen创建管道错误\n");
return 1; }
f p=fopen("","w+");
f write(buf,sizeof(char),500,fp);
p close(fp);
r eturn 0;
}
运行结果截图:。

相关文档
最新文档