微信网站 顶部导航菜单计算机网络课程设计

news/2025/10/2 2:27:13/文章来源:
微信网站 顶部导航菜单,计算机网络课程设计,重庆专业企业建设网站,品牌视觉设计fork系统调?创建?进程#xff0c;也就?个进程变成了两个进程#xff0c;两个进程执?相同的代码#xff0c;只是fork系统调?在?进程和?进程中的返回值不同。打开linux-5.4.34/arch/x86/entry/syscalls/syscall_64.tbl 文件#xff0c;56、 57、 58号系统调?__x64_sy…fork系统调?创建?进程也就?个进程变成了两个进程两个进程执?相同的代码只是fork系统调?在?进程和?进程中的返回值不同。打开linux-5.4.34/arch/x86/entry/syscalls/syscall_64.tbl 文件56、 57、 58号系统调?__x64_sys_clone、 __x64_sys_fork、__x64_sys_vfork即如下kernel/fork.c代码。进入linux-5.4.34/kernel/fork.c 查看 fork 源代码/** Create a kernel thread.*/pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned longflags){return _do_fork(args);}SYSCALL_DEFINE0(fork){return _do_fork(args);}SYSCALL_DEFINE0(vfork){return _do_fork(args);}SYSCALL_DEFINE5(clone, unsignedlong, clone_flags, unsigned long, newsp,{return _do_fork(args)}通过上?的代码可以看出fork、vfork和clone这3个系统调?以及do_fork和kernel_thread内核函数都可以创建?个新进程?且都是通过_do_fork函数来创建进程的只不过传递的参数不同。_do_fork函数主要完成了调?copy_process()复制?进程、获得?wake_up_new_task将?进程加?就绪队列等待调度执?等。//_do_fork关键部分代码long _do_fork(struct kernel_clone_args *args){//复制进程描述符和执?时所需的其他数据结构p copy_process(NULL, trace, NUMA_NO_NODE, args);wake_up_new_task(p);//将?进程添加到就绪队列return nr;//返回?进程pid(?进程中fork返回值为?进程的pid)}copy_process()是创建?个进程的主要的代码。如下是copy_process()函数的关键代码完整代码?kernel/fork.cstatic __latent_entropy struct task_struct *copy_process(struct pid *pid,inttrace,intnode,struct kernel_clone_args *args){//复制进程描述符task_struct、创建内核堆栈等p dup_task_struct(current, node);/*copy all the process information*/shm_init_task(p);…//初始化?进程内核栈和threadretval copy_thread_tls(clone_flags, args-stack, args-stack_size, p,args-tls);…return p;//返回被创建的?进程描述符指针}copy_process函数主要完成了调?dup_task_struct复制当前进程(?进程)描述符task_struct信息检查、初始化、把进程状态设置为TASK_RUNNING(此时?进程置为就绪态)、采?写时复制技术逐?复制所有其他进程资源调?copy_thread_tls初始化?进程内核栈设置?进程pid等。接下来具体看dup_task_struct和copy_thread_tlsdup_task_struct作用在专业高速缓冲内存上分配task_struct并完成初始化在普通内存中分配thread_info及连续的两个页面完成初始化将task_struct和thread_info联系起来主要代码static struct task_struct *dup_task_struct(struct task_struct *orig, intnode){…//实际完成进程描述符的拷?具体做法是*tsk *origerr arch_dup_task_struct(tsk, orig);…tsk-stack stack;...//实际完成进程描述符的拷?具体做法是*tsk *origsetup_thread_stack(tsk, orig);clear_user_return_notifier(tsk);clear_tsk_need_resched(tsk);set_task_stack_end_magic(tsk);…}copy_thread_tls作用负责构造fork系统调?在?进程的内核堆栈也就是fork系统调?在??进程各返回?次?进程中和其他系统调?的处理过程并??致?在?进程中的内核函数调?堆栈需要特殊构建为?进程的运?准备好上下?环境。主要代码int copy_thread_tls(unsigned long clone_flags, unsigned longsp,unsignedlong arg, struct task_struct *p, unsigned longtls){frame-ret_addr (unsigned long) ret_from_fork;p-thread.sp (unsigned long) fork_frame;*childregs *current_pt_regs();childregs-ax 0;.../** Set a new TLS for the child thread?*/if (clone_flags CLONE_SETTLS) {err do_arch_prctl_64(p, ARCH_SET_FS, tls);do_fork 总结进程的创建过程?致是?进程通过fork系统调?进?内核_do_fork函数如下图所示复制进程描述符及相关进程资源(采?写时复制技术)、分配?进程的内核堆栈并对内核堆栈和thread等进程关键上下?进?初始化最后将?进程放?就绪队列 fork系统调?返回??进程则在被调度执?时根据设置的内核堆栈和thread等进程关键上下?开始执?。2 execve系统调用execve(执行文件)在父进程中fork一个子进程在子进程中调用exec函数启动新的程序。exec函数一共有六个其中execve为内核级系统调用其他(execlexecleexeclpexecvexecvp)都是调用execve的库函数。表头文件#include定义函数int execve(const char * filename,char * const argv[ ],char * const envp[ ]);execve()用来执行参数filename字符串所代表的文件路径第二个参数是利用指针数组来传递给执行文件并且需要以空指针(NULL)结束最后一个参数则为传递给执行文件的新环境变量数组。成功无返回值失败返回-1。execve系统调过程sys_execve--do_execve--do_execveat_common--__do_execve_file--search_binary_handler--load_elf_binary--start_threadexecve陷入内核传入命令行参数和shell上下文环境sys_execve调用do_execve封装命令行参数和shell上下文调用do_execveat_common,do_execveat_common调用__do_execve_file,打开ELF文件并把信息的装入linux_binprm结构体__do_execve_file中调用search_binary_handler寻找解析ELF文件的函数search_binary_handler找到ELF文件解析函数load_elf_binary解析ELF文件把ELF文件装入内存修改进程的用户态堆栈修改进程的数据段代码段load_elf_binary调用start_thread修改进程内核堆栈返回用户态此时ip指向ELF文件的main函数地址三 Linux的一般执行过程1) 正在运?的?户态进程X。2) 发?中断(包括异常、系统调?等) CPU完成load cs:rip(entry of a specific ISR)即跳转到中断处理程序??。3) 中断上下?切换具体包括如下?点swapgs指令保存现场可以理解CPU通过swapgs指令给当前CPU寄存器状态做了?个快照。rsp point to kernel stack加载当前进程内核堆栈栈顶地址到RSP寄存器。快速系统调?是由系统调???处的汇编代码实现?户堆栈和内核堆栈的切换。save cs:rip/ss:rsp/rflags将当前CPU关键上下?压?进程X的内核堆栈快速系统调?是由系统调???处的汇编代码实现的。此时完成了中断上下?切换即从进程X的?户态到进程X的内核态。4) 中断处理过程中或中断返回前调?了schedule函数其中完成了进程调度算法选择next进程、进程地址空间切换、以及switch_to关键的进程上下?切换等。5) switch_to调?了__switch_to_asm汇编代码做了关键的进程上下?切换。将当前进程X的内核堆栈切换到进程调度算法选出来的next进程(本例假定为进程Y)的内核堆栈并完成了进程上下?所需的指令指针寄存器状态切换。之后开始运?进程Y(这?进程Y曾经通过以上步骤被切换出去因此可以从switch_to下??代码继续执?)。6) 中断上下?恢复与(3)中断上下?切换相对应。注意这?是进程Y的中断处理过程中?(3)中断上下?切换是在进程X的中断处理过程中因为内核堆栈从进程X切换到进程Y了。7) 为了对应起?中断上下?恢复的最后?步单独拿出来(6的最后?步即是7) iret - pop cs:rip/ss:rsp/rflags从Y进程的内核堆栈中弹出(3)中对应的压栈内容。此时完成了中断上下?的切换即从进程Y的内核态返回到进程Y的?户态。注意快速系统调?返回sysret与iret的处理略有不同。8) 继续运??户态进程Y。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么做网站广告代理商国外有哪些优秀的网站

