Ty-Chen's Home

Collecting, sharing and creating knowledge


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

Linux操作系统学习笔记(十二)虚拟文件系统

发表于 2020-06-18   |   更新于 2020-10-10 | 分类于 Linux操作系统内核学习 |
字数统计: 7.5k | 阅读时长 ≈ 31

一. 前言

  基于上文介绍的文件系统的基本结构,本文将继续深入Linux文件系统的精髓所在:虚拟文件系统。操作文件的本质是将磁盘文件数据映射到进程中,上文的文件系统是如何存储文件数据,而从进程如何映射到该文件系统,中间还有一系列的过程,主要包括

  • 进程发出文件操作命令,通过系统调用如sys_open、sys_read、sys_write调用相应内核函数
  • 在内核中为进程打开的文件和系统文件创建数据结构进行维护
  • 通过虚拟文件系统对各种不同的文件系统操作,如I/O设备、管道、进程间通信、网络等进行抽象并统一接口
  • 实现虚拟文件系统和实际文件系统如ext4的挂载
  • 提供文件系统和I/O设备层的设备驱动接口及加快读写效率的缓存
阅读全文 »

Linux操作系统学习笔记(十一)文件系统

发表于 2020-06-14   |   更新于 2020-07-18 | 分类于 Linux操作系统内核学习 |
字数统计: 3k | 阅读时长 ≈ 11

一. 前言

  本节开始将分析Linux的文件系统。Linux一切皆文件的思想可谓众所周知,而其文件系统又是字符设备、块设备、管道、进程间通信、网络等等的必备知识,因此其重要性可想而知。本文将先介绍文件系统基础知识,然后介绍最重要的结构体inode以及构建于其上的一层层的文件系统。

阅读全文 »

Linux操作系统学习笔记(十)内存管理之内存映射

发表于 2020-06-07   |   更新于 2020-09-12 | 分类于 Linux操作系统内核学习 |
字数统计: 5.2k | 阅读时长 ≈ 24

一. 前言

  本文为内存部分最后一篇,介绍内存映射。内存映射不仅是物理内存和虚拟内存间的映射,也包括将文件中的内容映射到虚拟内存空间。这个时候,访问内存空间就能够访问到文件里面的数据。而仅有物理内存和虚拟内存的映射,是一种特殊情况。本文首先分析用户态在堆中申请小块内存的brk和申请大块内存的mmap,之后会分析内核态的内存映射机制vmalloc,kmap_atomic,swapper_pg_dir以及内核态缺页异常。

阅读全文 »

Linux操作系统学习笔记(九)内存管理之分页

发表于 2020-06-02   |   更新于 2020-09-21 | 分类于 Linux操作系统内核学习 |
字数统计: 8.8k | 阅读时长 ≈ 40

一. 前言

  上文分析了内存再用户态的结构体mm_struct及各个区域映射的vm_area_struct以及32位和64位的内核态结构体,本文将基于这些结构来分析Linux的内存管理系统。内存管理系统包括虚拟内存和物理内存的分页以及虚拟内存和物理内存的映射。本文将介绍分页机制,而映射则在下文中说明。本文首先简单介绍SMP和NUMA系统,然后对物理内存的节点、区域、页结构进行分析,在此基础上剖析伙伴系统和Slub Allocator的实现原理,最后介绍页面交换。

阅读全文 »

Linux操作系统学习笔记(八)任务空间管理

发表于 2020-05-30   |   更新于 2020-09-20 | 分类于 Linux操作系统内核学习 |
字数统计: 3.4k | 阅读时长 ≈ 14

一. 前言

  从本文开始,我们进入内存部分的学习。首先会接着前面的任务task_struct讲解任务空间管理结构体mm_struct,并简单介绍物理内存和虚拟内存的相关知识,关于详细的基础知识和概念可以参照CSAPP一书,这里不会做过多的赘述,而是默认在已了解其映射关系的基础上进行的学习。在后文中,会继续介绍物理内存的管理以及用户态和内核态的内存映射。

阅读全文 »

Linux操作系统学习笔记(七)任务调度

