操作系统课程设计.pptx

上传人:莉*** 文档编号:77747820 上传时间:2023-03-16 格式:PPTX 页数:27 大小:111.20KB
返回 下载 相关 举报
操作系统课程设计.pptx_第1页
第1页 / 共27页
操作系统课程设计.pptx_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《操作系统课程设计.pptx》由会员分享,可在线阅读,更多相关《操作系统课程设计.pptx(27页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、文本编辑相关vi ed 系统命令reboot shutdown chmod chgrp chownuseradd groupadd三、Linux环境编程1、基本流程和命令第1页/共27页编辑-编译-调试-连接-运行编辑:常用vi或其他IDE集成开发环境编译:gcc o abc abc.c gcc g o abc abc.c /abc中加调试信息调试:gdb abc /只有在编译时加了-g选项才可能用gdb调试break NUM 在指定的行上设置断点。clear 删除设置在特定源文件、特定行上的断点。Clear FILENAME:NUM。print EXPR 显示表达式 EXPR 的值 list

2、 显示源代码段 next 在不单步执行进入其他函数的情况下,向前执行一行源代码 help 帮助q 退出运行 ./abc四、常用系统调用第2页/共27页(1)设备管理:如ioctrl()(2)文件管理:open()close()read()write()(3)进程控制:fork()wait()getpid()exec()(4)进程通信:signal()kill()(5)存储管理:memset()五、实习用文件系统相关系统调用,打开/proc/sys/fs/file-max文件,获得本操作系统最大可打开文件句柄数。第3页/共27页实验二 Linux系统调用分析通过对Linux的fork exec等

3、代码的分析了解一个操作系统进程的创建执行等过程锻炼学生分析大型软件代码的能力.一、/include/linux/shed.h包含了进程相关的数据结构task_struct二、kernel/fork.c包含了get_pid和do_fork 三、fs/exec.c包含了do_execve 第4页/共27页四、要求分析源代码,分组讨论分工合作。要求至少有以下内容:进程idstruct task_struct分析struct task_struct volatile long state;/*-1 unrunnable,0 runnable,0 stopped*/unsigned long flags

4、;第5页/共27页int has_cpu;int processor;int last_processor;int lock_depth;struct task_struct*next_task,*prev_task;struct task_struct*next_run,*prev_run;第6页/共27页pid_t pid;struct task_struct*p_opptr,*p_pptr,*p_cptr,*p_ysptr,*p_osptr;struct task_struct*pidhash_next;struct task_struct*pidhash_pprev;第7页/共27页P

5、idhash分析linux进程的6种状态:#define TASK_RUNNING0#define TASK_INTERRUPTIBLE1#define TASK_UNINTERRUPTIBLE2#define TASK_ZOMBIE4#define TASK_STOPPED8#define TASK_SWAPPING16第8页/共27页do_fork流程框图do_execve流程框图第9页/共27页Fork()实例#includeMain()Int getpid(),getppid(),pid;puts(“Before fork.”);Printf(“The parent pid of pr

6、ocess%d is%dn”,getpid(),getppid();If(pid=fork()=-1)exit(1);ElseIf(pid=0)/子进程 puts(“child process after fork”);Printf(“The parent pid of process%d is%dn”,getpid(),getppid();exit(1);Else/父进程wait();puts(“parent process after fork”);Printf(“The parent pid of process%d is%dn”,getpid(),getppid();Printf(“T

7、he child pid of process%d is%dn”,getpid(),pid);Exit(0);第10页/共27页实验三 进程间通信一、进程间通信基础知识高级通信:socket通信低级通信:管道、消息通信消息队列=消息队列头+消息头+消息文本消息队列头:struct msqid_ds 消息头:struct msg*msg_next;msg_type;Msg_ts;msg_spot;消息文本:struct msgbufmtype;char*mtext;第11页/共27页Msgget():建立消息队列;返回消息队列idInt msgget(key_t key,int flags)Ms

8、gctl():取得、修改消息队列属性int msgctl(int msgid,int cmd,struct msqid_ds*mbuf)Msgsnd()与msgrcv()int msgsnd(msgid,void*msgp,msgtype,msgflag);Int msgrcv(msgid,msgp,size_t,msgtype,msgflag)第12页/共27页二、管道通信用pipe()系统调用编写程序实现:父进程通过管道向子进程发送一个字符串,子进程将其显示出来。第13页/共27页三、模拟生产者-消费者进程通信过程1、PV操作与生产者消费者问题回顾(1)信号灯,是一个确定的二元组(s,q)

9、,s是信号量,是一个非负初值的整型变量,q为初始状态为空的队列(即等待队列)。S0,代表可供并发进程使用的资源个数(临界资源则只有1个)S=0,代表所有进程都分配到了资源,且空闲资源数为。S0,代表有|s|个进程等待临界资源以进入临界区。第14页/共27页(2)P、V操作改变信号量的值,是通过PV原语来完成的;记作:P(s)和V(s)。P(s):使信号量s的值减;V(s):使信号量s的值加;(3)用信号灯和PV操作实现进程的同步第15页/共27页私有信号量:一个进程的私有信号量是从制约进程发送来的该进程执行所必须的消息;该信号量只与制约、被制约进程有关。利用私有信号量,可以通过使用PV操作实现

10、进程同步。(4)生产者消费者问题生产者消费者问题主要是同步问题,但是其中涉及到互斥问题。第16页/共27页生产者把系统中释放某一类资源的进程统称为生产者。消费者把系统中使用某一类资源的进程统称为消费者。生产者之间必须是互斥的。消费者之间必须是互斥的。必须设一个公有信号量.(也可保证P-C之间互斥)而生产者P和消费者C之间必须是同步的。必须为P和C各设一个私有信号量第17页/共27页用PV操作的解为:P()/生产者P(empty;P(mutex);V(mutex);V(full);C()/消费者P(empty);P(mutex);V(mutex);V(empty);两进程相互间通过mutex e

11、mpty full 3个信号量通信,达到同步。第18页/共27页(5)在Linux环境下模拟生产者-消费者进程间的同步通信设计思路:通过fork()产生两个进程;其中一个是生产者进程,另一个是消费者进程。生产者进程主要功能:寻找一个随机数范围内所有的素数个数。消费者进程主要功能:求该随机数的平方。第19页/共27页利用Linux提供系统调用:sigset sigholdsigrelsesigpause kill配合使用,实现PV操作的类似功能并能相互通信和唤醒。第20页/共27页关键部分代码#includemain()int i,j,pid,cpid,find_prime(int),squar

12、e(int);short s_flag=1;void catch_signal(),catch_usr();setbuf(stdout,(char*)NULL);puts(ctrl+to terminamte program);sigset(SIGUSR1,catch_usr);sigset(SIGUSR2,catch_usr);sigset(SIGQUIT,catch_signal);sigset(SIGINT,catch_signal);srand(getpid();第21页/共27页if(cpid=fork()=0)pid=getppid();while(1)puts(producer

13、processing.);sighold(SIGUSR1);find_prime(rand()%20901);puts(Job done!send message);kill(pid,SIGUSR2);for(j=0;j65535;j+);sigrelse(SIGUSR1);puts(producer went to sleep);sigpause(SIGUSR1);puts(producer is wakeing up);第22页/共27页while(1)puts(ttconsumer processing.);sighold(SIGUSR2);printf(ttsquare=%dn,squ

14、are(rand()%251);puts(ttjob done!send message!);kill(cpid,SIGUSR1);for(j=0;j=65535;j+);sigrelse(SIGUSR2);puts(ttconsumer went to sleep);sigpause(SIGUSR2);puts(ttconsumer is waking up);第23页/共27页void catch_signal(int signo)puts(process is interrupted!);exit(1);void catch_usr(int signo)printf(#%d signal

15、 sendn,signo);sigset(signo,catch_usr);return;Int find_prime(int randnum)Int j,k=2;unsigned cnt=0;Puts(“counting now”);For(;k=randnum;+k)J=2;while(k%j!=0)+j;If(j=k)+cnt;第24页/共27页Int square(int x)sleep(2);return(x*x);注意要求通过man帮助信息,搞清楚sig类系统调用的功能用法;并分析、设计程序流程,指出程序中实现P操作部分和实现V操作部分,尤其是kill()的唤醒同步功能如何实现。第25页/共27页实验四 作业调度算法模拟作业调度的模拟实现实验内容作业调度的原理;作业以及作业调度算法的实现1作业控制块;作业的状态;作业就绪队列;2数据结构和算法:作业控制块JCB;作业就绪队列;先来先服务法fifo();短作业优先法fsfo()重点作业的创建;先来先服务法;短作业优先法回顾操作系统原理中有关作业以及作业调度的原理;模拟实现作业以及作业调度的算法,加深对操作系统中作业管理部分的理解。第26页/共27页感谢您的观看!第27页/共27页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > PPT文档

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com