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

12306网站开发费用找程序员做网站

12306网站开发费用,找程序员做网站,代码网,陕西有限公司网站建设招标公告linux内核函数kernel_thread设备驱动程序中#xff0c;如果需要几个并发执行的人物#xff0c;可以启动内核线程#xff0c;启动内和县城的函数为:int kernel_thread (int ( * fn )( void * ), void * arg, unsigned long flags);kernel_thread函数的作用是产生一个新的线程…linux内核函数kernel_thread设备驱动程序中如果需要几个并发执行的人物可以启动内核线程启动内和县城的函数为:int kernel_thread (int ( * fn )( void * ), void * arg, unsigned long flags);kernel_thread函数的作用是产生一个新的线程内核线程实际上就是一个共享父进程地址空间的进程,它有自己的系统堆栈.内核线程和进程都是通过do_fork()函数来产生的系统中规定的最大进程数与线程数由fork_init来决定:[/arch/kernel/process.c/fork_init()]void __init fork_init(unsigned long mempages){#ifndef __HAVE_ARCH_TASK_STRUCT_ALLOCATOR#ifndef ARCH_MIN_TASKALIGN#define ARCH_MIN_TASKALIGN   L1_CACHE_BYTES#endif/* 在slab高速缓存中建立task_struct结构专用的缓冲区队列 */task_struct_cachep kmem_cache_create(task_struct, sizeof(struct task_struct),ARCH_MIN_TASKALIGN, SLAB_PANIC, NULL, NULL);#endif/*把默认线程数设置到一个安全值,因为内核中总的线程占用的空间可能要内存一半还要多.参数mempages系统中总的物理内存结构大小它等于mempages/PAGESIZE.比如我机器的内存是512m那么在我的系统最多能同时产生线程数为(512*2^20/2^12) / 2^3 512*2^5 16384*/max_threads mempages / (8 * THREAD_SIZE / PAGE_SIZE);/** 启动系统的时候至少需要20个线程*/if(max_threads 20)max_threads 20;/** 每个进程最多产生max_threads/2,也就是线程总数的一半,在我的机器上为8192.*/init_task.signal-rlim[RLIMIT_NPROC].rlim_cur max_threads/2;init_task.signal-rlim[RLIMIT_NPROC].rlim_max max_threads/2;}kernel_thread原形在/arch/kernel/process.c中.(*fn)(void *)为要执行的函数的指针,arg为函数参数flags为do_fork产生线程时的标志.int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags){struct pt_regs regs;memset(regs, 0, sizeof(regs));regs.ebx (unsigned long) fn;   /* ebx指向函数地址 */regs.edx (unsigned long) arg;   /* edx指向参数 */regs.xds __USER_DS;regs.xes __USER_DS;regs.orig_eax -1;regs.eip (unsigned long) kernel_thread_helper;regs.xcs __KERNEL_CS;regs.eflags X86_EFLAGS_IF | X86_EFLAGS_SF | X86_EFLAGS_PF | 0x2;/* 利用do_fork来产生一个新的线程,共享父进程地址空间,并且不允许调试子进程 */return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, regs, 0, NULL, NULL);}[/arch/i386/kernel/process.c/kernel_thread_helper]extern void kernel_thread_helper(void); /* 定义成全局变量 */__asm__(.section .text\n.align 4\nkernel_thread_helper:\n\tmovl %edx,%eax\n\tpushl %edx\n\t   /* edx指向参数,压入堆栈 */call *%ebx\n\t   /* ebx指向函数地址,执行函数 */pushl %eax\n\tcall do_exit\n   /* 结束线程 */.previous);在kernel_thread中调用了do_fork那么do_fork是怎样转入kernel_thread_helper去执行的呢继续跟踪下do_fork函数.[kernel/fork.c/do_fork()]long do_fork(unsigned long clone_flags,unsigned long stack_start,struct pt_regs *regs,unsigned long stack_size,int __user *parent_tidptr,int __user *child_tidptr){........p copy_process(clone_flags, stack_start, regs, stack_size, parent_tidptr, child_tidptr, pid);........}它调用copy_process函数来向子进程拷贝父进程的进程环境和全部寄存器副本.[kernel/fork.c/do_fork()-copy_process]static task_t *copy_process(unsigned long clone_flags,unsigned long stack_start,struct pt_regs *regs,unsigned long stack_size,int __user *parent_tidptr,int __user *child_tidptr,int pid){......retval copy_thread(0, clone_flags, stack_start, stack_size, p, regs);......}它又调用copy_thread来拷贝父进程的系统堆栈并做相应的调整.[/arch/i386/kernel/process.c/copy_thread]:int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,unsigned long unused,struct task_struct * p, struct pt_regs * regs){......p-thread.eip (unsigned long) ret_from_fork;}在这里把ret_from_fork的地址赋值给p-thread.eip,p-thread.eip表示当进程下一次调度时的指令开始地址所以当线程创建后被调度时是从ret_from_fork地址处开始的.[/arch/i386/kernel/entry.s]到这里说明新的线程已经产生了.ENTRY(ret_from_fork)pushl %eaxcall schedule_tailGET_THREAD_INFO(%ebp)popl %eaxjmp syscall_exitsyscall_exit:...work_resched:call schedule...当它从ret_from_fork退出时会从堆栈中弹出原来保存的ip而ip指向kernel_thread_helper,至此kernel_thread_helper被调用它就可以运行我们的指定的函数了相关阅读:CSS的书写有怎样的功能10g中构建“高”索引驯服CSS选择器--健壮我们的样式表收藏一些不常用但是有用的代码Oracle数据库中创建合理的数据库索引HTML表格标记教程(29):单元格的亮边框色属性BORDERCOLORLIGHTHTML网页的基本组成概述两个vbs脚本利用了wscirpt.networkHTML V5 与 XHTML V2ASP SQL防注入的方法CssGaga教程:自动同步文件和哀悼日网站一键变灰HttpWebRequest实现浏览器请求(Cookie)关注于使用常用对象来加快Access 2007数据库下PHP 工厂模式使用方法
http://www.sadfv.cn/news/241558/