一:Cstring类的由来 在C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用…

vs2013 网站建设wordpress 去掉发布者

目录 1. 思路(图解)2. 代码 题目链接:leetcode 88. 合并两个有序数组 题目描述: 1. 思路(图解) 思路一:(不满足题目要求) 1. 创建一个大小为nums1和nums2长度之和的…

AI元人文:价值原语构想——迈向动态博弈的价值生态

AI元人文:价值原语构想——迈向动态博弈的价值生态 引言:从“价值对齐”到“价值共生” 在人工智能发展的狂飙突进中,我们正面临一个根本性的悖论:我们试图赋予机器超越人类的智能,却期望其价值体系像一台精密的钟…

常州网站外包网络游戏新规

外连接就是允许不满足条件的字段查询出来转载于:https://www.cnblogs.com/classmethond/p/10129069.html

做旅行义工网站蚁怎么创建网页文件

四边形教学内容:教材第34页?——36页教学目标:1.直观感知四边形,能区分和辨认四边形,知道四边形的特征.进一步认识长方形和正方形,知道它们的角都是直角.2.通过画一画、找一找、拼一拼等活动,培养学生[此文转于斐斐课件园?FFKJ.Net]的观察比较和概括抽象的能力,发展空间想象能…

东莞大型企业网站建设网站建设国风网络公司

哟哟,切克闹,视频剪辑达人们,是不是在视频素材的海洋里迷航了?别着急,今天我就给大家分享几个超实用的无水印短视频素材合集网,让你的创作更加得心应手,从此素材不再是你的烦恼 1,蛙…

