`
talin2010
  • 浏览: 527089 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

[Linux内核完全剖析]第五章Linux内核体系结构5.4-5.6总结 x86中断和时间控制

阅读更多

x86中断子系统
x86微机系统中采用了8259A可编程中断控制器,每个8259A可以管理8个中断源,通过多片级联方式,可以构成最多管理64个中断向量的系统。PC/AT中使用了2片8259A,共可管理15个中断向量。CPU通过IO指令对8259A进行初始化后,芯片就可以根据当前设定的优先级状态通过INT引脚来通知CPU中断请求。CPU响应后,会从数据总线D7-D0获取从芯片发送的中断号。

CPU根据中断号要获取中断服务地址,就需要一张中段向量表(实模式)/中断描述符表(保护模式)来进行查询。x86微机支持256个中断:
实模式下每个中断向量占4个字节,低字放入偏移地址,高字放入段值。中断向量表共长1024字节,BIOS在启动后会在物理地址0开始初始化并设置中断向量表,中断服务程序由BIOS给出,向量是按顺序排列的。其中两片8259A支持的16个(由于IRQ2被用于级联输入,实际可使用的中断只有15个)硬中断被依次设置在中断向量0x20——0x2f中。Linux系统在刚开始加载内核时会用到显示和磁盘读的中断,然后在setup.s中重新初始化8259A并在head.s中重设一张中断描述符表。

对于Linux内核来说,中断信号分为两类:硬件中断和软件中断。
int 0——int 31,每个中断的功能根据Intel固定设定或者保留,属于软中断,intel称为异常。在kernel/traps.c中设置
int 32——int 47,对应于8259A发出的硬件中断,IRQ0——IRQ15
int 128,系统调用中断,在kernel/sched.c中设置
系统调用:eax放调用号,ebx,ecx,edx依次存放参数,故Linux0.11最多向内核传递三个参数。

系统时间,通过init/mian.c中的time_init()函数读取主板RT电路上保存的时间信息,再用过kernel/mktime.c中kernel_mktime()函数转化为Unix日历时间(从1970-01-01:00:00:00到当前位秒数)被保存在全局变量startup_time中内核使用。用户可使用time()系统调用来读取该值,超级用户可以通过stime()系统调用设置该值。系统定义了宏来获取当前时间
#define CURRENT_TIME (startup_time + jiffies/HZ)

jiffies是系统启动到当前的时钟滴嗒,10ms为单位,HZ=100是滴嗒频率。时钟滴嗒是由Intel 8253计数器产生的,它连接到8259A的IRQ0引脚上,由于事先设置了计数器频率,每隔10ms就会产生一个上升沿方波,经过8259A处理后产生一个IRQ0中断,就运行一次timer_interrupt中断处理程序。中断处理程序会对jiffies自增以及当前进程的时间计数和时间片切换等操作。

分享到:
评论

相关推荐

    CentOS-5.4-x86_64-bin-DVD.part5.rar

    CentOS 5.4版本(CentOS-5.4-x86_64-bin-DVD)适用于x86_64,必须集齐5个文件才能一起解压缩使用,5个文件下载地址: CentOS-5.4-x86_64-bin-DVD.part5.rar ... CentOS-5.4-x86_64-bin-DVD.part4.rar ...

    rhel-server-5.4-i386-dvd.iso linux系统

    ### Linux系统:rhel-server-5.4-i386-dvd.iso #### 知识点一:RHEL(Red Hat Enterprise Linux)介绍 RHEL是Red Hat公司开发的一款广泛使用的Linux发行版,专为企业环境设计。它提供了一个稳定、可靠、安全的操作...

    linux内核代码-5.6

    linux内核代码-5.6

    笔记_Linux内核完全剖析_基于0.12内核.pdf

    笔记_Linux内核完全剖析_基于0.12内核

    MLNX_OFED_LINUX-5.4-1.0.3.0-rhel7.9-x86_64.tgz

    标题中的"MLNX_OFED_LINUX-5.4-1.0.3.0-rhel7.9-x86_64.tgz"指的是Mellanox OpenFabrics Enterprise Distribution (OFED) for Linux的一个版本,具体为5.4-1.0.3.0,适用于Red Hat Enterprise Linux 7.9 (RHEL 7.9)...

    MLNX_OFED_LINUX-5.4-1.0.3.0-rhel7.8-x86_64.tgz

    MLNX_OFED_LINUX-5.4-1.0.3.0-rhel7.8-x86_64.tgz是一个针对Red Hat Enterprise Linux 7.8(RHEL 7.8)的InfiniBand驱动和开发工具集合,由Mellanox Technologies提供,专为优化ConnectX-3系列网络接口卡(NIC)的...

    Linux 内核完全剖析-基于0.12内核

    Linux内核完全剖析通常包括对内核源代码的深入理解和分析,而基于早期版本的Linux内核(如0.12版本)进行学习,可以帮助理解内核的演进过程和基本原理。 Linux内核的学习涉及以下知识点: 1. 系统引导过程:理解...

    Linux内核完全注释:基于0.11内核(V5.0)_0.11内核_linux_linux内核完全注释_Linux内核注释_

    《Linux内核完全注释:基于0.11内核(V5.0)》是一部深入解析Linux内核的重要参考资料,它详细解读了Linux操作系统的核心机制,对于理解操作系统的工作原理以及进行系统级编程具有极大的帮助。这部书籍以0.11内核为...

    linux内核完全剖析

    linux内核完全剖析linux内核完全剖析linux内核完全剖析linux内核完全剖析linux内核完全剖析linux内核完全剖析

    linux-5.6.tar.gz

    linux 内核 kernel driver linux-5.6 官方网站下载原版内核源代码,没有经过任何修改

    linux内核完全注释.pdf

    5. **第5章:内核代码(KERNEL)** - **概述**:概述内核核心模块的重要性。 - **程序详解**:逐个分析MAKEFILE、ASM.S、TRAPS.C、SYSTEM_CALL.S等关键文件。 - **小结**:总结内核核心模块的主要功能和实现原理。 ...

    Linux内核源代码情景分析 (上下册 高清非扫描 )

    ### Linux内核源代码情景分析知识点总结 #### 第1章 预备知识 - **1.1 Linux内核简介** - Linux是由Linus Torvalds在1991年开始开发的操作系统内核,其设计思想受到Unix的影响,但并不直接继承Unix的任何代码。 -...

    linux内核完全剖析 最新版

    《Linux内核完全剖析:基于0.12内核》对早期Linux内核(v0.12)全部代码文件进行了详细、全面的注释和说明,旨在帮助读者用较短的时间对Linux的工作原理获得全面而深刻的理解,为进一步学习和研究Linux打下坚实的基础...

    kernel-lt-devel-5.4.264-1.el7.elrepo.x86-64.rpm

    centos7系统内核kernel-lt-devel-5.4.264-1.el7.elrepo.x86_64.rpm

    LINUX内核完全剖析:基于0.12内核.zip

    LINUX内核完全剖析:基于0.12内核 很清晰,这个是扫描版的,

Global site tag (gtag.js) - Google Analytics