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)

大家都在看

  • CTF中的一些图形密码

    1.传统猪圈密码 猪圈密码又称为亦称朱高密码、共济会暗号、共济会密码或共济会员密码;是一种以特定符号来替换字母的加密方式在线解密网址:http://moersima.00cha.n…

    Linux 2023年6月6日
    0123
  • powershell 编写的tui界面脚本《电壳别名宝》

    中文名: 《电壳别名宝》 English name: 《Power Alias》 powershell 编写的tui界面脚本。 用途:保存容易记住的别名(支持中文),保存linux…

    Linux 2023年5月27日
    0150
  • Nginx参数详解

    ​ 从配置文件到events之间的内容,主要会设置一些影响nginx服务器整体运行的配置命令。主要包括配置运行nginx服务器的用户(组)、允许生成的worker process数…

    Linux 2023年6月11日
    0105
  • shell升级

    对/sbin/nologin的理解 系统账号的shell使用 /sbin/nologin ,此时无法登陆系统,即使给了密码也不行。 所谓”无法登陆”指的仅是…

    Linux 2023年5月28日
    0113
  • OpenStack 发放云主机

    登陆网址 具体安装步骤欢迎参照我的博客:https://www.cnblogs.com/kongshuo/p/16618008.html用户名 admin 密码 redhat 创建…

    Linux 2023年6月8日
    0123
  • GIT使用说明

    1、Git入门教程 1.1:Git入门与使用 (一) Git介绍与安装 1.2:Git入门与使用 (二) Git相关命令的介绍与使用 1.3:Git入门与使用 (三) 使用GitH…

    Linux 2023年6月13日
    0115
  • vue3中iview框架初始值赋值问题

    问题:今天有个小伙伴说我们前端有个页面异常奇怪,没有显示数据。 开发小伙伴进行查询之后(非专业前端),明明进行了绑定,页面死活无法渲染,归属于灵异事件了,对于这种灵异事件,我总会想…

    Linux 2023年6月7日
    092
  • PWN学习总结

    一、栈溢出原理 什么是栈溢出?栈溢出就是缓冲区溢出的一种。 由于缓冲区溢出而使得有用的存储单元被改写,往往会引发不可预料的后果。程序在运行过程中,为了临时存取数据的需要,一般都要分…

    Linux 2023年6月8日
    0101
  • [转] OSDI, SOSP与美国著名计算机系的调查报告

    看到一个很久之前的文章,重新排版后转发一下,希望能带来一些帮助;文章有时效性,出现的数据多为历史数据。资源来源自网络,侵删。 序言 按照USnews的分类,Computer Sci…

    Linux 2023年6月13日
    0110
  • Python中import外部模块全局变量修改规则及踩坑

    最近碰到一个import外部文件全局变量修改后未符合预期效果的问题,简要描述如下: 有env.py, test.py, dal.py三个文件,env.py 中定义了DEBUG=Fa…

    Linux 2023年6月6日
    080
  • Redis 缓存更新一致性

    在使用 Redis 作为数据库缓存的场景中对数据的读取流程通常是先读取缓存如果命中则返回,未命中则从数据库读取并把数据写到缓存中。 当更新数据时则数据库和缓存都要进行更新,此时我们…

    Linux 2023年5月28日
    094
  • 什么?Android上面跑Linux?

    前言 众所周知,现在程序员因为工作、个人兴趣等对各种系统的需求越来越大,部分人电脑做的还是双系统。其中,比较常见的有各种模拟器、虚拟机在windows上面跑Android、Linu…

    Linux 2023年5月27日
    092
  • [20220811]奇怪的隐式转换问题(12c补充测试).txt

    [20220811]奇怪的隐式转换问题(12c补充测试).txt –//生产系统遇到一个奇怪的隐式转换问题,问题在于没有发生隐式转换,前面已经做了一些分析增加12c下的…

    Linux 2023年6月13日
    090
  • 预处理

    在前面的学习中经常遇到用 #define命令定义符号常量的情况,其实使用 #define命令就是要定义一个可替换的宏。 宏定义是预处理命令的一种,它提供了一种可以替换源代码中字符串…

    Linux 2023年6月13日
    096
  • 【Example】C++ 回调函数及 std::function 与 std::bind

    回调函数是做为参数传递的一种函数,在早期C样式编程当中,回调函数必须依赖函数指针来实现。 而后的C++语言当中,又引入了 std::function 与 std::bind 来配合…

    Linux 2023年6月13日
    091
  • shell的入门

    命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 中间不能有空格,可以使用下划线 不能使用标点符号 不能使用bash里面关键字 使用变量加上$就可使用 只读变量 rea…

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