操作系统报告.docx

上传人:scccc 文档编号:12766864 上传时间:2021-12-06 格式:DOCX 页数:14 大小:55.66KB
返回 下载 相关 举报
操作系统报告.docx_第1页
第1页 / 共14页
操作系统报告.docx_第2页
第2页 / 共14页
操作系统报告.docx_第3页
第3页 / 共14页
操作系统报告.docx_第4页
第4页 / 共14页
操作系统报告.docx_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《操作系统报告.docx》由会员分享,可在线阅读,更多相关《操作系统报告.docx(14页珍藏版)》请在三一文库上搜索。

1、仅供个人参考计算机操作系统linux上机实验上机实验(1-4)班级:计科0801姓名:李超学号:04081012 ( 12)不得用于商业用途仅供个人参考实验1掌握Linux基本命令 和开发环境一. 实验内容1. 掌握常用的Linux shell命令;2. 掌握编辑环境VIM;3. 掌握编译环境gcc及跟踪调试工具gdb二. 实验步骤通过学习课外参考书,如linux c编程和鸟哥的私房菜。掌握一些 基本的 linux 命令,如 cd,Is,sudo,reboot,shutdown等等掌握一些基本的vim编程命令,并可以通过gcc编译和gdb调试。三. 实验心得通过这些基本的实验内容,对linux

2、有了一定的基本了解,可以实现一些 linux的基本操作,对我这个初学者的帮助很大,对linux感到不再陌生。实验2进程一. 实验内容通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方 面的特点,掌握在POSIX规范中fork和kill系统调用的功能和使用。二. 实验前准备学习man命令的用法,通过它查看fork和kill系统调用的在线帮助,并 阅读参考资料,学会fork与kill的用法。复习C语言的相关内容。三实验问题1你最初认为运行结果会怎么样?答:会一直输出程序的进程名,并输出他的进程号。当输入数字时,会杀死对 应的进程。2. 实际的结果什么样?有什么特点?试对产生该现象的

