Linux内核源码学习(1)

2023-11-19

一,内核简介

1,在安装好的Linux系统中,内核的源代码位于/usr/src/linux。

2的10次方就是1K(1024);16位CPU的地址空间是64K。

X86结构的80386是32位CPU

段描述结构伪代码:

typedef struct{
    unsigned int base24_31:8; /*基地址的高8位*/
    unsigned int g:1; /*表段的长度单位,0表示字节,1表示4KB*/ 
    unsigned int d_b:1; /*默认存储大小,0=16位,1=32位*/
    unsigned int unused:1; /*固定设置为0*/
    unsigned int avl:1; /*可供系统软件使用*/
    unsigned int seg_limit_16_19:4; /*段长度的最高4位*/
    unsigned int p:1; /*0表示该段的内容不在内存中*/
    unsigned int dpl:2; /*访问本段所需权限*/
    unsigned int s:1; /*描述项类型,1表示系统,0表示代码或数据*/
    unsigned int type:4; /*段的类型,与上面的S标志位一起使用*/
    unsigned int base_0_23:24; /*基地址的低24位*/
    unsigned int seg_limit_0_15:16; /*段长度的低16位*/
}段描述项;
  • 80386并不只是划分出系统状态和用户状态,而是划分成四个特权级别,0~3,0是最高级。
  • 16位段寄存器的高13位用作下标来访问段描述表:

    typedef struct {
        unsigned short seg_idx:13; /*13位的段描述项下标*/
        unsigned short ti:1; /*段描述表指示位,0表示GDT,1表示LDT*/
        unsigned short rpl:2; /*要求的优先级别*/
    }段寄存器;
    
  • LDT(局部段描述表),GDT(全局段描述表);
  • 当改变一个段寄存器的内容时,CPU会加以检查,以确保该段程序的当前执行权限和段寄存器所指定要求的权限均不低于所要访问的那一段内存的权限dpl。

i386的页式内存管理机制

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

