2025/12/31 2:40:17
网站建设
项目流程
唐山高端网站建设,顺德网站建设咨询,重庆网站设计排名,网页制作详细设计二刷Linux#xff1a;这一次#xff0c;我终于“理解”了进程 文章目录二刷Linux#xff1a;这一次#xff0c;我终于“理解”了进程二刷Linux的理解理解冯诺依曼体系结构理解数据流动理解系统调用进程到底是什么查看进程的两种方式fork函数的三个问题进程状态的理解Linux内…二刷Linux这一次我终于“理解”了进程文章目录二刷Linux这一次我终于“理解”了进程二刷Linux的理解理解冯诺依曼体系结构理解数据流动理解系统调用进程到底是什么查看进程的两种方式fork函数的三个问题进程状态的理解Linux内核链表一、冯诺依曼体系结构二、操作系统(OS)2.1 概念2.2 设计OS的目的2.3 核心功能2.4 如何理解管理2.5 系统调用和库函数概念三、进程3.1 基本概念与基本操作3.1.1 描述进程-PCB3.1.2 task_struct内容分类组织进程3.1.3 查看进程3.1.4 通过系统调用获取进程标示符3.1.5 通过系统调用创建进程-fork初识3.1.5 通过代码来创建子进程3.2 进程状态3.2.1 Linux内核源代码3.2.2 进程状态查看3.2.3 Z(zombie) - 僵尸进程3.2.4 僵尸进程危害3.2.5 孤儿进程3.3 进程优先级3.3.1 基本概念3.3.2 查看系统进程3.3.3 PRI and NI3.3.4 RPI vs NI3.3.5 查看进程优先级的命令3.3.5 进程优先级的极值问题3.3.6 竞争、独立、并行、并发3.4 进程切换3.4.1 Linux2.6内核进程O(1)调度队列3.4.2 一个CPU拥有一个runqueue3.4.3 优先级3.4.4 活动队列3.4.5 过期队列3.4.6 active指针和expired指针3.4.7 总结四、环境变量4.1 基本概念4.2 常见环境变量4.3 查看环境变量方法4.4 和环境变量相关的命令4.5 环境变量的组织方式4.6 通过代码如何获取环境变量4.7 通过系统调用获取或设置环境变量4.8 环境变量通常是具有全局属性的五、程序地址空间5.1 研究平台5.2 程序地址空间回顾5.3 虚拟地址5.4 进程地址空间5.4 区域划分5.5 虚拟内存管理5.6 为什么要有虚拟地址空间二刷Linux的理解理解冯诺依曼体系结构理解数据流动理解系统调用操作系统的目标如下进程到底是什么查看进程的两种方式fork函数的三个问题进程状态的理解Linux内核链表一、冯诺依曼体系结构常见的计算机(如笔记本 服务器)大多数都遵循冯诺依曼体系二、操作系统(OS)2.1 概念printf的本质是你把你的数据写到了硬件(显示器)2.2 设计OS的目的2.3 核心功能整个计算机软硬件架构中操作系统的定位一款纯正的搞管理的软件2.4 如何理解管理2.5 系统调用和库函数概念库函数和系统调用是上下层的关系操作系统管理进程先描述后组织三、进程3.1 基本概念与基本操作3.1.1 描述进程-PCB3.1.2 task_struct内容分类组织进程可以在内核源代码里找到他所有运行在系统里的进程都以task_struct链表的形式存在内核中3.1.3 查看进程3.1.4 通过系统调用获取进程标示符进程 id PID父进程 id (PPID)3.1.5 通过系统调用创建进程-fork初识fork之后通常要用if进行分流3.1.5 通过代码来创建子进程3.2 进程状态3.2.1 Linux内核源代码• 为了弄明⽩正在运⾏的进程是什么意思我们需要知道进程的不同状态。⼀个进程可以有⼏个状态在Linux内核⾥进程有时候也叫做任务。下⾯的状态在kernel源代码⾥定义3.2.2 进程状态查看3.2.3 Z(zombie) - 僵尸进程创建一个维持30s的僵尸进程的例子3.2.4 僵尸进程危害3.2.5 孤儿进程3.3 进程优先级3.3.1 基本概念3.3.2 查看系统进程在Linux或unix系统中用ps-l 命令则会类似输出以下几个内容3.3.3 PRI and NI3.3.4 RPI vs NI3.3.5 查看进程优先级的命令3.3.5 进程优先级的极值问题3.3.6 竞争、独立、并行、并发3.4 进程切换参考一下Linux内核0.11代码3.4.1 Linux2.6内核进程O(1)调度队列3.4.2 一个CPU拥有一个runqueue如果有多个CPU就要考虑进程个数的负载均衡问题3.4.3 优先级3.4.4 活动队列3.4.5 过期队列3.4.6 active指针和expired指针3.4.7 总结在系统中查找一个最合适调度的进程的时间复杂度是一个常数不随着进程增多而导致时间成本增加我们称之为进程调度O(1)算法四、环境变量4.1 基本概念4.2 常见环境变量4.3 查看环境变量方法echo $NAME // NAME: 你的环境变量名称4.4 和环境变量相关的命令4.5 环境变量的组织方式4.6 通过代码如何获取环境变量libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头⽂件中,所以在使⽤时 要⽤extern声明。4.7 通过系统调用获取或设置环境变量4.8 环境变量通常是具有全局属性的环境变量通常具有全局属性可以被子进程继承下去五、程序地址空间5.1 研究平台5.2 程序地址空间回顾5.3 虚拟地址然后修改成以下的代码试一下5.4 进程地址空间之前说虚拟地址空间不准确准确的应该说成进程地址空间5.4 区域划分5.5 虚拟内存管理代码如下示例structvm_area_struct{unsignedlongvm_start;//虚存区起始unsignedlongvm_end;//虚存区结束structvm_area_struct*vm_next,*vm_prev;//前后指针structrb_nodevm_rb;//红⿊树中的位置unsignedlongrb_subtree_gap;structmm_struct*vm_mm;//所属的 mm_structpgprot_tvm_page_prot;unsignedlongvm_flags;//标志位struct{structrb_noderb;unsignedlongrb_subtree_last;}shared;structlist_headanon_vma_chain;structanon_vma*anon_vma;conststructvm_operations_struct*vm_ops;//vma对应的实际操作unsignedlongvm_pgoff;//⽂件映射偏移量structfile*vm_file;//映射的⽂件void*vm_private_data;//私有数据atomic_long_tswap_readahead_info;#ifndefCONFIG_MMUstructvm_region*vm_region;/* NOMMU mapping region */#endif#ifdefCONFIG_NUMAstructmempolicy*vm_policy;/* NUMA policy for the VMA */#endifstructvm_userfaultfd_ctxvm_userfaultfd_ctx;}__randomize_layout;5.6 为什么要有虚拟地址空间