关于Linux的线程与进程

关于Linux的线程与进程

ID:38785588

大小:49.85 KB

页数:9页

时间:2019-06-19

关于Linux的线程与进程_第1页
关于Linux的线程与进程_第2页
关于Linux的线程与进程_第3页
关于Linux的线程与进程_第4页
关于Linux的线程与进程_第5页
资源描述:

《关于Linux的线程与进程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、关于Linux的线程与进程学院:计算机科学学院班级:计科10904班学号:201110043姓名:王成龙一、什么是进程直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源,所以我们也说,进程是资源分配的最小单位。二、什么是线程线程存在与进程当中,是操作系统调度执行的最小单位。说通俗点,线程就是干活的。三、进程和线程的区别与联系如果说进程是一个资源管家,负责从主人那里要资源的话,那么线程就是干活的苦力。一个管家必须完成一项工作,就需要最

2、少一个苦力,也就是说,一个进程最少包含一个线程,也可以包含多个线程。苦力要干活,就需要依托于管家,所以说一个线程,必须属于某一个进程。进程有自己的地址空间,线程使用进程的地址空间,也就是说,进程里的资源,线程都是有权访问的,比如说堆啊,栈啊,静态存储区什么的。线程就是个无产阶级,但无产阶级干活,总得有自己的劳动工具吧,这个劳动工具就是栈,线程有自己的栈,这个栈仍然是使用进程的地址空间,只是这块空间被线程标记为了栈。每个线程都会有自己私有的栈,这个栈是不可以被其他线程所访问的。四、一个牛叉的函数--创建进程和线程的基础 Linux下进程和线程的创建都是通过

3、clone实现的. clone函数功能强大,带了众多参数,clone可以让你有选择性的继承父进程的资源,你可以选择想vfork一样和父进程共享一个虚存空间,从而创造的是线程,你也可以不和父进程共享,你甚至可以选择创造出来的进程和父进程不再是父子关系,而是兄弟关系。先有必要说下这个函数的结构intclone(int(*fn)(void*),void*child_stack,intflags,void*arg);这里fn是函数指针,我们知道进程的4要素,这个就是指向程序的指针,child_stack是为子进程分配系统堆栈空间(在linux下系统堆栈空间是2页

4、面,就是8K的内存,其中在这块内存中,低地址上放入了值,这个值就是进程控制块task_struct的值),flags就是标志用来描述你需要从父进程继承那些资源,arg就是传给子进程的参数)。下面是flags可以取的值标志          含义CLONE_PARENT 创建的子进程的父进程是调用者的父进程,新进程与创建它的进程成了兄弟而不是父子CLONE_FS   子进程与父进程共享相同的文件系统,包括root、当前目录、umaskCLONE_FILES 子进程与父进程共享相同的文件描述符(filedescriptor)表CLONE_NEWNS 在新的n

5、amespace启动子进程,namespace描述了进程的文件hierarchyCLONE_SIGHAND子进程与父进程共享相同的信号处理(signalhandler)表CLONE_PTRACE 若父进程被trace,子进程也被traceCLONE_VFORK 父进程被挂起,直至子进程释放虚拟内存资源CLONE_VM   子进程与父进程运行于相同的内存空间CLONE_PID  子进程在创建时PID与父进程一致CLONE_THREAD Linux2.4中增加以支持POSIX线程标准,子进程与父进程共享相同的线程群下面的例子是创建一个线程(子进程共享了父进程

6、虚存空间,没有自己独立的虚存空间不能称其为进程)。父进程被挂起当子线程释放虚存资源后再继续执行。#include#include#include#defineFIBER_STACK8192inta;void*stack;intdo_something(){printf("Thisisson,thepidis:%d,theais:%d",getpid(),++a);free(stack);exit(1);}intmain(){void*stack;a=1;//为子进程申请系统堆栈stack=mal

7、loc(FIBER_STACK);if(!stack){printf("Thestackfailed");exit(0);}printf("creatingsonthread!!!");clone(&do_something,(char*)stack+FIBER_STACK,CLONE_VM

8、CLONE_VFORK,0);printf("Thisisfather,mypidis:%d,theais:%d",getpid(),a);exit(1);}asmlinkageintsys_vfork(structpt_regsregs){return

9、do_fork(CLONE_VFORK

10、CLONE_VM

11、SIGCHLD,reg

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

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

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