当前位置: 首页 > news >正文

海口智能建站模板网站开发合同要注意哪些

海口智能建站模板,网站开发合同要注意哪些,企业文化展示墙设计,监控安防的网站怎么做线程不是一个完全由内核实现的机制#xff0c;它是由内核态和用户态合作完成的。pthread_create 不是一个系统调用#xff0c;是 Glibc 库的一个函数#xff0c;所以我们还要去 Glibc 里面去找线索。 首先处理的是线程的属性参数。例如前面写程序的时候#xff0c;我们设置…线程不是一个完全由内核实现的机制它是由内核态和用户态合作完成的。pthread_create 不是一个系统调用是 Glibc 库的一个函数所以我们还要去 Glibc 里面去找线索。 首先处理的是线程的属性参数。例如前面写程序的时候我们设置的线程栈大小。如果没有传入线程属性就取默认值。 const struct pthread_attr *iattr (struct pthread_attr *) attr; struct pthread_attr default_attr; if (iattr NULL) {......iattr default_attr; } 接下来就像在内核里一样每一个进程或者线程都有一个 task_struct 结构在用户态也有一个用于维护线程的结构就是这个 pthread 结构。 struct pthread *pd NULL; 凡是涉及函数的调用都要使用到栈。每个线程也有自己的栈。那接下来就是创建线程栈了。 int err ALLOCATE_STACK (iattr, pd); ALLOCATE_STACK 是一个宏我们找到它的定义之后发现它其实就是一个函数。allocate_stack 主要做了以下这些事情 如果你在线程属性里面设置过栈的大小需要你把设置的值拿出来为了防止栈的访问越界在栈的末尾会有一块空间 guardsize一旦访问到这里就错误了其实线程栈是在进程的堆里面创建的。如果一个进程不断地创建和删除线程我们不可能不断地去申请和清除线程栈使用的内存块这样就需要有一个缓存。get_cached_stack 就是根据计算出来的 size 大小看一看已经有的缓存中有没有已经能够满足条件的如果缓存里面没有就需要调用 __mmap 创建一块新的系统调用那一节我们讲过如果要在堆里面 malloc 一块内存比较大的话用 __mmap线程栈也是自顶向下生长的还记得每个线程要有一个 pthread 结构这个结构也是放在栈的空间里面的。在栈底的位置其实是地址最高位计算出 guard 内存的位置调用 setup_stack_prot 设置这块内存的是受保护的接下来开始填充 pthread 这个结构里面的成员变量 stackblock、stackblock_size、guardsize、specific。这里的 specific 是用于存放 Thread Specific Data 的也即属于线程的全局变量将这个线程栈放到 stack_used 链表中其实管理线程栈总共有两个链表一个是 stack_used也就是这个栈正被使用另一个是 stack_cache就是上面说的一旦线程结束先缓存起来不释放等有其他的线程创建的时候给其他的线程用。 真正创建线程的是调用 create_thread 函数这个函数定义如下 static int create_thread (struct pthread *pd, const struct pthread_attr *attr, bool *stopped_start, STACK_VARIABLES_PARMS, bool *thread_ran) {const int clone_flags (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SYSVSEM | CLONE_SIGHAND | CLONE_THREAD | CLONE_SETTLS | CLONE_PARENT_SETTID | CLONE_CHILD_CLEARTID | 0);ARCH_CLONE (start_thread, STACK_VARIABLES_ARGS, clone_flags, pd, pd-tid, tp, pd-tid)/* Its started now, so if we fail below, well have to cancel it and let it clean itself up. */*thread_ran true; } 如果在进程的主线程里面调用其他系统调用当前用户态的栈是指向整个进程的栈栈顶指针也是指向进程的栈指令指针也是指向进程的主线程的代码。此时此刻执行到这里调用 clone 的时候用户态的栈、栈顶指针、指令指针和其他系统调用一样都是指向主线程的。 但是对于线程来说这些都要变。因为我们希望当 clone 这个系统调用成功的时候除了内核里面有这个线程对应的 task_struct当系统调用返回到用户态的时候用户态的栈应该是线程的栈栈顶指针应该指向线程的栈指令指针应该指向线程将要执行的那个函数。 创建进程的话调用的系统调用是 fork在 copy_process 函数里面会将五大结构 files_struct、fs_struct、sighand_struct、signal_struct、mm_struct 都复制一遍从此父进程和子进程各用各的数据结构。而创建线程的话调用的是系统调用 clone在 copy_process 函数里面 五大结构仅仅是引用计数加一也即线程共享进程的数据结构。 此文章为10月Day30学习笔记内容来源于极客时间《趣谈Linux操作系统》推荐该课程。
http://www.w-s-a.com/news/358740/

相关文章:

  • 做视频网站视频文件都存放在哪做旅游宣传图的网站有哪些
  • 地方门户类网站产品推广惠州市中国建设银行网站
  • 网站建设公司推荐5788移动版wordpress
  • 产品类型 速成网站淘宝怎么建立自己的网站
  • 南京优化网站建设公司的网站怎么建设
  • 做网站开发能挣钱月嫂云商城网站建设
  • 包装网站模板新手入门网站建设
  • 做网站的天津哪个公司做网站
  • 网站建设摊销时间是多久微信官网免费下载安装
  • 网站解析是做a记录吗群晖 wordpress 阿里云
  • 涉县移动网站建设公司常州做网站的公司有哪些
  • 网站批量创建程序中国十大人力资源公司
  • 菏泽网站建设 梧桐树二次开发创造作用
  • 维护网站费用长沙广告设计公司排名
  • 模仿别人网站侵权wordpress 修改链接失效
  • wordpress文章设置受密码保护南宁网站优化公司哪家好
  • 网站开发工程师介绍设计类的网站
  • 嘉兴seo网站推广中山建网站多少钱
  • 高端汽车网站建设帮别人做网站自己为什么会被抓
  • 网站开发实验室建设方案wordpress 主题丢失
  • 珠宝网站建设平台分析报告郑州最新发布
  • 世界杯最新排名泉州seo网站关键词优
  • 广州公司网站提供如何推广新品
  • 网站建设如何描述沈阳网站建设推广平台
  • 用dw制作个介绍家乡网站学生个人简历
  • 建设银行企业网站访问不了wordpress搬到谷歌服务器
  • 网站建设与网站优化销售别墅庭院园林景观设计公司
  • 沈阳红方城网站建设专业的微网站哪家好
  • 医院网站asp东营信息发布平台
  • 网站全站建设开题报告范文南京本地网站