linux内核设计与实现 怎么读,《Linux内核设计与实现》读书笔记(一)

2023-05-16

第一次写读书笔记,有什么套路呢?还没来得及去学习。《linux kernel的设计与实现》真的是一本好书,里面的东西解答了很多工作中的疑问。如显示地调用schedule()进行调度,系统调用__syscalln(),一些数据结构函数经常在kernel 协议栈中遇到,中断注册和中断上下文,软中断,tasklet,锁,定时器,内存管理slab...

第15章 进程地址空间

进程只能访问有效内存区域内的内存地址。每个内存区域也具有相关权限如对相关进程有可读、可写、可执行属性。如果一个进程访问了不在有效范围中的内存区域,或以不正确的方式访问来有有效地址,那么内核就会终止该进程,并返回“Segmentation Fault”这个经典的错误。内存区域包含内存对象如:

-可执行文件代码的内存映射,称为代码段(text section);

-可执行文件的已初始化全局变量的内存映射,称为数据段(data section);

-包含未初始化全局变量,也就是bss段的零页(页面中的信息全部为0值,所以可用于映射bss段等目的)的内存映射;(bss段,因为未初始化的变量没有对应的值,所以并不需要存放在可执行对象中,但是C标准强制规定未初始化的全局变量要被赋予特殊的默认值,所以内核要将变量(未被赋值的)从可执行代码载入内存中,然后将零页映射到该片内存上,于是这些未初始化变量就被赋予了0值,这样做避免了在目标文件中显示地进行初始化,减少了空间浪费)。

-用于进程用户空间栈的零页的内存映射;

-每一个诸如C库或动态连接程序等共享库的代码段、数据段和bss段也会被载入进程的地址空间。

内核使用内存描述符结构体表示进程的地址空间,该结构包含了和进程地址空间有关的全部信息。内存描述符由mm_struct结构体表示,定义在文件中,所有的mm_struct结构体通过自身的mmlist域连接中一个双向链表中,该链表的首元素是init_mm内存描述符,代表init进程的地址空间。

内存区域(VMA)由vm_area_struct结构体描述,包含相关的mm_struct结构体域。进程的地址空间通过mmap和mm_rb(红-黑树)描述包含的全部内存区域。

可以使用/proc文件系统和pmap(1)工具查看给定进程的内存空间和其中包含的内存区域。

mmap()和do_mmap()创建进程的地址空间。内核使用do_mmap(),用户空间使用mmap()。

当用程序访问一个虚拟地址时,必须将虚拟地址转化为物理地址,地址的转换通过页表才能完成。Linux中使用三级页表转换地址。

