一般来说设备驱动分三类:字符设备驱动、块设备驱动、网络设备驱动。
字符设备驱动:软件操作设备时是以字节为单位进行的。典型的如LCD、串口、LED、蜂鸣器、触摸屏....
字符设备驱动是比较重要的,为什么,因为大多数的设备都是属于字符设备。同时字符设备驱动修改也比较方便,我们可以直接找到对应的点去修改,而不在乎其余位置。linux驱动工程师大多数工作都是一次展开的
块设备驱动被软件操作时,是以块(多个字节构成的一个单位)为单位的。设备的块大小是设备本身设计时定义好的,软件是不能去更改的,不同设备的块大小可以是不一样的。常见的块设备都是存储类设备,如:硬盘、NandFlash、iNand、SD...操作块设备时,我们必须以块单位进行操作,将一块的数据读取到内存中去,然后在内存中找到对应的那个字节数修改之后再以一块的数据写入到我们的块设备中去。
因为块设备驱动修改起来比较麻烦,比如一个块里有64个字节,其中第37个字节我们需要把里面的数字a改为b,那么我们就需要把这个块里面的所有字节读出来,然后把37的a改为b,最后就把改好了的这个64个字节写回去。所以就比较麻烦。
网络设备、是专为网卡设计的驱动模型,linux中网络设备驱动主要目的是为了支持API中socket相关的那些函数工作。这个用的比较少。
linux内核主要是由进程调度、内存管理、虚拟文件系统、网络接口和进程通信这五个子系统组成的。
多任务系统可以分为非抢占式、和抢占式两种。linux提供抢占式多任务模式,进程在被抢占之前能够被运行的时间叫做进程的时间片。
时间记账
进程选择
调度器入口 入口就是schedule
睡眠和唤醒
进程是正在执行的程序代码的实时结果,是处于执行期的程序以及相关资源的总称。
线程是在进程中活动的对象,内核调度的对象是线程,而不是进程。
一般程序在用户空间执行时,当一个程序执行了一个系统调用或者触发了某个异常,它就陷入了内核空间。此时,我们称“代表进程执行”并处理进程上下文中。除非在此间隙有更高优先级的进程需要
系统调用是用户空间访问内核的唯一手段,除了陷入和异常外,他们是内核唯一的合法入口
中断处理程序是被内核调用来响应中断的,它运行在中断上下文,中断处理程序是上半部。当接收到一个中断时,他就立即开始执行,但只做严格时限的工作。例如,对接收的中断进行应答或答复硬件,这些工作都是在所有中断都被禁止的情况下完成的,能够被允许稍后完成的工作会推迟到下半部。