Ryo's blog

分类 · System

首页

关于

归档

loading..
LinuxMemory

Linux内核虚拟地址空间

x86-32位虚拟地址空间就我们所知,Linux内核一般将处理器的虚拟地址空间划分为两个部分。底部比较大的部分用于用户进程,顶部则专用于内核。虽然(在两个用户进程之间的)上下文切换期间会改变下半部分,但虚拟地址空间的内核部分总是保持不变。 Linux将虚拟地址空间划分为:0~3G为用户空间,3~4G为内核空间 点我查看原图 用户地址空间 保留区 - 0x08048000位于虚拟地址空间的最低部分,未赋予物理地址。任何对它的引用都是非法的,用于捕捉使用空指针和小整型值指针引用内存的异常情况。 它并不是一个单一的内存区域,而是对地址空间中受到操作系统保护而禁止用户进程访问的地址区域的总称。大多数操作系统中,极小的地址通常都是不允许访问的,如NULL。C语言将无效指针赋值为0也是出于这..

更多
Compiler

LLVM编译器基础知识

一、基础概念1.1 Interpreter 和 Compile Interpreter 解释器 Compile 编译器 程序步骤 1、创建代码 2、没有文件链接或机器代码生成 3、源语句在执行过程中逐行执行 1、创建代码 2、将解析或分析所有语言语句的正确性 3、将把源代码转换为机器码 4、链接到可运行程序 5、运行程序 Input 每次读取一行 整个程序 Output 不产生任何的中间代码 生成中间目标代码 工作机制 编译和执行同时进行 编译在执行之前完成 存储 不保存任何机器代码 存储编译后的机器代码在机器上 执行 程序执行是解释过程的一部分,因此是逐行执行的 程序执行与编译是分开的,它只在整个输出程序编译后执行 生成程序 不生成输出程序,所以他们在每次执行过程中都要..

更多
Linuxebpf

《eBPF 核心技术与实战》

概览eBPF 是什么呢? 从它的全称“扩展的伯克利数据包过滤器 (Extended Berkeley Packet Filter)” 来看,它是一种数据包过滤技术,是从 BPF (Berkeley Packet Filter) 技术扩展而来的。 BPF 提供了一种在内核事件和用户程序事件发生时安全注入代码的机制,这就让非内核开发人员也可以对内核进行控制。随着内核的发展,BPF 逐步从最初的数据包过滤扩展到了网络、内核、安全、跟踪等,而且它的功能特性还在快速发展中,这种扩展后的 BPF 被简称为 eBPF(相应的,早期的 BPF 被称为经典 BPF,简称 cBPF)。实际上,现代内核所运行的都是 eBPF,如果没有特殊说明,内核和开源社区中提到的 BPF 等同于 eBPF。 tcpdump 和 BCC 之所以..

更多
NoteChip

《说透芯片》

基础知识晶体管想了解晶体管,你得先了解它的“前身”——电子管。电子管是中文翻译后的名称,英文原文其实是真空管。从这个名字,你可以想象,它其实是把参与工作的金属薄片,也就是电极,封装在一个真空的容器内,真空容器一般指的是玻璃瓶。 整个电子行业,并不是从芯片开始的,而是从电子管开始。电子管最鼎盛时期的代表作,就是世界上的第一台电子计算机。这台 1946 年诞生的电子计算机,占地 150 平方米,重达 30 吨,里面的电路使用了 17468 只电子管、7200 只电阻、10000 只电容、50 万条线。 这台计算机虽然运算速度不快,但基本具备了现代计算机的主要结构和功能,这也是电子管能达到的最高成就了。其实从上图你也可以看出来,电子管最大的缺点就是,真空容器对于电子产品来说体积太大了。 如果人类停留在电子管技术上..

更多
LinuxMemory

内存管理、寻址方式那些事

一、内存1.1 什么是内存  简单地说,内存就是一个数据货架。内存有一个最小的存储单位,大多数都是一个字节。内存用内存地址(memory address)来为每个字节的数据顺序编号。因此,内存地址说明了数据在内存中的位置。内存地址从0开始,每次增加1。这种线性增加的存储器地址称为线性地址(linear address)。   内存地址的编号有上限。地址空间的范围和地址总线(address bus)的位数直接相关。CPU通过地址总线来向内存说明想要存取数据的地址。以英特尔32位的80386型CPU为例,这款CPU有32个针脚可以传输地址信息。每个针脚对应了一位。如果针脚上是高电压,那么这一位是1。如果是低电压,那么这一位是0。32位的电压高低信息通过地址总线传到内存的32个针脚,内存就能把电压高低信息转换成3..

更多
Note

《30天自制操作系统》

30天自制操作系统启动区(boot sector)软盘第一个的扇区称为启动区。那么什么是扇区呢?计算机读写软盘的时候,并不是一个字节一个字节地读写的,而是以512字节为一个单位进行读写。因此,软盘的512字节就称为一个扇区。一张软盘的空间共有1440KB,也就是1474560字节,除以512得2880,这也就是说一张软盘共有2880个扇区。那为什么第一个扇区称为启动区呢?那是因为计算机首先从最初一个扇区开始读软盘,然后去检查这个扇区最后2个字节的内容。如果这最后2个字节不是0x55 AA,计算机会认为这张盘上没有所需的启动程序,就会报一个不能启动的错误。(也许有人会问为什么一定是0x55 AA呢?那是当初的设计者随便定的,笔者也没法解释)。如果计算机确认了第一个扇区的最后两个字节正好是0x55 AA,那它就..

更多
NoteLinux

《Linux内核技术实战》

Page Cache什么是 Page Cache? 通过这张图片你可以清楚地看到,红色的地方就是 Page Cache,很明显,Page Cache 是内核管理的内存,也就是说,它属于内核不属于用户。 $ cat /proc/meminfo ... Buffers: 1224 kB Cached: 111472 kB SwapCached: 36364 kB Active: 6224232 kB Inactive: 979432 kB Active(anon): 6173036 kB Inactive(anon): 927932 kB Active(file): 51196 kB Inactive(..

更多
NoteLinux

《Linux性能优化实战》

CPU性能篇uptime 什么是平均负载?简单来说,平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。这里我先解释下,可运行状态和不可中断状态这俩词儿。 所谓可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。 不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。 比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到..

更多
Note

《深入浅出计算机组成原理》

基础篇计算机的基本硬件组成 第一,广。组成原理中的概念非常多,每个概念的信息量也非常大。比如想要理解 CPU 中的算术逻辑单元(也就是 ALU)是怎么实现加法的,需要牵涉到如何把整数表示成二进制,还需要了解这些表示背后的电路、逻辑门、CPU 时钟、触发器等知识。 第二,深。组成原理中的很多概念,阐述开来就是计算机学科的另外一门核心课程。比如,计算机的指令是怎么从你写的 C、Java 这样的高级语言,变成计算机可以执行的机器码的?如果我们展开并深入讲解这个问题,就会变成《编译原理》这样一门核心课程。 第三,学不能致用。学东西是要拿来用的,但因为这门课本身的属性,很多人在学习时,常常沉溺于概念和理论中,无法和自己日常的开发工作联系起来,以此来解决工作中遇到的问题,所以,学习往往没有成就感,就很难有动力坚持下去。..

更多