未完待续...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux内核设计与实现 怎么读,《Linux内核设计与实现》读书笔记(一) 的相关文章

  • Cellranger故障排除

    Cellranger 运行不久 xff0c 即出现 runtime failed ID SC RNA COUNTER CS SC RNA COUNTER CHEMISTRY DETECTOR DETECT CHEMISTRY 然后终止 考虑
  • Duende.IdentityServer——快速开始

    一 新建鉴权中心服务 1 安装Duende IdentityServer模板 打开命令行工具 xff0c 输入以下命令 xff08 若已安装 xff0c 直接跳过 xff09 dotnet new install Duende Identi
  • Duende.IdentityServer——添加认证策略

    上一章我们已经获取到了token xff0c 本文我们对webApi添加认证策略 1 修改HostingExtensions cs中的ConfigureServices方法 添加如下代码 span class token comment 添
  • vmware中linux使用gparted调整磁盘大小并设置swap分区

    vmware中linux使用gparted调整磁盘大小并设置swap分区 今天使用虚拟机的时候 xff0c 发现虚拟机快满了 xff0c 提示磁盘空间小 xff0c 不得不扩充虚拟机空间 1首先把vmware中的ubuntu关机 xff0c
  • Gnome安装及个性化设置

    最近尝试了一下gnome桌面管理系统 xff0c 感觉还不错 xff0c 我的桌面我做主 先上图 xff1a 接下来 xff0c 详细说一下安装的过程 1 首先是在unity界面下通过命令行安装配置gnome sudo apt get in
  • 异常的处理

    Java异常处理的五个关键字 xff1a try catch finally throw throws 2 1 抛出异常throw 在编写程序时 xff0c 我们必须要考虑程序出现问题的情况 比如 xff0c 在定义方法时 xff0c 方法
  • 如何解决version `GLIBCXX_3.4.29‘ not found的问题

    首先 xff0c 运行时出现的问题如下 xff1a ImportError lib x86 64 linux gnu libstdc 43 43 so 6 version 96 GLIBCXX 3 4 29 39 not found req
  • Android EditText 手机号344格式化输入的最佳实现

    PhoneTextWatcher 手机号格式化监听器 xff0c 支持普通输入 删除 xff0c 中间输入 删除 xff0c 在任意位置下黏贴 剪贴多个数字等多种交互场景 目前支持的手机号格式为 3 4 4 分隔符可以自定义 Preview
  • JDispatcher-高效的 Android 组件生命周期分发框架

    JDispatcher Android 组件生命周期分发框架 xff0c 适用于组件化 xff0c 模块化 xff0c 启动优化等场景 Github JDispatcher 功能介绍 实现 Application 各个生命周期方法在所有需要
  • Kotlin | 委托(Delegation )详解

    本文要点概述 辨析委托模式与代理模式 接口委托 Delegated interface 属性委托 Delegated properties 映射委托 Map delegation 延迟属性 lazy properties 非空属性 Dele
  • node 和 npm 源码编译安装

    本文出处 xff1a www 678fly cn node 和 npm 源码编译安装 下载源码压缩包 xff1a http nodejs cn download 解压文件并将文件迁移到 usr local 下 span class toke
  • Outlook2013/2016中的Gmail设置

    Outlook2013 2016中的Gmail设置 注意 xff1a 用户名 xff1a useer 64 gmail com 全称 不要选中 使用安全密码验证 SPA 进行登录 复选框 除非 Gmail 指定 xff0c 否则所有服务器和
  • C#“System.Threading.ThreadStateException”类型的未经处理的异常

    备忘 最近做一个功能 xff0c 从主界面进入另一个界面时 xff0c 数据量较大 xff0c 处理信息较多 xff0c 程序宕机 而且点击程序还会提示程序无响应 不得已用另一个线程显示界面 但在界面中使用控件时 xff0c 报错 xff1
  • 数据主题域划分

    作用 xff1a 对公司所有的业务过程进行归纳汇总后 xff0c 总结出公司所有的主题域 xff0c 并且也能清晰的知道公司的所有业务模块有助于建模人员和运营人员对公司业务情况有基本的了解有利于在进行模型设计时 xff0c 根据主题域和业务
  • Mybatis入门第一例

    实现步骤 创建表User xff08 userID userPass userType xff09 span class token keyword create span span class token keyword table sp
  • Idea快捷键笔记(Mac OS)

    个人常用 快捷键menucommand shift 43 代码全部展开command shift 代码全部折叠command 单行注释command shift 代码块注释command option L格式化代码option enter自
  • log4j一般配置log4j.properties

    log4j rootLogger 61 DEBUG console file log4j appender console 61 org apache log4j ConsoleAppender log4j appender console
  • 二、Spring-Bean的自动装配

    Bean的自动装配定义 xff1a 在Spring配置文件不需要配置JavaBean之间的依赖关系 xff0c 如 property constructor arg Spring IOC容器可以在上下文中自动寻找 xff0c 实现自动装配B
  • 三、Spring mybatis整合示例

    1 配置pom xml span class token prolog lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt span span class token tag spa
  • 用python的numpy实现神经网络 实现 手写数字识别

    首先是读取文件 xff0c train images idx3 ubyte等四个文件是mnist数据集里的数据 放在MNIST文件夹里 MNIST文件夹和这个 py文件放在同一个文件夹里 import numpy as np import

随机推荐