3、原因进行分析。答:程序会一直输出创建的进程号,当输出数字时,会杀死对应的进程。当杀 死完0-9进程时,程序依然没有退出。当输入 q'程序结束。杀死完0-9进 程,但主进程并没有结束,所以一直会执行下去。直到输入q'后,主线程结束。3. proc_number这个全局变量在各个子进程里的值相同吗?为什么?答:不同,每一个进程创建后,proc_number就已经复制了,并且和对应的线程 不得用于商业用途仅供个人参考一样。各线程分时运行,丛输出结果可以得出结论。4. kill命令在程序中使用了几次?每次的作用是什么?执行后的现象是什么?答:两次 第一次为:kill(pidch-

4、9;O',SIGTERM);第二次为:kill(0,SIGTERM);前者为杀死对应号的单一进程,后者为杀死所有的这个程序的进程。5. 使用kill 命令可以在进程的外部杀死进程。进程怎样能主动退出?这两种退 出方式哪种更好一些?答:没能理解这个问题。6. 通过ps aux| grep process命令得到了当前进程的个数,杀死进程后。未发现 进程减少(觉得应该减少)。四. 实验心得通过本次实验,了解了进程的相关知识,包括创建,杀死,执行等等。以 及和主线程的关系,对I i nux的认识更深了一步。实验3 线程一. 实验内容通过观察、分析实验现象,深入理解线程及线程在调度执行和内存空

5、间等方 面的特点,并掌握线程与进程的区别。掌握 POSIX规范中pthread_create() 函 数的功能和使用方法。二. 实验前准备阅读参考资料,了解线程的创建等相关系统调用。三实验问题1你最初认为前三列数会相等吗?最后一列斜杠两边的数字是相等,还是大于或者小于关系?答:最初认为会很接近。认为后面两个数回相等。2. 最后的结果如你所料吗?有什么特点?对原因进行分析。答:结果第一个进程数字很大,因为他最先建立,并且中间有1s的延时。后面两个数sum值大于main_counter,开始被这个问题困住了。原因是因为 main_counter的自加是和其他进程共用的,有可能同一时刻3个时刻sum

6、+但ma in _cou nter只加一次,ma in _cou nte叶+分3步,先给自己赋值在 +1。所以 sum>ma in_coun ter3. thread 的CPU占用率是多少?为什么会这样?答:196%han 6379 196 0.0 26356 504 pts/0 Sl+ 20:520:21 ./posix3不得用于商业用途仅供个人参考我认为因为现在的电脑多为双核2线程,只保证2个线程并发执行,固系统 不断的运行自加,是cpu的占有率增大。4. thread_worker()内是死循环,它是怎么退出的?你认为这样退出好吗? 答:随着主程序的退出而退出。不好5. 把你的程序

7、源代码附到实验报告后。并请保留源代码,下次实验需要使用。四.实验心得通过本次实验,了解了线程的基本应用和他的特点,对线程的认识更深了一 步。实验4 互斥(修改第三题)一. 实验母的通过观察、分析实验现象,深入理解理解互斥锁的原理及特点掌握在POSIX规范中的互斥函数的功能及使用方法。二. 实验前准备准备好上节实验完成的程序thread.c 。阅读参考资料,了解互斥锁的加解 锁机制及相关的系统调用三. 实验内容找到thread.c 的代码临界区,用临界区解决 main_counter与sum不同步 的问题。四. 实验问题回答下列问题,写入实验报告。1. 你预想posix3+.c的运行结果会如何?

8、答: sum和main_counter的值是一样的2. posix3+.c 的实际运行结果如何?多次运行每次的现象都一样吗?为什么会 这样?答:sum和main_counter的值很接近,有时候完全一样。因为中间的输出还有一 定的时间差,在加到for循环外面时结果就正确了。3. 把修改后的两个程序的源代码附在实验报告后。实验4 互斥实验报告回答下列问题,写入实验报告。1. 你预想deadlock.c 的运行结果会如何?答:全都执行完2. deadlock.c的实际运行结果如何?多次运行每次的现象都一样吗?为什么不得用于商业用途仅供个人参考会这样?答:只有主线程能运行完。不一样。两个线程产生了互

9、斥条件,有的时候主线 程显得到资源,运行完后释放,有时候第二个线线程先得到资源运行。这就导 致了不一样。实验心得:通过本次实验,了解了互斥机制,对课本上死锁的概念更加的理解,以及死 锁发生的条件和解除死锁的方法。对问题的分析结合理论更加的清除。程序代码:实验2:#i nclude<stdio.h>#in clude<sys/types.h>#in cludevsig nal.h>#in clude<ctype.h>#i ncludev un istd.h>#defi ne MAX_CHILD_NUMBER 10#defi ne SLEEP_INT

10、ERVAL 2int proc_ nu mber=O;void do_someth in g();int main (i nt argc,char *argv)int child_proc_number=MAX_CHILD_NUMBER;int i,ch;pid_t child_pid;pid_t pid10=0;if(argc>1)child_proc_ nu mber=atoi(argv1);,child_proc_ nu mber=(child_proc_ nu mber>10)?10:child_proc_ number;_prin tf("forkn"

11、);for(i=0;i<child_proc_ nu mber;i+)child_pid=fork();if(child_pid>0)不得用于商业用途仅供个人参考pidi=child_pid;else if(child_pid=O)proc_ nu mber=i; do_someth in g();else prin tf("create prcess failed'n");while (ch = getchar() != 'q')if(isdigit(ch)kill(pidch-'O',SIGTERM);sleep(2)

12、; kill(0,SIGTERM);return 0;void do_somethi ng()for(;) NO.%d-pid=%dn",proc_numbe®®(s)processsleep(2);实验3:#i nclude<stdio.h> #in clude<stdlib.h> #in clude<sys/types.h> #i ncludev un istd.h> #in clude<ctype.h>#i nclude<pthread.h>#defi ne MAX_THREAD 3不得用于商

13、业用途仅供个人参考un sig ned long long main_cou nter,cou nterMAX_THREAD; void * thread(void *p);int main (i nt argc,char *argv)int i,rt n, ch;un sig ned long long sum=0;pthread_t pthread_idMAX_THREAD=0; for(i=0;i<MAX_THREAD;i+)*)thread,&i);rtn=pthread_create(&pthreaddi,NULL,(voidif(rtn !=0)printf(

14、"creadtepthread errorn");exit(1);sleep(1); doprin tf("n");for(i=0;i<MAX_THREAD;i+) sum+=co un teri;号:%llun",counteri);printf("线程prin tf("mai n=%llu/sum=%llu",main_cou nter,sum); sum=0;while(ch=getchar()!='q');return 0;void * thread(void *p)int threa

15、d _num=*(i nt*)p;for(;)不得用于商业用途main_cou nte叶+;coun terthread _nu m+;实验4:#i nclude<stdio.h>#in clude<sys/types.h>#i ncludev un istd.h>#in cludevsig nal.h>#in clude<ctype.h>#defi ne LOOP_TIME 10pthread_mutex_t mutex1;pthread_mutex_t mutex2;void * thread(void *);void critical_se

16、ct ion (i nt thread_ nu m,i nt i);int main()int rtn ,i;pthread_t pthread_id=0;rtn=pthread_create(&pthreadd,NULL,thread,NULL);if(rtn !=0)prin tf("pthread_create error n"); return 0; for(i=0;i<LOOP_TIME;i+)pthread_mutex_lock(&m utexl);pthread_mutex_lock(&m utex2);critical_sect

17、i on (1,i);pthread_mutex_ un lock(&m utex2); pthread_mutex_ un lock(&m utexl);pthread_mutex_destroy(&mutex1); pthread_mutex_destroy(&mutex2); return 0;void *thread(void *p)int i;for(i=0;i<LOOP_TIME;i+)pthread_mutex_lock(&m utex1); pthread_mutex_lock(&m utex2); critical_sec

18、tio n(2,i);pthread_mutex_ un lock(&m utex2); pthread_mutex_ un lock(&m utex1);void critical_sect ion (i nt thread_ nu m,i nt i)prin tf("thread%d:%dn",thread_num,i);实验3+:#i nclude<stdio.h>#i nclude<stdlib.h>#in clude<sys/types.h>#i ncludev un istd.h>#in clude<

19、;ctype.h>#i nclude<pthread.h>#defi ne MAX_THREAD 10pthread_mutex_t mutex仁PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutex2=PTHREAD_MUTEX_INITIALIZER; un sig ned long long main_cou nter,cou nterMAX_THREAD; void * thread(void *p);int main (i nt argc,char *argv)int i,rt n, ch;un sig ned long l

20、ong sum=0; pthread_mutex_i nit(&mutex1,NULL);pthread_t pthread_idMAX_THREAD=0; for(i=0;i<MAX_THREAD;i+)*)thread,&i);rtn=pthread_create(&pthreaddi,NULL,(voidif(rtn !=0)printf("creadtepthread errorn");exit(1);sleep(1); do为:llun",counteri);prin tf("n");pthread_mu

21、tex_lock(&m utex1); for(i=0;i<MAX_THREAD;i+) sum+=co un teri; prin tf(" 该线程值prin tf("mai n=%llu/sum=%llu",main_cou nter,sum); pthread_mutex_ un lock(&m utex1); sum=0;while(ch=getchar()!='q'); pthread_mutex_destro y(&m utex1); return 0;void * thread(void *p)int t

22、hread _num=*(i nt*)p;for(;)pthread_mutex_lock(&m utexl); coun terthread _nu m+; main_cou nte叶+;仅供个人参考pthread_mutex_ un lock(&m utexl);不得用于商业用途仅供个人参考仅供个人用于学习、研究;不得用于商业用途For personal use only in study and research; not for commercial use.Nur f u r den pers?nlichen f u r Studien, Forschung, zu

23、kommerziellen Zwecken verwendet werden.Pour l ' e tude et la recherche uniquementa des fins personnelles; pasa des fins commerciales.to员bko gA.nrogeHKO TOpiuenob3ydTflCH6yHeHMac egoB u HHue肉go 员冶hbiucno 员 B30BaTbCEb KOMMepqeckuxqe 员 ex.For personal use only in study and research; not for commerc

24、ial use以下无正文不得用于商业用途仅供个人用于学习、研究;不得用于商业用途For personal use only in study and research; not for commercial use.Nur f u r den pers?nlichen f u r Studien, Forschung, zu kommerziellen Zwecken verwendet werden.Pour l ' e tude et la recherche uniquementa des fins personnelles; pas fins comrr®rclieites.to员bko gA.nrogeHKO TOpMenob3ymoiflCH6yHeHuac egoB u HHuefigoHMucno 员 B30BaTbCEb KOMMepqeckuxqe 员 ex.以下无正文

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1