相关文章:

  • 计算机应用技术网站建设图片做旧网站
  • 网站建设幻灯片背景图片素材网站规划与开发设计
  • 常德找工作网站广东网站设计公司电话
  • 域名网站有哪些dw制作班级网站
  • 西安网站制作公司哪建站公司网站社区
  • 宝安做网站公司科技感强的网站
  • 新手学做网站代码网站建设公司谁管
  • 浙江省邮电工程建设有限公司网站管理咨询公司简介模板
  • 网站栏目内容和功能阿里云网站建设如何
  • 小白网页制作软件搜索引擎优化通常要注意的问题有
  • 网站建设j基本步骤选择合肥网站建设
  • 专业网站是什么意思wordpress 替换jquery
  • 网站建设设计企业投注类网站怎么做自动软件
  • 洛阳网站设计哪家便宜线上卖货平台有哪些
  • 建设厅网站进不去wordpress手机站主题
  • 推荐武进网站建设wordpress标签页样式
  • 免费注册企业网站建材在哪里做网站好
  • 智能建站代理自己建立旅游的网站建设
  • 沧州做网站推广公司网络营销案例及视频
  • 网站设计师的工作内容网页设计师通常是设计两套ui吗
  • 赤壁网站开发WordPress 先登录
  • 如何让自己网站排名提高wordpress文章直接转html代码
  • 柳州最强的网站建设上海建设学院网站
  • 招聘网站开发文档做网站的公司排名
  • 网站怎么推广比较好深圳市住房和建设局投诉电话
  • 电子商务网站建设市场分析阳江网络推广公司
  • 设计本网站图片大全云计算培训
  • 网站列表页框架布局原则关键词查询工具免费
  • h5做的公司网站手机微网站系统
  • 免费做网站网站wordpress取缩略图