《Unix程序设计基础》PPT课件

《Unix程序设计基础》PPT课件

ID:39364744

大小:278.00 KB

页数:48页

时间:2019-07-01

《Unix程序设计基础》PPT课件_第1页
《Unix程序设计基础》PPT课件_第2页
《Unix程序设计基础》PPT课件_第3页
《Unix程序设计基础》PPT课件_第4页
《Unix程序设计基础》PPT课件_第5页
资源描述:

《《Unix程序设计基础》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Unix程序设计基础第二讲上一讲回顾80386CPU介绍实模式与保护模式特权级别分段与分页系统调用原理软中断引起特权级别的切换int80h被封装成一组C函数上一讲回顾Unix下对文件与设备的操作文件描述字设备文件文件操作系统调用打开,创建,关闭文件文件访问权限读写文件文件定位操作系统的重要概念:进程什么是进程?Unix下的进程Unix下的多进程编程进程控制信号处理进程间通信特殊的进程:线程什么是进程?几个定义:APUE:Anexecutinginstanceofaprogramiscalledapro

2、cess.不准确:程序一次运行可以创建多个进程实质上根本不对:在Unix下程序的运行并不产生一个新进程我的定义:进程是具有独立地址空间的运行单位“独立地址空间”很重要Unix使用flataddress,以32位系统为例,地址范围从0x0-0xffffffff。任何地址都是虚拟地址,要通过页面映射才能得到物理地址,这个过程对进程来说是透明的,进程看到的都是虚拟地址。“独立地址空间”是指各个进程都有自己的虚拟地址空间(在Linux下为0x0-0xbfffffff),而且任何进程都只能访问到自已经的虚拟地址

3、空间。进程的并发性宏观上,所有进程都是并发运行的。微观上,除非是多处理器,否则不可能有两个进程在同时运行。具体方法是时间片轮转:一个进程运行一个时间片,就把CPU让出来让另一个进程运行。因为时间片很小,所以用户看起来所有进程都在运行。任何两个不相关的进程其推进速度可能是任意的。并发带来的好处与挑战很明显好处:可以让多个用户分享CPU。对单用户而言,也可同时运行多个程序,如一边上网一边QQ。更深层次的好处:充分利用CPU资源。当一个进程在等待数据时(从网络,外部设备等),其它进程可占用CPU。并发带来的

4、好处与挑战挑战:并不是所有的事情都可以同时做。两个进程同时写一个文件,对于普通文件,文件某一个位置上的内容是最后一次写入的结果。好像还不太糟。但如果这个文件是一台打印机那将会怎么样?可以想像打印出来的东西将不是任何一个进程想得到的。数据的不一致性。数据的不一致性例:多个进程通过共享内存通信(一种进程间通信方式,与地址空间独立性无关),共享一块物理地址。每个进程都通过int*p映射到这块物理地址。进程每次获取一个网页,调用*p=*p+1。最后*p的值就是多个进程获取到的网页总合。数据的不一致性进程1mo

5、veax,[p]inceaxmov[p],eax进程2moveax,[p]inceaxmov[p],eax结果不是我们想要的,*p只被加了1!数据的不一致性因为*p是共享资源,因此对它写操作应该是互斥的。访问文件也是类似。在编写多进程或多线程程序时应当特别注意。Unix下的进程五种基本状态新建进程正在被创建就绪进程正在等待被调度运行进程正占用CPU睡眠(阻塞)进程正在等待一个事件,例如I/O僵死进程已经结束,正在等待释放资源$ps–guax查看系统中的所有进程的详细情况状态之间的转换进程ID与进程间的

6、关系UNIX系统中所有进程都有一个唯一的,称为进程标识的正整数与之相联,称为进程ID,简称PID。除了init进程(PID=1,所有进程的祖先),任一进程都有唯一的父进程。若干进程可以属于一个进程组,进程组也有一个唯一进程组ID。Unix下的多进程编程分三个部分1、进程控制2、信号处理3、进程间通信(IPC)进程控制进程创建fork函数原型:#includepid_tfork(void);UNIX下最优美的函数。pid_t是一个unisignedint,是进程号对应的数据类型进程创

7、建“fork”的意思就是一分为二,把当前进程复制出一个新的进程。当前的进程就是新进程的父进程,新进程称为子进程。fork把子进程ID返回给父进程,把0返回给子进程,通过对返回值的检查就可知道当前是父进程还是子进程。看看下面的例子就明白我在说什么。#include#include#includeintmain(void){ pid_tpid;if((pid=fork())>0)printf(“Iamtheparent,mypid=%u,mychi

8、ld’spid=%u”,getpid(),pid);elseif(pid==0)printf(“Iamthechild,mypid=%u,myparent’spid=%u”,getpid(),getppid());else{perror(“fork”);return1;}return0;}进程创建一般结构:if((pid=fork())>0)parent’scode;elseif(pid==0)child’scode;elseerrorhandl

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。