ImageVerifierCode 换一换
格式:DOCX , 页数:106 ,大小:122.62KB ,
资源ID:22899992      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22899992.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统课程设计指导书文档格式.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统课程设计指导书文档格式.docx

1、该系统调用返回的描述符,失败则返回-1;flag:本身由操作允许权和控制命令值相“或”得到。如:IPC_CREAT|0400是否该队列应被创建;IPC_EXCL|0400是否该队列的创建映是互斥的等。4.msgsnd(id,msgp,size,flag)发送一消息头文件;syy/types.hsys/msg.hint msgsnd(id,msgp,size,flag);int id,size,flag;struct msgbuf *msgp;其中:id:返回消息队列的描述符;msgp:指向用户存储区的一个构造体指针;size:指示由msgp指向的数据结构中字符数组的长度,即消息的长度。这个数组

2、的最大值由MSG_MAX系统可调用参数来确定。规定当核心用尽内部缓冲空间时应执行的动作;若在标志flag中未设置IPC_NOWAIT位,则当该消息队列中的字节数超过一最大值时,或系统范围的消息数超过某一最大值时,调用msgsnd进程睡眠。若是设置IPC_N0WAIT,则在此情况下,msgsnd立即返回。5.msgrcv(id,msgp,size,type,flag)接受一消息int msgrcv(id,msgp,size,type,flag)int id,size,type,flag;struct msgbuf *msgq;struct msgbuf long mtype schar mtex

3、t;count=msgrcv(id,msgp,size,type,flag);消息描述符;用来存放欲接收消息的拥护数据结构的地址;msgp中数据数组的大小;type:用户要读的消息类型:type=0:接收该队列的第一个消息;type0:接收类型type的第一个消息;typeint msgctl(id,cmd,buf)int id,cmd;struct msqiq_ds *buf;函数调用成功时返回0,调用不成功时返回-1。用来识别该消息的描述符;cmd:规定命令的类型。IPC_STAT:将与id相关联的消息队列首标读入buf。IPC_SET:为这个消息序列设置有效的用户和小组标识及操作允许权和

4、字节的数量。IPC_RMID:删除id的消息队列。buf:是含有控制参数或查询结果的用户数据结构的地址。附:msgid_ds结构定义如下:struct msgid_dsstruct ipc_perm msg_perm; /许可权结构short pad17; /由系统使用ushort onsg_qnum; /队列上消息数ushort msg_qbytes; /队列上最大字节数ushort msg_lspid; /最后发送消息的PIDushort msg_lrpid; /最后接收消息的PIDtime_t msg_stime; /最后发送消息的时间time_t msg_rtime; /最后接收消息的

5、时间time_t msg_ctime; /最后更改时间struct ipc_permushort uid; /当前进程用户idushort gid; /当前进程组idushort cuid; /创建用户idushort cgid; /创建进程组idushort mode; /存取许可权short pad1;long pad2; /由系统使用7.shmget(key,size,flag)获得一个共享存储区sys/shm.hshmid=shmget(key,size,flag);参数定义int shmget(key,size,flag);key_t key;int size,flag;size是存

