<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[scutth的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/scutth</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; scutth]]></copyright><item><title><![CDATA[计算机组成与设计 - 硬件/软件接口 - 第一章]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/114232948</link><guid>https://blog.youkuaiyun.com/scutth/article/details/114232948</guid><author>scutth</author><pubDate>Sun, 28 Feb 2021 18:17:25 +0800</pubDate><description><![CDATA[今天开始看这本书，后续都是读书笔记。看的是ARM版。



第一章的标题是：计算机的抽象与技术

1.1 引言

这部分主要概括了计算机的诞生给人类的发展带来的贡献，并且在农业革命、工业革命之后，促进了人类的第三次革命--信息革命，这次革命影响深远，诞生了很多之前只存在于科学幻想中的产物，如车载计算机，手机，人类基因项目，万维网以及搜索引擎等。

1.1.1 计算机应用的分类和特点

所谓计算机应用的分类，就是按照不同的使用场景，把计算机分为几类。比如个人计算机，服务器，嵌入式计算机等。

个人计算机

.]]></description><category></category></item><item><title><![CDATA[计算机体系结构量化方法第六版-chapter 1]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/107887513</link><guid>https://blog.youkuaiyun.com/scutth/article/details/107887513</guid><author>scutth</author><pubDate>Sat, 08 Aug 2020 23:00:58 +0800</pubDate><description><![CDATA[从今天开始阅读这本书，并做阅读笔记，本博是第一篇。
]]></description><category></category></item><item><title><![CDATA[Memory Management [LKD 12]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/106415302</link><guid>https://blog.youkuaiyun.com/scutth/article/details/106415302</guid><author>scutth</author><pubDate>Thu, 28 May 2020 23:11:36 +0800</pubDate><description><![CDATA[kernel中和user space存在很大不同，从user space角度看，分配/释放内存易如反掌，即便失败了也容易处理，kernel里面不一样。比如有些kernel code不允许sleep，或者失败的时候难以处理等。考虑到kernel种种的复杂性，就需要轻量级效率高的内存管理方式。

Pages


...]]></description><category></category></item><item><title><![CDATA[An Introduction to Kernel Synchronization [LKD 09]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/106415232</link><guid>https://blog.youkuaiyun.com/scutth/article/details/106415232</guid><author>scutth</author><pubDate>Thu, 28 May 2020 22:46:51 +0800</pubDate><description><![CDATA[kernel中需要对可能被多个thread同时访问的share data做保护，也就是互斥访问，这里说的多个thread，并不只是传统的kernel thread的概念，还包括process（task），interrupt handler，bottom half，以及kernel thread。也就是说凡是能够执行的单元，这里统称为thread。


...]]></description><category></category></item><item><title><![CDATA[Bottom Halves and Deferring Work [LKD 08]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/106318066</link><guid>https://blog.youkuaiyun.com/scutth/article/details/106318066</guid><author>scutth</author><pubDate>Sun, 24 May 2020 17:34:59 +0800</pubDate><description><![CDATA[基于kernel 4.15讲解interrupt下半部的实现]]></description><category></category></item><item><title><![CDATA[Interrupts and Interrupt Handlers [LKD 07]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/106225198</link><guid>https://blog.youkuaiyun.com/scutth/article/details/106225198</guid><author>scutth</author><pubDate>Tue, 19 May 2020 23:34:55 +0800</pubDate><description><![CDATA[Interrupts

中断是hardware device用来通知CPU的一种机制。在系统上，连接着很多的外设，这些外设速度很慢，并且随时会产生数据需要CPU处理，CPU作为高速运行的部件，不能一直等着外设产生数据，为了提高效率，采用了中断这种机制。当外设需要CPU处理数据时，就向CPU发送电信号，CPU收到电信号以后，就知道哪个设备需要处理了，这个电信号就是中断。

中断并不是直接发送给CPU，而是先发送到interrupt controller，也就是中断控制器（一般是8259A），所有的外设都把中断]]></description><category></category></item><item><title><![CDATA[Kernel Data Structures [LKD 06]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/106204087</link><guid>https://blog.youkuaiyun.com/scutth/article/details/106204087</guid><author>scutth</author><pubDate>Mon, 18 May 2020 23:23:39 +0800</pubDate><description><![CDATA[关于kernel中常用的数据结构，这里也不再说了，可以参考本blog中LDD3中相关的章节。
]]></description><category></category></item><item><title><![CDATA[System Calls [LKD 05]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/106191004</link><guid>https://blog.youkuaiyun.com/scutth/article/details/106191004</guid><author>scutth</author><pubDate>Mon, 18 May 2020 13:21:55 +0800</pubDate><description><![CDATA[无论什么系统，都会向user space提供一些interface，用来和kernel系统交互，从而可以实现某些特定功能，比如访问硬件，获取系统资源等等。通过定义好的interface访问系统，有助于系统的稳定性。

Communicating with the Kernel

系统调用是位于用户态程序和kernel/hardware的中间层，这个中间层有三个目标：

1. 向user space提供统一的硬件抽象；

2. 保证系统的安全性和稳定性；

3. 可以实现向用户提供虚拟系统（虚拟内存，虚拟地址]]></description><category></category></item><item><title><![CDATA[Process Scheduling [LKD 04]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/106139312</link><guid>https://blog.youkuaiyun.com/scutth/article/details/106139312</guid><author>scutth</author><pubDate>Fri, 15 May 2020 13:27:26 +0800</pubDate><description><![CDATA[前面一章讲的是process，这一章讲process schedule。

进程调度的主要工作就两个：选哪个process开始执行，以及让它执行多长时间。

Multitasking

linux是多任务操作系统，如果有SMP，就有多个process同时在执行，如果是单核，就只有一个process执行。多任务操作系统分为两类：cooperative multitasking和preemptive multitasking。大多数多任务系统都是preemptive multitasking，也就是抢占式的多任]]></description><category></category></item><item><title><![CDATA[Process Management [LKD 03]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/105934769</link><guid>https://blog.youkuaiyun.com/scutth/article/details/105934769</guid><author>scutth</author><pubDate>Tue, 05 May 2020 16:40:02 +0800</pubDate><description><![CDATA[今天开始读Linux Kernel Development这本书。
]]></description><category></category></item><item><title><![CDATA[Debugging Techniques [LDD3 04]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/105645957</link><guid>https://blog.youkuaiyun.com/scutth/article/details/105645957</guid><author>scutth</author><pubDate>Mon, 20 Apr 2020 22:41:39 +0800</pubDate><description><![CDATA[kernel相较于user，debug起来更加困难，原因有很多，比如kernel中代码的执行是并发的，靠event来驱动；而且kernel一旦出现了bug，很容易把整个系统搞挂，导致后面的现场无法trace，本章就介绍了一些kernel中的debug技巧。

Debugging Support in the Kernel

kernel的发行版都是production code，也就是说里面包含的...]]></description><category></category></item><item><title><![CDATA[Memory Mapping and DMA [LDD3 15]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/105531992</link><guid>https://blog.youkuaiyun.com/scutth/article/details/105531992</guid><author>scutth</author><pubDate>Wed, 15 Apr 2020 13:08:20 +0800</pubDate><description><![CDATA[Memory Management in Linux

Address Types

Linux kernel中有很多的地址类型，比如最简单的就是虚拟地址和物理地址。在用户程序中看到的地址都是虚拟地址，和硬件使用的物理地址不同。kernel中的地址类型如下：

User virtual addresses

user space programmer看到的地址就是用户态虚拟地址，可能是32bit，...]]></description><category></category></item><item><title><![CDATA[Linux kernel slub debug]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/105487781</link><guid>https://blog.youkuaiyun.com/scutth/article/details/105487781</guid><author>scutth</author><pubDate>Mon, 13 Apr 2020 14:26:50 +0800</pubDate><description><![CDATA[在device driver开发的过程中，有时候会碰到memory相关的问题，比如memory leak，use after free，out of boundary，double free等等。因为device driver运行在kernel环境，kernel是一个global的runtime，driver分配或者释放的memory都是由kernel负责管理，而且所有的device driver...]]></description><category></category></item><item><title><![CDATA[The Linux Device Model [LDD3 14]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/105472918</link><guid>https://blog.youkuaiyun.com/scutth/article/details/105472918</guid><author>scutth</author><pubDate>Sun, 12 Apr 2020 18:56:58 +0800</pubDate><description><![CDATA[kernel中的设备模型分为如下几种：

Power management and system shutdown

Communications with user space

Hotpluggable devices

Device classes

Object lifecycles

以一个鼠标为例，看一下它的设备模型：



这个一个简化的模型，设备模型本身比较复杂，kernel内部已...]]></description><category></category></item><item><title><![CDATA[PCI Drivers [LDD3 12]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/105448833</link><guid>https://blog.youkuaiyun.com/scutth/article/details/105448833</guid><author>scutth</author><pubDate>Sat, 11 Apr 2020 11:48:47 +0800</pubDate><description><![CDATA[因为很多device都是PCI device，所以本章重点看一下。PCI（Peripheral Component Interconnect）。

首先明确一点，PCI是总线类型，总线有两种接口类型组成，electrical interface和programming interface，软件层面都属于programming interface。

The PCI Interface

PCI由一...]]></description><category></category></item><item><title><![CDATA[Data Types in the Kernel [LDD3 11]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/105431940</link><guid>https://blog.youkuaiyun.com/scutth/article/details/105431940</guid><author>scutth</author><pubDate>Sat, 11 Apr 2020 11:02:55 +0800</pubDate><description><![CDATA[kernel中各种各样的数据结构，主要三类：

1， int等标准的C类型

2， 表明大小或者长度的类型，如u32等

3， kernel自己的结构体，如pid_t等


]]></description><category></category></item><item><title><![CDATA[Interrupt Handling [LDD3 10]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/105399352</link><guid>https://blog.youkuaiyun.com/scutth/article/details/105399352</guid><author>scutth</author><pubDate>Wed, 08 Apr 2020 22:58:37 +0800</pubDate><description><![CDATA[device的IO region可以用来控制device，但是还不够。一个device，往往会有外界有交互，当外界发生了某个事件，需要device做出某种响应，driver也需要做处理。那就要有一种机制，让device能够通知到driver，这就是中断的作用。

driver能做的，其实就是实现一个handler，当device中断产生时，handler能够正确处理这个中断就可以了。在讲中断之前，...]]></description><category></category></item><item><title><![CDATA[Communicating with Hardware [LDD3 09]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/105385324</link><guid>https://blog.youkuaiyun.com/scutth/article/details/105385324</guid><author>scutth</author><pubDate>Wed, 08 Apr 2020 13:19:34 +0800</pubDate><description><![CDATA[本章开始讲一些跟hardware有关的操作，比如I/O port，register等。

device driver的角色要清楚，它只是中间层，向上有kernel，user application，向下就是actual hardware。作为driver，核心功能必然是驱动硬件。

I/O Ports and I/O Memory

每一个外设都要通过register来控制，大多数设备都有不止一个...]]></description><category></category></item><item><title><![CDATA[Allocating Memory [LDD3 08]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/105353763</link><guid>https://blog.youkuaiyun.com/scutth/article/details/105353763</guid><author>scutth</author><pubDate>Mon, 06 Apr 2020 22:50:57 +0800</pubDate><description><![CDATA[本章讨论从kernel分配memory的同样方法，并尽可能与架构无关。

kmalloc相对来说，是最简单的分配memory的方式，因为用法和user mode的malloc非常相似。kernel的kmalloc分配的memory在物理地址上是连续的，并且里面包含了随机的数据，需要使用者自己清零。


#include &lt;linux/slab.h&gt;
void *kmalloc(size...]]></description><category></category></item><item><title><![CDATA[Time Delays and Deferred Work [LDD3 07]]]></title><link>https://blog.youkuaiyun.com/scutth/article/details/105329270</link><guid>https://blog.youkuaiyun.com/scutth/article/details/105329270</guid><author>scutth</author><pubDate>Sun, 05 Apr 2020 17:01:31 +0800</pubDate><description><![CDATA[kernel提供了一些跟时间管理相关的函数，device driver中往往需要这些函数来实现driver的部分功能。

1， 测量时间和比较时间

2， 如何获取当前时间

3， 延迟某些操作，直到某个时刻

4， 异步函数的调度

整个kernel的运行非常的依赖与时间，因为kernel里面很多的工作需要做同步，如果计时器不准确，那kernel运行起来就不可控了。kernel的时间需要靠硬件的...]]></description><category></category></item></channel></rss>