Linux 0.11源码阅读笔记-总结

Linux 0.11主要包含文件管理和进程管理两个部分。进程管理包括内存管理、进程管理、进程间通信模块。文件管理包含磁盘文件系统,打开文件内存数据。磁盘文件系统包括空闲磁盘块管理,文件数据块的管理,文件元数据的管理,树形结构目录。打开文件内存数据包括文件描述符表、file文件表、inode节点表。

总结

Linux 0.11主要包含文件管理和进程管理两个部分。进程管理包括内存管理、进程管理、进程间通信模块。文件管理包含磁盘文件系统,打开文件内存数据。磁盘文件系统包括空闲磁盘块管理,文件数据块的管理,文件元数据的管理,树形结构目录。打开文件内存数据包括文件描述符表、file文件表、inode节点表。

中断过程

  • 每个进程都有一个用户堆栈和一个进程堆栈。中断调用导致用户堆栈切换到内核堆栈,而中断返回导致内核堆栈切换到用户堆栈。
    [En]

    each process has a user stack and a process stack. The interrupt call causes the user stack to switch to the kernel stack, and the interrupt return causes the kernel stack to switch to the user stack.*

  • INT指令中调调用时,用户态运行状态被保存到内核栈中
  • IRET指令中断返回时,恢复用户态运行状态信息,包括用户栈地址信息
  • 系统调用基于int 80软中断实现,80中断程序根据系统调用号调用相应的函数,如sys_read、sys_write
  • 时间片轮换进程调度基于时钟中断。当进程时间片用完时,时钟中断发生,中断程序运行调度程序。
    [En]

    time slice rotation process scheduling is based on clock interrupts. When the process time slices are used up, the clock interrupt occurs, and the interrupt program runs the scheduler instead.*

  • 进程调度的本质是在运行状态之间切换。选中的程序会将选中进程的运行状态信息复制到硬件寄存器中,并运行选中的程序。
    [En]

    the essence of process scheduling is to switch between running states. The selected program will copy the running status information of the selected process into the hardware register and run the selected program.*

内存管理

  • 分页内存管理包括空闲块的管理、进程基于页表管理已分配的物理内存;分段内存管理通过段表(LDT)管理分段内存信息。
  • 地址翻译经过段号:偏移—>线性地址—>物理地址的二次转换过程,设置好段表(LDTR)和页表(PTBR)信息后,内存管理单元(MMU)自动完成地址翻译过程。

文件管理

磁盘数据结构

  • 可通过链表、位图、组链接等方式管理磁盘空闲块。
    [En]

    disk free blocks can be managed through linked lists, bitmaps, group linking, etc.*

  • 管理文件数据块,通过类似于页表的结构维护文件逻辑块与磁盘物理块之间的映射
    [En]

    Management of file data blocks to maintain the mapping between file logical blocks and disk physical blocks through a structure similar to page tables*

  • 磁盘文件的管理,通过inode数组维护所有文件信息,inode记录对应的文件信息
  • 树形目录结构,目录数据文件包含子文件名—>子文件inode号的映射关系,从而形成树形目录结构。

打开文件的内存数据结构

  • inode表,记录文件的inode数据,用磁盘上文件inode数据基本一致
  • file表,记录打开文件的信息,维护进程对文件的操作状态,如读写偏移
  • 文件描述符表,记录进程打开的文件集合。表项是文件表的下标索引。
    [En]

    File descriptor table, which records the collection of files opened by the process. The table entry is the subscript index of the file table.*

  • fork后父子进程文件描述符表相同;不同进程打开同一文件,具有不同的file数据,即拥有不同的读写偏移。

高速缓冲

  • 使用空闲链表管理空闲缓冲区
    [En]

    Management of free buffers, using free linked lists*

  • 管理已分配的缓冲区。为了加快访问速度,使用了哈希表。散列函数的输入是设备号和磁盘块号。
    [En]

    Management of allocated buffers. In order to speed up access, a hash table is used. The input of the hash function is the device number and disk block number.*

  • 脏缓冲块数据的写盘,缓冲块需要重新缓存其它磁盘块的数据时,对于旧的数据,如果具有脏数据(dirt位为1),则写入磁盘

