
深入操作系统
文章平均质量分 91
计算机系统
Hack Rabbit
云计算&容器领域博主
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【并发】CAS原子操作
CAS是Compare And Swap的缩写,直译就是比较并交换。CAS是现代CPU广泛支持的一种对内存中的共享数据进行操作的一种特殊指令,这个指令会对内存中的共享数据做原子的读写操作。其作用是让CPU比较内存中某个值是否和预期的值相同,如果相同则将这个值更新为新值,不相同则不做更新。本质上来讲CAS是一种无锁的解决方案,也是一种基于乐观锁的操作,可以保证在多线程并发中保障共享资源的原子性操作,相对于信号量或锁来说,是一种轻量级的实现方案。原创 2024-02-24 23:34:56 · 550 阅读 · 0 评论 -
Linux 进程虚拟地址空间与虚拟内存
无论是何种体系结构,虚拟地址空间的分布方式都有以下几个成分当前运行的二进制代码程序使用的动态链接库的代码存储全局变量和动态产生的数据的堆用于保存局部变量和实现函数/过程调用的栈环境变量和命令行参数的栈将文件内容映射到虚拟地址空间中的内存映射系统中的各个进程都具有一个struct mm_struct的实例,可以通过task_struct访问,这个实例保存了进程的内存管理信息/* mmap 区域的基地址 */ unsigned long task_size;原创 2023-07-03 11:32:18 · 1014 阅读 · 0 评论 -
cgroups的实现
每个内核的子系统如果想要挂载到cgroup系统中,必须要先拥有一个对象,通过这个对象将对子系统资源的操作函数以接口的形式进行约定,各个子系统再根据自己的需求去实现这些接口,除了这些函数指针,结构体还包括id,name,early_init等属性,分别表示该子系统在数组中的索引,子系统名称,在系统启动时是否需要尽早初始化等。除了这些,还有一个指向cgroup_root类型的root指针,cgroup_root表示一个cgroup hierarchy的根,原创 2022-11-07 17:16:07 · 807 阅读 · 0 评论 -
Linux内核源码中最常见的数据结构之【mutex】
互斥锁(英语:Mutual exclusion,缩写 Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全域变量)进行读写的机制。该目的通过将代码切片成一个一个的**临界区域(critical section)**达成。临界区域指的是一块对公共资源进行存取的代码,并非一种机制或是算法。...原创 2022-07-09 11:05:20 · 1545 阅读 · 0 评论 -
Linux内核源码中最常见的数据结构之【Spinlock】
在软件工程中,自旋锁是一种锁,它使试图获取它的线程在循环中原地等待(“自旋”),同时反复检查锁是否可用。由于线程保持活动状态但没有执行有用的任务,因此使用这种锁是一种忙等待。一旦获得,自旋锁通常会一直保持直到它们被显式释放,尽管在某些实现中,如果正在等待的线程(持有锁的线程)阻塞或“进入睡眠状态”,它们可能会自动释放。因为它们避免了操作系统进程重新调度或上下文切换的开销,所以如果线程可能只在短时间内被阻塞,自旋锁是有效的。出于这个原因,操作系统内核经常使用自旋锁。如果长时间持有自旋锁,则会变得浪费,因为它们原创 2022-07-05 16:25:51 · 1307 阅读 · 0 评论 -
Linux内核源码中最常见的数据结构之【hlist_head】
在上一篇中,我们详细介绍了list_head,这篇文我们介绍hlist_head、hlist_node原创 2022-06-30 17:17:40 · 958 阅读 · 0 评论 -
Linux内核源码中最常见的数据结构之【list_head】
可以说是Linux内核使用的最多的数据结构之一了,它让开发人员能以双向链表的形式快速将当前结构链接起来,同时对链表进行基本操作。其定义如下:使用方法就是将以成员变量的形式添加到其他数据结构中。假设现有一群学生在排队获取同学S其前面一位同学的方式为,是不是很简单?但是你可能会问,获取的是前一位同学的成员变量,那还是不能访问前一位同学自身结构啊?问得好,我们接着介绍…宏定义,获取类型结构体中成员的偏移量,PS:指针的地址为也是Linux内核中常用的宏定义之一,其作用就是通过某个结构体的成员变量获取该结构体原创 2022-06-12 21:32:55 · 952 阅读 · 1 评论 -
硬核解析Linux文件系统底层【VFS文件系统】
Linux一直强调一切皆文件,除了普通的文件和目录,块设备、管道、socket等都被Linux视为文件。所以理解了文件系统,对于深入理解Linux非常重要,接下来就让我们从设计和源码双角度了解Linux文件系统。Linux内核通过虚拟文件系统(Virtual File System,VFS)管理文件系统。VFS是Linux内核文件系统的一个极其重要的基础设施,VFS为所有的文件系统提供了统一的接口,对每个具体文件系统的访问要通过VFS定义的接口来实现,所有Linux的文件系统也必须按照VFS定义的方式来实现原创 2022-06-06 17:24:22 · 1944 阅读 · 0 评论 -
Linux虚拟内存与线性地址翻译
1. 虚拟内存对于操作系统的使用者而言,内存就像是一个一排排按照从0到n被编好数字的收纳柜,每个柜子可以存放8个bit,也就是一个字节,我们将需要存放的信息切成若干个字节,放到连续的柜子中。以后我们只需要知道所使用的第一个柜子的编号,以及所用的柜子的数目,就可以完整的取出我们所保存的数据。知道地址就可以找到我们要的数据,然后从内存读到处理器就可以进行操作了,整个流程如下所示但问题真的这么简单吗?当然不可能,假设以下情况情景1:假如我调用一个软件为进程A,在内存0x11111111处开始存了若干原创 2022-01-24 23:15:03 · 825 阅读 · 0 评论 -
计算机的存储系统,全方面、最详细
1.存储器的分类按存取的方式分类:可读写的:随机存储器RAM,顺序存储器SAM,直接存储器DAM只读存储器ROM按存储介质分类:磁性材料存储器半导体存储器光存储器按功能与存取速度分类:寄存器型存储器高速缓冲存储器主存储器外存储器按信息保存时间分类易失型存储器非易失型存储器2.存储器技术指标存储容量存取速度可靠性 &n...原创 2019-11-02 14:36:05 · 3960 阅读 · 0 评论 -
汇编SHR、SHL、SAR、SAL、ROL、ROR、RCL、RCR指令
SHL、SHR、SAL、SAR: 移位指令;SHL(Shift Left): 逻辑左移;SHR(Shift Right): 逻辑右移;SAL(Shift Arithmetic Left): 算术左移;SAR(Shift Arithmetic Right): 算术右移;其中的 SHL 和 SAL 相同, 但 SHR 和 SAR 不同.;SH...转载 2019-10-13 19:18:05 · 9933 阅读 · 0 评论 -
安装汇编环境,写一个最简单的窗口程序
用汇编写一个窗口程序1.安装汇编所需的环境1.下载masm32 下载地址可以安装到D:\masm32目录下2.配置环境变量include = D:\masm32\includelib = D:\masm32\libpath = D:\masm32\bin如果你已经配置过path,那么再path字段后加上 ;D:\masm32\lib注意分号也要加进去3.检测是否配置完成在D...原创 2019-04-02 22:50:39 · 628 阅读 · 0 评论 -
动态加载技术
动态加载技术动态加载技术可以让程序设计者脱离复杂的导入表结构,在程序空间中构造类似于导入表的调用引入函数机制。Windows虚拟地址空间分配在32位的机器上,地址空间从0x00000000~ 0xFFFFFFFF,总大小为4GB。一般而言,低地址空间,从0x00000000~ 0x7FFFFFFF使用户空间,高地址空间被分配给系统。虚拟内存范围功能0x00000000 ......原创 2019-04-16 13:26:28 · 5227 阅读 · 0 评论 -
操作系统(Linux与Windows)的进程管理
进程描述和管理程序的“运行过程”-------进程进程概念定义:进程是程序在某个数据集合上的一次运行活动进程的特征动态性进程是程序的一次执行过程,动态产生消亡并发性进程可以同其他程序一起向前推进异步性进程按各自的速度向前推进独立性进程是系统分配资源和调度CPU的单位进程的状态运行状态进程已经占有CPU,在CPU上运行就绪状...原创 2019-04-21 14:47:50 · 3779 阅读 · 0 评论 -
操作系统储存管理功能
Windows虚拟内存Windows虚拟地址空间分配在32位的机器上,地址空间从0x00000000~ 0xFFFFFFFF,总大小为4GB。一般而言,低地址空间,从0x00000000~ 0x7FFFFFFF使用户空间,高地址空间被分配给系统。虚拟内存范围功能0x00000000 ~ 0x0000FFFF这段内存为空指针区,不可以同时访问0x00010000 ~......原创 2019-05-12 11:32:59 · 6668 阅读 · 0 评论 -
原码、反码、补码解析,保证一次搞懂
符号数二进制符号数,其格式为为了区别书写表示的带符号的二进制数和数字系统中的带符号二进制数,通常将用‘ + ’ ,‘ - ’ 表示正负的的二进制数称为符号数的真值,而把符号和数值一起进行编码的二进制数成为机器数。常用的机器数就分为原码、反码、补码原码:设 X1 = +Xn-1Xn-2…X0.X-1X-2…X-m, X2 = +Xn-1Xn-2…X0.X-1X-2…X-m[X1 ]原...原创 2019-06-01 15:54:04 · 446 阅读 · 0 评论 -
实模式与保护模式详解一:寄存器
物理地址原创 2019-09-06 19:07:24 · 1203 阅读 · 1 评论 -
实模式与保护模式详解二:地址映射
实模式下的地址映射在实模式下,32CPU只能寻址1MB物理储存空间并采用分段使用的方式,每段大小不超多64KB,段首地址和段内偏移地址都是用16位表示。这样1MB的储存空间最少可分为16段,每段最多64KB。...原创 2019-09-08 22:37:34 · 505 阅读 · 0 评论 -
实模式与保护模式详解三:寻址方式
寻找操作数物理地址的方式叫寻址方式操作数的存放点操作数在指令中指令的操作数部分就是操作数本身也叫立即数操作数存放在CPU寄存器中指令的操作数部分是寄存器的编码也叫寄存器操作数操作数存放在内存中指令的操作数部分包含操作数所在的内存地址也叫储存器操作数寻址方式立即数寻址e.g.MOV AL, 10H特点:操作数直接放在指令中寄存器寻址INC SI...原创 2019-09-09 14:55:59 · 616 阅读 · 0 评论 -
PE文件及其结构
PE文件1.什么叫PE文件PE (Portable Executeable File Format,可移植的执行体文件格式),使用该格式的目的是使连接生成的EXE文件能在不同的CPU指令下工作。Windows中可执行程序有很多种,COM,PIF,SCR,EXE等,这些文件的格式大部分都继承于PE。其中EXE是最常见的PE文件,动态链接库(大部分以dll为扩展名的文件)也是PE文件。2.PE...原创 2019-04-05 22:37:27 · 1268 阅读 · 0 评论