• 目录 1 push指令 2 pop指令 3 b指令 4 bl指令 5 bx指令 1 push指令 功能描述 入栈 armv7 芯片手册 Push Multiple Registers stores multiple registers to
  • sleep on用于进程休眠 原型如下 void sleep on struct task struct p 当进程访问某个互斥资源时 如果资源被另外进程占用 当前进程就需要休眠 假设资源的结构如下 struct res struct ta
  • 本文主要介绍Linux0 12内核memory c中的函数 1 void free page unsigned long addr 释放物理地址addr处的一页内存 用于free page tables 函数 void free page
  • 内存分配的原理 从操作系统角度来看 进程分配内存有两种方式 分别由两个系统调用完成 brk和mmap 不考虑共享内存 1 brk是将数据段 data 的最高地址指针 edata往高地址推 2 mmap是在进程的虚拟地址空间中 堆和栈中间 称
  • 1 特权级 1 1特权级 处理器段保护机制可以识别0 3共4级特权级 数值越大 特权越小 处理器通过识别CPL DPL RPL这三种特权级来进行特权级校验 1 CPL CPL是当前正在执行程序或任务的特权级 它存放在CS和SS段寄存器的0位
  • 强烈建议使用ubuntu系统 apt get指令太好用了 安装各种依赖相当简单 1 首先到bochs网站上下载一个linux版本bochs 在安装之前需要安装一些依赖 sudo apt get install build essential
  • 1 内存分页管理机制 内存分页管理是通过页目录表和内存页表所组成的二级表组成的 其中页目录表和页表的结构是一样的 表项结构也相同 页目录表中的每个表项 4B 来寻址一个页表 而每个页表项 4B 来指定一页物理内存页 因此 当指定了一个页目录
  • 为了提高效率 稍微复杂一些的操作系统对文件的读写都是带缓冲的 Linux当然也不例外 所谓缓冲 就是操作系统为最近刚读写的文件内容在内核保留一份副本 以便当再次需要已经缓冲存储在副本中的内容时就不必再临时从设备上读入 而需要写的时候则可以先
  • 终于把bochs和gdb连起来了 下面描述下步骤以作记录 1 安装bochs 前面有篇文章介绍了bochs源码编译安装过程 这里安装也非常相似 只是命令稍微有些不同 configure enable gdb stub make make i
  • 上图展示了进程打开文件使用的内核数据结构 所以要打开文件 就要构造上图中的关系 int sys open const char filename int flag int mode struct m inode inode struct f
  • 本文介绍内核C语言程序中接触到的嵌入式汇编 内联汇编 语句 具有输入和输出参数的嵌入式汇编语句的基本格式为 asm 汇编语句 输出寄存器 输入寄存器 会被修改的寄存器 除第一行外 后面带冒号的行若不使用就都可以省略 其实asm是内联汇编语句
  • linux中使用的AT T格式的汇编指令 所以总结一下一些比较重要的指令 1 寻址模式 有多种不同的寻址模式 允许不同形式的存储器引用 我们用符号Ea表示任意寄存器 R Ea 表示它的值 M addr 表示addr处地址的值 题目 答案 0
  • 进程结构 Linux0 12中的每个进程都有如下的结构 在gdt中占有两项 一项是tss段描述符 一项是ldt段描述符 在task数组中占有一项 指向一页物理内存 该物理内存低端是进程控制块task struct 里面包括tss段和ldt段
  • 此为C语言的基础 和Linux内核关系并不大 不过还是作为补充知识点介绍一下好了 宏非常频繁的用于执行简单的计算 比如在两个表达式中寻找其中较大的一个 define MAX a b a gt b a b 如果使用函数来实现的话就比较慢 宏的