发表于 2020-05-25   |   更新于 2020-08-30 | 分类于 Linux操作系统内核学习 |
字数统计: 7.7k | 阅读时长 ≈ 36

一. 前言

  在前文中,我们分析了内核中进程和线程的统一结构体task_struct,并分析进程、线程的创建和派生的过程。在本文中,我们会对任务间调度进行详细剖析,了解其原理和整个执行过程。由此,进程、线程部分的大体框架就算是介绍完了。本节主要分为三个部分:Linux内核中常见的调度策略,调度的基本结构体以及调度发生的整个流程。下面将详细展开说明。

阅读全文 »

Linux操作系统学习笔记(六)进程、线程的创建和派生

发表于 2020-05-22   |   更新于 2020-07-18 | 分类于 Linux操作系统内核学习 |
字数统计: 8.1k | 阅读时长 ≈ 34

一. 前言

  在前文中,我们分析了内核中进程和线程的统一结构体task_struct,本文将继续分析进程、线程的创建和派生的过程。首先介绍如何将一个程序编辑为执行文件最后成为进程执行,然后会介绍线程的执行,最后会分析如何通过已有的进程、线程实现多进程、多线程。因为进程和线程有诸多相似之处,也有一些不同之处,因此本文会对比进程和线程来加深理解和记忆。

阅读全文 »

Linux操作系统学习笔记(五)进程的核心——task_truct

发表于 2020-05-17   |   更新于 2020-07-31 | 分类于 Linux操作系统内核学习 |
字数统计: 4.5k | 阅读时长 ≈ 18

一. 前言

  在前文中,我们分析了内核启动的整个过程以及系统调用的过程,从本文开始我们会介绍Linux系统各个重要的组成部分。这一切就从进程和线程开始,在 Linux 里面,无论是进程,还是线程,到了内核里面,我们统一都叫任务(Task),由一个统一的结构 task_struct 进行管理。这个结构非常复杂,本文将细细分析task_struct结构。主要分析顺序会按照该架构体中的成员变量和函数的作用进行分类,主要包括:

阅读全文 »

Linux操作系统学习笔记(四)系统调用

发表于 2020-05-11   |   更新于 2020-12-18 | 分类于 Linux操作系统内核学习 |
字数统计: 3.8k | 阅读时长 ≈ 16

一. 前言

  通过前面几篇文章,我们分析了从按下电源键到内核启动、完成初始化的整个过程。在后面的文章中我们将分别深入剖析Linux内核各个重要部分的源码。考虑到后面的部分我们会从用户态的代码开始入手一步一步深入,因此在分析这些之前,我们需要仔细看一看如何实现一个从用户态到内核态再回到用户态的系统调用的全过程,即系统调用的实现。

阅读全文 »

Linux操作系统学习笔记(三)内核初始化

发表于 2020-05-05   |   更新于 2020-07-18 | 分类于 Linux操作系统内核学习 |
字数统计: 4k | 阅读时长 ≈ 16

一. 前言

  前文分析到Linux内核正式启动,完成了实模式到保护模式的切换,并做好了各种准备工作。下来就要看开始内核初始化工作了,源码位置位于init/main.c中的start_kernel(),源码如附录所示。这包括了一系列重要的初始化工作,本文会介绍其中一部分较为重要的,但是详细的介绍依然会留在后文各个模块的源码学习中单独进行。本文的目的在于承接上文给出一个从内核启动到各个模块开始运转的过程介绍,而不是详细的各部分内容介绍。

  • 创建0号进程:INIT_TASK(init_task)

  • 异常处理类中断服务程序挂接:trap_init()

  • 内存初始化:mm_init()

  • 调度器初始化sched_init()

  • 剩余初始化:rest_init()

    阅读全文 »
1…456
Ty Chen

Ty Chen

56 日志
10 分类
88 标签
GitHub E-Mail
Friends
  • Stanleylsx
© 2020 — 2025 Ty Chen | Site words total count: 208.1k 粤ICP备20071543号
你是来访的第 位同学 访问次数: 次