块驱动程序

  • 通过设备表管理块设备,记录设备的请求队列地址,处理请求函数地址。
    [En]

    manage block devices through the device table, record the request queue address of the device, and process the request function address.*

  • 请求队列维护对磁盘的所有读写请求,所有读写请求都放在请求队列中
    [En]

    the request queue maintains all read and write requests to the disk, and all read and write requests are placed in the request queue*

  • 设备中断处理程序,不断处理请求队列中的读写请求
    [En]

    device interrupt handler, constantly processing read and write requests in the request queue*

Original: https://www.cnblogs.com/lazyfiish/p/16092507.html
Author: LazyFish
Title: Linux 0.11源码阅读笔记-总结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/523896/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • PowerShell Automation : Introduction To Kasini3000

    tags: Ansible , pipeline , winrm , SSH , psremoting , automation , devops site mirror: htt…

    Linux 2023年6月14日
    098
  • LeetCode-329. 矩阵中的最长递增路径

    题目来源 329. 矩阵中的最长递增路径 题目详情 给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。 对于每个单元格,你可以往上,下,左,右四个方向…

    Linux 2023年6月7日
    072
  • SQLI-LABS(Less-8)

    Less-8(GET-Blind-Boolean Based-Single Quotes) 打开 Less-8页面,可以看到页面中间有一句 Please input the ID …

    Linux 2023年6月6日
    086
  • Netty源码解读(一)-前置准备

    前置条件 源码版本netty4.1 了解Java NIO、Reactor模型和Netty的基本使用。 解释一下: Java NIO:了解BIO和NIO的区别以及Java NIO基础…

    Linux 2023年6月7日
    091
  • GCC 内联汇编基础

    GCC 内联汇编 在 MIT6.828的实验中,有几处用到了很底层的函数,都以内联汇编的形式存在,例如 static inline uint32_t read_esp(void) …

    Linux 2023年6月8日
    082
  • 用Windows Terminal替代cmd

    HKEY_CLASSES_ROOT\batfile\shell\open\command,默认项内容 把 "C:\Users\<user>\AppData\L…

    Linux 2023年6月13日
    0103
  • 有道云笔记迁移到为知笔记

    背景 &#x4E4B;&#x524D;&#x4E00;&#x76F4;&#x7528;&#x7684;&#x6709;&am…

    Linux 2023年6月14日
    0103
  • Nginx $remote_addr和$proxy_add_x_forwarded_for变量详解

    $remote_addr 代表客户端IP。注意,这里的客户端指的是直接请求Nginx的客户端,非间接请求的客户端。假设用户请求过程如下: &#x7528;&#x62…

    Linux 2023年5月27日
    086
  • docker网络管理

    服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 x86_64…

    Linux 2023年6月7日
    086
  • linux添加磁盘及分区挂载

    磁盘管理 1.为什么要添加磁盘 2.系统添加磁盘并分区 磁盘管理 1.为什么要添加磁盘 随着系统的使用,磁盘的内容会越来越少,所以有必要添加磁盘来增加空间。 [En] With t…

    Linux 2023年5月27日
    089
  • IDEA快捷键总结

    一、关于IDEA工具的快捷键 1.1、字体设置  file –> settings –> 输入font –> 设置字体样式以及字号大小​1.1、快速生成ma…

    Linux 2023年6月7日
    083
  • django 将原本数据库中的表导入models中

    django 将原本数据库中的表导入models中 python manage.py inspectdb > app名/models.py 在执行过程中,如果发现出现报安装m…

    Linux 2023年6月13日
    0100
  • Sublime快捷键大全

    Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开文件Ctrl+Sh…

    Linux 2023年6月13日
    075
  • mycat2 读写分离配置(详解)

    mycat2相对mycat1来说升级还挺多的,但是全网资料太少了,这里尽可能详细的将读写分离说清楚,目前这套配置已经在我司生产环境应用,日UV6W左右,暂时没发现问题。 1.1下载…

    Linux 2023年6月6日
    0103
  • JavaScript 设计模式

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&quo…

    Linux 2023年6月13日
    0117
  • Linux 下 xargs 命令

    xargs 常常被大家忽略的一个命令,对它的一些用法很多人可能不熟悉,其实它是一个功能强大的命令,特别是在结合管道进行批量处理方面 语法 xargs 语法格式如下 xargs [O…

    Linux 2023年6月13日
    0113
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球