云南理工大学linux教学-3Linux-第三讲.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文档。上传文档
查看更多
进程介绍 进程的定义 操作系统角度的定义:进程分为三个部分,进程控制块,程序段和数据段。 进程与线程的关系再来看看线程。线程又被称为轻量级进程。不同的进程之间有不同的代码空间和数据空间,但是同一个进程之内的线程却共享该进程的数据空间和代码空间。不仅如此,它们还共享进程打开的文件描述符,信号句柄,信号处理器和当前目录状态,以及进程ID和进程组ID。 进程提供的的虚拟机制 Linux下的进程的起止 slab分配器分配task_struct结构,完成对象复用与缓存着色的目的。 2.6版以前的内核中的进程将task_struct结构放在内核栈的尾部,便于快速计算地址。 存放 进程具有唯一的进程标识符值PID(PIV)。 其最大值的作用 访问进程是从获取指向其的task_sruct指针开始。 current宏及其作用方法 进程上下文 执行系统调用 异常处理程序 两者是系统定义的接口 当一个程序执行了系统调用或触发了异常,就会陷入内核,处于进程上下文。 进程创建 fork():通过拷贝当前进程创建一个子进程 vfork():与fork()功能相同,子进程作为父进程的一个单独的线程在它的地址空间里运行。 写时拷贝是一种可以推迟甚至免除拷贝数据的技术。内核此时并不复制整个进程地址空间,而是让父进程和子进程共享同一个拷贝。 只有在需要写入的时候,数据才会被复制,从而使各个进程拥有各自的拷贝。也就是说,资源的复制只有在需要写入的时候才进行,在此之前,只是以只读方式共享。这种技术使地址空间上的页的拷贝被推迟到实际发生写入的时候才进行。 线程在Linux中的实现 轻量级进程概念 clone(),fork()与vfork()实现的区别。 clone(SIGCHLD,0); //fork(),创建普通进程 创建线程 clone(CLONE_VFORK|CLONE_VM|SIGCHLD,0); //vfork() 线程在Linux中的实现 实现线程的方法的比较 内核线程 Struct task_struct *kthread_create(int,(*threadfn) (void *data),void *data,const char namefmt[]) //创建新线程 Struct task_struct *kthread_run(int,(*threadfn) (void *data),void *data,const char namefmt[]) //创建新线程并让它运行 * * 计算机科学与工程学院 * * 第三章 进程 进程介绍 进程描述符与任务结构 进程的组织方式 进程的状态切换 进程的创建 Linux下线程的实现与内核线程 进程的终结 进程介绍-程序和进程 进程介绍-进程层次结构 init A B C D E 进程介绍-进程状态 ? ? ? 运行态 阻塞态 就绪态 进程介绍-进程示例 #include sys/types.h /* 提供类型pid_t的定义,在PC机上与int型 相同 */ #include unistd.h /* 提供系统调用的定义 */ main() { pid_t pid; /*此时仅有一个进程*/ printf(“PID before fork():%d\n”,(int)getpid()); pid=fork(); /*此时已经有两个进程在同时运行*/ if(pid0) printf(error in fork!); else if(pid==0) printf(I am the child process, my process ID is %d\n,getpid()); else printf(I am the parent process, my process ID is %d\n,getpid()); } 进程介绍-进程示例 编译并运行这个程序: $gcc fork_test.c -o fork_test $./fork_test PID before fork():1991 I am the child process, my process ID is 1992 I am the parent process, my process ID is 1991 进程控制块 对进程进行全面描述的数据结构 Linux中把对进程的描述结构叫做task

文档评论(0)

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

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

版权声明书
用户编号:8135026137000003

1亿VIP精品文档

相关文档