计算机操作系统教程实验.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机操作系统教程实验

一个简单的进程创建程序 #includestdio.h #includesys/types.h #includeunistd.h int main(void) { pid_t pid ; int data = 4; if(0==(pid=fork()))//子进程 { data += 1; printf(SubProcess : %d\n ,data); exit(0); } else//父进程 { wait(NULL);//或者waitpid(pid,NULL); data += 2; printf(MainProcess : %d\n,data); } return 0; } //wait:只要有一个子进程返回,父进程就继续执行 //waitpid:只有当pid返回时,父进程才返回; 实验一之进程实现缓冲区读写: 两个进程,共享内存data; 进程1负责计算数据(比如:+10),并将值写入共享内存;进程2负责从共享内存读出数据并打印; 思路: main() { (1) 创建并初始化信号量(集);//前面已讲,不赘述 (2) 创建共享内存; (3) 将共享内存映射到父进程的地址空间,并对其初始化; (4)创建两个子进程subp1、subp2; (5)将共享内存映射到子进程sub1和子进程sub2的地址空间; * (进程subp1进行计算;进程subp2中进行打印) (6)等待两个进程运行结束; (7)删除信号量(集); (8)删除共享存储区; } 创建共享内存 原型:int shmget(key_t key, size_t size, int flag); 返回值:成功-返回共享内存的标识符;出错-返回-1 参数: key: 通常为一整型常量或由ftok()函数返回;也可以是 IPC_CREAT,此时会 创建新的新的共享内存,且此共享内存只能在进程家族内共享; size: 共享内存的大小,单位为字节; flag:表示创建方式以及访问权限;通常为IPC_CREAT|0666 示例:int shmid = shmget(200,sizeof(int),IPC_CREAT|0666); int shmid = shmget(IPC_PRIVATE,sizeof(int),0666); 返回 绑定并初始化共享内存 原型:void* shmat(int shmid,char *shmaddr,int flag) 返回值:成功-返回共享存储段地址;失败-返回(viud*)-1 参数: shmid: shmget函数返回的共享存储标识符 shmaddr:用于指定共享内存映射到进程内存地址的什么 位置,通常取值为NULL,表示让内核自己决定 一个合适的地址位置 flag:默认为0,表示可读可写模式; 若取值SHM_RDONLY,则表示为只读模式 示例:int * data = (int *)shmat( shmid, NULL, 0 );//绑定 *data = 0; //初始化共享内存 返回 断开共享内存连接(解绑) 原型:int shmdt(const void *shmaddr) 返回值:成功返回0;失败返回-1 参数: shmaddr:表示要解绑的共享内存地址 说明:此系统调用并不删除所指定的共享内存区,而只是将先前用shmat函数连接(attach)好的共享内存脱离(detach)目前的进程 删除共享内存 原型:int shmctl(int shmid, int cmd, struct shmid_ds *buf) 返回值:成功返回0;失败返回-1 参数: shmid:共享内存标识符 cmd: 表示执行的命令类型 常见取值如下: IPC_RMID:删除 IPC_STAT:得到共享内存的状态,把共享内存的 shmid_ds结构复制到buf中

文档评论(0)

精品文档 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档