
内核学习
文章平均质量分 71
wrx1721267632
这个作者很懒,什么都没留下…
展开
-
简单字符驱动程序
mycdev.c:#include#include#include#include#include#include#include#include#include#includeMODULE_LICENSE("GPL");#define MYCDEV_MAJOR 231 //cat /proc/devices查看系统中未使用的字符原创 2016-01-26 14:46:45 · 1022 阅读 · 1 评论 -
初识内核模块编译
1.用make编译,编译代码如下obj-m := filename.oCURRENT_PATH := $(shell pwd)LINUX_KERNEL := $(shell uname -r)LINUX_KERNEL_PATH := /usr/src/kernels/$(LINUX_KERNEL)all: make -C $(LINUX_KERNEL_PATH)原创 2015-11-20 16:58:00 · 404 阅读 · 1 评论 -
中断描述符表的初始化
Linux内核在系统初始化要进行大量的初始化工作,其与中断相关的工作有,初始化可编程控制器8259A;将中断描述符表的起始地址装入IDTR寄存器,并初始化表中的每一项, 用户进程可以通过INT指令发出 一个中断请求向量在0~255之间。为了防止用户使用INT指令模拟非法的中断和异常,必须对中断描述符表进行谨慎的初始化。其措施之一就是将中断门或陷阱门中的请求特权级DPL域置为0,如果用户进原创 2015-12-17 21:44:41 · 1386 阅读 · 0 评论 -
中断的下半部处理机制(1)小任务机制
1.为什么把中断分为两部分处理中断服务程序一般都是在中断请求关闭的条件下执行的,以避免嵌套而使中断控制复杂化。但是,中断是一个随机事件,它随时会到来,如果关中断的时间太长,CPU就不能及时响应其他的中断请求,从而造成中断的丢失。因此,内核的目标就是尽可能快的处理完中断请求,尽其所能把更多的处理向后推迟。例如,假设一个数据块已经达到了网线,当中断控制器接受到这个中断请求信号时,Linux内核只是原创 2015-12-28 11:09:07 · 471 阅读 · 0 评论 -
中断的下半部处理机制(2)工作队列
工作队列是另一种将工作推后执行的形式,他和前面讨论的所有其他形式都有所不同。工作队列可以吧工作推后,交由一个内核线程去执行,也就是说,这个下半部分可以在进程上下文中执行。这样,通过工作队列执行的代码能占尽进程上下文的所有优势。最重要的就是工作队列允许被调用甚至是睡眠。原创 2016-01-15 23:07:56 · 407 阅读 · 0 评论 -
时钟中断(1)
在所有外部中断中,时钟中断起着特殊的作用。因为计算机是以精确的时间进行数值运算的数据处理的,最基本的时间单元是时钟周期,例如取指令,执行指令,存取内存等,我们将要讨论的是操作系统建立的时间系统,这个时间系统是整个操作系统活动的动力。原创 2016-01-16 12:16:58 · 15742 阅读 · 0 评论 -
时钟中断(2)
1.时钟中断的产生时钟中断是特别重要的一个中断,因为整个操作系统的活动都受到他的鼓励。系统利用时钟中断维持系统时间,促使环境的切换,以保证所有进程共享CPU;利用时钟中断并进行记账,监督系统工作以及确定未来的调度优先级等工作。可以说“时钟中断”是整个操作系统的脉搏。从本质上说,时钟中断只是一个周期性的信号,完全是硬件行为,该信号触发CPU去执行一个中断服务程序。2.时钟中断处理原创 2016-01-17 18:53:09 · 2626 阅读 · 0 评论 -
系统调用基本概念
系统调用时值就是函数调用,值时调用的函数是系统函数,处于内核态而已。用户在调用系统调用时会向内核传递一个系统调用号,然后系统调用处理程序通过此号从系统调用表中找到相应的内核函数执行(系统调用服务例程),最后返回。1.系统调用号linux系统有几百个系统调用号,为了唯一的表识每一个系统调用,linux为每一个系统调用定义了一个唯一的编号,此编号就是系统调用号。系统调用号的定义在 /usr/i原创 2016-01-18 16:17:37 · 4028 阅读 · 1 评论 -
系统调用实现
当用户态的进程调用一个系统调用时,CPU从用户态切换到内核态并开始执行一个内核函数。Linux通过由向量为128(0x80)的编程异常实现CPU由用户态到内核态的转换。因为内核实现了许多不同的系统调用,为了区别他们,进程必须传递一个系统调用号的参数来识别所需的系统调用。EAX寄存器是负责传递系统调用号的。系统调用处理程序执行下列操作:(1)在内核栈保存大多数寄存器的内容(这个操作对所有原创 2016-01-20 11:51:20 · 2918 阅读 · 0 评论 -
打印super_block结构中的一些域的值
#include#include#include#include#include#include#define SUPER_BLOCKS_ADDRESS 0xffffffff81c77670#define SB_LOCK_ADDRESS 0xffffffff820137b0 static int __init my_init(void){ st原创 2016-01-24 23:16:37 · 943 阅读 · 0 评论 -
中断处理
1.中断和异常的硬件处理 首先,从硬件的角度来看CPU如何处理中断和异常,这里假定内核已被初始化,CPU已从实模式转到保护模式。 当CPU执行了当前指令之后,CS和EIP这对寄存器中原创 2015-12-27 20:21:33 · 897 阅读 · 0 评论