6、储区的字节数,key和flag与系统调用msgget中的参数含义相同。操作允许权八进制数用户可读00400用户可写00200组可读00040组可写00020其他人可读00004其他人可写00002控制命令值RPC_CREAT0001000IPC_EXCL0002000如:shmid=shmget(key,size,(IPC_CREAT|0400);创建一个关键字为key,长度为size的共享存储区。8.shmat(id,addr,flag)从逻辑上将一个共享存储区附接到进程的虚拟地址空间。char *shmat(id,addr,flag);int id,flag;char *addr;virt

7、addr=shmat(id,addr,flag);id:共享存储区的标识符;addr:用户要使用共享存储区附接的虚地址,若addr是0,系统选择一个适当的地址来附接该共享区;flag:规定对此区的读写权限,以及系统是否应对用户规定的地址做舍入操作,如果flag中设置了shm_rnd即表示操作系统在必要时舍去这个地址。如果设置了shm_rdonly,即表示只允许读操作;viraddr是附接的虚地址。9.shmdt(addr)把一个共享存储区从指定进程的虚地址空间断开。int shmdt(addr)char *addr其中,当调用成功时,返回0值,调用不成功返回-1;addr是系统调用shmat所

8、返回的的地址。10.shmctl(id,cmd,buf)对与共享存储区关联的各种参数进行操作,从而对共享存储区进行控制。#include (sys/types.h)#include (sys/ipc.h)#include (sys/shm.h)int shmct1(id,cmd,buf);struct shmid_ds *buf;调用成功时返回0,否则返回-1。Id:为被共享存储区的标识符;Cmd:规定操作的类型。规定如下:返回包含在指定的shmid相关数据结构中的状态信息,并且把它放置在用户存储区中的*buf指针所指的数据结构中。执行此命令的进程必须有读取允许权。对于指定的shmid,为它设

9、置有效用户和小组标识和操作存取权。删除指定的shmid以及与它相关的共享存储区的数据结构。SHM_LOCK:在内存中锁定指定的共享存储区,必须是超级用户才可以进行此项操作。Buf:是一个用户级数据结构地址。shmid_ds struct ipc_perm shm_perm;int shm_segsz; /段大小int pad1; /由系统使用ushort shm_lpid; /最后操作的进程idushort chm_cpid; /创建者的进程idushort shm_nattch; /当前附接数ushort pad2; /由系统使用;time_t shm_atime; /最后附接时间time_

10、t shm_dtime; /最后断接时间time_t shm_ctime; /最后修改时间11.signal(sig,function)允许调用进程控制软中断信号的处理。signal.hsignal(sig,function)int sig;void (*function)();返回值:成功时返回旧的(以前)函数描述,失败时返回SIG_ERR。说明:信号sig的值在头文件singal.h中有完整定义和描述,可用man 7 signal来获得帮助。sig的值是:SIGHUP 挂起SIGINT 键盘按delete键或break键SIGQUIT 键盘按quit键SIGILL 非法指令SIGIOT I

11、0T指令SIGEMT EMT指令SIGFPE 浮点运算溢出SIGKILL 要求终止进程SIGBUS 总线错SIGSEGV 段违例SIGSYS 系统调用参数错SIGPIPE 向无读者管道上写SIGALRM 闹钟SIGTERM 软件终结SIGUSR1 第一个用户定义信号SIGUSR2 第二个用户定义信号SIGCLD 子进程死SIGPWR 电源故障function的解释如下:SIG_DFL:缺省操作。对除SIGPWR和SIGCLD外所有信号的缺省操作是进程终止。对信号SIGQUIT,SIGILL,SIGTRAP,SIGIOT,SIGEMT,SIGFPE,SIGBUS,SIGSEGV和SIGSYS它产

12、生一内存映像文件。SIG_IGN:忽视该信号的出现。function:在该进程中的一个函数地址,在核心返回用户态时,它以软中断信号的序号作为参数调用该函数,对除了信号SIGILL,SIGTRAP和SIGPWR以外的信号,核心自动地重新设置软中断信号处理程序的值为SIG_DFL,一个进程不能捕获SIGKILL信号。12.kill(pid,sig)向pid为进程号的进程发送信号sig。int kill(pid_t pid,int sig)pid_t pid:信号的接收进程。(pid_t可用整数代替。)若pid0,则pid为接收者的进程号,若pid=0,则接收者为同组的所有进程。若pid=-1则发送

13、到除init进程外的所有进程。若pidfcntl.hint open(const char * pathname, int oflag) ;int open(const char * pathname, int oflag, mode_t mode ) ;成功时为文件描述符,出错则为-1。open的参数pathname是要打开或创建的文件的名字。oflag参数可用来说明此函数的多个选择项。用下列一个或多个常数进行或运算构成oflag参数(在fcntl.h中): O_RDONLY:只读打开。 O_WRONLY:只写打开。 O_RDWR :读写打开 O_APPEND 追加方式。 O_CREAT 若

14、不存在则创建它。需同时使用第三个参数mode。 O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错。这可测试一个文件是否存在,如果不存在则创建此文件成为一个原子操作。 O_TRUNC 如果此文件存在,则将其长度截短为0。 O_NOCTTY 如果pathname指的是终端设备,则不将此设备分配作为此进程的控制终端。 O_NONBLOCK 如果pathname指的是特殊文件,此选择项为此文件的本次打开操作和后续的I / O操作设置非阻塞方式。creat功能:创建一个新文件int creat(const char * pathname, mode_t mode) ;返回:成功为只写打

15、开的文件描述符;出错为-1。注意:此函数等效于:open (pathname, O_WRONLYO_CREATO_TRUNC, mode) ;read从描述符为filedes的文件读信息。ssize_t read(int filedes, void *buff, size_t nbytes) ;读到的字节数,若已到文件尾为0,若出错为-1。 在UNIX/Linux 可重定义为: int read(int fd, char *buff, unsigned nbytes) ;write向已打开的文件写数据。ssize_t write(int filedes, const void * buff,

16、size_t nbytes) ;若成功为已写入的字节数;int write(int fd, char *buff, unsigned nbytes) ;文件位置指针文件位置指针:每个打开文件都有一个与其相关联的“当前位移量”。是从文件开始处计算的字节数。通常,读、写操作都从当前文件位置处开始,并使位移量增加所读或写的字节数。按系统默认,当打开一个文件时,除非指定O_APPEND选择项,否则该位移量被设置为0,即指向文件的开始处。文件位置指针可以通过系统调用lseek来移动。lseek显式地定位一个打开文件的位置指针。off_t lseek(int filedes, off_t offset,

17、int whence) ;若成功为新的文件位移,若出错为-1。对参数offset 的解释与参数whence的值有关:whence=SEEK_SET(0),从文件开始。whence=SEEK_CUR(1),从当前位置, offset可正可负。whence=SEEK_END(2),从文件末尾, offset可为正或负。例:求文件的当前位置指针:off_t currpos; currpos = lseek(fd, 0, SEEK_CUR);这种方法也可用来确定所涉及的文件是否可以设置位移量。如果文件描述符引用的是一个管道或FIFO,则lseek返回-1,并将errno设置为EPIPE。fcntl控制

18、和改变已经打开文件的属性。int fcntl(int filedes, int cmd, long arg ) ;int fcntl(int filedes, int cmd, struct flock *lock ) ;若成功则依赖于cmd(见下),若出错为-1fcntl函数有五种功能 复制一个现存的描述符(cmdF_DUPFD),新文件描述符作为函数值返回。它是尚未打开的各描述符中大于或等于第三个参数值中各值的最小值。新描述符与filedes 共享同一文件表项; 获得/设置文件描述符标记(cmd=F_GETFD/F_SETFD);对应于filedes 的文件描述符标志作为函数值返回。 获得

19、/设置文件状态标志(cmd=F_GETFL / F_SETFL);新标志值按第三个参数设置。可以更改的几个标志是:O_APPEND,O_NONBLOCK,O_SYNC和O_ASYNC。 获得/设置异步I/O有权(cmd=F_GETOWN/F_SETOWN);获取或接收当前接收SIGIO和SIGURG信号的进程ID或进程组ID。 获得/设置记录锁(cmd=F_GETLK, F_SETLK或F_SETLKW)。ioctl函数ioctl 函数是I/O操作的杂物箱。不能用本章中其他函数表示的I / O操作通常都能用ioctl表示。终端I/O是ioctl 的最大使用方面(第11章将介绍P O S I X

20、 . 1已经用新的函数代替ioctl进行终端I / O操作)。Ioctl更多的是用于设备控制,比如磁盘的格式化,MODEM设备,磁带的快进、快倒等。文件高级I/O中的二进制I/O及定位字符I/O只能用于文本文件,而对于二进制文件则会出错。对于二进制文件必须使用二进制I/O。二进制I/O系统调用:fread,fwrite以二进制方式进行I/O。stdio.hsize_t fread(void *ptr, size_t size, size_t nobj, FILE *fp);size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE

21、 *fp);读或写的对象个数。流定位有两种方法定位标准I/O流。(1) ftell和fseek。这两个函数自SYS V7以来就存在了,但是它们都假定文件的位置可以存放在一个长整型中。(2) fgetpos和fsetpos。这两个函数是新由ANSI C引入的。它们引进了一个新的抽象数据类型fpos_t,它记录文件的位置。在非UNIX系统中,这种数据类型可以定义为记录一个文件的位置所需的长度。需要移植到非UNIX系统上运行的应用程序应当使用fgetpos和fsetpos。流定位,可参照系统调用lseek()。1. 系统调用:ftell:确定文件位置。long ftell(FILE *fp);若成功

