Linux
文章平均质量分 93
PnJg?
这个作者很懒,什么都没留下…
展开
-
Linux物理内存管理——会议室管理员如何分配会议室
之前学习了站在内存的角度去看内存,看到的都是虚拟内存,这些虚拟内存总是要映射到物理页面的,这一篇文章来学习物理内存是如何管理的。之前学习虚拟内存的时候,当涉及物理内存的映射的时候,总是把内存想象成它是由连续的一页一页的块组成的。我们可以从0开始对物理页编号,这样每个物理页都会有个号。整个物理内存的布局就非常简单、易管理,这就是最经典的平坦内存模型(Flat Memory Model): 由于物理地址是连续的,页也是连续的,每个页大小也是一样的。因而对于任何一个地址,只要直接除一下每页的大小,很容易直接算出在原创 2022-12-14 18:43:33 · 304 阅读 · 0 评论 -
Linux的进程空间管理
进程的虚拟地址空间,其实就是站在项目组的角度来看内存,所以我们就从task_struct出发来看。这里面有一个struct mm_struct结构来管理内存。整个虚拟内存空间要一分为二,一部分是用户态地址空间,一部分是内核态地址空间,那这在哪里呢?这就要task_size来定义。对于32位系统,最大能够寻址2^32=4G,其中用户态虚拟地址空间是3G,内核态是1G。对于64位系统,虚拟地址只使用了48位。原创 2022-12-13 20:45:20 · 446 阅读 · 0 评论 -
Linux内存管理
平时我们说计算机的“计算”两个字,其实说的就是两方面,第一,进程和线程对于CPU的使用;第二,对于内存的管理。——这个是对计算机的理解的两个大方面,面试中问到的场景设计题可以尝试从这两个角度出发。可以把内存比作是每个公司里面独立封闭的会议室,因为如果不隔离,就会不安全、存在泄露,因而每个进程都应该有自己的进程空间,内存空间都是独立的,相互隔离的,对每个进程来讲看起来应该都是独占的。原创 2022-12-10 16:12:26 · 527 阅读 · 1 评论 -
Linux线程的创建
创建进程的话,调用的系统调用是fork,在copy_process函数里面,会将五大结构 files_struct、fs_struct、sighand_struct、signal_struct、mm_struct都复制一遍,从此父进程 和子进程各用各的数据结构。而创建线程的话,调用的是系统调用clone,在copy_process函数 里面, 五大结构仅仅是引用计数加一,也即线程共享进程的数据结构。原创 2022-12-10 11:44:23 · 1745 阅读 · 0 评论 -
Linux进程的数据结构
在用户态,应用程序进行了至少一次函数调用。32位和64的传递参数的方式稍有不同,32位的就是用函数栈,64位的前6个参数用寄存器,其他的用函数栈。在内核态,32位和64位都使用内核栈,格式也稍有不同,主要集中在pt_regs结构上。在内核态,32位和64位的内核栈和task_struct的关联关系不同。32位主要靠thread_info, 64位主要靠Per-CPU变量。原创 2022-12-09 16:34:18 · 704 阅读 · 0 评论 -
Linux进程的创建
fork是一个系统调用,系统调用的流程,流程的最后会在sys_call_table中找到相应的系统调用sys_fork。,sys_fork的定义如下:sys_fork会调用_do_fork,_do_fork的定义如下:复制结构_do_fork里面做的第一件大事就是copy_process,如果所有数据结构都从头创建一份太麻烦了,还不如使用惯用“伎俩”,Ctrl C + Ctrl V。task_struct的结构图如下:copy_process代码具体实现如下:在dup_task_str原创 2022-12-08 12:10:50 · 608 阅读 · 0 评论 -
Linux进程的调度
目录调度策略与调度类实时调度策略普通调度策略调度类sched_class有几种实现:完全公平调度算法调度队列与调度实体调度类是如何工作的?在Linux里面,进程大概可以分成两种。 一种称为实时进程,也就是需要尽快执行返回结果的那种。另一种是普通进程,大部分的进程其实都是这种。在task_struct数据结论里面有一个成员变量,叫做调度策略:他有以下的几个定义:配合调度策略的,还有优先级,也在task_struct中:优先级其实就是一个数值,对于实时进程,优先级的范围是0~99;对于普通进程原创 2022-12-04 16:06:30 · 627 阅读 · 0 评论 -
Linux:公司这么多项目,怎么管
在Linux下面,对二进制程序有着严格的格式要求,这就是ELF,这个格式可以根据编译的结果不同,分为不同的格式。在编译的时候,先做预处理工作,例如将头文件嵌入到正文中,将定义的宏展开,然后就是真正 的编译过程,最终编译成为.o文件,这就是ELF的第一种类型,可重定位文件,长这样:要想让函数作为库文件被重用,不能以.o的形式存在,而是要形成库文件,最简单的类型是静态链接库.a文件(Archives),仅仅将一系列对象文件(.o)归档为一个文 件,使用命令ar创建虽然这里libstaticprocess.原创 2022-12-04 12:28:58 · 389 阅读 · 0 评论 -
Linux操作系统综述
操作系统其实就像一个软件外包公司,其内核就相当于这家外包公司的老板。所以接下来的整个课程中,请你将自己的角色切换成这家软件外包公司的老板,设身处地地去理解操作系统是如何协调各种资源,帮客户做成事情的。”——刘超。...原创 2022-07-16 23:05:30 · 276 阅读 · 0 评论