0%

Linux内核设计与实现第十四章—块I/O层

块设备是系统中能够随机访问固定大小数据片的硬件设备,所以这些固定大小的数据片就称为块。最常见的块设备是硬盘,其余闪存,光驱等也均为块设备。在内核中,这些块设备都是以安装文件系统的方式使用的。

与块设备相对应的设备类型是字符设备。字符设备会按照字节流的方式被有序访问(例如串口或者键盘这样的设备)。也就是说字符设备和块设备之间的最主要区别就是——数据是否可以被随机访问。

对于内核来讲,对于块设备的管理要比对于字符设备的管理细致的多。因为块设备中要考虑的问题比字符设备更多。字符设备只需要控制当前位置的数据,而块设备上的位置需要在介质的区间中不停移动。更重要的是,块设备普遍来说对执行性能的要求很高。对硬盘的每多一份利用都会对整个系统带来性能上的提升。所以内核给块设备提供了专门提供服务的子系统。而这一章讲述的就是内核如何对块设备和块设备的请求进行管理。

阅读全文 »

Linux内核设计与实现ch10 内核同步方法

10.1 原子操作

原子操作可以保证命令以原子方式执行,不会被打断。内核提供了两组原子操作接口——一组针对整数进行操作,一组针对单独位进行操作。在Linux支持的所有体系结构上都实现了这两组接口。大多数体系结构都会提供支持原子操作的简单算数指令,而有些体系结构缺少简单的原子操作指令,但是也提供了锁存总线的指令。

阅读全文 »

Linux内核设计与实现第五章—系统调用

5.1 与内核通讯

中间层位于用户空间进程与硬件设备之间,由系统调用添加。该层的作用主要有三个

  • 为用户空间提供硬件的抽象接口,可以对用户屏蔽不同硬件之间的差异
  • 保证了系统的稳定性与安全性,内核可以基于权限,用户类型等对需要进行的访问进行裁决,防止它做出对系统有危害的事情
  • 为运行在虚拟内存中的进程提供统一接口

系统调用是用户除了系统异常和陷入外访问内核的唯一手段和唯一合法入口。

阅读全文 »

Linux内核设计与实现第四章 进程调度

进程调度程序可以被看做是一个在可运行态进程之间分配有限处理器时间资源的内核子系统。也是Linux多任务的基础。只有有了合理的调度,系统资源才能最大化的发挥作用。多进程才会有并发执行的效果。

阅读全文 »

Linux内核设计与实现读书笔记

第二章 从内核出发

内核开发特点

  • 不能访问c库也不能访问标准的c文件
  • 必须使用GNU C
  • 缺乏像用户空间一样的内存保护机制
  • 难以执行浮点运算
  • 给每个进程只有一个很小的定长堆栈
  • 由于内核支持异步中断,抢占和SMP,因此要时刻注意同步和并发
  • 要考虑可移植的重要性
阅读全文 »

Udev规则修改学习

0x01 udev简介

udev的全称是Dynamic device management,也就是曾经的devfs的继任者。udev的主要目的是为动态/dev目录提供用户空间的解决方案,以及实现持久的设备命名。

阅读全文 »

linux驱动学习:驱动代码结构

0x01.前言

对刚开始接触Linux驱动代码的新人来说,最困难的是面对着一个项目无从下手。对于传统的单片机来说,许多操作需要做的只是向对应的寄存器中写入所需的数值。然而同样的代码到了linux驱动中,就需要许多的回调函数,指针和结构体。而且伴随着驱动操作的逐渐复杂化,面对着一个驱动中的诸多文件更是不知所云。所以对于初学者来说最重要的就是要了解:linux驱动代码究竟做了什么,linux驱动代码结构究竟是什么?

阅读全文 »

嵌入式开发技巧汇总

宏定义相关

#error

error 可以直接在编译器中打出error,用于必须的配置文件中使用。例如

1
#error  "please select device name"
阅读全文 »

关系模型之关系演算

1.关系演算之元组演算

  • 关系演算以数理逻辑中的谓词演算为基础
  • 是描述关系运算的另一种思维方式
阅读全文 »

04 关系代数

  • 基本操作:并、差、积、选择、投影(更名)
  • 扩展操作:交、连接、除
阅读全文 »