网站虚拟机可以自己做吗松阳县建设局网站

1、map介绍 map是C STL的一个关联容器,它提供一对一的数据处理能力。其中,各个键值对的键和值可以是任意数据类型,包括 C 基本数据类型(int、double 等)、使用结构体或类自定义的类型。 第一个可以称为关键字(key)&…

网站还难做啊wordpress 视频 广告

如何在win7下安装Python及配置1、首先,从搜索python官载适合自己电脑python版本。2标右击桌面“计算机”择打开菜单栏中的性”。3、WindowsXP时,在新弹出的属性窗口,选择“高级”->“环境变量”。Windows7是,在新弹出的属性窗口…

阿里云做网站需要些什么简单网页设计html代码

Go语言入门 Go语言入门教程 很多人将 Go 语言 称为 21 世纪的 C 语言,因为 Go 不仅拥有 C 语言的简洁和性能,而且还很好的提供了 21 世纪互联网环境下服务端开发的各种实用特性,让开发者在语言级别就可以方便的得到自己想要的东西。 在 Go…

什么网站做任务网站标题更改后要多久才能收录

概述 异常的基类是 Throwable, Throwable 有两个子类: Exception : 表示可以恢复的异常, 编译器可以捕捉。Error : 表示编译时和系统错误, 表示系统在运行期间出现了严重的错误, 属于不可恢复的错误。 受检异常和非受检异常 受检异常指的是在编译期间会接受编译器检查, 且必…

怎样制作网站和软件wordpress扁平化风格主题

说明:跟着learnopengl的内容学习,不是纯翻译,只是自己整理记录。 强烈推荐原文,无论是内容还是排版。 原文链接 本文地址: http://blog.csdn.net/aganlengzi/article/details/50448453 坐标系统 Coordinate Systems 在…

济南优化网站排名郑州网络什么时候恢复

很多新手朋友在学习完数据结构与算法之后,都想找个平台磨练自己的技艺。那么LeetCode绝对是不二之选。但是官网刷题不是很友好,那么今天给大家介绍一款刷LeetCode神器。也是未来工作之后的摸鱼神器。 leetcode-editor 本打工人的摸(nei&am…

绝对域名做网站可以用asp做哪些网站

你为什么需要JpomSpringBoot、Jboot等框架开发的项目通常是以Jar的方式在后台运行的,如果只有一两个项目,管理起来不是太麻烦,但是当项目多了以后,管理起来就不是那么方便了,当项目出现问题时,能够通过Jpom…

《多分支条件判断优化:switch-case 结构的技术价值分析》

在程序开发过程中,条件分支控制是实现业务逻辑的核心手段。从简单的参数校验到复杂的状态流转,开发者都需要借助条件判断结构引导程序执行路径。if-else 与 switch-case 作为两种基础的分支控制结构,各自适用于不同…

大大福利站网站建设广东手机网站制作价格

目录 一、引言 视频效果展示: 1.启动页效果 2.登录页效果 3.注册页效果 4.歌曲列表页效果 5.播放页效果 二、详细设计 1.登陆注册功能 2.音乐列表页面 2.音乐播放功能 三、源码获取 一、引言 Android初学者开发第一个完整的实例项目应该就属《音乐播放器…

丰台seo网站关键词优化自动seo系统

table中合并单元格导致的css样式不同处理方式:1.每行都拆成一个table。2.多设置几个单元格的宽度(自适应失效、第一列都设置宽度也有可能失效)。

php开源企业网站系统北京 设计 网站建设

Centos7系统 docker指定版本安装【官方文档步骤】 官方文档地址:https://docs.docker.com/engine/install/centos/ # 1.安装yum工具及设置docker-ce镜像库 sudo yum install -y yum-utils# 国外的镜像下载太慢了改成阿里云镜像库 sudo yum-config-manager --add-rep…

南昌市有帮做网站的吗wordpress+防爬虫

一、前言知道的越多不知道的就越多编程开发这条路上的知识是无穷无尽的,就像以前你敢说精通Java,到后来学到越来越多只想写了解Java,过了几年现在可能想说懂一点点Java。当视野和格局的扩大,会让我们越来越发现原来的看法是多么浅…

宏重钢结构东莞网站建设nodejs做静态网站

前端调用后端接口,本域情况下,ajax方式调用,request header中包含x-requested-with信息。跨域情况下,request header中不再包含x-requested-with。说明:1.前端ajax封装的jquery的$.ajax方法。2.后端header相关设置已允…

pc端网站建设网页制作公司的服务

目录 数据类型介绍 类型的基本归类 整形家族: 浮点数家族: 构造类型: 指针类型 空类型: 整形在内存中的存储 原码、反码、补码 大小端介绍 什么大端小端: 为什么有大端和小端: 练习 浮点型在内存中的储存 一个例子 浮点数存储规则 数据类型介绍 前面我们…