资源描述:
《操作系统课件 第十二章 UNIX 实例分析(2).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、12.6设备管理打开一个设备文件即相当于申请对应的设备,如该设备已处于打开状态则等待关闭一个设备文件即相当于释放对应的设备,如有等待者则唤醒一个读写一个设备文件就相当于对所对应的设备执行I/O操作缓冲与缓存块型设备缓冲用于磁盘、磁带等设备的I/O传输每个缓冲区的长度与块型物理设备中一个块的长度相同,即为512字节缓冲区为所有块型设备公用,其总数为15个块型设备缓冲structbuf{intb_flags;/*seedefinitionbelow*/structbuf*b_forw;/*headedbydevtab
2、ofb_dev*/structbuf*b_back;/*设备b链向后指针*/structbuf*av_forw;/*av链向前指针*/structbuf*av_back;/*av链向后指针*/intb_dev;/*设备名*/intb_wcount;/*传送字数*/char*b_addr;/*内存地址(低位)*/char*b_xmem;/*内存地址(高位)*/char*b_blkno;/*设备物理块号*/charb_error;/*返回出错信息*/char*b_resid;/*传送剩余字节*/}buf[NBUF];
3、块型设备控制结构structdevtab{chard_active;/*busyflag*/chard_erncnt;/*errorcount*/structbuf*b_forw;/*firstbufferforthisdev*/structbuf*b_back;/*lastbufferforthisdev*/structbuf*d_actf;/*headofIOqueue*/structbuf*d_actl;/*tailofIOqueue*/}块缓冲数据读写内存区缓冲区磁盘块iomovebread,breada
4、bwrite,bawrite,bdwrite字符型设备缓冲缓冲池structcblock{structcblock*c_next;/*pointer*/charinfo[6];/*infocontainer*/}读操作写操作预先读与延迟写预先读(readahead)将以后即将使用的块读入缓冲区中以后进程需要该块时便可在缓冲区中直接得到,不必等待设备I/O传输基于文件顺序访问的假设延迟写(delayedwrite)当一个缓冲块尚未写满时,暂不将其写到外存以后继续写时,不必将该块由外存读入内存12.7系统调用主要包括
5、ProcessmanipulationFilemanipulationCommunicationOthers12.7.1有关进程的系统调用命令相关系统调用创建子进程Pid=fork()加载并执行新程序execl(prog,arg0,…argn-1,0)进程自我结束exit(status)等待子进程终止pid=wait(&status)proc结构p_pid=9p_ppid=5user结构pid=fork();if(pid==0)/*成立*/{/*子进程代码*/}else{/*父进程代码*/}…proc结构p_pi
6、d=15p_ppid=9user结构复制父进程子进程fork()创建子进程联系子进程号(>0整数)pid=fork();if(pid==0)/*不成立*/{/*子进程代码*/}else{/*父进程代码*/}…恒为0pid=fork();if(pid==0)/*不成立*/{execl(“P”,0);}else{/*父进程代码*/}…proc结构p_pid=9p_ppid=5user结构pid=fork();if(pid==0)/*成立*/{execl(“P”,0);}else{/*父进程代码*/}…proc结构p_
7、pid=15p_ppid=9user结构父进程子进程execl()加载并执行新程序pid=fork();if(pid==0)/*不成立*/{execl(“P”,0);}else{/*父进程代码*/}…proc结构p_pid=9p_ppid=5user结构程序P(覆盖原来程序)proc结构p_pid=15p_ppid=9user结构父进程子进程execl()加载并执行新程序pid=fork();if(pid==0)/*不成立*/{execl(“P”,0);}else{/*父进程代码*/}…proc结构p_pid=9
8、p_ppid=5user结构程序P(覆盖原来程序)exit(2)proc结构p_pid=15p_ppid=9user结构父进程子进程exit()进程自我终止pid=fork();if(pid==0)/*不成立*/{execl(“P”,0);}else{…p=wait(&s);}…proc结构p_pid=9p_ppid=5user结构…程序P(覆盖原来程序)…exit(2)