22、则为当前文件位置指示,若出错则为-1L2. 系统调用:fseek:int fseek(FILE *fp, long offset, int whence);若成功则为0,若出错则为非0(-1)。3. 系统调用:fgetpos,fsetpos获得或设置文件位置。int fgetpos(FILE *fp, fpos_t *pos);int fsetpos(FILE *fp, const fpos_t *pos);若成功则为0,若出错则为非0(-1).注:Linux操作系统是一个向用户开放源码的免费的类UNIX操作系统。它为在校学生学习操作系统课程提供了一个看得见摸得着的范例。对于学生正确理解,掌握

23、操作系统的基本知识具有重要意义。鉴于此,本操作系统课程涉及的实验均在Linux环境下进行。这就要求大家:(1)熟悉Linux的操作和开发环境;(2)具有C语言知识(Linux操作系统大约90%的源码是用C语言编写)。Linux系统的内核源代码可以从很多的网站上下载。如果想安装Linux系统,可以利用Linux安装光盘进行安装,或从校学校的资源上下载RedHat9.2的光盘映象文件。地址为。虚拟机软件,也可从该网站下载。我们的设计和实验将Windows环境下,基于虚拟机软件VMWare软件进行安装。具体安装办法,参见虚拟机下的RedHat9.2的安装方法。设计指导1.图书管理系统以UNIX系统文件部分系统调用为基础设计一个简易的图书管理系统。要求实现:图书的录入、查询、借阅、清理、统计等功能、还要实现对每天的借阅情况进行统计并出来统计报表。图书查询图书录入图书借阅2.信号通信与进程控制(l)进程的创建:编写一段程序,使用系统调用fork()创建两个或多个子进程。当此程序运行时,在系统中有一个父进程和其余为子进程活动。(2)进程的控制:在程序中使用系统调用lockf()来给每一个进程加锁,实现进程之间的互斥。(3)进程通信:软中断通信;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1