- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于Linux的线程与进程
关于Linux的线程与进程学院:计算机科学学院班级:计科10904班学号:201110043姓名:王成龙一、什么是进程直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源,所以我们也说,进程是资源分配的最小单位。二、什么是线程线程存在与进程当中,是操作系统调度执行的最小单位。说通俗点,线程就是干活的。三、进程和线程的区别与联系如果说进程是一个资源管家,负责从主人那里要资源的话,那么线程就是干活的苦力。一个管家必须完成一项工作,就需要最少一个苦力,也就是说,一个进程最少包含一个线程,也可以包含多个线程。苦力要干活,就需要依托于管家,所以说一个线程,必须属于某一个进程。进程有自己的地址空间,线程使用进程的地址空间,也就是说,进程里的资源,线程都是有权访问的,比如说堆啊,栈啊,静态存储区什么的。线程就是个无产阶级,但无产阶级干活,总得有自己的劳动工具吧,这个劳动工具就是栈,线程有自己的栈,这个栈仍然是使用进程的地址空间,只是这块空间被线程标记为了栈。每个线程都会有自己私有的栈,这个栈是不可以被其他线程所访问的。四、一个牛叉的函数 -- 创建进程和线程的基础?Linux下进程和线程的创建都是通过clone实现的.?clone函数功能强大,带了众多参数,clone可以让你有选择性的继承父进程的资源,你可以选择想vfork一样和父进程共享一个虚存空间,从而创造的是线程,你也可以不和父进程共享,你甚至可以选择创造出来的进程和父进程不再是父子关系,而是 兄弟关系。先有必要说下这个函数的结构int clone(int (*fn)(void *), void *child_stack, int flags, void *arg);这里fn是函数指针,我们知道进程的4要素,这个就是指向程序的指针, child_stack是为子进程分配系统堆栈空间(在linux下系统堆栈空间是2页面,就是8K的内存,其中在这块内存中,低地址上放入了值,这个值就是进程控制块task_struct的 值),flags就是标志用来描述你需要从父进程继承那些资源, arg就是传给子进程的参数)。下面是flags可以取的值标志 ? ? ? ? ? ? ? ? ? ? 含义CLONE_PARENT ?创建的子进程的父进程是调用者的父进程,新进程与创建它的进程成了兄弟而不是父子CLONE_FS ? ? ?子进程与父进程共享相同的文件系统,包括root、当前目录、umaskCLONE_FILES ? 子进程与父进程共享相同的文件描述符(file descriptor)表CLONE_NEWNS ? 在新的namespace启动子进程,namespace描述了进程的文件hierarchyCLONE_SIGHAND 子进程与父进程共享相同的信号处理(signal handler)表CLONE_PTRACE ?若父进程被trace,子进程也被traceCLONE_VFORK ? 父进程被挂起,直至子进程释放虚拟内存资源CLONE_VM ? ? ?子进程与父进程运行于相同的内存空间CLONE_PID ? ? 子进程在创建时PID与父进程一致CLONE_THREAD ?Linux 2.4中增加以支持POSIX线程标准,子进程与父进程共享相同的线程群下面的例子是创建一个线程(子进程共享了父进程虚存空间,没有自己独立的虚存空间不能称其为进程)。父进程被挂起当子线程释放虚存资源后再继续执行。#include stdio.h#include sched.h#include signal.h#define FIBER_STACK 8192int a;void * stack;intdo_something(){printf(This is son, the pid is:%d, the a is: %d\n, getpid(), ++a);free(stack); exit(1);}int main() {void * stack; a = 1; //为子进程申请系统堆栈stack = malloc(FIBER_STACK);if(!stack) {printf(The stack failed\n);exit(0); }printf(creating son thread!!!\n);clone(do_something, (char *)stack + FIBER_STACK, CLONE_VM|CLONE_VFORK, 0);printf(This is father, my pid is: %d, the a is: %d\n, getpid(), a);e
您可能关注的文档
最近下载
- 防盗门破拆应用技术课程介绍讲解.docx VIP
- 1.2.1学习使用显微镜课件-人教版生物七年级上册 (1).pptx VIP
- 海水 G-F-降B-降E-降A调正谱 虎门销烟 刘岩.pdf VIP
- 超快闪蒸焦耳加热合成方法和用于实施其的系统.pdf VIP
- 高频热电场皮肤治疗仪产品技术要求.docx VIP
- 英语国家概况Unit14_Post-WWII_American_Foreign_Policy.ppt VIP
- 《建设工程监理规范》GB-T50319-2024版-附.pptx VIP
- 入党积极分子培训心得体会.docx VIP
- 2024河南平顶山市叶县招才引智卫生系统事业单位人才引进拟引进人员笔试备考试题及答案解析.docx VIP
- 超快闪蒸焦耳加热合成方法和用于实施其的系统.pdf VIP
文档评论(0)