![](https://img-blog.csdnimg.cn/6d79feff187f4132a1fd79c2d19b34ec.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux操作系统
文章平均质量分 89
Linux操作系统
CPT1024
C/C++领域新星创作者
展开
-
【Linux 操作系统】I /O输入与输出
最终到用户态,给用户提供了基于文件系统的统一的接口。原创 2022-08-05 07:16:28 · 322 阅读 · 0 评论 -
【Linux操作系统】 虚拟文件系统 | 文件缓存
Linux通过目录项高速缓存dentrycache(dentry)提高效率.由两个数据结构组成-哈希表引用变为0后加入lru链表;dentry没找到则从slub分配;无法分配则从lru中获取;文件删除释放dentry;-未使用的dentrylru链表;再次被引用返回哈希表;dentry过期返回给slub分配器很重要的一张图在系统调用层我们需要仔细学习read和write。httpshttpshttpshttpshttps。...原创 2022-07-30 12:05:21 · 702 阅读 · 1 评论 -
【操作系统】 文件系统 磁盘文件系统
进程结束之后,数据依然能够保存下来,就不能只保存在内存里,而是应该保存在外部存储中,通常的外部存储结束硬盘,数据是以文件的形式保存在硬盘上的。原创 2022-07-28 20:23:59 · 551 阅读 · 0 评论 -
【操作系统】 用户态&内核态内存映射
内存映射物理内存和虚拟内存之间、文件中的内容映射到虚拟内存空间。申请小块内存用brk;申请大块内存或文件映射用mmapmmap映射文件,由fd得到structfile用户态缺页异常,触发缺页中断,调用do_page_default__do_page_fault判断中断是否发生在内核四级页表全局页目录项pgd在创建进程task_struct时创建并初始化,会调用pgd_ctor拷贝内核页表到进程的页表缺页时才进入内核态swapswapswap。...原创 2022-07-26 21:00:30 · 1172 阅读 · 0 评论 -
【操作系统】物理内存管理
物理内存分NUMA节点,分别进行管理;每个NUMA节点分成多个内存区域;每个内存区域分成多个物理页面;伙伴系统将多个连续的页面作为一个大的内存块分配给上层;kswapd负责物理页面的换入换出;SlubAllocator将从伙伴系统申请的大内存块切成小块,分配给其他系统。httpshttpshttpshttpshttpshttps。...原创 2022-07-22 20:57:49 · 369 阅读 · 0 评论 -
【操作系统】进程空间管理
brk(堆)堆是从低地址向高地址增长的,会有新旧的brk堆顶地址,需要比较,如果俩者相同的话,则说明在同一页,则修改堆顶地址就行,指向新的地址,如果新的原创 2022-07-20 21:44:25 · 525 阅读 · 0 评论 -
【操作系统】 内存管理
第一,虚拟内存空间的管理,将虚拟内存分成大小相等的页;第二,物理内存的管理,将物理内存分成大小相等的页;第三,内存映射,将虚拟内存也和物理内存也映射起来,并且在内存紧张的时候可以换出到硬盘中。httpshttpshttpshttpshttpshttpshttpshttpshttps。......原创 2022-07-19 21:20:03 · 294 阅读 · 0 评论 -
【操作系统】进程的创建 fork & 线程的创建
这个图对比了创建进程和创建线程在用户态和内核态的不同。创建进程的话,调用的系统调用是fork,在copy_process函数里面,会将五大结构files_struct、fs_struct、sighand_struct、signal_struct、mm_struct都复制一遍,从此父进程和子进程各用各的数据结构。而创建线程的话,调用的是系统调用clone,在copy_process函数里面,五大结构仅仅是引用计数加一,也即线程共享进程的数据结构。httpshttps。......原创 2022-07-17 21:51:22 · 459 阅读 · 0 评论 -
【操作系统】调度
进程数远大于CPU数目,所以我们需要对进程进行调度。原创 2022-07-16 21:42:28 · 171 阅读 · 0 评论 -
【操作系统】进程数据结构
在用户态,应用程序进行了至少一次函数调用。32位和64的传递参数的方式稍有不同,32位的就是用函数栈,64位的前6个参数用寄存器,其他的用函数栈。在内核态,32位和64位都使用内核栈,格式也稍有不同,主要集中在pt_regs结构上。在内核态,32位和64位的内核栈和task_struct的关联关系不同。32位主要靠thread_info,64位主要靠Per-CPU变量。httpshttpshttpshttpshttpshttpshttps。......原创 2022-07-14 21:42:31 · 1164 阅读 · 0 评论 -
【Linux操作系统】线程
对于任何一个进程来讲,即便我们没有主动去创建线程,进程也是默认有一个主线程的。线程是负责执行二进制指令的,进程要比线程管的宽多了,除了执行指令之外,内存、文件系统等等都要它来管。例子:进程相当于一个项目,而线程就是为了完成项目需求,而建立的一个个开发任务。就像是把一个项目分成多个人去做。如果使用进程实现并行执行的问题也有两个。第一,创建进程占用资源太多;第二,进程 之间的通信需要数据在不同的内存空间传来传去,无法共享。 比较麻烦一个普通线程的创建和运行过程: 线程可以将项目并行起来,加快进度,但是也带原创 2022-07-10 19:53:28 · 236 阅读 · 0 评论 -
【Linux操作系统】进程
开发套件进行编译:程序的二进制格式在编译的时候,先做预处理工作,例如将头文件嵌入到正文中,将定义的宏展开,然后就是 真正的编译过程,最终编译成为.o 文件,这就是 ELF 的第一种类型,可重定位文件 (Relocatable File)还是.o 文件,不是一个可以直接运行的程序,这里面只是 部分代码片段。可重定位文件的格式 每一个格的格式叫做节section.text:放编译好的二进制可执行代码.data:已经初始化好的全局变量.rodata:只读数据,例如字符串常量、const 的变量.bs原创 2022-07-08 20:45:44 · 251 阅读 · 0 评论 -
Linux操作系统(一)系统初始化
总线:用于CPU 和其他设备连接CPU 它包括三个部分,运算单元、数据单元和控制单元。每个进程都有一个二进制的程序放在硬盘上,再里面就是一行行的指令,会操作一些数据。CPU 的控制单元里面,有一个指令指针寄存器,它里面存放的是下一条指令在内存中的地 址。控制单元会不停地将代码段的指令拿进来,先放入指令寄存器。 (指令分别是对数据 or 运算)。 数据单元里的数据寄存器,从数据段里 读到数据寄存器里,就可以参与运算了,运算单元做完运算,产生的结果会暂存在数据单元的数据寄存器里。最终,会有指令将数据写回内存中原创 2022-06-29 20:05:53 · 2182 阅读 · 0 评论 -
哈工大 操作系统笔记(一) L1~L3
初识操作系统原创 2022-06-13 19:32:43 · 628 阅读 · 0 评论 -
哈工大 操作系统笔记 (二)L4 ~ L7
操作系统笔记原创 2022-06-19 17:57:10 · 321 阅读 · 0 评论