Linux内核源码学习(1) 的相关文章

  • printk与内核日志打印优先级设置

    1 控制台的日志优先级 define KERN EMERG lt 0 gt 致命级 紧急事件消息 系统崩溃之前提示 表示系统不可用 define KERN ALERT lt 1 gt 警戒级 报告消息 表示必须采取措施 define KER
  • chinaUnix中的linux源代码学习

    原文地址 http bbs chinaunix net thread 1930079 1 1 html 大家好 内核源码版对本版块的精华帖进行了分类汇总 所有的精华帖分为十大类 各个分类的精华帖相关信息分布在该贴2 11楼 每个分类各占1楼
  • local_irq_save和 local_irq_disable

    如果你要禁止所有的中断该怎么办 在2 6内核中 可以通过下面两个函数中的其中任何一个关闭当前处理器上的所有中断处理 这两个函数定义在
  • linux内核-系统调用execve()

    读者在linux内核 系统调用fork vfork与clone中已经看到 进程通常是按其父进程的原样复制出来的 在多数情况下 如果复制出来的子进程不能与父进程分道扬镳 走自己的路 那就没多大意义 所以 执行一个新的可执行程序是进程生命历程中
  • busybox简介

    busybox BusyBox 是标准 Linux 工具的一个单个可执行实现 BusyBox 包含了一些简单的工具 例如 cat 和 echo 还包含了一些更大 更复杂的工具 例如 grep find mount 以及 telnet 有些人
  • 调度器简介,以及Linux的调度策略

    进程是操作系统虚拟出来的概念 用来组织计算机中的任务 但随着进程被赋予越来越多的任务 进程好像有了真实的生命 它从诞生就随着CPU时间执行 直到最终消失 不过 进程的生命都得到了操作系统内核的关照 就好像疲于照顾几个孩子的母亲内核必须做出决
  • ARM 浮点运算详解

    一 早期ARM上的浮点模拟器 早期的ARM没有协处理器 所以浮点运算是由CPU来模拟的 即所需浮点运算均在浮点运算模拟器 float math emulation 上进行 需要的浮点运算 常要耗费数千个循环才能执行完毕 因此特别缓慢 直到今
  • linux的dirty page回写磁盘过程中是否允许并发写入更新page?

    概述 众所周知Linux内核write系统调用采用pagecache机制加速写入过程 避免write系统调用长时间block应用进程 用户态进程执行write调用的时候 内核只是将用户态buffer copy到内核的pagecache当中
  • 第十三章 网络命名空间(内核源码实现)--基于Linux3.10

    下载地址 http download csdn net detail shichaog 8620701 有两篇翻译博文 Lxc之二 网络设置 和 linuxnamespace 之使用 LXC文章中关于网络的设置是从用户空间配置的 从该文章可
  • 第十四章 netlink机制--基于Linux3.10

    Netlink基于网络的消息机制 能够让用户和内核空间进行通信 12 3节提到的ifconfig是使用ioctl方法和内核通信的 而ip命令则是使用netlink和内核通信的 该机制初衷是为网络服务的 但是现在起应用范围已经大大扩展 14
  • 第七章 tcp发送(传输层)--基于Linux3.10

    由第五章可知 sock recvmsg和tcp sendmsg用于tcp层和应用层的接口 由第四章可知 tcp v4 rcv和tcp tarnsmit skb是传输层和网络层之间的接口 现在来看看tcp sendmsg是如何到tcp tar
  • 构建Buildroot根文件系统(I.MX6ULL)

    Busybox构建的根文件系统只有一些常用的命令和文件 Buildroot不仅集成了 busybox 而且还集成了各种常见的第三方库和软件 开发环境 Buildroot 版本 buildroot 2019 02 6 tar gz 虚拟机 4
  • kvm内存管理

    qemu kvm 进程很像一个普通的linux程序 它通过通常的malloc和mmap调用来申请内存 如果一个客户系统想使用1G物理内存 qemu kvm将会做一个malloc 1 lt lt 30 调用 在主机上申请1G的虚拟地址 然而
  • Linux内核分析:输入输出,字符与块设备 31-35

    CPU 并不直接和设备打交道 它们中间有一个叫作设备控制器 Device Control Unit 的组件 例如硬盘有磁盘控制器 USB 有 USB 控制器 显示器有视频控制器等 这些控制器就像代理商一样 它们知道如何应对硬盘 鼠标 键盘
  • linux设备驱动归纳总结(四):3.抢占和上下文切换

    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 上一节介绍了进程调度的一些基本概念 并简单介绍了在没有抢占的情况下
  • MPC8314 (e300核) uboot 调试

    历经2个多月 完成了MPC8314最小系统 uboot 及Linux内核和根文件系统的调试 这是我第一次从头开始做小系统和内核的移植工作 虽然调试的比较辛苦 但是收获还是很多的 下面就介绍一下调试的过程和一些原理性的东西 1 MPC8314
  • brk和sbrk及内存分配函数相关

    brk和sbrk主要的工作是实现虚拟内存到内存的映射 在GNUC中 内存分配是这样的 每个进程可访问的虚拟内存空间为3G 但在程序编译时 不可能也没必要为程序分配这么大的空间 只分配并不大的数据段空间 程序中动态分配的空间就是从这 一块分配
  • diagnose-tools 编译报错

    在 Ubuntu 20 04 4 LTS 环境中 编译diagnose tools 执行make deps时报错 checking whether gcc m32 makes executables we can run no config
  • 多线程(1):互斥锁

    leetcode 1114题 按序打印 给你一个类 public class Foo public void first print first public void second print second public void thi
  • linux内核-软中断与Bottom Half

    中断服务一般都是在将中断请求关闭的条件下执行的 以避免嵌套而使控制复杂化 可是 如果关中断的时间持续太长就可能因为CPU不能及时响应其他的中断请求而使中断 请求 丢失 为此 内核允许在将具体的中断服务程序挂入中断请求队列时将SA INTER

