Linux Kernel | Linux 内存管理-内存映射 发表于 2021-09-17 | 分类于 Linux Kernel | 0 | 阅读次数 172 1. 分段和分页1.1. 分段机制分段机制下的虚拟地址由两部分组成,段选择子和段内偏移量。段选择子就保存在段寄存器里面。段选择子里面最重要的是段号,用作段表的索引。段表里面保存的是这个段的基地址、段的界限和特权等级。段基地址加上段内偏移量就得到了物理内存地址。在 Linux 里面,段表全称段描述符表 阅读全文 »
Linux Kernel | Linux 内存管理-物理内存 发表于 2021-09-17 | 分类于 Linux Kernel | 0 | 阅读次数 128 1. 物理内存管理1.1. 硬件架构传统的 SMP(Symmetric multiprocessing)系统中,所有处理器都共享系统总线。因此当处理器的数目增大时,系统总线的竞争冲突加大,系统总线成为瓶颈。为了提高性能和可扩展性,后来有了一种更高级的模式,NUMA (Non-uniform memo 阅读全文 »
Linux Kernel | Linux 内存管理-虚拟内存 发表于 2021-09-17 | 分类于 Linux Kernel | 0 | 阅读次数 140 物理地址对于进程不可见,谁也不能直接访问这个物理地址。操作系统会给进程分配一个虚拟地址。所有进程看到的这个地址都是一样的,里面的内存都是从 0 开始编号。在程序里面,指令写入的地址是虚拟地址。之后,系统会提供一种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来。当程序要访问虚拟地址的时候,由内 阅读全文 »
Linux Kernel | Linux 信号机制介绍 发表于 2021-09-16 | 分类于 Linux Kernel | 0 | 阅读次数 203 1. 信号1.1. 概述信号(Signal)其实就是 Linux 进程收到的一个通知。这些通知产生的源头有很多种,通知的类型也有很多种。比如如果我们按下键盘“Ctrl+C”,当前运行的进程就会收到一个信号 SIGINT 而退出;如果我们的代码写得有问题,导致内存访问出错了,当前的进程就会收到另一个信 阅读全文 »
Linux Kernel | Linux 权限介绍 发表于 2021-09-15 | 分类于 Linux Kernel | 0 | 阅读次数 223 进程权限控制是指进程能否有权限访问某个文件、能否访问其他进程、能否进行某些操作,以及进程能否被其他项目组访问。task_struct 中关于进程权限的成员变量有如下这些,其中 cred 表示我这个进程可以操作谁,实质上就是我操作别人时具有的权限是什么;real_cred 表示谁能操作我这个进程。操作 阅读全文 »
Linux Kernel | Linux 运行统计信息介绍 发表于 2021-09-15 | 分类于 Linux Kernel | 0 | 阅读次数 172 1. 运行统计信息1.1. CPU 使用分类使用 top 的时候,在"%Cpu(s)"开头的这一行,会看到一串数值,也就是"0.0 us, 0.0 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st",这里头 阅读全文 »
Linux Kernel | Linux 函数(内核态和用户态) 发表于 2021-09-15 | 分类于 Linux Kernel | 0 | 阅读次数 209 1. 函数栈1.1. 用户态函数栈在进程的内存空间里面,栈是一个从高地址到低地址,往下增长的结构,也就是上面是栈底,下面是栈顶,入栈和出栈的操作都是从下面的栈顶开始的。1.1.1. 32 位操作系统的情况CPU 里,ESP(Extended Stack Pointer)是栈顶指针寄存器,入栈操作 P 阅读全文 »
Linux Kernel | Linux task_struct 结构体概述 发表于 2021-09-14 | 分类于 Linux Kernel | 0 | 阅读次数 268 1. task_struct 概述在 Linux 内核中,无论是进程还是线程,到了内核里面,都叫做任务(Task),由统一的数据结构 task_struct 进行管理。task_struct 是 Linux 中的进程描述符,是感知进程存在的唯一实体。Linux 内核中通过一个双向循环链表将所有的 t 阅读全文 »
数据结构和算法 | 无锁链表/队列的实现【纯纯的代码】 发表于 2021-08-17 | 分类于 数据结构和算法 | 0 | 阅读次数 171 package maintype Node struct {value intnext *Node}type Queue struct {head *Nodetail *Node}func CAS(...interface{}) bool {return true}func (q *Queue) 阅读全文 »