随机推荐

  • Eclipse android apk打包

    Eclipse android 开发更改apk名字 有以下几步 第一步 修改工程包名 在eclipse里 找到项目包和java包 原则上都一样 就可以按 F2 修改名字 随之 源 java也会得到相应的修改 然而每个 java文件都需要把如
  • Fortify 代码扫描安装使用教程

    前言 Fortify 能够提供静态和动态应用程序安全测试技术 以及运行时应用程序监控和保护功能 为实现高效安全监测 Fortify具有源代码安全分析 可精准定位漏洞产生的路径 以及具有1分钟1万行的扫描速度 Fortify SCA 支持丰富
  • 现在投资创客教育

    很多人会问创客要不要投资 就像吃西红柿鸡蛋面要不要用刀叉一样 你当然可以用 也可以用筷子 格物斯坦表示如果没有筷子 喜欢用手抓着吃也是可以的啊 投资人是路径的一种 不是唯一 更不是全部 投资创客教育是教育培训行业比较热门的话题 该行业未来是
  • Python基础语法学习之变量与赋值

    近几年Python飞速发展 开始学习Python的人群不在仅仅局限于编程开发者 许多其他行业的从业者也开始将Python作为自己的职业技能 本文仍然是针对零基础的初学者 继续学习Python的基础语法 变量与赋值 主要内容包括变量和赋值的概
  • el-checkbox-group限制勾选数量

  • 代理模式:静态代理和动态代理

    代理模式 代理对象增强对目标对象的功能 分类 静态代理 动态代理 jdk代理通过实现接口 cglib通过实现类实现 静态代理 JDK动态代理 CGLIB代理模式 通过回调拦截器方法实现代理对象的生成
  • 【计算机视觉】直接线性变换(DLT)求解P矩阵(2 使用SVD分解)(附MATLAB代码)

    引言 之前的帖子已经完成了一种计算直接线性变换的方法 是直接通过矩阵运算来进行的 不过随后得到的结果并不能满足精度要求 如果只是用来作为迭代优化的一个初值的话 对于精度的要求倒也不用那么高 但在查阅资料时又发现了另一种解法 是通过SVD分解
  • DataFrame对象创建

    文章目录 前言 一 创建DataFrame对象 二 使用步骤 前言 一 创建DataFrame对象 示例 将字典 年龄 23 22 21 岗位 客服 运营 公关 年购买量 10 15 8 转换成一个DataFrame对象 二 使用步骤 代码
  • 搭建主数据管理平台,解决多个系统数据不统一的问题

    如今的电子产业环境要求电子制造商必须能对产业中的各种变化做出迅速的反应 而这些变化产生了前所未有的大量数据 包括来自产品类别增加 供应中断和需求波动以及其它因素等多方面的数据 这些数据以多种格式存在于各种系统之中 虽然 企业为管理它们花费了
  • FastAPI准备之pydantic类型检查工具

    官方文档 https pydantic docs helpmanual io 这些组织都在用 Jupyter notebook FastAPI Amazon Web Services Uber Microsoft 优势 可以和IDE结合 可
  • hbase与spark笔试题(选择题)

    转自 https www cnblogs com cxzdy p 5388451 html http www bigdatastudy net show aspx id 175 cid 14 一 HBASE笔试题 HBase来源于哪篇博文
  • CVS命令深入研究 zz

    CVS命令深入研究 作者 leizhimin 日期 2006 11 2 环境 Windows server 2003 sp1简体中文版 cvsnt 2 5 03 2260 msi 目录 一 CVS命令整体结构 二 CVS帮助察看方法概述 三
  • 浅谈我所见识的数据治理项目

    开篇一张图 与正文不一定有关 图片来源于朋友圈 01 写在前面 熟悉笔者的朋友可能知道 笔者之前做的并非纯数据相关工作 产品或项目 笔者属于半路出家的数据人 之前也几乎没有直接接触过数据仓库 数据中台 数据平台等产品或项目 与数据库是一直打
  • 大数据Mapreduce编程——矩阵乘法

    编程要求 完成矩阵乘法的 Map 函数和 Reduce 函数 1 设计两个矩阵 3050 50100 在每个单元格中填入一个 0 99 的随机数 并写入 两个文件中 作为 Map 函数的输入 2 测试运行矩阵乘法的 MapReduce 框架
  • Emoji表情符号用于文本情感分析-Improving sentiment analysis accuracy with emoji embedding

    Abstract Due to the diversity and variability of Chinese syntax and semantics accurately identifying and distinguishing
  • 显著性检测论文阅读整理

    1 Visual Saliency Based on Multiscale Deep Features 原文链接 https arxiv org pdf 1503 08663 pdf 翻译 https blog csdn net weixi
  • QCustomPlot获取选点坐标

    QCustomPlot版本 Version 2 1 1 设置点选择模式 customPlot gt setInteractions QCP iSelectPlottables 2 绑定点击事件 connect customPlot QCus
  • response实现文件下载(java)

    import javax servlet ServletException import javax servlet ServletOutputStream import javax servlet http HttpServlet imp
  • 阿里云多台内网ECS公用一条EIP实现访问外网

    第一步 开启ECS的ip转发功能 有公网的ECS上操作 1 vi etc sysctl conf 找到 net ipv4 ip forward 1 这一条 确保后面的值为1就行 如果没有这一条 手动加进去 保存退出 然后使用 sysctl
  • Linux内核源码学习(1)

    一 内核简介 1 在安装好的Linux系统中 内核的源代码位于 usr src linux 2的10次方就是1K 1024 16位CPU的地址空间是64K X86结构的80386是32位CPU 段描述结构伪代码 typedef struct